Most sites have duplicate content and the owner does not know it. The same page answers at the tracking-parameter version, the trailing-slash version, the www version and the http version, and Google treats each of them as a page.
I have had the report on this site. Search Console said "Duplicate, Google chose different canonical" for a batch of pages, and the fix was small once I understood what Google was choosing and why. This post is what I would have wanted to read first: where duplicates come from, what the canonical tag does and does not do, when a redirect or a noindex is the better tool, and how to check what Google actually picked.
The tag itself is one line in the :
`html
`
Every page carries it, including the canonical page pointing at itself. The rest is knowing where to point.
Duplicates come from parameters, hosts, and generous fallbacks
Query parameters are the usual source. Sorting, filtering, tracking and session IDs all produce a new URL for the same content:
example.com/products?sort=priceexample.com/products?color=redexample.com/products?utm_source=newsletter
Point all of them at the clean URL.
Protocol and host variants are next: http://, https://, with and without www. A server-side 301 redirect is the right fix here, because the old address should not exist at all. The canonical tag is the safety net for the requests that slip through.
Trailing slash: /products and /products/. Pick one, redirect the other, and make the canonical agree.
Print and mobile variants: ?print=true, m.example.com. Canonical to the primary page.
Syndication: if the same article goes up on Medium, LinkedIn or a partner site, that copy should carry a cross-domain canonical back to your original. Whether the other site lets you set one is a question to ask before you agree to syndicate.
Localised sites have their own version of the problem, and it is the one that caught me: the same English text served on twenty language URLs because the fallback was too generous. That is duplicate content by any measure, and the fix is not a canonical tag. It is not generating the page.
Cleaner URLs from the start mean fewer variants to reconcile later. The Slug Generator turns a title into a stable, lowercase, hyphenated slug so the messy auto-generated version never reaches the index.

Six rules the tag has to meet
The tag goes in :
`html
`
The rules I check, in the order they usually go wrong:
- Absolute URL, with protocol and host. Relative paths are allowed and they fail more often than they should.
- Self-referencing on every page. A page that declares itself canonical cannot later be claimed by a parameter variant.
- One tag per page. Two canonical tags are ignored or merged, and you will not like which one wins.
- The target returns 200. A canonical pointing at a redirect or a 404 is a canonical pointing at nothing.
- Everything agrees. The canonical, the sitemap entry, the internal links and any hreflang entries must all name the same URL. Google weighs the signals together, and a contradiction weakens the tag.
- Non-HTML files use the HTTP header. For a PDF or an image:
`
Link: ; rel="canonical"
`
If a slug carries non-ASCII characters, run it through the URL Encoder and paste the encoded form into the tag, so the canonical matches the URL the browser actually requests.
The tag goes in `<head>`: ```html <head> <link rel="canonical" href="https://example.com/products/widget"> </head> ``` The rules I check, in the order they usually go wrong: - Absolute URL, with protocol and host.
Canonical, 301 or noindex: pick by what happens to the old URL
Three tools, three jobs, and mixing them up is the most common mistake I see after the missing tag.
A canonical tag says "index that URL instead of this one". Both URLs stay reachable. Use it for parameter variants and syndicated copies. It is a hint. Google usually follows it and sometimes does not.
A 301 redirect says "this URL has moved for good". The old URL stops serving content. Use it for http to https and www to non-www consolidation, and for any page that has moved for good. It is a directive, browsers and crawlers must follow it, and it passes nearly all ranking signal to the target.
A noindex tag says "do not show this in search". The page stays reachable for people, internal search results and thank-you pages for instance, and it does not consolidate anything.
The decision rule:
- Can the old URL disappear? 301.
- Do both URLs have to stay live? Canonical.
- Should the page never rank at all? Noindex.
One thing I would not do: noindex a page and canonical it elsewhere at the same time. The two signals contradict each other and Google will pick one.
The pages that survive as canonical deserve a proper title and description. The Meta Tag Generator writes the title, description and Open Graph block in one pass.
Check what Google chose, not what you declared
Canonical bugs make no noise. The site works, nobody complains, and search traffic drifts down over months. I check monthly and after every change to routing, and this is the check:
- Search Console, URL Inspection. It shows the URL Google chose as canonical for the page you enter. If that differs from the one you declared, find out why before touching anything else.
- Search Console, the Pages report (the old Coverage report). Filter on "Duplicate, Google chose different canonical" and "Duplicate without user-selected canonical". Each row is a page where your tag lost.
- The Canonical Checker for a quick look at a single URL: it shows the declared canonical and whether it resolves.
- A crawler for the whole site. Screaming Frog, Ahrefs Site Audit and Sitebulb all flag missing tags, canonicals pointing at 404s, redirect chains behind canonical targets, and disagreements between canonical and sitemap.
- Three manual tests: append
?test=1to a URL and confirm the canonical still names the clean URL; request the site over http, https, www and non-www and confirm each variant redirects or carries the right tag; open page 2 of a paginated list and confirm it canonicalises to itself, not to page 1.
After a migration, new domain, new CMS or new URL structure, run all five before the release and again the week after. A canonical problem shows up in the first crawl after go-live, so the check the week after matters as much as the one before.

FAQ
Is the canonical tag a directive or a hint?
A hint. Google overrides it when the target 404s, when the content does not match, or when the internal links and sitemap point somewhere else. Keep canonical, sitemap, internal links and redirects on the same URL and it holds.
Can I canonicalise across domains?
Yes. A cross-domain canonical is the standard fix for syndicated content: the copy on Medium points at your original. It is a weaker signal than a same-domain canonical, so do not rely on it for anything that matters more than a republished article.
Should paginated pages have canonical tags?
Each page in the series canonicalises to itself. Pointing page 2 at page 1 drops page 2 from the index. Google stopped using rel="next" and rel="prev" as an indexing signal in 2019, so those attributes do not help with this; a self-referencing canonical on every page does.
How long does a canonical change take to apply?
Until the next crawl of that page, which is days to weeks depending on the site. For a page that matters, use URL Inspection in Search Console and request indexing to get it crawled sooner.
XML Sitemaps: What They Do for Indexing and What They Cannot Fix
A sitemap tells Google which pages exist and when they changed. It does not make a page rank and it will not get a thin page indexed. The format, the two fields Google reads and the two it ignores, the mistakes that send a worse signal than no sitemap, and the check I run after every deploy.
Open Graph Tags: Six Lines That Decide How Your Link Looks When Shared
What the platforms actually read when someone pastes your URL, the one image size that works everywhere, why X needs its own tags, how to set them in plain HTML, Next.js and WordPress, and how to test without sharing a broken preview to your whole network.
Meta Robots Tag: Control What Google Indexes and Shows
Every meta robots directive that still matters in 2026, including the snippet controls that now govern AI Overviews, the staging noindex that leaks into production, when the X-Robots-Tag header is the better tool, and how to test what is actually served.
15 Free Developer Tools Every Programmer Should Bookmark
Format JSON, encode Base64, test regex, decode JWTs, and more. Fifteen browser-based developer tools that run locally with no installation required.
