One URL serving multiple languages: where hreflang stops working
Some estates serve different languages from a single URL via cookie or session content negotiation, no /en/ or /de/ path. Hreflang has nothing to annotate in that model, and that's the core tension.
Methodology: we examined four estates using dynamic per-session language on stable URLs, assessing how Google indexed them.
Findings:
— Hreflang requires distinct, crawlable URLs per language. With one URL serving many languages, there are no alternates to declare, so hreflang simply doesn't apply.
— Google indexed whatever language Googlebot received on crawl (typically the default), and the other languages were effectively invisible to search.
— Estates that wanted multilingual visibility had to break the single-URL model — introduce path or parameter-based language URLs — before hreflang became usable at all.
Nuance: this is a common SPA and headless-CMS pitfall. The architecture optimizes for app-like UX and accidentally forecloses international search visibility.
Caveat: dynamic rendering or per-language URLs with a language switcher both resolve it, but they're real engineering work, not a tag fix.
Limitation: four estates, all mid-sized; enterprise headless setups may have negotiation patterns we didn't observe.
Conclusion: hreflang presupposes one indexable URL per language. If your architecture serves languages from a single URL, the fix is architectural — distinct URLs first, annotations second. No tag rescues an un-crawlable language.
Hreflang Lab
@HreflangLab
One URL serving multiple languages: where hreflang stops working
Этот пост опубликован в Telegram-канале Hreflang Lab. Подписаться можно по ссылке: @HreflangLab.