Skip to content
LET'S TALK
EN▾
In a hall of mirrors a photographer carefully shoots a woman's reflection while the real woman stands behind him, raising an eyebrow
Websites

Canonical Is Set, but Google Chose a Different Page: 10 Reasons

The canonical tag is there, your plugin shows green, and Google still indexes a different URL. Here are ten reasons why and the order in which to check them in Search Console.

28.10.2026
Updated 28.10.2026
20 min read

You opened the page source, found <link rel="canonical">, and your SEO plugin shows a green tick. Yet in Search Console, among the pages that aren’t indexed, there’s a line saying “Duplicate, Google chose different canonical than user”. In other words, you named the main URL, and Google looked, thought it over and picked another one.

The first reaction is “Google is glitching”, the second is “I need one more plugin”. Neither helps. Google says plainly that a canonical is “a hint, not a rule” for it (Google Search Central). It weighs that hint together with the other signals on your site, and if those signals argue with each other, it makes the call itself.

And a site sends a lot of signals: language versions, catalogue filters, UTM tags, template pages, JavaScript. Each of them can quietly tell Google something different from your tag. Below are ten such causes and the order in which to check them. The running example is made up: an online shop for bicycles and parts, with filters and two language versions.

1. What a canonical page is and why it causes so much confusion

When the same page is available at several URLs, Google groups them and picks one to show in search. That URL is called canonical, and the process itself is canonicalization. The other URLs in the group count as duplicates: Google crawls them less often and usually doesn’t show them in results (Google Search Central).

A mountain bike category can easily live at five URLs:

https://bike-shop.example/ua/mtb/
https://bike-shop.example/ua/mtb
http://bike-shop.example/ua/mtb/
https://bike-shop.example/ua/mtb/?utm_source=facebook
https://bike-shop.example/ua/mtb/?orderby=price

For a person, that’s one page. For a search engine, it’s five URLs. To point to the main one, you put this tag in the <head>:

<link rel="canonical" href="https://bike-shop.example/ua/mtb/" />

