Conflicting Hreflang and Canonical

No Comments
Conflicting hreflang and canonical
TL;DR: hreflang says "these pages are equal alternates, index them all." A canonical pointing somewhere else says "do not index me, index that one." Put both on the same page and you have told Google two opposite things at once. Google resolves the standoff by ignoring your hreflang, and the wrong language version starts ranking in the wrong country. The fix: every hreflang target carries a self-referencing canonical, and hreflang only ever points at canonical URLs.
The conflict
hreflang says index all versions, canonical says index one
Who wins
Usually the canonical; the hreflang gets dropped
Symptom
Wrong language version ranking in local SERPs
The rule
Self-referencing canonical on every hreflang target
Detection
Screaming Frog hreflang filters, GSC canonical reports

What this conflict actually is

hreflang and rel canonical are both indexing signals, and they answer different questions. hreflang answers "which language and regional versions of this content exist, and who should see which one?" The canonical answers "of a set of duplicate or near-duplicate URLs, which single one should be indexed?"

They cooperate fine until someone points a canonical from one language version to another. The classic case: the French page at /fr/pricing/ declares hreflang alternates for English and French, but its canonical tag points at /en/pricing/. Now the page is simultaneously saying "I am the French alternate, index me for French users" and "I am a duplicate of the English page, do not index me at all."

Google's documentation and years of statements from John Mueller are consistent on how this resolves: hreflang annotations are processed on canonical, indexed URLs. A page that canonicalizes away is not the canonical, so its hreflang annotations get thrown out, and because that page was part of everyone else's annotation set, the whole cluster degrades. One bad canonical can quietly poison the hreflang for every locale.

This usually is not malice or even a decision anyone remembers making. It is an SEO plugin defaulting all canonicals to the "main" language, a dev copying the English template, or a CMS that treats translations as duplicates. I have seen a five-figure-page international site where every single non-English canonical pointed at English because of one Yoast setting. Nobody noticed for a year; Spain was being served English pages the whole time.

CORRECT: hreflang between pages, canonical to self /en/pricing/ canonical: /en/pricing/ self, correct /fr/pricing/ canonical: /fr/pricing/ self, correct hreflang fr hreflang en Both indexed. Google swaps the right URL into each local SERP.

CONFLICT: canonical crosses the language boundary /en/pricing/ canonical: /en/pricing/ indexed /fr/pricing/ canonical: /en/pricing/ canonicalized away, hreflang dropped "index the English page instead of me" Result: French page drops out, French users get the English URL, the cluster is broken for every locale.

Why Google reacts the way it does

The mechanics matter because they explain the weird symptoms. Google builds hreflang clusters from annotations found on indexed canonical URLs. When your French page canonicalizes to English, three things happen in sequence:

First, Google eventually honors the canonical (it is also just a hint, but a strong one) and drops the French URL from the index in favor of the English one. Second, the hreflang annotations on the French page stop counting, since the page is no longer a canonical. Third, the annotations on your other pages that point at the French URL now target a non-canonical URL, which makes them invalid too. The English and German pages are pointing at a ghost.

The failure is gradual and partial, which makes it a miserable thing to debug. Some queries still show correct swapping for weeks because the cluster is reprocessed page by page as Google recrawls. Traffic in one country erodes over a quarter rather than falling off a cliff, and it is damn hard to spot in aggregate dashboards. Country-segmented reporting is what exposes it.

Scenario reference: which combinations work

SetupWhat Google doesVerdict
Each language version self-canonicalizes, hreflang reciprocal across versionsAll versions indexed, correct URL swapped per marketCorrect
Translated page canonicalizes to another language versionTranslation deindexed, its hreflang ignored, cluster degradesBroken
hreflang entries point at parameter or tracking URLs that canonicalize to clean URLsTargets are non-canonical, annotations droppedBroken
Parameter variants canonicalize to the clean URL, and hreflang lives on (and points at) clean URLs onlyDuplicates consolidate, cluster stays intactCorrect
Identical same-language regional pages (en-US and en-GB) with self-canonicals and hreflangUsually works, but Google may fold true duplicates and choose its own canonical anywayFragile, differentiate the content

How to detect it

