"Duplicate, Google chose different canonical than user" in Search Console
You declared a canonical and Google overruled it. That only happens when your other signals disagree with your tag. Here is how to find the contradiction.
This URL is not indexed and it should be. Something is in the way.
Is it still happening?
Paste the URL Search Console flagged. We resolve its canonical, fetch the target, and check the two things that most often make Google overrule a tag: a target that redirects or is noindexed, and a target that canonicalises somewhere else again.
Whether your canonical is technically sound: present, absolute, resolving to an indexable page, and not the start of a chain.
We cannot see which URL Google chose instead, and we cannot weigh your internal links or sitemap the way it does. If this check comes back clean, the contradiction is in those signals rather than in the tag, and URL Inspection will name the URL Google preferred.
What this error actually means.
You told Google which URL to treat as canonical. Google read the tag, weighed it against everything else it knows, and picked a different URL. The tag was a hint and the hint lost.
This is not Google being arbitrary. A canonical tag is one signal among several, and it is overruled when the others point somewhere else: internal links, sitemap entries, redirects, hreflang, or the simple fact that the two pages are not as similar as your tag claims.
It matters more than the other duplicate rows because it means your site is contradicting itself. Somewhere you are telling Google two different things about which URL counts, and finding that contradiction is the whole job.
6 things that produce this error.
Ordered by how often they turn out to be the cause, not by how obvious they look.
Internal links point at a different URL than the canonical
Your canonical names one address and every link in your navigation names another. Internal linking is one of the strongest canonical signals Google has, and a site that links consistently to a URL it does not declare as canonical is making a case against its own tag.
The sitemap lists the non-canonical version
A sitemap entry is an explicit statement that a URL matters. Listing a URL whose canonical points elsewhere sends two opposing signals in the same crawl, and the sitemap is the more recent one.
The canonical target redirects
Your canonical names a URL that then 301s somewhere else. Google resolves to the redirect destination rather than the URL you named, which is why the chosen canonical can be an address that appears nowhere in your markup.
Page /a canonical -> /b
GET /b -> 301 /c
Google picks -> /cA canonical chain, where the target canonicalises again
Page A points at B, and B points at C. Google does not reliably follow more than one hop and resolves the group in its own way. Chains happen naturally when pages are consolidated more than once over time.
The pages are not actually duplicates
A canonical between two pages that differ substantially is a claim Google can check and disagree with. This is common on location and variant pages where the template is shared but the content genuinely differs, and it is the one cause where the right fix is to remove the canonical rather than to strengthen it.
Mixed HTML and header canonicals disagreeing
A CDN or framework adds a Link header canonical while the template emits a different one in the HTML. Two declarations, two answers, and the resolution is not something you controlled.
How to clear it.
Ask URL Inspection which URL Google picked
The Page indexing report tells you it disagreed; URL Inspection tells you what it chose. Start there. The gap between your declared canonical and the Google-selected one names the contradiction you are looking for.
Make every signal name the same URL
Canonical tag, sitemap entry, internal links, and hreflang should all point at one address. Grep your templates for links to the non-canonical form; it is usually a navigation component or a breadcrumb that never got updated after a URL change.
# Does the canonical target redirect? If so, that is your answer.
curl -sIL https://example.com/canonical-target | grep -iE '^(HTTP|location)'Collapse canonical chains to one hop
Point every page in the group directly at the final URL. If A canonicalises to B and B to C, change A to point at C and remove the middle step entirely.
If the pages genuinely differ, remove the canonical
When Google overrules a canonical between two pages that are not really duplicates, it is telling you the tag was wrong. Give each page a self-referencing canonical and differentiate the content, or use hreflang if they are regional variants of the same page.
Next to check.
LintPage rules covering this: canonical-url, canonical-self-referencing, sitemap-presence, description-uniqueness
Questions, answered.
Why does Google ignore my canonical tag?
How do I find out which URL Google chose?
Is this worse than "Duplicate without user-selected canonical"?
Can internal links really override a canonical tag?
Does hreflang affect canonical selection?
Catch this one before Search Console does.
Search Console tells you weeks after the fact. LintPage runs 60 checks against a URL in about 30 seconds. Free, no signup.
run a full scan →