Missing canonical

Moderate effort

Found on 62% of audited stores.

Add a self-referencing canonical tag to every page so Google knows which URL is the definitive version of that content.

What it is

A canonical tag is a small snippet of HTML code placed in the `<head>` of a web page that tells search engines "this is the official, preferred URL for this content." It looks like `<link rel="canonical" href="https://www.yourstore.com/your-page/" />`. When the same (or very similar) content is accessible at multiple URLs — for example, with and without "www", with tracking parameters like `?utm_source=email`, or through category filter combinations — the canonical tag acts as a signpost that points all the credit back to one master URL. Without it, search engines must guess, and they often guess wrong.

Why it matters

Without a canonical tag, Google may discover multiple URLs showing identical or near-identical content and split the ranking signals (links, authority) across all of them instead of concentrating them on the one URL you actually want to rank. This directly dilutes your organic search rankings and can cause the wrong URL to appear in search results — hurting click-through rates and conversions. For ecommerce stores, product pages are especially vulnerable because filtered URLs (`/shoes?color=red&size=10`), session IDs, and affiliate parameters create dozens of duplicate variants every day. Consistently missing canonical tags is one of the most common technical SEO issues that silently erodes organic traffic over time.

How to fix it

  1. Identify every page type in your store that lacks a canonical tag — start with product pages, category/collection pages, blog posts, and the homepage.
  2. Decide on the single preferred URL for each page (lowercase, with or without trailing slash — pick one and be consistent, matching your sitemap and internal links).
  3. Add a `<link rel='canonical' href='ABSOLUTE_URL_HERE' />` element inside the `<head>` section of every page, where ABSOLUTE_URL_HERE is the full preferred URL including https:// and your domain.
  4. For product pages with URL parameters (sort, filter, tracking), ensure the canonical always points to the clean base URL, not the parameterised variant.
  5. For paginated collection pages (/collection?page=2), each page should canonicalise to itself (not back to page 1), unless you intentionally consolidate all pages into one.
  6. After deploying, verify each page by viewing the page source (Ctrl+U / Cmd+U) and searching for 'canonical', or use Google Search Console's URL Inspection tool to confirm Google sees the intended canonical.

Fix it on your platform

Pick your platform for the exact steps.

How to fix missing canonical on Shopify
  1. Shopify automatically outputs a canonical tag for product, collection, blog, and article pages via the `canonical_url` Liquid variable in most themes — but only if the theme template includes it.
  2. In your Shopify Admin, go to Online Store → Themes → click the '...' menu next to your active theme → Edit code.
  3. Open the file `layout/theme.liquid` (this is your global HTML wrapper).
  4. Inside the `<head>` section, confirm this line exists: `<link rel='canonical' href='{{ canonical_url }}'>`. If it is missing, add it directly after the `<title>` tag.
  5. For custom landing pages or pages built with a page template, open the relevant template file (e.g. `templates/page.liquid`) and check that it uses the main layout that already includes the canonical, OR add the tag manually.
  6. Save and verify by visiting a product page, right-clicking → View Page Source, and searching for 'canonical'.
How to fix missing canonical on Shopify Plus
  1. Follow identical steps to standard Shopify above — the `canonical_url` Liquid variable is available on all Shopify Plus storefronts.
  2. If you use Shopify's Headless / Hydrogen framework, the canonical must be injected programmatically in the `<head>` of your React components (see Headless / Custom entry).
  3. For checkout pages (checkout.liquid, available on Plus), add the canonical tag inside the `<head>` of `layout/checkout.liquid` as `<link rel='canonical' href='{{ canonical_url }}'>`.
  4. Save and use Google Search Console's URL Inspection tool to verify.
How to fix missing canonical on WooCommerce
  1. Install the free Yoast SEO plugin (or Rank Math SEO) from Plugins → Add New in your WordPress Admin — both output canonical tags automatically for all page types.
  2. Once Yoast SEO is active, go to Yoast SEO → Settings → Advanced and confirm 'Canonical URL' output is enabled (it is on by default).
  3. For individual pages where you need to override the canonical, open the product/post editor, scroll to the Yoast SEO meta box at the bottom, click 'Advanced', and enter the preferred URL in the 'Canonical URL' field.
  4. If you prefer Rank Math: go to Rank Math → Titles & Meta → and verify canonical tags are enabled; per-page overrides are in the Rank Math panel inside each post/product editor under 'Advanced'.
  5. Save and verify by viewing page source and searching for 'canonical'.
