Hreflang Checker & Generator
Paste a URL and we fetch the live page and read the hreflang tags out of its head — flagging invalid codes, missing x-default, and a missing self-reference. Or switch to the generator and build a correct tag set for your language versions.
The checks
What the checker looks for
Valid codes
hreflang takes language[-script][-region] with hyphens — en-GB works, en_GB does not. And watch the classic trap: “uk” is Ukrainian, not the United Kingdom.
Self-reference
Every page must list itself in its own hreflang set. Miss it and Google ignores the entire set on that page.
x-default
The fallback for searchers whose language matches none of your versions. Not required, but you almost always want it.
Absolute URLs & duplicates
Relative hrefs and the same code declared twice with different URLs both break the set.
One thing no single-page checker can prove: reciprocity. Each alternate URL must point back with the same set, so run your other language versions through the checker too.
Placement
Where do hreflang tags go?
Right for most sites
Link tags on every page — what the generator above builds. Simple to ship, easy to audit.
Very large sites
Thousands of pages in many languages, where a full tag block on every page adds real weight.
Non-HTML files
PDFs and other documents that have no <head> to put a link tag in.
Pick one and stick to it — mixing placements is how sets end up contradicting each other, and a contradiction reads as no hreflang at all.
Before you tag
Do you need hreflang at all?
Add it when
- The same content exists in more than one language
- Same language, different countries — en-US, en-GB, en-IN
- Prices, currency, or stock differ by region
Skip it when
- One language serving the whole world
- Only one version of each page exists
- Nobody will maintain the URL map — half-done hreflang is worse than none
And keep canonicals out of the fight: each language version must canonical to itself, never to the “main” version. A canonical pointing at the English page tells Google to ignore the alternates the hreflang set just declared. In our experience that one conflict explains most “hreflang not working” complaints — it is a technical SEO problem underneath, not a tagging one.
Hreflang questions we keep answering
The short versions of what clients and readers ask about hreflang — checked against how Google actually handles the tags.
Still have a question? Contact usWhat does an hreflang tag actually do?
It tells search engines which language or country version of a page to show each searcher. It does not improve rankings by itself — it routes the ranking you already have to the right version, so a UK searcher lands on the UK page.
Why is my hreflang not working?
Usually one of two things: the sets are not reciprocal (every version must list every version, including itself), or the canonical tag points at the “main” page and tells Google to ignore the alternates. Fix the canonical conflict first — in our experience it explains most complaints.
Does this checker verify return tags on other pages?
No — it reads one page at a time, and no single-page check can prove reciprocity. Run each of your language versions through the checker and confirm they all return the same set. Tags served via HTTP headers or the sitemap are not visible to it either.
Is x-default compulsory?
No, Google treats it as optional. But without it, searchers whose language matches none of your versions get whichever page Google guesses. Point x-default at your main or language-selector page and the guess disappears.
Can hreflang fix duplicate content between country sites?
It groups the versions so they stop competing, which is what you actually want — each country keeps its own page in its own market. It does not merge signals the way a canonical does, so do not use it as a duplicate-content patch on pages that are genuinely the same.