Some important details from Google’s documentation: the tag only counts in the <head>, the URL in it must be absolute (with https:// and the domain), and for PDFs and other non-HTML files you can send the canonical as an HTTP header (Google Search Central).

Now about signal strength. Google ranks the ways to specify a canonical URL itself:

Signal Strength according to Google When it fits
Permanent redirect (301, 308) Strong People no longer need the duplicate, for example http → https
rel="canonical" in HTML or a header Strong The duplicate has to stay (filter, UTM, print version)
URL in the XML sitemap Weak Extra confirmation for all canonical pages

The signals reinforce each other. But if the redirect points to one place, the tag to another and the sitemap mentions a third, Google will settle the dispute on its own. On top of that, Google prefers the HTTPS version over HTTP and URLs that are part of reciprocal hreflang clusters (Google Search Central).

That’s where the confusion comes from: the plugin checks whether the tag exists, while Google checks whether the whole site says the same thing.

2. 10 reasons Google ignores your canonical

1. To Google, the pages aren’t similar enough

A canonical only makes sense between real duplicates: pages with the same or very similar main content. If the content differs noticeably, Google may decide it’s looking at two separate pages and ignore the tag.

In the bike shop, the typical situation goes like this: the “Mountain bikes” category has 120 models, while the page with the “brand: Trek” filter shows 14. Header, menu and design are the same, so to the owner it feels like a variation of one page. But the product list, names, prices and links are different. For Google, that’s already a different document, and a canonical from “Trek” to the general category looks like a mistake.

What to do: if people really search for “Trek mountain bikes”, give that page its own canonical, heading and text. If not, block such URLs from crawling (reason 4) instead of “gluing” them together with a tag.

2. Internal links say one thing, the tag says another

A canonical doesn’t work in isolation from the rest of the site. If the tag points to /ua/mtb/, but the main menu links to /ua/mtb/?orderby=popular, the breadcrumbs to /ua/mtb, and the sitemap lists the http:// version, Google sees four different opinions about one page.

This happens most often after a redesign, a change of URL structure or a switch of SEO plugin: the tag was updated, but links in the menu, banners and old articles stayed as they were.

What to do: run a crawler over the site (Screaming Frog, Sitebulb or similar) and see which URLs your internal links point to. The rule is simple: every link inside the site points to the canonical URL, without parameters, with the same trailing slash and the same protocol. If the site has moved recently, it’s also worth checking the redirects from the old URLs against the new ones.

3. Canonical argues with hreflang

This is a large category of errors of its own on multilingual sites. A typical scenario: the Ukrainian page has a canonical pointing to the English one, because “English is the main version”. Or all language versions point their canonical to the default version.

The problem is that different languages aren’t duplicates for Google. Language versions only count as duplicates when the main content stays in the same language and only the menu and footer are translated (Google Search Central). When hreflang says “these are separate versions for different languages” and the canonical says “no, this one is the main one”, the signals contradict each other, and some of them will be ignored.

The correct setup looks like this:

  • every language version has a canonical pointing to itself;
  • hreflang in every version lists all language versions, including itself;
  • the links are reciprocal: if page A points to B, B must point back to A, otherwise Google ignores those tags (Google Search Central).

That’s how it works on our own site, grandma.agency. It has three languages: Ukrainian with the /ua/ prefix, English without a prefix (also the x-default) and German with /de/. Here’s what the Ukrainian version of one of our articles returns:

<link rel="canonical" href="https://grandma.agency/ua/blog/yak-pryskoryty-sajt-na-wordpress/">
<link rel="alternate" hreflang="en" href="https://grandma.agency/blog/how-to-speed-up-wordpress-site/">
<link rel="alternate" hreflang="uk" href="https://grandma.agency/ua/blog/yak-pryskoryty-sajt-na-wordpress/">
<link rel="alternate" hreflang="de" href="https://grandma.agency/de/blog/wordpress-website-schneller-machen/">
<link rel="alternate" hreflang="x-default" href="https://grandma.agency/blog/how-to-speed-up-wordpress-site/">

The canonical on the Ukrainian page points to the Ukrainian page, not to the English one, even though English is the x-default. You can check it yourself: curl -s <URL> | grep -E 'canonical|hreflang'. For why hreflang often fails too, see our companion article on hreflang.

4. Filters and URL parameters multiply URLs faster than you can count them

Five filters with ten values each, three sorting options and pagination give a shop thousands of URL combinations. For example:

/ua/mtb/?brand=trek
/ua/mtb/?brand=trek&wheel=29
/ua/mtb/?wheel=29&brand=trek
/ua/mtb/?brand=trek&wheel=29&orderby=price&page=3

The two middle URLs show the same products, but to a crawler they’re different URLs. You used to be able to handle part of this in Search Console with the “URL Parameters” tool, but Google switched it off back in 2022 (Google Search Central Blog).

What Google recommends for faceted navigation now (Google Search Central):

  • if filter URLs aren’t needed in search, the most reliable option is to block them from crawling in robots.txt;
  • a canonical from a filter to the general category may reduce crawling of such URLs over time, but in the long run it’s less effective than blocking;
  • keep the filter order in URLs consistent and don’t allow duplicate parameters;
  • for combinations with no products at all, return a 404 rather than a redirect to the general page.

A separate word on pagination, because this mistake is a classic: catalogue pages 2, 3, 4 get a canonical pointing to page one. Google asks you not to do that: every paginated page has its own canonical, because it shows different products. And Google no longer uses the rel="next" and rel="prev" tags (Google Search Central).

5. The pages aren’t copies, but they’re very similar

These are “soft” duplicates: pages built on one template where one or two words change. “Bike delivery to Lviv”, “Bike delivery to Dnipro”, “Bike delivery to Odesa”, all with the same text and only the city name swapped. Or “product + colour” pages that differ by one line in the specifications.

Their main content is almost identical, so Google groups them into a cluster and decides for itself which one to show. A canonical doesn’t settle anything here.

Google writes that pages get split out of a cluster faster when the difference between them is clear and substantial, and that re-evaluation can take up to two weeks (Google Search Central). For a city page, that means real data for that particular city: delivery times, pickup point addresses, local conditions. If there’s no such difference, it’s more honest to keep one page.

6. The canonical points to a page that is itself broken

A trivial but very common mistake. The tag points to a URL that:

  • redirects somewhere else;
  • returns a 404 or 410;
  • is blocked with a noindex tag;
  • is blocked in robots.txt;
  • lives on http://, although the site moved to https:// long ago.

For Google, that’s a contradiction: you’re asking it to treat as the main page a page you yourself keep out of search, or one that no longer exists. In that situation, it looks for another candidate.

A separate note on noindex: Google advises against using it to choose a canonical page within one site, because noindex removes the page from search completely. In the same way, don’t block duplicates in robots.txt hoping Google will pass the weight to the main page: it won’t crawl a blocked URL, so it won’t see either the canonical or the content on it, and it may still index the URL without its content (Google Search Central).

These “broken” canonicals pile up after site moves and product removals: the model page was deleted, but its colour variants still point to it.

7. The XML sitemap contradicts the tag

Google says it directly: don’t specify different canonical URLs for the same page using different methods, for example one in the sitemap and another in rel="canonical" (Google Search Central). It treats every URL in the sitemap as a suggested canonical.

If an automatic generator has put filters, sorting, old http:// URLs or pages with a canonical to another URL into the sitemap, you’re the one suggesting the wrong option to Google.

What to check in the sitemap:

  1. Every URL returns a 200 code, with no redirects.
  2. Every URL has a canonical pointing to itself.
  3. No parameters, UTM tags, sorting or internal search.
  4. No pages with noindex.
  5. Protocol, domain and trailing slash match what’s in the canonical.

8. The canonical only appears after JavaScript runs

On sites built with React or Vue, in SPAs and headless setups, the canonical tag is often added or changed by JavaScript in the browser. Google can pick up a canonical injected via JavaScript during rendering, but states plainly that it doesn’t recommend this method. If there’s no other way, the tag must be the only one on the page: several or conflicting canonicals can lead to unpredictable results. And if the HTML already has a canonical, JavaScript shouldn’t change it (Google Search Central).

A typical trap: the template returns HTML with a canonical pointing to the homepage, and a script then swaps it for the correct URL.

How to check: compare the source HTML (curl -s <URL> | grep canonical or “View page source” in your browser) with what Google sees after rendering. You’ll find the latter in the URL Inspection tool in Search Console via “Test live URL” and “View tested page”. If there are two tags or they differ, you’ve found the problem.

9. Mass page generation creates duplicate clusters

Hundreds of “service + city” or “product + brand” pages with AI-written texts are formally unique, but their structure and facts are the same. This is reason 5 on an industrial scale: Google bundles them into clusters, decides for itself which one to show, and leaves some unindexed. Google’s spam policies separately describe mass-producing pages to manipulate rankings without helping people, and specify that how the pages are made doesn’t matter, whether by people or by automation (Google Search Central).

So the problem isn’t AI text, it’s that the pages have nothing to distinguish them. Before the two hundredth page, it’s worth asking: what does this one have that the previous ones don’t?

10. Google simply thinks another page is better

Sometimes everything is technically clean, and Google still picks a different URL. Its documentation admits it honestly: even if you’ve explicitly specified a canonical page, Google may choose another one, and it suggests checking whether that one serves people better (Google Search Central).

What can outweigh the tag, according to Google’s documentation:

  • HTTPS. Google prefers the HTTPS version if there are no problems with it. But an invalid certificate or redirects from HTTPS to HTTP make it lean very strongly towards HTTP.
  • hreflang clusters. Google prefers URLs that are part of reciprocal hreflang clusters.
  • Copies elsewhere. If your text is published on another site (a partner, an aggregator, a copy and paste), Google may choose that site’s URL as canonical. For partners, Google advises not to rely on a canonical but to ask them to block the copy from indexing; for unauthorised copies, there’s the DMCA complaint.
  • Server misconfiguration or a hack. Some hosting errors, or redirects and canonicals injected by an attacker, lead to a URL on another domain becoming canonical.

3. How to check whether Google accepted your canonical

Everything you need is in Google Search Console, for free.

Step 1. The site-wide report. In the left menu, open Indexing → Pages. Below the chart there’s a table with the reasons why pages aren’t indexed. Three of them concern canonicals:

Status in the report What it means Do you need to act
Alternate page with proper canonical tag The page correctly points to the canonical, and that one is indexed No, everything works as intended
Duplicate without user-selected canonical The page is a duplicate, but no canonical is set on it, so Google chose on its own Yes, if Google’s choice doesn’t suit you: set a canonical
Duplicate, Google chose different canonical than user You set a canonical, but Google thinks a different URL is better Yes, look for the cause in the list above

The statuses are described in the Search Console help article on the Page indexing report. If your interface is in another language, the wording may differ slightly, so go by the meaning or switch the interface language to English.

Step 2. A single URL. Paste the URL into the search bar at the top of Search Console: that’s the URL Inspection tool. The page indexing section has two fields:

  • “User-declared canonical”: what you specified;
  • “Google-selected canonical”: what Google chose.

If they don’t match, Google hasn’t accepted your canonical. Two details from the help article: the Google-selected value can lag behind the index by a few hours, and the live test (“Test live URL”) only shows the canonical you declared. Google makes its choice during indexing, and the test can’t predict whether the tested version will become canonical.

Step 3. After the fix. For your most important pages, click “Request indexing”. This button has quotas, so don’t press it for hundreds of URLs, and remember that it doesn’t guarantee the page gets into the index. Google can keep pages in a duplicate cluster for up to two weeks, so don’t check the result the next morning.

What to check along the way: sitemap, internal links, hreflang, robots.txt, redirects, parameters. Which of these you can realistically check yourself, we covered in the article “SEO audit: what to check yourself and what to outsource”.

Canonical problems go unnoticed for a long time: enquiries keep coming in, while search quietly shows a filter page instead of the category. That’s why it’s worth opening the report regularly, not only once traffic has already dropped.

4. Conclusion

A canonical stopped being a “make this the main page” switch long ago. It’s one of the hints Google weighs together with redirects, internal links, the sitemap, hreflang, protocol and the content of the pages themselves. When all of them say the same thing, Google almost always agrees. When they argue, it decides on its own.

So instead of fighting the tag, look for whatever contradicts it: a menu with parameters, a sitemap with old URLs, a language version with a canonical to another language, pages that have nothing to distinguish them. This isn’t a job for one line in the <head>, it’s about technical order across the whole site, and it’s part of our SEO service. If your site is still being built, it’s cheaper to get these things right from the start during development.

If Search Console shows duplicates and you can’t tell where they come from, write to us. We’ll look at which signals are arguing with your canonical and tell you what can be fixed in the settings and what needs a developer.

5. FAQ

Yes, it's standard practice: a self-referencing canonical. Duplicates appear without you knowing, for example through UTM tags from ads or parameters added by third-party services. A tag on every page tells search engines in advance which URL is the main one.

6. Sources

  1. Google Search Central, What is canonicalization
  2. Google Search Central, How to specify a canonical URL (Consolidate duplicate URLs)
  3. Google Search Central, Troubleshooting canonicalization issues
  4. Google Search Central, Localized versions of your pages (hreflang)
  5. Google Search Central, Faceted navigation
  6. Google Search Central, Pagination in ecommerce
  7. Google Search Central, JavaScript SEO basics
  8. Google Search Central, Spam policies, scaled content abuse
  9. Google Search Central Blog, Retiring the URL Parameters tool
  10. Search Console Help, Page indexing report
  11. Search Console Help, URL Inspection tool

GOOGLE SEES THE WRONG THING?LET'S SORT IT OUT.

We'll check your site's technical SEO and tell you what to fix first and what can wait.