Screaming Frog. Enable hreflang extraction, crawl, then open the hreflang tab and look at the "Non-Canonical Return Links" and "Canonical Errors" style filters (naming varies slightly by version). These list every annotation pointing at a URL whose canonical is elsewhere, and every page whose own canonical disagrees with its hreflang membership. Sitebulb flags the same pattern as a hint with the affected URL pairs.

Search Console. Check the Pages report for "Duplicate, Google chose different canonical than user" and "Alternate page with proper canonical tag" entries on URLs that should be independently indexed language versions. A translated page showing up there is the conflict in action. The URL Inspection tool shows the user-declared versus Google-selected canonical for any single URL, which is the fastest way to confirm a suspicion.

Country-level SERP checks. Run your key queries through a location-set VPN or a rank tracker with per-country tracking. Wrong-language URLs ranking in a market you have a local page for is the end-user symptom of this whole mess.

How to fix it, step by step

1. Export every URL in the multilingual set with its canonical and its hreflang annotations (Screaming Frog does this in one export).

2. Fix canonicals first: every language and regional version gets a self-referencing canonical. Hunt down the source, usually a plugin setting, a hardcoded template value, or a CMS translation module treating locales as duplicates.

3. Then align hreflang: every annotation must target the clean, 200-status, self-canonical URL of each version. No parameters, no redirects.

4. If two versions genuinely are identical and you only want one indexed, remove the duplicate from the hreflang cluster entirely and canonicalize it. A page is either an alternate or a duplicate, never both.

5. Resubmit sitemaps, then let Google recrawl the whole cluster before judging. Expect weeks, not days, for full reprocessing. Track recovery by country in the performance report.

DO
  • Give every language version a self-referencing canonical
  • Point hreflang only at canonical, indexable, 200-status URLs
  • Audit canonicals and hreflang together, they are one system
  • Use URL Inspection to compare declared versus Google-selected canonical
  • Differentiate same-language regional pages (currency, spelling, contact details)
DON'T
  • Canonicalize translations to the "main" language version
  • Trust plugin defaults on international sites without checking output
  • Put a URL in an hreflang cluster and canonicalize it away at the same time
  • Point hreflang at redirecting or parameterized URLs
  • Judge a fix before Google has recrawled the entire cluster

FAQ

Which signal wins when hreflang and canonical conflict?
In practice the canonical wins: the page that canonicalizes away tends to drop from the index and its hreflang annotations are discarded. But both are hints, so Google can also ignore your canonical if other signals contradict it, which makes the behavior inconsistent across a site. Do not rely on either outcome, remove the conflict.
Can I use a canonical to point my French page at my English page if the French one is a thin translation?
You can, but then take the French URL out of the hreflang cluster, because it is no longer an alternate, it is a declared duplicate. Better options: improve the translation so it deserves indexing, or noindex it until it is ready. Half-in, half-out is the one state that breaks everything.
My en-US and en-GB pages are nearly identical. Is that a canonical conflict?
Not by itself, but it is the highest-risk configuration. With true duplicates Google may pick one as canonical on its own, which then invalidates the hreflang pair exactly as if you had set a cross-canonical yourself. Give the pages real regional differences: currency, spelling, phone numbers, shipping, legal text. hreflang between same-language duplicates is Google's own recommended use for it, but it works far more reliably when the pages are distinguishable.
How long does recovery take after fixing the conflict?
Google needs to recrawl every page in the cluster and rebuild the alternate relationships, so figure two to eight weeks depending on crawl frequency and site size. Fresh sitemaps with updated lastmod dates and internal links to the affected pages speed it up. Watch country-filtered impressions in Search Console for the wrong-language URLs being replaced by the right ones.
Wrong language ranking in your key markets?

Canonical and hreflang conflicts are among the most common findings in my international audits, and among the most fixable. I map every cluster, flag every contradiction, and hand your team an exact fix list.

Get an Advanced SEO Audit

Claude Vincent is a technical SEO consultant focused on crawlability, rendering, and AI-search visibility. He writes the field guides and case studies at SEO ProCheck, with a bias toward the durable, unglamorous work that decides whether search engines and AI answer engines can actually read and cite a site.

About SEO ProCheck

Technical SEO consulting and GEO strategy with 20 years of enterprise experience. Case studies, resources, and tools for search and AI visibility.

Work With Me

Technical SEO audits, GEO strategy, site migrations, and international SEO. Hourly consulting for teams who need hands-on support, not just reports.

Subscribe to our newsletter!

More from our blog