hreflang or canonical.
hreflang declares the language versions of a page, canonical picks the preferred address for the same content; they are not rivals and one cannot stand in for the other.
The two tags are often confused because both say “there is another address related to this page”. But what they say is the opposite of one another: hreflang forms a set among equals, while canonical declares a preference and drops the rest.
Why they work together
On a multilingual site each language version is a separate page: different text, different audience, different search queries. They are not copies. That is why each points canonically to ITSELF — “my preferred address is me” — and additionally declares its siblings with an hreflang set.
These two declarations are true at the same time and do not break each other. Breakage begins only when one points canonically to the other: at that moment the engine treats the two pages as copies, drops one, and every query for the dropped language disappears. The full list of mistakes is written separately.
What canonical is actually for
A canonical address is mainly for cases where the same content is reachable from different addresses: forms with and without a trailing slash, variants carrying a query string, print versions. These really are copies, and choosing one is right.
Language versions do not fit that definition. Two pages describing the same product in two languages are not two addresses for the same content but two separate pieces of content. The definition of a canonical address and the definition of hreflang are written separately.
How it is done on this site
Every generated page points canonically to itself, and that is verified by measurement — not a single page deviates. The hreflang set, meanwhile, follows how many languages the page actually exists in: a page present in three languages carries four links, one that exists only in Turkish carries two. In the second case the set is not untruthful but complete, because hreflang cannot declare a translation that does not exist.
Criterion
- What it says — hreflang: “This page has versions in these languages” · canonical: “This is the preferred address for this content”
- Relationship between pages — hreflang: Equal — none is a copy of another · canonical: Hierarchical — one is preferred, the other is dropped
- Effect on the index — hreflang: All enter the index, the right language is shown · canonical: Only the preferred address enters the index
- Reciprocity — hreflang: Required — a one-way declaration is ignored · canonical: Not required — it is one-way
- Self-reference — hreflang: The set must include itself · canonical: Every page can and should point canonically to itself
- Used together — hreflang: Every language version points canonically to ITSELF · canonical: Language versions do NOT point canonically to each other
- Most common mistake — hreflang: Reciprocity breaking · canonical: Declaring translations copies of one another
FREQUENTLY ASKED QUESTIONS
Should translations point canonically to each other?
No, absolutely not. This is the most destructive multilingual mistake: the translations are declared copies of one another, only one enters the index, and the other languages disappear from search. Every language version points canonically to itself.
Does using both create a contradiction?
It does not; in fact this is the correct arrangement. Every page points canonically to itself and at the same time declares the other languages with an hreflang set. A contradiction arises only if a page points canonically to another language.
Can you run a multilingual site without hreflang?
You can, but the engine then guesses which version to show to whom. hreflang turns that guess into a declaration; the risk of showing a page in the wrong language drops markedly.