Canonical tags: what they do and the mistakes that cost rankings

You use a canonical tag to tell Google which URL is the primary version of a page. Get it right and duplicates stop competing with you. Get it wrong and the right page can vanish from results. This guide shows what to add, what to avoid, and how to check your site.

By , founder of Porteur · Updated 13 September 2026 · Markdown

What a canonical is and when to use one

A canonical tag points to the preferred URL for a piece of content. It lives in the head of the HTML or in the HTTP header.

Use a canonical when multiple URLs show the same or very similar content. Without it, Google may index a weaker variant or split signals across duplicates.

  • UTM and other tracking parameters: /pricing?utm_source=newsletter
  • Sort or filter parameters that do not change the core topic: /guides?sort=latest
  • HTTP and HTTPS versions both live for a while
  • Both with and without trailing slash: /features and /features/
  • Upper and lower case URLs if your server serves both
  • Print or lite views of the same article

Do not use a canonical to hide a thin or unrelated page. Use noindex for pages that should not appear at all. Canonical is for duplicates of the same thing.

How Google treats rel=canonical

Google treats a canonical as a strong hint, not a command. It usually honours the tag when all signals agree. It can ignore it when they do not.

  • Signals that support your canonical: internal links point to it, sitemaps list it, content matches, it returns 200, it is indexable
  • Signals that fight it: the tag points to a redirect, to a noindex page, to a different topic, or duplicates point to each other in a loop

In Search Console, the Page indexing report can show Alternate page with proper canonical tag. That means Google found your canonical on that page and agreed, so it left that URL out of the index on purpose. It is only a problem when the canonical is wrong for your goal.

The self‑referencing canonical

Put a self‑referencing canonical on every indexable page. It declares the page as its own primary version and prevents stray parameters from winning.

<link rel="canonical" href="https://yourproduct.com/pricing" />

On /pricing?utm_source=newsletter, the page still declares https://yourproduct.com/pricing. On /pricing/, use one canonical form and stick to it across the site.

Cross‑domain canonicals and syndicated content

You can point a canonical to a different domain when it truly is the same content. This is common for syndication or mirrored docs.

<link rel="canonical" href="https://docs.yourproduct.com/getting-started" />

Only do this with consent or control. If you canonical a page to another site, you ask Google to index that other URL as the primary. Your page may not rank.

Where to put a canonical: HTML and HTTP header

Place the tag once in the head of the HTML for HTML pages. For non‑HTML assets like PDFs, use the HTTP Link header.

<!-- HTML head -->
<link rel="canonical" href="https://yourproduct.com/guides/getting-started" />
# HTTP response header for a PDF
Link: <https://yourproduct.com/whitepaper>; rel="canonical"

Avoid multiple canonicals on one page. Avoid relative URLs. Use the absolute, preferred URL every time. One clear signal beats many weak ones.

The mistakes that cost rankings

  • Canonical to a redirect: points at a 301 or 302. Use the final 200 URL instead
  • Canonical to a noindex page: you tell Google to index a URL it is told to ignore
  • Canonical to a different topic: content mismatches, Google may ignore the tag
  • Missing canonical on parameter pages: UTM or sort URLs get indexed and compete with the clean URL
  • Conflicting canonicals: page A canonicals to B, B canonicals to A, Google may pick one you do not expect
  • Multiple canonicals in the head: parsers can pick the first or ignore later ones
  • Canonical to a non‑canonical version: mixed http and https, or wrong host, or wrong trailing slash
  • Canonical only on the duplicate: the primary page lacks a self‑canonical and loses to a variant

Each mistake creates mixed signals. Mixed signals waste crawl budget on variants and split link equity. The result is weaker rankings or the wrong URL ranking.

A fixed page: /pricing and /pricing?ref=twitter both exist, both load fast, both indexable, both show a canonical to https://yourproduct.com/pricing. Internal links point to /pricing only.

Parameters, sort, and filters