How to fix missing canonical on BigCommerce
  1. BigCommerce outputs canonical tags automatically on product and category pages via its Stencil theme framework — verify your theme is up to date.
  2. In your BigCommerce Admin, go to Storefront → Themes → click 'Advanced' → Edit Theme Files (Stencil CLI or in-browser editor).
  3. Open `templates/layout/base.html` and confirm this line is present inside `<head>`: `{{#partial 'head'}}` area should include `<link rel='canonical' href='{{canonicalUrl}}'>`. If missing, add it.
  4. For custom pages or pages using a non-standard template, open the relevant template under `templates/pages/` and ensure they extend the base layout that includes the canonical.
  5. Save changes and use the Preview option to verify via page source.
How to fix missing canonical on Wix
  1. Wix automatically adds canonical tags to all pages — no manual action is required for standard pages.
  2. To override or verify the canonical for a specific page: in the Wix Editor, click on the page → go to Page Settings (gear icon) → SEO (Google) tab → expand 'Additional SEO Settings' → you can paste a custom canonical URL in the 'Additional meta tags' field as `<link rel='canonical' href='YOUR_URL' />`.
  3. For Wix eCommerce product pages, canonical tags are managed automatically; if you suspect issues, check Wix SEO → SEO Setup Checklist in your dashboard.
  4. Use Google Search Console's URL Inspection tool to confirm the canonical Wix outputs is the one Google sees.
How to fix missing canonical on Wix Studio
  1. Wix Studio (advanced editor) also outputs canonical tags automatically for all pages.
  2. To set a custom canonical: open the page in Wix Studio editor → click the page settings (gear icon) → SEO tab → scroll to 'Additional Tags' → add `<link rel='canonical' href='YOUR_PREFERRED_URL' />`.
  3. For programmatic pages (e.g., dynamic collection pages built with Wix Velo/CMS), use Velo's `wixSeo.setLinks()` API in the page's code to set the canonical dynamically: `import wixSeo from 'wix-seo'; $w.onReady(() => { wixSeo.setLinks([{ rel: 'canonical', href: 'https://www.yourstore.com/preferred-url' }]); });`
  4. Verify via Google Search Console URL Inspection.
How to fix missing canonical on Squarespace
  1. Squarespace automatically injects canonical tags on all standard pages, blog posts, and product pages — no manual setup required.
  2. To verify: visit any page on your store, right-click → View Page Source, and search for 'canonical'. You should see a `<link rel='canonical'>` tag pointing to the current page's clean URL.
  3. If you need to override a canonical (advanced use): Squarespace does not offer a native per-page canonical override field. You can inject a custom tag via Settings → Advanced → Code Injection → 'Header' field. However, be aware this injects on ALL pages — use conditional logic carefully or consider a third-party SEO app from the Squarespace Extensions marketplace.
  4. For Squarespace Commerce product pages, canonicals are handled automatically; focus on ensuring your domain is set to a single preferred version (www vs. non-www) under Settings → Domains.
How to fix missing canonical on Squarespace Commerce
  1. Squarespace Commerce product and category pages receive automatic canonical tags from Squarespace's platform — no extra configuration is needed.
  2. Confirm your preferred domain (www vs. non-www) is set as primary under Settings → Domains, as this determines what canonical URLs Squarespace outputs.
  3. Verify by viewing page source on a product page and searching for 'canonical'.
How to fix missing canonical on Webflow
  1. In the Webflow Designer, open the Page Settings for any page by clicking the Pages panel (left sidebar) → hover over the page → click the gear icon.
  2. Scroll down to the 'SEO Settings' section. Webflow automatically sets a self-referencing canonical by default based on the published URL.
  3. To set a custom canonical for a specific page, paste the full preferred URL into the 'Canonical URL' field in that page's SEO Settings panel.
  4. For Collection pages (CMS-driven pages like products or blog posts), open the Collection in the CMS settings → click the template page → Page Settings → SEO → set the canonical using a dynamic field binding (e.g. bind to a 'Canonical URL' custom CMS field you create).
  5. Publish the site and verify via page source.
How to fix missing canonical on Adobe Commerce (Magento)
  1. In your Adobe Commerce Admin, go to Stores → Configuration → Catalog → Catalog → Search Engine Optimization.
  2. Set 'Use Canonical Link Meta Tag for Categories' and 'Use Canonical Link Meta Tag for Products' both to 'Yes'. Save Config.
  3. For CMS pages (like the homepage or landing pages), go to Content → Pages → edit the page → expand 'Search Engine Optimization' → enter the preferred URL in the 'URL Key' field and ensure no duplicate routes exist.
  4. Clear the full-page cache: System → Cache Management → Flush Magento Cache.
  5. Verify by visiting a product and category page and viewing page source — search for 'canonical'.
  6. For custom page types or headless setups, canonical tags must be added programmatically in the relevant layout XML file or via a custom module.
