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.

Optional — lets the self-reference be checked.

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.

  1. 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.
  2. The language comes first. A country code on its own is not valid; the language is never inferred from the country. us does not mean the United States.
  3. 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.