Non self canonical

Quick win

Found on 69% of audited stores.

Audit every page whose canonical tag points to a different URL, then either correct it to self-reference or confirm the cross-reference is intentional and correct.

What it is

A canonical tag is a small snippet of HTML code, placed in the `<head>` of a page, that tells Google "this is the definitive version of this content." A self-canonical means the tag points back to the page itself — the norm for any page you want indexed. A non-self-canonical means the tag points to a different URL, effectively telling Google: "don't index me, index that other page instead." This is sometimes intentional (e.g., a filtered product-listing page deferring to the main category page), but when it happens by accident, Google will ignore the page entirely and index the wrong destination instead.

Why it matters

When a page has a non-self-canonical by mistake, Google treats it as a duplicate and removes it from search results — meaning all the organic traffic that page could earn is lost. If important product, category, or landing pages are accidentally canonicalized to the wrong URL, your store effectively disappears from Google for those queries. Even if Google doesn't fully honour the tag, it still dilutes your crawl budget and creates confusing ranking signals. Fixing accidental non-self-canonicals can restore lost rankings quickly, while verifying intentional ones ensures you're not accidentally de-indexing pages you need.

How to fix it

  1. Identify the affected page and note both the page's actual URL and the URL the canonical tag currently points to.
  2. Determine whether the cross-canonical is intentional: ask yourself 'Do I want Google to index the destination URL instead of this page?' If yes, leave it — but double-check the destination URL is correct and accessible. If no, proceed.
  3. Edit the canonical tag in the page's <head> so it points exactly to the page's own canonical (preferred) URL — including the correct protocol (https), domain, trailing slash preference, and no extra parameters.
  4. Ensure the canonical URL you set is the same format used in your sitemap and internal links (consistent protocol, www vs non-www, trailing slash).
  5. After publishing, use Google Search Console's URL Inspection tool to re-fetch the page and confirm the 'Google-selected canonical' matches your intended URL.
  6. Monitor Search Console's Index Coverage report over the following weeks to verify the page transitions from 'Duplicate, submitted URL not selected as canonical' to 'Indexed'.

Fix it on your platform

Pick your platform for the exact steps.

How to fix non self canonical on Shopify
  1. Shopify auto-generates self-canonical tags for standard product, collection, blog, and page templates — so a non-self-canonical usually means a theme customization or app override is present.
  2. In your Shopify admin go to Online Store → Themes → click 'Edit code' on your active theme.
  3. Open the layout file (typically 'theme.liquid') and search for 'canonical'. If you see a hardcoded or overridden canonical tag (not the Liquid variable {{ canonical_url }}), replace it with the standard tag: <link rel="canonical" href="{{ canonical_url }}">.
  4. Check any installed SEO apps (e.g., SEO Manager, Plug In SEO, Smart SEO) — open the app and look for a canonical override setting for the affected page type; disable or correct it.
  5. For individual pages/products, some SEO apps let you set a custom canonical per-URL — find that setting and either remove the override or correct the destination URL.
  6. Save changes, then use the Shopify storefront preview to view-source the affected page and confirm the canonical tag now matches the page URL.
How to fix non self canonical on WooCommerce
  1. WooCommerce relies on WordPress's SEO plugin for canonical tags — the most common culprits are Yoast SEO, Rank Math, or All in One SEO.
  2. For Yoast SEO: navigate to the affected page/product in wp-admin, scroll to the Yoast SEO meta box, click the 'Advanced' tab (gear icon), and check the 'Canonical URL' field — clear it if it contains a wrong URL so Yoast defaults to the page's own URL.
  3. For Rank Math: in the post/product editor, open the Rank Math sidebar, go to the 'Advanced' tab, and clear any value in the 'Canonical URL' field.
  4. For All in One SEO: in the post editor, open the AIOSEO meta box, go to 'Advanced', and clear the 'Canonical URL' field.
  5. If no plugin override exists, check your theme's header.php or a custom plugin for a hardcoded <link rel="canonical"> tag and remove or correct it.
  6. After saving, view-source the page on the frontend and confirm the canonical href matches the page's own URL.
How to fix non self canonical on BigCommerce
  1. BigCommerce generates self-canonical tags automatically via its Stencil theme framework.
  2. If a non-self-canonical exists, it is almost certainly introduced by a custom Stencil theme edit. In your BigCommerce admin go to Storefront → My Themes → click 'Advanced' → 'Edit Theme Files'.
  3. In the theme editor, search all template files (.html files under 'templates/') for 'canonical'. The standard output is {{canonicalUrl}} — if you see a hardcoded URL or a modified value, restore it to: <link rel="canonical" href="{{canonicalUrl}}">.
  4. If you use a third-party SEO app from the BigCommerce App Marketplace (e.g., WordStream, Yoast for BigCommerce integrations), check that app's canonical override settings for the affected page type.
  5. Save and push theme changes, then preview the storefront page and view-source to verify the canonical matches the page URL.