How to fix missing canonical on Magento Open Source
  1. Follow identical steps to Adobe Commerce above — the canonical settings under Stores → Configuration → Catalog → Search Engine Optimization apply to Magento Open Source as well.
  2. Set both 'Use Canonical Link Meta Tag for Categories' and 'Use Canonical Link Meta Tag for Products' to 'Yes'.
  3. Flush the cache via System → Cache Management → Flush Magento Cache.
  4. Verify via page source on a product and category page.
How to fix missing canonical on PrestaShop
  1. Go to Shop Parameters → Traffic & SEO in your PrestaShop Admin.
  2. Ensure the SEO & URLs settings are configured and 'Friendly URLs' are enabled — PrestaShop's built-in canonical handling is tied to clean URL structure.
  3. Install a dedicated SEO module such as 'SEO Expert' or 'Yoast SEO for PrestaShop' from the PrestaShop Marketplace, which adds explicit `<link rel='canonical'>` tags to all page types.
  4. Once installed, configure the module to enable canonical tags for product, category, and CMS pages.
  5. Verify by viewing page source and searching for 'canonical'.
How to fix missing canonical on OpenCart
  1. OpenCart does not output canonical tags by default. Install the 'SEO Pack' or 'SEO Canonical URL' extension from the OpenCart Marketplace or a trusted third-party developer.
  2. After installation, configure the extension from Extensions → Extensions → SEO, enabling canonical tags for product, category, and information pages.
  3. Alternatively, edit your theme's `header.twig` (or `header.tpl` for older versions) to add `<link rel='canonical' href='{{ canonical }}'>` and pass the canonical URL variable from the relevant controllers.
  4. Clear the OpenCart cache under System → Maintenance → Cache and verify via page source.
