Two different problems get conflated: multilingual (same content, several languages) and multi-regional (targeting several countries, possibly in the same language). hreflang addresses both.
URL structure options
- ccTLD (
example.de), strongest geo signal, most expensive to run. - Subdirectory (
example.com/de/), simplest, keeps domain authority together. Usually the right default. - Subdomain (
de.example.com), a middle ground.
hreflang rules that get broken
- Annotations must be bidirectional, if A points to B, B must point back to A, or both are ignored.
- Every set should include a self-referencing entry.
- Use absolute URLs.
- Language codes in ISO 639-1, optional region in ISO 3166-1 Alpha 2,
en-GB, noten-UK. - Add
x-defaultfor the fallback version. - Point at canonical URLs, not redirects.
Automatic redirection
Redirecting by IP prevents Google from seeing other versions and frustrates users who want a different one. Offer a suggestion banner instead of forcing a redirect.
Alien Road recommends: validate hreflang bidirectionally after every deploy, not once at launch. A single template change that drops the return annotation silently disables the whole set, and because nothing errors, teams discover it months later when the wrong country version keeps ranking.