hreflang Checker
en-UK is the most common hreflang mistake there is, and the worst part is what
happens next: nothing. UK is not an ISO 3166-1 region code, so the annotation is
thrown away without an error, a warning, or any signal at all that your international targeting
is not working.
🔒 Your data never leaves your browser.
Three rules, and all of them fail quietly
Search engines are explicit that invalid annotations are ignored. Not rejected, not reported — ignored. So every hreflang bug is a silent one, and the only way to find it is to check the annotations yourself.
- The codes must be real. Language is ISO 639-1, region is ISO 3166-1 alpha-2. This tool checks against the 190 language subtags and 259 region subtags in the IANA registry — the same registry that has no entry for UK.
- The language comes first. A country code on its own is not valid; the
language is never inferred from the country.
usdoes not mean the United States. - Every page must list itself and all the others. If two pages do not both point at each other, the annotations are ignored entirely.
Which means the block is the same everywhere
Put those last two rules together and something useful falls out: if each page must list itself and every other version, then the correct set of tags is identical on every page. That is why this tool's main output is one block to paste everywhere, rather than a list of per-page edits — reciprocity stops being something to check and becomes something that is true by construction.
What this tool cannot tell you
Whether the other pages actually carry that block. Confirming it means fetching them, and nothing here leaves your browser. A tool that claimed to have verified return links without making a request would be lying; this one gives you the block that makes them right instead.
Every check this tool runs (11 rules)
HL-L01 Language subtag is not ISO 639-1
The first part of an hreflang value must be a two-letter ISO 639-1 language code. Anything else is not supported and the annotation is ignored — silently, with no error anywhere.
Fix: Use the two-letter language code. If you meant a country, remember the language comes first: de-AT, not AT.
Source: Google Search Central — Localized versions of your pages
HL-R01 Region subtag is not ISO 3166-1 alpha-2
The optional second part must be an ISO 3166-1 alpha-2 region code. "en-UK" is the classic failure: UK is not in the registry at all — the United Kingdom is GB — so the whole annotation is thrown away without a word.
Fix: Use the assigned code: en-GB.
Source: Google Search Central — Localized versions of your pages
HL-R02 Region without a language
A country code on its own is not a valid hreflang value. Google states plainly that it does not derive the language from the country, so "us" or "de" used to mean a country targets nothing you intended.
Fix: Put the language first: en-US, de-DE.
Source: Google Search Central — Localized versions of your pages
HL-F01 Malformed value
The value does not have the shape language or language-region. Underscores instead of hyphens (en_US) come from locale identifiers used in code and are not valid here.
Fix: Use a hyphen: en-US.
Source: Google Search Central — Localized versions of your pages
HL-S01 No self-reference
Every version must list itself as well as all the others. A set that omits its own page is incomplete, and Google treats incomplete sets as unreliable.
Fix: Add a link whose href is this page’s own URL.
Source: Google Search Central — Localized versions of your pages
HL-D01 Duplicate hreflang value
The same language-region appears more than once pointing at different URLs. There is no way for a search engine to choose between them, so the conflict makes the whole set untrustworthy.
Fix: Keep one URL per language-region.
Source: Google Search Central — Localized versions of your pages
HL-D02 Same URL for several values
One URL is claimed by more than one language-region. That is legitimate when a single page really does serve several locales, but it is more often a copy-paste slip in a generated template.
Source: Google Search Central — Localized versions of your pages
HL-X01 No x-default
x-default names the page to show when none of the listed locales matches the visitor. Without it, a visitor outside every locale you serve is left to the search engine’s judgement.
Fix: Add an x-default entry pointing at a language selector or your most general page.
Source: Google Search Central — Localized versions of your pages
HL-U01 Relative or non-absolute URL
hreflang hrefs are expected to be fully qualified. A relative path resolves differently depending on where the page is served from, which is exactly the ambiguity these annotations exist to remove.
Fix: Use the absolute URL including the scheme and host.
Source: Google Search Central — Localized versions of your pages
HL-B01 Return links must be checked on the other pages
Google ignores the annotations entirely unless every page points back. That can only be confirmed by looking at the other pages, which this tool does not fetch — nothing here leaves your browser. What it can do is give you the exact block every page in the set must carry, which is what makes the links reciprocal by construction.
Source: Google Search Central — Localized versions of your pages
HL-N01 Set is internally consistent
Every value parses, the set references itself, and no value or URL conflicts with another.
Source: Google Search Central — Localized versions of your pages
Language and region subtags are validated against the IANA Language Subtag Registry, which is also where the country code table on this site comes from. Script subtags (zh-Hant) and three-letter language codes exist in the registry but are outside what search engines accept for hreflang, so they are reported as unsupported rather than silently allowed.