# A canonical tag is a hint, not a command

Search Console shows a canonical you did not tag? The tag worked. Google read it and picked another URL. How to read that verdict, and what changes it.

Published: 2026-08-24T12:00:00.000Z

Canonical: https://thatseoagent.com/en/blog/canonical-is-a-hint

Your page says the canonical is `/shoes`. Search Console says it is
`/shoes?color=red`. The usual reading is that something broke: the tag did not
fire, a plugin overwrote it, Google is not seeing it.

It fired. Google saw it. Google disagreed.

> You can indicate your preference to Google using these techniques, but Google
> may choose a different page as canonical than you do, for various reasons. That
> is, indicating a canonical preference is a hint, not a rule.

That sentence is in Google's own documentation, on
[What is canonicalization](https://developers.google.com/search/docs/crawling-indexing/canonicalization).
Search Console repeats it in the field that reports your tag:
[“There is no guarantee that Google will choose your preferred canonical, but we
will take this into consideration.”](https://support.google.com/webmasters/answer/9012289)

A hint Google is allowed to ignore is not a broken switch.

## First, read the verdict

Open [URL Inspection](https://support.google.com/webmasters/answer/9012289) on
the URL and look at the **indexed** version, not the live test. Two fields:

| Field | What it is |
| --- | --- |
| User-declared canonical | The URL your page asked for |
| Google-selected canonical | The URL Google kept |

If they differ, Google overrode you, and that is the fact to work from. The live
test cannot tell you which one will win: the choice is made when Google indexes
the page, not when it fetches it. Reloading the HTML and staring at the tag is
answering a question nobody asked.

## Why Google overrides you

Google groups pages whose main content looks the same, then picks one URL to
represent the group. Its own wording for the pick: the page that, based on the
signals collected while indexing, is “objectively the most complete and useful
for search users”.

Your tag is one of those signals. It is not the decision.

The URL that wins gets crawled more often than the rest, and becomes “the main
source to evaluate content and quality”. Search results usually point at it,
unless a duplicate fits the searcher better, such as a mobile URL on a phone.

So the tag does not mean “this is the URL I want indexed”. Google already decided
there is one piece of content here. The tag only argues about which URL carries
it.

## The status that names the override

Search Console has a string for exactly this: **“Duplicate, Google chose
different canonical than user.”** The
[page indexing report](https://support.google.com/webmasters/answer/7440203)
explains it as: you marked this page as canonical for a set of pages, Google
thinks another URL is the better canonical, and Google indexed that one instead.

The neighbouring status, “Duplicate without user-selected canonical”, is the same
grouping with no tag from you at all. Google’s note on it is that this is working
as intended, because it does not serve duplicate pages.

Neither status is an implementation failure. Both are the documented outcome.

## Three ways to state a preference, weakest last

If you do want to argue, Google
[ranks the methods](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls)
by how much they influence the choice:

| Method | How Google describes it |
| --- | --- |
| Redirect | A strong signal that the target should become canonical |
| `rel="canonical"` | A strong signal that the specified URL should become canonical |
| Sitemap entry | A weak signal |

Point them at the same URL. A sitemap naming one URL, a tag naming another and a
redirect naming a third is three answers to one question, and the same document
asks you not to do that.

None of them is required. Google’s wording: your site will likely do just fine
without specifying a canonical preference, because Google will identify the best
version on its own.

## Two signals that beat your tag

Both sit outside that list and both are common:

- **HTTPS wins over HTTP.** Unless the HTTPS page has an invalid certificate,
  insecure dependencies, a redirect through HTTP, or a canonical pointing back at
  HTTP.
- **A page inside a reciprocal `hreflang` cluster wins** over the same content
  outside one.

A self-referencing canonical on the HTTP URL, or on a language version left out
of the cluster, argues against the URL Google was already inclined to keep.

## Four things that do not work

Google lists these as prohibitions, and each is a common attempt to force the
choice:

- **robots.txt.** Google can still index a blocked URL, without its content.
  That is the opposite of picking a representative.
- **The URL removal tool.** It hides every version, including the one you wanted
  kept.
- **`noindex`.** It drops the page from Search entirely instead of pointing
  Google at your preferred version.
- **Rewriting the canonical in JavaScript.** Canonicalization
  [happens before and after rendering](https://developers.google.com/search/updates),
  so a page that prints one canonical in the HTML and swaps it in the browser
  hands Google two different answers at the two moments it looks. The
  [JavaScript SEO guide](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics)
  says not to. Set it in the HTML and leave it, or leave it out of the HTML and
  set it only in JavaScript.

## What actually changes the outcome

**If Google’s pick is a worse landing URL** — tracking parameters, a session id,
the HTTP version, a pagination state — the argument is worth making, and the
strongest form is a redirect, not a tag.

**If the two URLs are two real articles that overlap**, a tag is the wrong tool.
Google’s troubleshooting guide is blunt about what splits a group:
[pages generally split faster when the difference in content is clear and
significant](https://developers.google.com/search/docs/crawling-indexing/canonicalization-troubleshooting).
The page indexing report says the same from the other side: make the content
“substantially different” between the two pages. A duplicate, it adds, has to
resemble the canonical. That is what duplicate means.

**Then wait.** Google may hold pages in a duplicate group for up to two weeks
after the content is fixed. You can request indexing on the important URLs; it is
quota-limited and it does not skip the grouping.

**If Google’s pick is a reasonable page for a searcher to land on, do nothing.**

This is the same family of mistake as reading a crawl as an index: fetching a
page and keeping it are different events, and
[being crawled is not being indexed](/en/blog/crawled-is-not-indexed).
Canonicalization is the decision, inside that second event, about *which* URL
gets kept. A tag cannot stand in for a difference in the content.

## The short version

Inspect the indexed URL, read the Google-selected canonical, and judge that URL
on its own merits. If it is a fine page to land on, the tag did not fail and
there is nothing to fix. If it is not, redirect, or make the pages genuinely
different. Adding another canonical tag to a group that already disagrees with
you is sending the same hint twice.

## Frequently asked questions

:::faq
### Why does Search Console show a different canonical than my tag?
Because the tag is a hint. Google’s documentation says it may choose a different
page than you do, and URL Inspection says there is no guarantee it will honour
the URL you declared. The status “Duplicate, Google chose different canonical
than user” is that outcome, named.

### Should I add a self-referencing canonical to every page?
Google lists it as a best practice, not a requirement. It will pick a canonical
without one. On a unique page the tag is harmless. On a page that is
substantially the same as another, it is a signal Google can still ignore.

### Can I use robots.txt or noindex instead of a canonical?
Not for this. robots.txt can leave the URL indexed without its content, and
`noindex` removes the page from Search rather than pointing Google at the version
you prefer. Google’s best practices say not to use either for the job.

### How long does it take after I change a canonical?
There is no published time for the tag itself. Once you have made the *content*
different enough to split a group, Google says it may still hold the pages
together for up to two weeks. And you will not see the result in a live test:
only the indexed version reports the Google-selected canonical.

### Does a sitemap set the canonical?
It is a weak signal. Sitemap URLs are suggested as canonicals; Google still
decides which pages are duplicates based on how similar the content is. A sitemap
entry that contradicts the `rel="canonical"` on the same page is a conflicting
answer, and Google asks you not to send one.
:::

## Sources

- [What is canonicalization](https://developers.google.com/search/docs/crawling-indexing/canonicalization), “a hint, not a rule”; how grouping and selection work; the canonical as the main source for quality evaluation
- [How to specify a canonical URL](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls), signal strength, the methods being optional, the HTTPS and `hreflang` preferences, and what not to use instead
- [Fix canonicalization issues](https://developers.google.com/search/docs/crawling-indexing/canonicalization-troubleshooting), why Google picks a different canonical, and the two weeks a re-evaluation can take
- [Page indexing report](https://support.google.com/webmasters/answer/7440203), the two duplicate statuses
- [URL Inspection tool](https://support.google.com/webmasters/answer/9012289), user-declared versus Google-selected canonical, and why the live test cannot predict it
- [JavaScript SEO basics](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics), do not change the canonical in JavaScript
- [Latest documentation updates](https://developers.google.com/search/updates), 17 December 2025 and 10 July 2026
