How Google Picks a Canonical URL (and Why It Ignores Yours)

You add <link rel="canonical"> to every page, check it with a validator, and a month later Search
Console reports “Duplicate, Google chose different canonical than user”. It feels like Google is
ignoring a direct instruction.
It is, in a way, and that’s by design. A canonical tag is a strong hint, not a directive. Google collects several signals about which URL in a group of duplicates should represent it, and your tag is one of them. When the signals disagree, Google picks the one most of them point to. This article explains those signals and how to make them agree.
What “canonical” means to a search engine
Most sites serve the same content at more than one URL without anyone deciding to:
http://andhttps://, with and withoutwww- trailing slash and no trailing slash
- tracking parameters such as
?utm_source=newsletter - sort and filter parameters on category pages
- print versions, AMP versions, session IDs
- the same product reachable under several category paths
Google groups pages it considers duplicates and chooses one canonical URL to crawl most often and to show in results. Ranking signals such as links are mostly consolidated onto that URL. The others are kept as alternates and generally don’t appear in results.
The canonical is chosen per group of duplicates, and you get to influence it, not dictate it.
The signals, roughly from strongest to weakest
Google’s documentation lists three methods to indicate a preferred URL, and a number of other factors it takes into account:
- Redirects. A 301 or 308 from A to B is the clearest statement that B is the URL that counts.
Use them when the duplicate URL doesn’t need to exist for users at all, such as
http://or the non-preferred host. rel="canonical", in the HTML<head>or as an HTTPLinkheader. Strong, but a hint. Use it when both URLs need to work for users, like tracking parameters or filtered views.- Sitemap inclusion. Listing a URL in your sitemap suggests it’s the preferred version. Weak on its own.
Then there are the signals you send without thinking about them:
- Internal links. If your navigation links to
/shoes?sort=populareverywhere while the canonical says/shoes, you’re arguing with yourself. - HTTPS over HTTP, which Google prefers when both exist.
- hreflang annotations, which should reference canonical URLs.
- The content itself. If two pages aren’t really duplicates, Google may index both regardless of your tag.
When these line up, the canonical you declare is almost always the one Google selects.
Reading Search Console correctly
The URL Inspection tool shows two values for any indexed URL:
- User-declared canonical: what your page says.
- Google-selected canonical: what Google went with.
In the Page indexing report, three statuses are about canonicals:
| Status | Meaning | Action needed? |
|---|---|---|
| Alternate page with proper canonical tag | This URL points elsewhere and Google agrees | No |
| Duplicate without user-selected canonical | Google found duplicates and picked one; you didn’t declare any | Usually add a canonical |
| Duplicate, Google chose different canonical than user | You declared one, Google picked another | Investigate |
“Alternate page with proper canonical tag” often alarms people because it sits under “not indexed”. It’s the system working as intended.
Why Google overrides your tag
When the declared and selected canonicals differ, the cause is nearly always one of these.
The tag points somewhere broken
A canonical pointing to a URL that redirects, returns 404, is blocked by robots.txt or carries
noindex is a contradiction. Google won’t pick a URL it can’t index. Every canonical target should
return 200, be indexable, and be canonical to itself.
Conflicting signals
The page declares https://example.com/guide, but:
- the sitemap lists
https://www.example.com/guide, - internal links use
/guide/with a trailing slash, - and
http://example.com/guideserves the page without redirecting.
Each signal on its own is weak, but together they outvote the tag. Pick one form and use it everywhere: in links, the sitemap, hreflang, and redirects for the rest. Our www vs non-www guide covers the host part of that decision.
The canonical isn’t where Google reads it
Google only honours rel="canonical" in the <head>. Sounds obvious, but the head can end earlier
than your template suggests. HTML parsers close the <head> as soon as they meet an element that
doesn’t belong there, such as an <img>, an <iframe> or stray text. Everything after it, including
your canonical, then sits in the <body> and is ignored. Check the rendered HTML, not just your
template.
Multiple canonical tags on one page, often one from the CMS and one from an SEO plugin, are another classic. With conflicting declarations, Google may ignore them all.
The pages aren’t duplicates
If page A’s canonical points to page B but the content differs substantially, the tag looks like a mistake and Google may index A on its own. Canonicals are for duplicates and near-duplicates, not for “please rank this other page instead”.
Paginated pages pointing to page one
Pointing page 2, 3 and 4 of a list to page 1 tells Google they’re duplicates of page 1, which they’re not. Items that only appear on deeper pages may then never be discovered. Each paginated page should be canonical to itself.
A clean setup
For a typical site:
- Every indexable page has exactly one canonical tag, in the head, with an absolute URL, pointing to itself in its preferred form. Self-referencing canonicals cost nothing and absorb accidental variants (parameters, case, trailing slashes).
- Host and protocol variants redirect with a single 301 to the preferred form. No canonical tags needed for those, because users never land on them.
- Parameter variants that must keep working (tracking, sorting) canonicalize to the clean URL.
- The sitemap lists only canonical URLs. See XML sitemaps.
- Internal links use canonical URLs.
- Non-HTML files like PDFs use the HTTP header form:
Link: <https://example.com/whitepaper.pdf>; rel="canonical"
Things that don’t work
noindexto deduplicate. It removes the page entirely and passes no signals to the preferred URL. Use a canonical instead.- robots.txt to block duplicates. If Google can’t crawl a URL, it can’t see the canonical tag on it, so it can’t consolidate anything. Blocked duplicates can still appear in results as bare URLs if they’re linked.
- Canonicals across unrelated domains as a ranking trick. Cross-domain canonicals are legitimate for syndicated content, but they are still hints, and they only make sense for real duplicates.
Checking your own pages
Our scanner’s canonical check verifies that a page declares a canonical, that it’s absolute, and that it stays on the same host. For a full picture across a site, combine that with Search Console’s Page indexing report: group the “Google chose different canonical” URLs by template, open one of each in URL Inspection, and compare the two canonicals. The fix is usually the same for a whole template.
The rule of thumb: make every signal tell the same story. When redirects, tags, sitemaps and links all agree, Google rarely disagrees.