If you run a multilingual site, sooner or later you hit the hreflang canonical conflict. It is the single most common technical failure we find when auditing international sites, and it is sneaky: both tags look correct in isolation, every page validates, and yet Google quietly ignores your annotations and serves the wrong language to the wrong country. Or worse, it drops entire language versions from the index.
The frustrating part is that the fix is simple once you understand what each tag actually tells Google. This guide covers the mechanics, the golden rule for combining hreflang and canonical, the specific mistakes that break both, and a debugging workflow you can run this afternoon. We will use junto.fr's own French and English versions as a live worked example, because there is no better proof than tags you can inspect yourself.
What each tag does (and what it doesn't)
The conflict exists because hreflang and canonical answer two different questions, and site owners often use one to answer the other's question.
Hreflang: a serving-time signal
Hreflang tells Google: "these URLs are equivalents of each other in different languages or regions; show each user the one that matches their language and location." It is documented in Google's guide to localized versions.
Three things matter about how it works:
It is a signal, not a directive. Google treats hreflang annotations as strong hints and can ignore them when they contradict other signals.
It operates at serving time. Hreflang does not merge pages, pass authority between them, or boost rankings. It swaps the appropriate URL into the results a user sees.
It only works between indexed pages. This is the detail that causes almost every conflict. An hreflang annotation pointing to a URL that is not in Google's index points at nothing. Google cannot swap in a page it has decided not to index.
Canonical: an indexing decision
The canonical tag answers a different question: "of these duplicate or near-duplicate URLs, which one should be indexed?" Google's canonicalization documentation is explicit that only the canonical URL is surfaced in search; the others are folded into it.
That word "folded" is the whole problem. When page B declares page A as its canonical, and Google accepts that declaration, page B effectively leaves the index. Its signals are consolidated into A. It stops ranking on its own.
Now put the two together. Hreflang needs both pages alive in the index so it can swap between them. Canonical, used across those same pages, kills one of them. Point a canonical from your French page to your English page and you have not "consolidated" anything useful. You have told Google the French page should not exist, while simultaneously telling it, via hreflang, to serve that same French page to French users. Google resolves the contradiction by picking one signal, and it usually picks the canonical.
The golden rule for hreflang and canonical
Here is the rule that resolves the conflict, and it fits in two lines:
Every language version canonicalizes to itself. The French page's canonical points to the French page. The English page's canonical points to the English page.
Hreflang connects the equivalents. Each page in the cluster lists every language version, including itself.
Canonical operates within a language: it consolidates true duplicates of the same content, such as parameter variants, session IDs, or http/https and trailing-slash inconsistencies. Hreflang operates across languages: it connects pages that are equivalent in meaning but distinct in audience.
A translated page is not a duplicate. This is the mental model error underneath most broken setups. Someone notices the English and French pages "say the same thing," applies duplicate-content logic, and canonicalizes one to the other. But Google does not treat properly localized pages as duplicates in the first place. Different language, different audience, different indexable document. Each deserves its own canonical, pointing at itself.
A live example: junto.fr in French and English
Junto's site runs in French at junto.fr and in English under junto.fr/en, so we can use our own homepage pair as a worked example. Inspect the source of both pages and you will find exactly four relevant tags on each.
On the French homepage (junto.fr):
Canonical: https://junto.fr — self-referencing.
Hreflang fr: https://junto.fr — the page lists itself.
Hreflang en: https://junto.fr/en — the English equivalent.
Hreflang x-default: https://junto.fr — the fallback for users matching neither language.
On the English homepage (junto.fr/en):
Canonical: https://junto.fr/en — self-referencing again.
Hreflang en: https://junto.fr/en — itself.
Hreflang fr: https://junto.fr — the return link back to the French version.
Hreflang x-default: https://junto.fr — the same fallback, consistent across the cluster.
Notice the symmetry. Both pages describe the identical cluster: the same two language URLs, the same x-default, each with a self-canonical. Google can read either page and reconstruct the full picture, and the return links confirm the relationship from both sides. The x-default points to the French version because Junto is a French company and French is the sensible fallback for unmatched users; on an American company's site it would typically point to the English version. What matters is that every page in the cluster agrees on it.
This pattern scales without modification. A site with twelve languages carries thirteen hreflang lines per page (twelve languages plus x-default) and one self-canonical, and every page in the cluster carries the same set. Our international SEO guide covers how to structure the URLs themselves; the tag logic never changes.
The mistakes that break hreflang and canonical together
Four failure modes account for nearly every broken international setup we audit.
Canonicalizing across languages
The classic. The French page declares the English page as canonical, usually because a CMS or SEO plugin defaulted to the "primary" language, or because someone worried that translations count as duplicate content. The consequence is severe: if Google honors the canonical, the French page drops out of the index entirely. French users get served the English page or nothing. Every hreflang annotation pointing at the French URL now targets a non-indexed page and gets ignored, which can destabilize the rest of the cluster too.
Watch for the subtle variant: a migration or redesign resets canonicals to the default-language URL on every locale. One deploy, entire language versions gone. If your organic traffic from a specific country falls off a cliff after a release, check the canonicals first.
Hreflang pointing to redirected, broken, or noindexed URLs
Hreflang targets must be live, indexable, 200-status URLs. Annotations pointing at a redirect, a 404, or a noindexed page are wasted at best. In practice this happens through drift: a slug gets renamed in one language, the redirect gets put in place, and nobody updates the hreflang references on the twenty sibling pages that still point at the old URL. Redirects protect users and link equity, but hreflang does not follow them reliably. Update the annotations to the final URL every time a localized page moves.
Missing return links
Hreflang is reciprocal. If your English page lists the German version but the German page does not list the English one back, Google may disregard the annotation entirely, because a one-way claim of equivalence is exactly what a scraper or a misconfigured template would produce. Return links are the proof of a genuine relationship. This is also why hreflang breaks so often on sites where each language team manages its own templates: one team ships a change, the reciprocity silently dies.
Hreflang URLs that don't match the canonical form
Every hreflang annotation must reference the exact canonical form of the target URL: absolute, correct protocol, correct host, correct trailing slash. If your canonical says https://example.com/de/ and your hreflang says http://www.example.com/de, you are pointing Google at a URL that redirects or duplicates, and you are back in failure mode two. This gets worse with parameters: hreflang annotations on paginated or filtered URLs should reference clean canonical URLs, never parameter variants.
A fifth, smaller trap: invalid codes. The language must be ISO 639-1 and the optional region ISO 3166-1 Alpha-2. The famous one is en-UK, which is invalid; the United Kingdom is GB. An invalid code does not throw an error anywhere visible. The annotation is simply ignored.
How to debug a hreflang canonical conflict
When something looks wrong, resist the urge to eyeball individual pages. Work the cluster systematically.
Pick one symptomatic URL and reconstruct its full cluster. Pull its canonical and every hreflang annotation from the rendered HTML, not just the raw source, since some frameworks inject or overwrite tags client-side. If you also declare hreflang in your XML sitemap or HTTP headers, pull those too.
Verify every member of the cluster returns 200. Any redirect chain, 404, or soft 404 among the hreflang targets is a defect. Fix the annotation or the target, whichever is wrong.
Check every member self-canonicalizes. This is the single highest-yield check. Any page whose canonical points outside itself, especially to another language, is your likely culprit.
Verify reciprocity. Every page in the cluster must list every other page, with matching URLs. A crawler with an hreflang report does this at scale; for a spot check, compare the annotation sets on two sibling pages by hand. They should be identical.
Validate the codes. Scan for en-UK, bare region codes without a language, or copy-paste artifacts like duplicated entries with conflicting URLs for the same language.
Check for contradictions between implementation methods. If your sitemap says one thing and your HTML says another, Google is free to trust either. Pick one source of truth; on large sites the sitemap usually wins on maintainability.
Confirm what Google actually chose. In Search Console, run URL Inspection on the affected pages and compare the user-declared canonical against the Google-selected canonical. If Google selected a different-language URL as canonical, you have found your conflict. Then filter the Performance report by country and check whether the right URLs are earning the impressions in each market.
Budget for patience after the fix. Google has to recrawl every member of the cluster before annotations take effect, and on large sites that takes weeks, not days. Track recrawl progress rather than re-fixing things that are already fixed.
What a clean setup buys you at scale
Correct hreflang and canonical handling is not a rankings hack; it is the plumbing that lets your localized content compete at all. When we rebuilt the international SEO foundations for BMW Europe Moto, disciplined cluster hygiene across markets was part of what opened six new markets in SEO, generated over 55,000 organic visitors, and consolidated the site at a Domain Rating of 70. None of that happens if half the language versions are canonicalized into oblivion.
The tags are also only one layer. Content quality per locale, URL architecture, and market-specific keyword targeting decide whether the pages deserve to rank once Google can serve them correctly. Our guides to multilingual SEO and international SEO strategy cover those layers in depth.
Frequently asked questions
Can a canonical tag ever point to a page in another language?
Almost never. A translated or localized page should always self-canonicalize. The rare edge case is a page that is genuinely untranslated, where the "French" URL serves byte-identical English content. Even then, the better fix is to either translate the page or not publish the URL, rather than canonicalizing across languages and hoping Google interprets your intent.
My English pages for the US and UK are nearly identical. Do I still need hreflang?
Yes, and each still self-canonicalizes. Hreflang supports same-language regional targeting precisely for this case, so users in each country see the URL with the right currency, spelling, and contact details. If the pages are word-for-word identical, Google may fold them together anyway; the durable answer is to localize them meaningfully, not to fight the deduplication with tags.
Does hreflang pass link equity or improve rankings?
No. Hreflang swaps URLs at serving time; it does not consolidate signals or transfer authority between language versions. Each version ranks on its own merits, which is why thin machine-translated pages underperform even with technically perfect annotations.
Where should x-default point?
To the version you want shown to users who match none of your declared languages. That is usually your primary-market version or a language selector page. The only hard requirement is consistency: every page in the cluster must declare the same x-default.
Get your international setup audited
If your localized pages are being outranked by the wrong language version, or entire markets have gone quiet in Search Console, the hreflang canonical conflict is the first place to look, and it rarely travels alone. Talk to our team about an international technical audit, or see how our SEO agency builds multilingual sites that Google serves correctly in every market.

Founder and CEO of Junto
Founder & CEO of Junto, Étienne has been an entrepreneur and digital marketing consultant for over 15 years. An expert in Paid Media, SEO, Data, Automation, AI, Growth and Performance, he helps ambitious companies build high-impact growth strategies — generating lasting results and helping brands move forward in a constantly evolving digital environment.





