hreflang is an annotation by which a site tells search engines which language or regional versions of a page exist and which is intended for which audience. It sits either in the page head, in the sitemap, or in the HTTP header — which route is chosen is a technical decision without substantive consequence, as long as it stays consistent.
The problem it solves
Two versions of the same page in different languages are, to a search engine, initially two pages with very similar structure. Without a signal it may treat them as duplicates and drop one from the index. hreflang removes that ambiguity: it declares that these are variants of the same thing for different audiences. The second purpose is serving — the right version should be shown to the right audience.
Reciprocity is mandatory
The most important rule is that hreflang must be mutual. If page A points to page B as a language variant, B must point back to A. Without the return reference the annotation is generally ignored — not partly, but entirely. Each page must also list itself. That self-reference is frequently forgotten and is one of the most common reasons an otherwise correct annotation has no effect.
What x-default does
The value x-default marks the version to be served when none of the annotated languages fits the user. It is not mandatory but sensible in almost every case: without it, the search engine decides for itself which variant a user from an uncovered language area sees. Usually x-default points at the English version or at a language selection page.
The most common errors
Four errors dominate. First, missing reciprocity, as described above. Second, references to pages that no longer exist or carry noindex — a page annotated as an alternative must be reachable and indexable. Third, wrong language codes: the established language and region codes apply, and an invented or transposed combination is ignored. And fourth, mixing it up with the canonical: every language version must canonicalise to itself, not to the main language.
Honesty beats completeness
A common misconception is that a site should advertise as many language versions as possible. The opposite is right: hreflang may only name versions that genuinely exist in that language. Annotating an automatically translated or non-existent variant does more harm than good. Where content exists in only one language, it is correct and unproblematic to annotate only that one.
Practical consequence
Before every deployment an automated check pays off: does every annotated alternative exist, is it indexable, does it point back, and does the page’s canonical match its own URL? Those four questions cover most of the hreflang errors that later show up in Search Console.