Decide which parameters create unique content and which do not. Canonical the non‑unique ones to the base URL. Let unique ones stand on their own with a self‑canonical.

  • Non‑unique: utm_source, utm_medium, sort=latest, view=list, page=2 for infinite scroll clones
  • Unique: colour=red on a single product photo page, region=en-gb on a localised article, filter=free on a pricing comparison if content changes materially

On a category like /blog, do not canonical every paginated page to page 1 if page 2 shows different posts. Each page should self‑canonical if it is unique enough to index. If you do not want deeper pages indexed, use noindex rather than misusing canonical.

How to check your canonicals

  1. Check the HTML

    Open a key page like https://yourproduct.com/pricing. View source. Find one <link rel="canonical" href="...">. Confirm it is absolute, 200, indexable, and matches your chosen format

  2. Check parameter variants

    Load https://yourproduct.com/pricing?utm_source=newsletter and /pricing/?ref=twitter. Confirm both show the same canonical as the clean URL

  3. Check HTTP headers for assets

    For PDFs or other non‑HTML assets, run curl -I and look for a Link: <...>; rel="canonical" header that points to the HTML version or preferred file

  4. Check internal links and sitemaps

    Click through your nav and important CTAs. Make sure they point to the canonical URL form. If you use a sitemap, list the canonical URLs only

  5. Use Search Console on problem URLs

    In URL Inspection, see Google-selected canonical and User-declared canonical. In the Page indexing report, review Alternate page with proper canonical tag to confirm which URLs are out of the index by design

Remember the Search Console basics as of 2026. An impression is counted when a link to your page appears on a results page a user loaded. Position is the highest link to your site on that page. CTR is clicks divided by impressions. The report holds up to 16 months. Comparisons default to the last 28 days against the 28 before. Query tables omit rare and anonymised queries, so sums are lower than totals.

Debugging conflicts and mixed signals

  • Open both the duplicate and the target. Both should have canonicals pointing to the target. The target should self‑canonical
  • Check status codes. Target must be 200. Fix redirects and point canonicals to the final URL
  • Remove noindex on the canonical target unless the page must stay out of results
  • Fix internal links to use the canonical URL. Update nav, footers, sitemap, and popular posts
  • Normalise URL variants at the server level. Redirect http to https, and trailing slash or not, consistently
  • Avoid canonical chains. Every duplicate should point straight to the final canonical

If Google still ignores your tag, check if the content truly matches. If the duplicate has extra sections, ads, or user comments, it can look meaningfully different. Make the duplicate closer, or remove it from indexing if you do not want it to rank.

Frameworks, CMSs, and edge cases

Most modern CMSs output self‑referencing canonicals. Verify the exact URL they print. Some themes use http, a wrong host, or add a slash you do not use.

  • Single Page Applications: ensure the canonical is in the server‑rendered HTML, not just set by client‑side JS
  • International sites: hreflang should point between language versions, and each page should still have a self‑canonical to itself in that language
  • Tracking templates: ensure campaign parameters do not overwrite or remove the canonical on landing pages
  • Search pages: usually noindex and no canonical to a category, unless they are curated with unique value

A fixed page in this setup: https://yourproduct.com/en-gb/pricing has a self‑canonical to itself. It links with hreflang to /en-us/pricing. Both versions avoid canonicals to each other because the language differs.

Examples to copy and adapt

<!-- Product page with parameters in the wild, canonical to the base -->
<link rel="canonical" href="https://yourproduct.com/product/blue-mug" />

<!-- Category page where sort does not change the topic -->
<link rel="canonical" href="https://yourproduct.com/blog" />

<!-- Cross-domain canonical for a syndicated article -->
<link rel="canonical" href="https://blog.yourproduct.com/how-we-built-the-api" />

Before: /blog?sort=latest is indexed and outranks /blog for "yourproduct blog". After: both pages exist, both show a canonical to https://yourproduct.com/blog, internal links point to /blog. /blog ranks and the parameter URL is shown as Alternate page with proper canonical tag in Search Console.

Questions

Sources

Check my site, free

Paste your homepage and get a free check that reads your site and the searches around it, then shows three canonical issues or opportunities if it finds them, in about thirty seconds.

  • Free check, no card
  • Read-only, your own accounts
  • Readable by your agent

Read next