DEV Community

Kessy Stalford for SEOSage

Posted on

Hreflang: The Audit That Stops Your Pages Fighting Across Countries

I work at SEOSage, which builds desktop SEO audit software. The steps below work with any crawler.

The wrong version of your page is ranking somewhere right now.

Hreflang tells Google which language or regional version of a page to show to which audience. When it is wrong — or missing — the US page ranks in the UK, the English page outranks the German one in Berlin, and your own pages cannibalise each other across markets. Nobody notices until a regional manager asks why their page never shows up locally. This audit finds every hreflang error before that conversation.

How hreflang breaks

  1. Missing return links — page A declares itself the alternate of page B, but page B does not declare A back. Google ignores hreflang without reciprocity. This is the single most common error.
  2. Wrong language or region codes — en-UK instead of en-GB, made-up codes, or language-only tags where region-specific ones were needed. One wrong code and the whole cluster is suspect.
  3. No x-default — without a fallback page for unmatched audiences, Google guesses. Declare one.
  4. Hreflang on non-indexable pages — tags pointing at noindexed URLs, canonicals pointing elsewhere, or pages that 404. Hreflang only works between live, indexable, self-canonical pages.
  5. Conflicting signals — hreflang says these pages are alternates while the canonical says they are all the same page. Google trusts the canonical and your hreflang is decoration.

The audit: crawl the tags, then verify the cluster

  1. Extract every hreflang tag. Crawl the site and export all hreflang annotations: page URL, declared language/region, target URL. Sitemap-declared hreflang counts too — gather both, because mismatches between header tags and sitemap declarations are their own failure mode.
  2. Check reciprocity. For every A→B declaration, confirm B→A exists. Build the cluster map: every page in a language cluster should reference every other page in that cluster. A spreadsheet pivot does this in minutes.
  3. Validate the codes. Check every language and region code against the standard lists. Flag anything Google does not recognise, and flag language-only tags where the business actually serves distinct regions.
  4. Verify the targets are real. Every hreflang target must return 200, be indexable, and carry a self-referencing canonical. A hreflang pointing at a redirect or a noindexed page is a dead signal.
  5. Cross-check Search Console. The International Targeting report (and the language report in newer GSC) shows which errors Google sees. Use it to confirm your crawl findings, not as the starting point.

Fix by cluster, not by tag

Hreflang errors cluster by template: one wrong include file breaks every product page in a market. Fix the template or the sitemap generator, not individual tags. The usual order: fix the codes first (cheap, global), then reciprocity (template-level), then target validity (page-level), then add the missing x-default.

Prioritise by traffic

Same habit as every audit: the broken cluster on the market that brings revenue outranks the one on a dormant locale. I overlay GA traffic on the crawl in SEOSage so the hreflang work lands where the visitors are — the same traffic-first habit, applied internationally. Any workflow that combines hreflang extraction with traffic gives you the same ordering.

The maintenance rule

Hreflang rots when sites change: new locales launch without tags, pages get noindexed without updating the cluster, templates get replaced and the include disappears. Re-run the hreflang extraction after every site change involving locales, templates, or canonicals — and audit the full cluster map quarterly. International SEO is the last place you want silent failures.


Disclosure: I work at SEOSage, a desktop SEO audit tool. These steps work with any crawler you already use. Do your language versions all link back to each other?

Top comments (0)