Skip to content
Free tool

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.

hreflang.check

The checks

What the checker looks for

✕ en_US

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.

! no self-reference

Self-reference

Every page must list itself in its own hreflang set. Miss it and Google ignores the entire set on that page.

! no x-default

x-default

The fallback for searchers whose language matches none of your versions. Not required, but you almost always want it.

✕ href="/uk/page"

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?

<head>

Right for most sites

Link tags on every page — what the generator above builds. Simple to ship, easy to audit.

sitemap.xml

Very large sites

Thousands of pages in many languages, where a full tag block on every page adds real weight.

HTTP header

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.

Common questions

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 us
What 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.