SEO
hreflang: when your site exists in more than one language
As soon as a page exists in more than one language, a problem arises that cannot be solved without a technical declaration: how is a search engine supposed to know that the German and the English version are the same page — and not two competing pieces of content?
4 min read
By Timo Wessels Published
What this is about
As soon as a page exists in more than one language, a problem arises that cannot be solved without a technical declaration: how is a search engine supposed to know that the German and the English version are the same page — and not two competing pieces of content?
That is what hreflang is for. It is a line in the page head that states, for every language version, at which address it lives and for which language and region it is meant.
If you only have one language, you can stop reading here. The finding does not concern you.
Why it matters
The rule almost everything hinges on is reciprocity: every language version has to name all the others — itself included. If page A names page B as an alternative, but page B does not name page A, the declaration is ignored completely.
The tricky part: read from each single page, the markup looks completely correct. The error only exists in the relationship between the pages. That is why it survives for years in many projects.
What happens when hreflang is missing or ignored: search engines serve users the wrong language version. A German searcher lands on the English page even though the German one exists. Or the two versions compete with each other, and neither ranks properly.
The second most common error is invalid language and region codes. de-DE is correct, de_DE with an underscore is not. de-AT means German in Austria; at on its own is not a valid language code. And x-default is often missing entirely — that is the fallback declaration for everyone whose language is not named anywhere.
Beside the markup there is the question of the address structure. Three variants are common, and they are not equally good:
A separate country domain (clientdomain.de) is the strongest geotargeting signal and the right choice for clients who serve exactly one market. Subdirectories (clientdomain.de/en/) bundle authority on one domain and are the easiest to maintain — that is the normal case for multilingual websites. Subdomains (en.clientdomain.de) are to be avoided: they have the drawbacks of the other two variants and hardly any of their advantages.
For the German-speaking region there is one practical particularity: if the same German text is to serve Germany, Austria and Switzerland, then besides de-DE, de-AT and de-CH a general de belongs there as a catch-all.
How to check it yourself
Open the source of the German page (Ctrl+U) and search for hreflang. Note all addresses named there. Then open each of those addresses and do the same. In the end every page has to name every other one and itself.
It is tedious, but done in a few minutes for three to five language versions — and it is the only test that actually checks reciprocity.
Pay attention to how the codes are written: hyphen, not underscore. Lowercase language code, uppercase region code (de-CH, not DE-ch).
Google Search Console no longer has an hreflang report of its own. What you can see there, though: if many addresses under “Pages” are excluded as “Alternate page with proper canonical tag” although they are meant to be independent language versions, something is wrong.
And the practical test: search Google for a term from your English page and check which version is served.
What to do if it is missing
In WordPress a multilingual plugin takes care of this. If one is running and the markup is still incomplete, that is usually because individual pages have no translation link — then the counter-reference is missing for exactly those pages.
So do not check the plugin, check the links: every page has to be assigned to its translation in the backend.
Add x-default for the version on which someone should land whose language you do not offer.
Make sure hreflang and canonical say the same thing. An English page whose canonical points to the German one takes itself out of the index — then even the best hreflang markup does not help.
And if you are still planning: choose subdirectories, unless there is a concrete reason for separate country domains. Subdomains are the road you regret later.
Sources
- Every language version must reference all others including itself; format
<link rel="alternate" hreflang="de" href="...">in the head; x-default as fallback; an incomplete matrix as the most common error; faulty or missing hreflang markup leads search engines to serve the wrong language version -- @ctx:atlas-seo-technical-audit@1 - ccTLD as the strongest geotargeting signal for single-market clients; subdirectories bundle authority and are the easiest to maintain; actively avoid subdomains; parameters not recommended; hreflang is the primary signal regardless of the structure; DACH targeting with a de catch-all plus de-AT, de-CH, de-DE; bidirectional annotation per URL via head, sitemap or HTTP header -- @ctx:atlas-seo-practice-2026@3
- Set hreflang tags if multilingual -- @ctx:projects-websites-dhs-cpt-checklisten-technisches-seo-content@2