How to fix missing canonical on Headless / Custom (I build in code)
  1. In a Next.js project, use the `<Head>` component from `next/head` in each page component or use the `metadata` export (App Router) to add `alternates: { canonical: 'https://www.yourstore.com/your-page' }`.
  2. In a Nuxt.js project, use `useHead()` composable or the `head` property in your page component to add `{ link: [{ rel: 'canonical', href: 'https://www.yourstore.com/your-page' }] }`.
  3. For any other framework, ensure the canonical tag is rendered server-side (not only client-side via JavaScript) so crawlers see it in the initial HTML response.
  4. Build the canonical URL dynamically from the current route/path — never hardcode it — and always use the absolute URL (including https:// and domain).
  5. Verify by fetching the raw HTML of a page with `curl -s https://www.yourstore.com/your-page | grep canonical` and confirming the tag is present.
How to fix missing canonical on WordPress.org
  1. Install Yoast SEO or Rank Math (Plugins → Add New → search for the plugin → Install → Activate).
  2. Both plugins output self-referencing canonical tags automatically for every post, page, and custom post type.
  3. To override the canonical on a specific page: open the post/page editor → find the Yoast SEO or Rank Math meta box → click 'Advanced' → enter the preferred URL in the 'Canonical URL' field.
  4. If you are using a custom theme without an SEO plugin, add `<link rel="canonical" href="<?php echo esc_url( get_permalink() ); ?>">` inside the `<head>` section of your `header.php` file.
How to fix missing canonical on Next.js (Headless)
  1. Identify your router: App Router (app/) uses `generateMetadata` / `metadata` exports; Pages Router (pages/) uses the `<Head>` component from `next/head`. Apply the correct approach for each route type.
  2. Set a NEXT_PUBLIC_SITE_URL environment variable (e.g. https://www.example.com) in .env.local and in your hosting provider's env config — this is the base used to build every canonical URL.
  3. App Router — In every page.tsx (or layout.tsx for shared defaults), export a `generateMetadata` function that returns `alternates.canonical` set to the page's full absolute URL. For dynamic routes, receive `params` and construct the URL accordingly.
  4. Pages Router — In every page file, add a `<Head>` block containing `<link rel='canonical' href={canonicalUrl} />`, where `canonicalUrl` is built from `NEXT_PUBLIC_SITE_URL` + `useRouter().asPath` (strip query strings as needed).
  5. For the Pages Router, extract the logic into a reusable `<CanonicalTag />` component and drop it into your shared `<Layout>` component so every page gets it automatically without repetition.
  6. Verify the output with `curl -s <page-url> | grep canonical` or the browser DevTools Elements panel — each page must render exactly one `<link rel='canonical'>` pointing to its own clean, absolute URL.
How to fix missing canonical on Elementor
  1. Install and activate a dedicated SEO plugin that integrates with Elementor — Yoast SEO or Rank Math are the most widely supported. Both inject canonical tags into the <head> without requiring manual template edits.
  2. In your WordPress dashboard, go to the SEO plugin's global settings (Yoast: SEO → Search Appearance → General; Rank Math: Rank Math → General Settings → Links) and confirm that 'Canonical URL' output is enabled (it is on by default in both plugins).
  3. Open any page in the Elementor editor, then click the hamburger menu (☰) → 'Page Settings' (Yoast) or the Rank Math icon in the WordPress post editor sidebar. Verify that the 'Advanced' tab shows no override in the canonical field — leave it blank so the plugin auto-generates the self-referencing canonical.
  4. For pages built entirely in Elementor's full-site-editing canvas (Theme Builder → Single templates), open each template in the Elementor editor, click Settings (⚙) → 'Page Layout', and confirm the template does not suppress the <head> or use a blank canvas layout that strips WordPress hooks — switch to 'Elementor Canvas' only for true landing pages, otherwise use 'Default' or your theme's layout so the SEO plugin's wp_head hooks fire correctly.
  5. After publishing, use 'View Page' to load the live URL, right-click → View Page Source, and search for '<link rel="canonical"' to confirm the tag is present and matches the page's own URL exactly (no trailing-slash mismatch, no www/non-www mismatch).
  6. If any page still lacks the tag, check Elementor's Custom Code feature (Elementor → Custom Code) as a fallback: create a new snippet scoped to that page's condition, paste '<link rel="canonical" href="https://yourdomain.com/your-page-slug/" />', set its location to 'Head', and publish — this ensures the canonical is output even if a plugin conflict exists.
How to fix missing canonical on Remix
  1. In each route file (e.g. app/routes/products.$handle.tsx, app/routes/collections.$handle.tsx, app/routes/_index.tsx), export a `meta` function if one doesn't already exist. Inside it, construct the canonical URL by combining your store's base URL with the current route path — for example: `const canonical = new URL(params.handle ? `/products/${params.handle}` : '/', 'https://www.yourstore.com').href;`
  2. Return a `<link>` descriptor from the `meta` function array for the canonical tag: `return [ { tagName: 'link', rel: 'canonical', href: canonical } ];` — Remix's `meta` export supports arbitrary tag descriptors including `<link>` elements via the `tagName` field.
  3. To avoid repeating this in every route, create a shared utility in app/utils/seo.ts that accepts a `request: Request` object and returns the canonical link descriptor: `export function canonicalLink(request: Request) { const url = new URL(request.url); url.search = ''; return { tagName: 'link', rel: 'canonical', href: url.toString() }; }` — stripping query params ensures tracking/filter params don't pollute the canonical.
  4. In each route's `loader`, pass the `request` object through to the returned data (e.g. `return json({ ..., canonicalUrl: canonicalLink(request).href })`), then reference it in the `meta` function via the `data` argument: `export const meta: MetaFunction<typeof loader> = ({ data }) => [ { tagName: 'link', rel: 'canonical', href: data.canonicalUrl } ];`
  5. For the root layout (app/root.tsx), ensure no conflicting or duplicate `<link rel='canonical'>` tags are rendered inside the `<Links />` component or hardcoded in the `<head>`. Remix's `<Links />` component automatically renders all link descriptors returned by route `meta`/`links` exports — confirm only one canonical appears per page by inspecting View Source.
  6. Deploy and validate by loading a product or collection page, viewing page source, and confirming exactly one `<link rel='canonical' href='https://www.yourstore.com/...'>` tag appears in the `<head>` with the correct, query-string-free self-referencing URL.

Does your site have this issue?

Run a free SEOLZ scan to find missing canonical — and every other issue — across your whole site in minutes.

Scan my site free

Frequently asked questions

What is Missing canonical?

A canonical tag is a small snippet of HTML code placed in the `<head>` of a web page that tells search engines "this is the official, preferred URL for this content." It looks like `<link rel="canonical" href="https://www.yourstore.com/your-page/" />`. When the same (or very similar) content is accessible at multiple URLs — for example, with and without "www", with tracking parameters like `?utm_source=email`, or through category filter combinations — the canonical tag acts as a signpost that points all the credit back to one master URL. Without it, search engines must guess, and they often guess wrong.

Why does missing canonical matter?

Without a canonical tag, Google may discover multiple URLs showing identical or near-identical content and split the ranking signals (links, authority) across all of them instead of concentrating them on the one URL you actually want to rank. This directly dilutes your organic search rankings and can cause the wrong URL to appear in search results — hurting click-through rates and conversions. For ecommerce stores, product pages are especially vulnerable because filtered URLs (`/shoes?color=red&size=10`), session IDs, and affiliate parameters create dozens of duplicate variants every day. Consistently missing canonical tags is one of the most common technical SEO issues that silently erodes organic traffic over time.

How do I fix missing canonical?

Add a self-referencing canonical tag to every page so Google knows which URL is the definitive version of that content.

Authoritative references

Related SEO issues