hreflang checker
Scan any URL for hreflang tags and validate them against the spec. Catches missing self-references, missing x-default, invalid language codes, duplicate targets, and protocol mismatches.
By Deepak Shukla — Founder & CEO, Pearl Lemon
Part of SEO monitoring — the full answer, the facts and the alternatives in one place.
What This Tool Checks
- Every <link rel="alternate" hreflang="…"> tag in the HTML head
- BCP-47 validity of each hreflang value
- Self-reference (the page must list itself)
- Presence of x-default for global / language-picker pages
- Duplicate hreflang values pointing at different URLs
- Mixed http: / https: targets across the cluster
- Total tag count and per-language coverage
Why This Matters
Hreflang is the single most error-prone signal in international SEO. A broken cluster sends Spanish visitors the English page and vice versa, splits ranking signals across duplicate URLs, and triggers Search Console warnings that take weeks to clear. Google estimates over 60% of multi-region sites have hreflang errors. This tool catches every error class on one page in one click.
How to Fix Issues
- 1.Add a self-referencing hreflang on every page in the cluster
- 2.Fix any invalid language codes to standard BCP-47 (e.g. "en-US", not "en_us")
- 3.Pick one canonical target per (language, region) and update all duplicates
- 4.Add an x-default if you have a global / language-picker landing page
- 5.Normalise every target to https — never mix protocols
- 6.Re-run the test on at least three pages in the cluster (some / each language) to confirm symmetry
Hreflang tells search engines that several URLs are the same page in different languages or regions, and which one to show to whom. It is conceptually simple and, in practice, the most error-prone signal in international SEO — because it only works if every page in the cluster agrees with every other.
The cluster has to be symmetrical
If page A lists page B as its Spanish version, page B must list page A as its English version. When the reciprocal reference is missing, the pairing is treated as unconfirmed and ignored. The most common version of this failure is an entirely missing self-reference: a CMS generates the links to sister pages but not the link to the page itself, which invalidates the whole set. This is why checking one page is never enough — you have to check both ends.
Language codes are stricter than they look
The value must be a valid language code, optionally with a region: a two-letter language, an optional script, an optional two-letter country. Underscores instead of hyphens, country-only values, invented region codes and uppercase language codes are all rejected silently. There is no error message anywhere; the tag is simply skipped, and the page it referred to competes as a duplicate instead.
x-default, canonicals and the interaction people get wrong
x-default marks the page to show when no other version matches the user — typically a global landing page or a language picker. It is optional but valuable for international sites. Canonicals are where most clusters break: each language version must canonicalise to itself. Canonicalising every translation to the English original tells search engines the translations should not be indexed at all, which undoes the entire hreflang setup while looking like good housekeeping.
Where to declare it
Hreflang can live in HTML link tags, in HTTP headers, or in the sitemap. All three work. Using more than one at a time is the problem, because the versions drift apart and whichever was parsed most recently wins. Pick one method, implement it everywhere, and re-check after any URL structure change — a migration that redirects one language and not another breaks every cluster it touches.
Methodology
We issue a single HTTPS GET against the URL you enter (following redirects, 10-second timeout, 600 KB body cap) and scan the raw HTML for every <link rel="alternate" hreflang="…"> tag. We do not execute JavaScript — hreflang must be present in the server-rendered HTML to be discoverable, and any tags injected client-side will not be seen by Google either. Each tag is validated against a light BCP-47 regex covering the patterns Google documents: 2- or 3-letter language, optional script, optional region. We then cross-check the set: self-reference, duplicates, x-default, and protocol mix. The score deducts 25 per error and 8 per warning, capped at 0–100.
Frequently Asked Questions
Related Free Tools
Indexability
Check whether Google can actually index your page. Detects noindex, canonical conflicts, X-Robots-Tag headers, soft 404s, and crawl blockers.
Canonical Checker
Check the canonical URL of any page. Finds missing, conflicting, relative, and cross-domain canonical tags so you can review your preferred-URL signals.
Sitemap Checker
Inspect your XML sitemap. Find it, check its basic sitemap structure, count URLs, detect sitemap indexes, and flag suspicious or broken sub-sitemaps.
HTTP Status Code Reference
Understanding HTTP status codes helps you diagnose issues found by this tool: