Hreflang tells Google which version of a page to show a visitor based on their language and location. When it's set up correctly, it's invisible, the right person lands on the right version and nobody thinks about it. When it's broken, the symptoms are confusing: the wrong country's page ranks in the wrong market, two language versions compete against each other, or a perfectly good local page simply never shows up. Google's own documentation on this is thorough, but the implementation details are where most sites go wrong.

Missing return tags

This is the single most common hreflang error. Every language version of a page needs to reference every other version, including itself, and every one of those references needs to point back. If your English page links to the Spanish version but the Spanish page doesn't link back to the English one, Google treats the whole cluster as unreliable and may ignore the annotations entirely. On a site with more than a handful of pages, this usually happens because hreflang is generated manually or semi-manually and one language gets missed during an update.

Pointing to redirects or broken URLs instead of live pages

Hreflang tags need to point directly to the final, live URL, not to a redirect chain. A common cause is a URL structure change, moving from subfolders to subdomains, for example, where the hreflang tags don't get updated to match, and every reference silently starts pointing at a redirect. This is invisible to a normal visitor since redirects work fine for humans. It's specifically a problem for how Google interprets the relationship between the pages.

Wrong language or region codes

Hreflang codes follow a specific format: a language code, optionally followed by a region code. "es" targets Spanish speakers generally. "es-mx" targets Spanish speakers specifically in Mexico. Mixing these up, or using a country code where a language code was needed, is a frequent and easy mistake, especially on sites that expanded into new markets incrementally and never audited the full set.

No x-default page

The x-default tag tells Google which version to show a visitor whose language or location doesn't match any of your specific targets. Without it, Google has to guess, and the guess isn't always the version you'd choose. This matters more than it sounds like it should, especially for sites getting meaningful traffic from countries or languages outside their main markets.

How to actually check your site

Search Console's International Targeting report used to be the easiest way to check this, though its exact location has shifted over time as Google reorganises Search Console, so it's worth confirming where it currently lives. Beyond that, a simple manual check is more reliable than it sounds: view source on a page, find the hreflang tags, and manually click through every URL listed. If any of them redirect, 404, or point to the wrong content, that's the fix that needs to happen first, before anything more sophisticated. For sites with dozens of pages per language, a proper technical SEO audit that specifically checks hreflang consistency is worth the time, since the errors compound the more languages and pages are involved.

Why this keeps happening even on well-run sites

Hreflang usually breaks not because a team doesn't understand it, but because it's implemented once at launch and then never revisited as the site evolves. A new page gets added in one language and not the other. A URL gets restructured for unrelated reasons and the hreflang reference doesn't get updated to match. None of these are dramatic failures on their own, but each one chips away at how much Google trusts the overall signal, which is exactly why a periodic audit matters more than a one-time setup, no matter how carefully that setup was done.