hreflang tester that checks both ends of every link
Validating the tags on one page tells you almost nothing. hreflang fails when a page names an alternate that never names it back — so this fetches every alternate in the cluster and checks the return trip.
The four ways hreflang actually breaks
Almost every broken cluster fails for one of these reasons, and three of the four are invisible if you only look at the page in front of you.
- 1
One page does not link back
The set is a mutual claim. A points at B, B must point at A — and at every other page in the set, and at itself. Miss one edge and Google treats the annotation as unconfirmed. This is the failure this tool exists to catch, because it is undetectable from a single page.
- 2
The canonical contradicts the hreflang
The French page says "index the English one instead". Canonical wins, hreflang is ignored, and the French page never surfaces. Every language version has to self-canonicalise, which is easy to get wrong when regional versions are generated from a template.
- 3
The code is not what you think it is
en-UK is the classic — uk is Ukrainian, the United Kingdom is GB. Underscores copied from locale files (en_US) are the second. Both are ignored silently, which is why they survive for years.
- 4
The set is incomplete on some pages
Templates that add hreflang only to translated pages, and not to the original, produce clusters that half work. Every page in the set carries the complete list, including its own entry — there is no shorthand.
One thing hreflang will not do
It does not make you rank in a new country. It is a routing instruction applied after the ranking decision, not an input to it. If your German page does not rank in Germany, hreflang is not the missing piece — content, links and local relevance are. The tag only makes sure that when one of your versions does rank, the right one is shown.
Frequently asked questions
What does hreflang actually do?
It tells Google that several URLs are the same page in different languages or for different regions, so it can serve the right one to the right searcher instead of picking arbitrarily or treating them as duplicates competing with each other. It is not a ranking factor and it does not make a page rank in a new country — it decides which of your existing versions gets shown once the page ranks.
Why does reciprocity matter so much?
Because hreflang is a claim about someone else's URL, and Google will not take one page's word for it. If your English page says "the French version is at /fr/" but /fr/ never names the English page back, Google treats the claim as unconfirmed. Its documentation is explicit that unconfirmed annotations may be ignored — and in practice it usually discards the whole set rather than the single unconfirmed edge. This is why this tool fetches every alternate instead of just parsing the tags on the page you gave it.
Is en-UK valid?
No, and it is the most common hreflang error there is. Region codes come from ISO 3166-1 alpha-2, where the United Kingdom is GB. The code "uk" does exist — it is ISO 639-1 for Ukrainian. So en-UK is not "English for the UK", it is a language paired with an invalid region, and Google ignores it silently. The correct value is en-GB.
Do I need x-default?
It is optional in the specification and close to mandatory in practice. x-default names the page for visitors whose language and region match nothing else in your set — which for most sites is the majority of the world. Without it Google picks for them. Point it at whatever your genuine fallback is: usually the global English page, sometimes a country selector.
Should hreflang go in the HTML, the sitemap, or an HTTP header?
All three are equally valid to Google, and you should pick exactly one. HTML link tags are simplest and what most CMS templates make easy, but every page carries the full set so a ten-locale site adds ten tags to every page. XML sitemap annotations keep it out of the HTML entirely and are the only sane option past a few dozen pages. HTTP headers are the only method that works for PDFs and other non-HTML documents. Using two methods at once is how they end up disagreeing.
Can hreflang and canonical tags conflict?
Constantly, and it is the second most common way clusters break. If your French page canonicalises to the English page, hreflang says "serve this to French speakers" while the canonical says "actually index the English one". The canonical wins and the annotation is wasted. Every language version must self-canonicalise. This tool checks each alternate's canonical for exactly that.
Do I need hreflang for en-US and en-GB if the content is nearly identical?
That is precisely the case it exists for. Near-identical regional variants are the ones Google is most likely to collapse into one or serve to the wrong audience. hreflang tells it they are deliberate regional versions rather than duplicates. If the pages are genuinely identical with no regional difference in currency, spelling, shipping or contact details, you may be better off with one page.
Why does the tool only check 12 alternates?
Each check is a live fetch, and the whole cluster is fetched inside a single edge request that has a hard cap on how many outbound requests it can make. Twelve covers the great majority of real clusters. If yours is larger, run the tool on a page from a different part of the set — the reciprocity relationships you care about will show up from either end.
Related tools and reading
International SEO fails quietly.
A broken hreflang cluster does not throw an error or drop your rankings. It just serves the wrong page to the wrong country for a year while everything looks fine in the dashboard.
Get a Free SEO Audit