The most useful thing to understand about canonical tags is that they are not instructions. Google calls them a hint, and means it. When "we added canonicals" was supposed to solve duplicate content and didn't, it's nearly always because other signals pointed somewhere else and the hint got overruled. This sub-guide of my technical SEO guide is about making every signal agree.
What canonicalisation actually is
When Google finds several URLs with the same or very similar content, it groups them into a cluster and picks one URL to represent the cluster in search results. That chosen URL is the canonical. Signals from all the duplicates (links, content, anchor text) are consolidated to it. The others are still crawled occasionally, but they are not shown and do not rank separately.
This happens whether you add a canonical tag or not. The tag gives you a vote. If you don't vote, Google decides without you, often differently from what you'd want: the HTTP version, the one with a tracking parameter, the paginated copy, or the syndicated version on a bigger site.
- Google crawls several similar URLs
- Groups them as duplicates
- Weighs the signals
- Picks one canonical
- Consolidates signals to it
- Shows that one in results
The signals Google weighs
Google has been fairly open about this. The canonical tag is one input among several, and when they disagree, the tag can lose. The ones I check on every site:
The rel="canonical" tag
Your explicit preference, in the HTML head or an HTTP header. Strong when it agrees with everything else; weak when it doesn't.
Redirects
A 301 is the strongest canonical signal there is, because it physically removes the alternative. If URL A redirects to B, B is canonical, regardless of what any tag says.
Internal links
If your navigation, breadcrumbs and body links all point to one URL, that URL looks like the one you mean. If they point to a parameter version while the tag points elsewhere, Google has to choose.
Sitemap inclusion
URLs listed in your XML sitemap are read as "these are the ones I care about". Listing a non-canonical URL contradicts your tag.
HTTPS over HTTP
Everything else being equal, Google prefers the secure version.
External links and content quality
If the world links to one version, or one version has fuller content, Google leans toward it. This is how syndicated copies on big publishers sometimes outrank the original.
The practical lesson: a canonical tag is not a fix on its own. It's the final step after you have made the redirects, internal links and sitemap tell the same story.
Self-referencing canonicals
Every indexable page should carry a canonical tag pointing to itself: the clean, preferred, absolute URL. This sounds pointless until you remember that any URL can be reached with parameters appended, with a different case, with or without a trailing slash, or through a tracking link someone posted on WhatsApp. A self-referencing canonical means every one of those variants automatically declares the clean URL as the original. Without it, each variant is a duplicate with no vote.
Two implementation details catch people out. The canonical must be an absolute URL with the right protocol and host (https://example.com/page/, not /page/). And it must be in the raw HTML or the HTTP header, not injected by JavaScript after load, because Google reads the first one it finds and may not wait for the rendered version. I cover why in the JavaScript SEO guide.
Handling the common cases
Parameters
Tracking parameters (utm_*, fbclid, gclid), session IDs and sort orders don't change the content. These should canonicalise to the parameter-free URL. Where the parameter does change content substantially (a filter that produces a distinct, searched-for product set), that URL deserves its own self-referencing canonical and treatment as a real page. Deciding which parameters fall on which side is an architecture decision; see site architecture for faceted navigation specifically.
Product variants
Colour and size variants on ecommerce sites are the hardest case. If each variant has its own URL with almost identical content, canonicalise variants to the parent product. If variants have distinct search demand ("blue cotton kurta" vs "red cotton kurta" are searched separately and shown differently), give the most important variants their own canonical and genuinely different content. Canonicalising to the parent and then wondering why the variant doesn't rank is a mistake I see on most ecommerce audits.
Pagination
Page 2 of a category is not a duplicate of page 1. It lists different products. Canonicalising every paginated page to page 1 tells Google the products on pages 2 to 40 don't matter, which quietly orphans them. Each paginated page should self-canonicalise. Google no longer uses rel="prev" and rel="next" for indexing, so the structure has to carry the weight: link clearly between pages, keep the category hub linking as deep as practical, and let each page stand on its own.
Cross-domain syndication
If you publish an article and a partner republishes it, the partner's copy should carry a canonical pointing to your original. If they won't add it, Google will pick a canonical based on authority and links, and a larger domain often wins. Where you can't control the partner's page, delay the syndication so your version is indexed first, and make sure your version has the stronger internal linking. Cross-domain canonicals work; they're just a hint like any other.
Mobile, AMP and localised versions
Separate mobile URLs and AMP pages use their own annotations alongside canonicals. Language and country versions are not duplicates and should not canonicalise to each other; that's what hreflang is for (see the international SEO guide). Canonicalising your Hindi page to your English page tells Google to drop the Hindi page.
Common mistakes that break canonicalisation
| Mistake | What Google sees | What happens | Fix |
|---|---|---|---|
| Canonical points to a URL that redirects | A hint toward a URL that immediately sends it somewhere else | Google follows the chain or ignores the tag; signals get diluted | Always canonicalise to the final 200 URL |
| Canonical points to a noindexed or blocked URL | "The original is this page you can't index" | Google ignores the canonical or drops both | Canonical targets must be indexable and crawlable |
| Canonical and internal links disagree | Tag says A, every link says B | Google often picks B | Update templates so links use the canonical URL |
| Non-canonical URLs in the sitemap | Sitemap says A matters, tag says B is the original | Conflicting hints; Search Console flags "Duplicate, Google chose different canonical" | Sitemaps should contain only canonical URLs |
| Multiple canonical tags on one page | Two votes for different URLs | Google ignores both | One tag, usually fixed by removing a plugin's duplicate |
| Canonical to the homepage sitewide | Every page claims to be a duplicate of the homepage | The whole site collapses to one indexed URL | Self-referencing canonicals; this is usually a template variable bug |
| Relative or protocol-mismatched canonical | An ambiguous or wrong-host URL | Ignored, or canonicalises to the wrong site | Absolute HTTPS URL on the correct host |
| Canonical on paginated pages to page 1 | Pages 2+ declared duplicates of page 1 | Deep products and posts lose their path | Self-canonicalise each page |
Checking what Google actually chose
Your canonical tag and Google's canonical can differ, and the only reliable way to know is to ask Google. URL Inspection in Search Console shows two lines: "User-declared canonical" (your tag) and "Google-selected canonical" (its decision). When they match, you're done. When they don't, the page indexing report's "Duplicate, Google chose different canonical than user" and "Duplicate without user-selected canonical" groups tell you how widespread the disagreement is.
I work through those groups by pattern, not URL by URL, the same way I approach the "not indexed" statuses. Fifty URLs disagreeing usually means one template or rule is sending a conflicting signal. Find it in the list above, fix it, and the group shrinks on the next crawl. For generated pages at scale, the check belongs in the templates themselves; I wrote up how canonical rules behave there in the programmatic page templates experiment.
Frequently asked questions
Does a canonical tag pass link equity like a redirect?
When Google accepts the canonical, signals from the duplicates are consolidated to the chosen URL, similar in effect to a redirect. The difference is that Google can decline a canonical hint, whereas a redirect leaves it no choice. For URLs you genuinely want gone, redirect; for URLs that need to exist but shouldn't rank separately, canonicalise.
Should I canonicalise or noindex duplicate pages?
Canonicalise when the pages are true duplicates and you want their signals consolidated. Noindex when the page is different enough that it isn't a duplicate but still shouldn't rank (a thin filter view, a thank-you page). Using noindex on duplicates throws away their signals instead of consolidating them.
Can I set a canonical to a page on another website?
Yes. Cross-domain canonicals are supported and are the correct tool for syndicated content, where the republished copy points back to the original. Google treats them as a hint like any other, so the original should also be the better-linked and earlier-indexed version.
Why does Search Console say "Google chose different canonical than user"?
Because other signals outweighed your tag: internal links or the sitemap point to a different URL, the alternative has more external links, or your canonical target redirects or is non-indexable. Find which signal disagrees and align it; the tag alone will not win the argument.
Do I need canonical tags if every page has a unique URL?
Yes. Even with unique URLs, any page can be reached with tracking parameters, different capitalisation, or trailing-slash variants, and each is a potential duplicate. A self-referencing canonical on every page resolves all of them automatically.
Where this connects
This guide is part of the technical SEO hub. Canonical checks are a core section of my technical SEO audit framework; the behaviour of canonical rules across thousands of generated pages was tested in the programmatic page templates experiment; the programmatic SEO build case study shows canonicalisation designed into templates from day one; and implementing it properly is part of my technical SEO services.