How to fix non self canonical on Wix
  1. Wix sets canonical tags automatically for all site pages. To override or correct a canonical, use the built-in SEO settings.
  2. In your Wix dashboard, go to Site Pages (Pages & Menu) and click the three-dot menu next to the affected page, then select 'SEO Basics'.
  3. Scroll to the 'Advanced SEO' section and look for the 'Canonical URL' field — if it contains a non-matching URL, clear the field so Wix defaults to the page's own URL, or enter the correct self-referencing URL.
  4. For product pages in Wix eCommerce: go to Store → Products, open the product, click 'SEO' in the sidebar, expand 'Advanced SEO', and correct or clear the Canonical URL field.
  5. Click Save, then use Wix's SEO Assistant or view the live page source to confirm the canonical tag is correct.
How to fix non self canonical on Squarespace
  1. Squarespace automatically outputs self-canonical tags on all pages — manual overrides are only possible via Code Injection.
  2. Go to your Squarespace admin, navigate to Settings → Advanced → Code Injection.
  3. Check the 'Header' code injection area for any <link rel="canonical" ...> tag that was manually added. If found and incorrect, either remove it entirely (to restore Squarespace's automatic canonical) or update the href to the correct self-referencing URL.
  4. Also check individual pages: open the affected page in the Pages panel, click the gear icon (Page Settings), select the 'Advanced' tab, and inspect the 'Page Header Code Injection' field for any hardcoded canonical tag — remove or correct it.
  5. Save changes and view-source the live page to confirm only one canonical tag exists and it matches the page URL.
How to fix non self canonical on Webflow
  1. Webflow generates self-canonical tags automatically. Non-self-canonicals are introduced either via custom code embeds or third-party SEO integrations.
  2. In the Webflow Designer, select the affected page, open Page Settings (gear icon), and scroll to the 'Custom Code' section → 'Head Code'.
  3. Search for any <link rel="canonical" ...> tag in the Head Code field. If present and incorrect, remove it entirely (so Webflow outputs its automatic canonical) or correct the href to the page's own URL.
  4. Also check your Site Settings → Custom Code → 'Head Code' for a site-wide canonical override and remove/correct it.
  5. Publish the site, then view-source the live page to confirm the canonical tag matches the page URL.
How to fix non self canonical on Adobe Commerce (Magento)
  1. In the Adobe Commerce / Magento 2 admin, go to Stores → Configuration → Catalog → Catalog → Search Engine Optimization.
  2. Review settings such as 'Use Canonical Link Meta Tag for Categories' and 'Use Canonical Link Meta Tag for Products' — toggling these controls whether Magento adds canonical tags pointing to the base category/product URL (stripping layered navigation parameters). Set these to 'Yes' to enable automatic self-canonicals.
  3. For individual product or CMS page overrides: navigate to the product/category/CMS page in the admin, find the 'Search Engine Optimization' section, and check the 'URL Key' and any custom canonical field — ensure no incorrect URL is entered.
  4. If a third-party SEO extension (e.g., Mageworx SEO Suite, Amasty SEO) is installed, check its per-page canonical override fields in the product/category edit screen and clear incorrect values.
  5. Flush the Magento cache (System → Cache Management → Flush Cache Storage), then view-source the frontend page and confirm the canonical href matches the intended page URL.
How to fix non self canonical on Magento Open Source
  1. Follow the same steps as Adobe Commerce (Magento) above — Stores → Configuration → Catalog → Search Engine Optimization to manage canonical tag settings.
  2. For individual pages, edit the product, category, or CMS page and check the 'Search Engine Optimization' panel for any custom canonical URL field; clear or correct it.
  3. Flush cache via System → Cache Management after making changes, then verify the canonical in the page source.
How to fix non self canonical on WordPress.org
  1. Canonical tags in WordPress are controlled by your active SEO plugin. Identify which one you use: Yoast SEO, Rank Math, All in One SEO, or SEOPress.
  2. For Yoast SEO: Edit the affected post/page, scroll to the Yoast SEO meta box, click the 'Advanced' tab (gear icon), and clear the 'Canonical URL' field to restore the default self-canonical.
  3. For Rank Math: In the post editor, open the Rank Math sidebar panel, click 'Advanced', and clear the 'Canonical URL' field.
  4. For All in One SEO: In the post editor's AIOSEO meta box, click 'Advanced' and clear the 'Canonical URL' field.
  5. Also check your theme's header.php or any custom plugin for a hardcoded <link rel="canonical"> — remove or correct any that override the SEO plugin output.
  6. Update/save the post, then view-source the frontend page and confirm the canonical matches the page URL.
How to fix non self canonical on PrestaShop
  1. PrestaShop generates canonical URLs automatically for product and category pages through its core SEO settings.
  2. Go to Shop Parameters → Traffic & SEO in the PrestaShop admin panel. Check the 'Set up URLs' section and ensure your preferred domain format (www vs non-www, http vs https) is correctly configured — this affects what the canonical outputs.
  3. For individual product pages: Catalog → Products → edit the product → go to the 'SEO' tab and check the 'Friendly URL' field. The canonical is built from this; correct it if it's wrong.
  4. If a third-party SEO module (e.g., SEO Expert, Advanced SEO) is installed, open the module configuration and look for per-page canonical override settings.
  5. Clear the PrestaShop cache (Advanced Parameters → Performance → Clear cache) and view-source the frontend page to confirm the canonical is correct.
How to fix non self canonical on Yotpo
  1. Identify which pages have non-self-canonical tags: these are most commonly product pages, review-filtered pages, or UGC gallery pages that Yotpo widgets are embedded on. Pull a crawl report (e.g. Screaming Frog or Google Search Console > Pages > Not Indexed > Duplicate without user-selected canonical) and filter for URLs under your store's domain that carry a canonical pointing elsewhere.
  2. For each affected product or collection page, check whether Yotpo's Reviews widget or Visual UGC gallery appends query parameters (e.g. ?yotpo_page=2, ?yotpo_sort=, #reviews). These parameterised variants must NOT introduce a new canonical; the canonical must always point to the clean base URL. In your Shopify/platform theme, open the canonical tag partial (e.g. theme.liquid or head.liquid) and confirm the canonical is built from the canonical URL variable — not the full request URL — so Yotpo query parameters are stripped automatically.
  3. In the Yotpo admin, go to Settings → General Settings → SEO and confirm that 'Canonical URL' handling is set to defer to the platform (i.e. Yotpo does not override the page canonical). If Yotpo's on-site widgets are injected via a dedicated Yotpo landing page (e.g. yourstore.com/yotpo/products/…), ensure those Yotpo-generated URLs carry a canonical pointing back to the original product URL — not a self-canonical on the Yotpo URL — or redirect them with a 301.
  4. If you use Yotpo's Reviews & Ratings with a dedicated 'All Reviews' or 'Questions & Answers' page widget, open the widget settings in Yotpo Admin → On-Site Widgets → select the widget → Advanced Settings, and verify the widget does not render its own <link rel='canonical'> in the widget iframe or injected HTML that conflicts with the page-level canonical.
  5. For any Yotpo-powered landing pages or syndicated review pages that should NOT be indexed, add a noindex meta tag to those pages instead of a cross-pointing canonical, then verify in Google Search Console that the correct self-canonical appears under the URL Inspection tool for your main product/collection pages.
  6. Re-crawl the affected URLs after changes are deployed. In Google Search Console, use the URL Inspection tool on a sample of previously affected pages and confirm 'Google-selected canonical' matches 'User-declared canonical', both pointing to the page's own clean URL.
How to fix non self canonical on Next.js (Headless)
  1. 1. Create a canonical utility (`lib/canonical.ts`) that derives the canonical URL from the incoming request — using `NEXT_PUBLIC_SITE_URL` plus the current pathname — so every page always self-references unless you explicitly override it.
  2. 2. For the App Router: replace every hard-coded or missing `alternates.canonical` inside `generateMetadata()` with a call to this utility, ensuring the returned value always matches the page's own public URL.
  3. 3. For the Pages Router: in `_app.tsx` (or in each page), replace any `<link rel='canonical'>` inside `next/head` that points to a different URL with `<link rel='canonical' href={canonicalUrl(router.asPath)} />`.
  4. 4. Audit dynamic routes (e.g. `[slug]`, `[handle]`, `[...path]`) — these are the most common source of non-self canonicals. Confirm that the `params`-derived URL in `generateMetadata` exactly matches the final public URL (no trailing-slash mismatch, no www/non-www mismatch).
  5. 5. If a page intentionally cross-canonicalises to another URL (e.g. a paginated variant pointing to page 1), add a `// canonical: intentional cross-reference` comment and document the reason so future audits can skip it safely.
  6. 6. Run a post-deploy audit with a script (or a crawler) that fetches every page, extracts the `<link rel='canonical'>` value, and asserts it equals `location.href` — fail the CI build if any unintentional mismatch is found.
How to fix non self canonical on Elementor
  1. In your WordPress dashboard, go to Elementor → Settings → Advanced and check the 'Custom Code' (or 'Custom Head Code') section. If a global canonical <link rel='canonical'> tag has been inserted here, review it immediately — a single misconfigured global canonical here will override every page on the site.
  2. For per-page canonicals, open each flagged page in the Elementor editor, then click the hamburger menu (☰) → Site Settings → or use the Page Settings panel (the gear icon at the bottom-left). Navigate to the 'Advanced' tab and look for any 'Custom Head Code' field where a <link rel='canonical'> may have been manually hardcoded. Update the URL to exactly match the page's own published URL (self-referencing), or remove the tag entirely to let your SEO plugin manage it.
  3. If you use an SEO plugin alongside Elementor (e.g. Yoast SEO, Rank Math, or All in One SEO), check that plugin's canonical field for each flagged page under WordPress Admin → Pages → Edit (Classic/Block editor) → SEO meta box → Advanced → Canonical URL. A blank field means the plugin auto-generates a correct self-referencing canonical; only enter a value if a cross-reference is intentional (e.g. a paginated series or syndicated content).
  4. Audit Elementor Theme Builder templates (Elementor → Templates → Theme Builder) — Header, Single Post, and Page templates can inject custom code into the <head>. Open each active template, go to its 'Custom Code' or 'Custom CSS/JS' area, and search for any hardcoded canonical tags that may be applying a single URL across multiple pages. Parameterise these with Elementor dynamic tags (e.g. {page_url}) or remove them.
  5. After saving corrections, use Elementor's built-in 'Regenerate CSS & Data' tool (Elementor → Tools → General → Regenerate Files & Data) to flush cached output, then re-crawl the corrected pages with a tool like Screaming Frog or Google Search Console's URL Inspection tool to confirm each page now returns a canonical tag pointing to its own URL.
  6. For any cross-page canonical that is intentional (e.g. a filtered/faceted URL canonicalising to a master category page), document the decision in Elementor's page notes or your SEO plugin's canonical field with a comment, and verify the target canonical URL returns a 200 status and is itself self-referencing — a canonical chain (A→B→B is fine; A→B→C is not).
How to fix non self canonical on Gatsby
  1. Centralize your site origin in gatsby-config.js under siteMetadata.siteUrl (e.g. `siteUrl: 'https://www.example.com'`) so every canonical is derived from one source of truth.
  2. Replace any ad-hoc <Helmet> canonical tags with Gatsby's built-in Head API: export a named `Head` function from every page file (pages/ and templates/) that constructs the canonical from `siteUrl + location.pathname`, stripping trailing slashes consistently.
  3. In each page template (e.g. src/templates/product.jsx, src/templates/collection.jsx) destructure `pageContext` and `location` props inside the `Head` export, build `canonicalUrl` as `siteUrl + location.pathname` (never from a CMS field unless you explicitly validate it matches the rendered URL), then render `<link rel='canonical' href={canonicalUrl} />`.
  4. For paginated routes (e.g. /collection/shoes?page=2) strip the query string from the canonical so it always points to the base paginated URL or page-1, whichever is your chosen strategy — use `location.pathname` only, not `location.search`.
  5. Add a Gatsby SSR/Browser audit helper: in gatsby-ssr.jsx implement `onRenderBody` to log any page where the injected canonical href does NOT start with siteUrl, catching cross-origin canonicals at build time.
  6. Run `gatsby build && gatsby serve` and spider the output with a tool (e.g. `npx @sitespeed.io/sitespeed` or a custom script) to assert every `<link rel='canonical'>` matches its own page URL before deploying.

Does your site have this issue?

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

Scan my site free

Frequently asked questions

What is Non self canonical?

A canonical tag is a small snippet of HTML code, placed in the `<head>` of a page, that tells Google "this is the definitive version of this content." A self-canonical means the tag points back to the page itself — the norm for any page you want indexed. A non-self-canonical means the tag points to a *different* URL, effectively telling Google: "don't index me, index that other page instead." This is sometimes intentional (e.g., a filtered product-listing page deferring to the main category page), but when it happens by accident, Google will ignore the page entirely and index the wrong destination instead.

Why does non self canonical matter?

When a page has a non-self-canonical by mistake, Google treats it as a duplicate and removes it from search results — meaning all the organic traffic that page could earn is lost. If important product, category, or landing pages are accidentally canonicalized to the wrong URL, your store effectively disappears from Google for those queries. Even if Google doesn't fully honour the tag, it still dilutes your crawl budget and creates confusing ranking signals. Fixing accidental non-self-canonicals can restore lost rankings quickly, while verifying intentional ones ensures you're not accidentally de-indexing pages you need.

How do I fix non self canonical?

Audit every page whose canonical tag points to a different URL, then either correct it to self-reference or confirm the cross-reference is intentional and correct.

Authoritative references

Related SEO issues