The multilingual bugs that never throw: hreflang, JSON-LD and a site in 12 languages
I run a search engine that publishes in twelve languages from one static site on Cloudflare Pages. Last week I audited its machine-readable layer — the part crawlers and answer engines read rather than humans — and found four problems. None of them threw an error. None appeared in logs. Every page rendered perfectly. That is the whole point of this post: the multilingual layer fails in a register…
The multilingual bugs that never throw: hreflang, JSON-LD and a site in 12 languages
A search engine operator shares their experience of discovering four mistakes in their site's multilingual setup. None of these issues caused errors or warnings, but they impacted how search engines crawled and indexed the site.
1. The homepage was tricking all non-Hebrew visitors into seeing the Hebrew version of the site. The site's primary market spoke Hebrew, so there were separate language versions like /en/, /ar/, /de/, and nine others. A middleware rule redirected specific regions to their respective languages, but everyone else, including English speakers, ended up on the Hebrew homepage.
The fix was to use hreflang tags, which help search engines understand the relationship between different language versions. By setting up the correct hreflang tags, English searchers were directed to the /en/ version, while the crawler still saw the Hebrew homepage as the primary language.
2. The structured data for the site claimed it had eight languages, but it actually had twelve. The WebApplication node listed only seven languages, while four more were missing. Since JSON-LD is a machine-readable format, it didn't alert anyone when the data was outdated. To fix this, the site owner created a test that compared the supported languages list with the JSON-LD array. If they didn't match, it would flag the issue.
3. The site owner had two Organization profiles linked to their site, but the sameAs attribute, which links an organization's profiles across the web, was missing two profiles that had recently been created and verified. This was a bigger issue than the language problem since unclaimed profiles were just pages mentioning the site, losing the potential benefits of having verified profiles elsewhere. The fix was to add the missing profiles to the sameAs list.
4. While updating the sameAs attribute across the site, the site owner encountered a bug that made the verification process show 21 nodes changed, but the actual change was 365 nodes. The verification tool only checked the top level of JSON-LD blocks, missing nested ones. To avoid this, the site owner added a verification step that walked the entire JSON-LD tree before confirming the bulk edit. This ensured the changes were applied correctly across the entire dataset.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.