Comparisons
Hreflang vs Canonical: Which to Use for Language Variants
They look similar and do opposite things. Canonical says "index that one instead". Hreflang says "index all of these, and show the right one to each person".
Run a fresh DomainLens audit and use the report as your priority list.
The opposite instructions
A canonical tag consolidates: it tells Google that several URLs are the same page and only one should be indexed. Hreflang annotations differentiate: they tell Google that several URLs are equivalent versions for different audiences, and all of them should be indexed.
That is why the most damaging mistake in multilingual SEO is using canonical where hreflang belongs. Canonicalising your German page to the English one asks Google to drop the German page — which it does, and then the German audience sees the English version.
| Situation | Use | Result |
|---|---|---|
| Same content, different languages | hreflang | All indexed, right one served |
| Same content, same language, different URL | canonical | One indexed |
| Same language, different region | hreflang with region codes | All indexed |
| Parameter variant of one page | canonical | One indexed |
| Translated page canonicalised to original | A mistake | Translation dropped |
They work together, not instead of each other
The correct multilingual setup uses both. Each language version is canonical to itself, and each lists all the versions as hreflang alternates. Canonical resolves duplication within a language; hreflang connects across languages.
Getting this right is mostly a matter of remembering that the canonical is per-page and the hreflang set is shared.
<!-- CORRECT — on the German page -->
<link rel="canonical" href="https://example.com/de/page">
<link rel="alternate" hreflang="en" href="https://example.com/page">
<link rel="alternate" hreflang="de" href="https://example.com/de/page">
<link rel="alternate" hreflang="x-default" href="https://example.com/page">
<!-- WRONG — asks Google to drop the German page -->
<link rel="canonical" href="https://example.com/page">
Same language, different regions
English for the UK and English for the US are genuinely near-duplicates, which is where the two mechanisms feel like they overlap. Hreflang is still correct: use en-gb and en-us so each region gets its own page, with prices and spelling that suit it.
Canonicalising one to the other means only one is indexed and one audience always sees the wrong prices. If the pages are truly identical, do not publish two — that is the case where a single page with hreflang="en" is the honest answer.
The untranslated-page problem
Most multilingual sites are partially translated, and the correct handling is often neither tool at full strength. A locale URL serving the original language because no translation exists is a genuine duplicate — canonicalise it to the original and leave it out of the hreflang set, so you are not advertising a version that does not exist. Annotate only the languages that genuinely have their own content. See hreflang tags for the syntax and canonical tag problems for when the canonical is ignored.
How DomainLens contributes
DomainLens reports the canonical and the hreflang annotations a page serves together, which is where the contradiction shows: a page declaring alternates while canonicalising to another language is telling Google two opposite things. See the international SEO checklist for the wider setup.
- Should translated pages be canonical to the original?
- No. That asks Google to drop the translation. Each version should be canonical to itself and list the others as hreflang alternates.
- Do I need hreflang if I only have one language?
- No. There is nothing to annotate, and a single-entry hreflang set tells Google nothing it cannot already see.
- Is duplicate content across languages a problem?
- No. Google does not treat translations as duplicates. The problem is only when you tell it to, by canonicalising them together.
- What about identical English pages for the UK and US?
- Use hreflang with en-gb and en-us if the pages genuinely differ. If they are identical, publish one page rather than two.