The hreflang toolkit checks the tags that tell search engines which version of a page belongs to which language and country. Hreflang is unforgiving: a set is either complete and reciprocal or it’s ignored, and most of the problems I find are in that category rather than anything subtle.
Built in-house. It is my own tooling rather than a reseller’s dashboard, which is why it checks the things I act on rather than everything a generic tool can measure.
What it does
It reads the hreflang tags across a site, builds the full map of which pages claim to be alternates of which, and reports where that map breaks. Then it generates a correct set where one is needed.
The most common finding is not an exotic misconfiguration. It’s a set that’s missing its return links, which means search engines discard it entirely.
What it checks
| Check | What it looks at |
|---|---|
| Return links | Whether every page listed as an alternate points back at the others |
| Codes | Valid language and region codes, and the ones people commonly get wrong |
| Self-reference | Whether each page includes itself in its own set |
| x-default | Whether a fallback is declared, and whether it points somewhere sensible |
| Canonical conflicts | Whether a page’s canonical contradicts its hreflang |
| Status | Whether any alternate URL redirects, 404s or is noindexed |
| Consistency | Whether the same set is declared everywhere it appears |
| Placement | Whether tags are in the head, the sitemap or headers, and used consistently |
The codes people get wrong
The language comes first, then the region, and the region is a country rather than a language. “en-uk” is wrong, because the country code for the United Kingdom is GB, so it’s “en-gb”. Using a language code where a country is expected is the single most common error in this area.
A region on its own isn’t valid either. Hreflang needs a language, with the country optional, so “gb” alone does nothing.
Two versions of one product range
The case where this matters most for a small business is the same catalogue sold in two markets. A UK store and a US store, largely the same products, largely the same descriptions, different prices and spellings.
Without hreflang, those two sets of pages compete, and search engines may show the wrong one to the wrong country. With a complete reciprocal set, each market’s pages are understood as alternates rather than duplicates. It doesn’t merge their authority, and it isn’t a substitute for each store earning its own visibility, but it stops the two undermining each other.
Example output
SET: /products/threshold-seal/ (en-GB) and /products/threshold-seal/ (en-US) RETURN LINKS: Fail. The US page lists the UK page. The UK page lists no alternates. SELF-REFERENCE: Missing on both. X-DEFAULT: Not declared. EFFECT: The set is incomplete, so it’s likely being ignored entirely. ACTION: Add the full reciprocal set including self-references to both, and declare x-default on the UK page.
What I review
Every reported break is confirmed against the live HTML rather than a cached crawl, and the canonical is checked at the same time, because a canonical pointing across markets will override an otherwise perfect hreflang set.
Limitations
- Hreflang is a hint, not an instruction. Search engines can still show a different version.
- It doesn’t fix duplicate content between markets. It explains the relationship rather than removing the overlap.
- Bing and other engines treat it differently, so this is mostly a Google-facing signal.
Services it powers
The hreflang toolkit powers international SEO and hreflang and supports multi-market web development builds. See the rest of the tools on the tech stack page.
FAQ
What is hreflang for?
It tells search engines which version of a page belongs to which language and country, so a UK visitor is shown the UK page rather than the US one. It’s used where the same or similar content exists for more than one market.
Why do hreflang sets get ignored?
Usually because they aren’t reciprocal. If page A lists page B as an alternate but B doesn’t list A, the set is incomplete and search engines discard it. Missing self-references and alternates that redirect or return errors cause the same result.
Is “en-uk” a valid hreflang value?
No. The region part is a country code, and the country code for the United Kingdom is GB, so the correct value is “en-gb”. Using a language code where a country code belongs is the most common hreflang mistake I come across.
See the whole toolkit
The tech stack page lists every tool, and the free assessment covers international setup where it applies.