Free hreflang checker
A broken hreflang cluster doesn’t throw an error. It just serves the wrong language page to the wrong searcher, quietly, for as long as nobody checks.
One missing return link is enough to break it. Google can end up ignoring the whole set of tags, not just the one broken pair, and your French page starts competing with your English one in the index you actually care about.
So, paste a URL into the tool above and see its full hreflang cluster: every alternate, its status, and whether each one links back. Or install the Sprout SEO extension and see the same table on every page you browse, with nothing to paste.
What is hreflang?
Hreflang is an attribute, hreflang="lang_code", that tells Google which page on your site serves which language or region. You can declare it in a <link rel="alternate"> element, an HTTP response header, or your XML sitemap.
Google treats all three methods as equivalent. Pick one and stick with it. Running more than one at once adds nothing in Search and only makes the setup harder to maintain.
The return link requirement
Here’s the part most sites get wrong. Hreflang only works as a reciprocal set. If your German page points to your English page, the English page must point back to the German one, and both must also list themselves.
Miss that return link, and Google can ignore the annotation entirely rather than guess what you meant. That one missing tag, on just one page, is enough to break the whole cluster.
Why hreflang matters for SEO
Hreflang tells Google which of your pages to show a searcher, based on their language and location. Get it right, and the correct version competes in the right market, instead of your English homepage quietly outranking your own German page in Germany.
Without it, Google falls back to its own signals for deciding which locale to show. Google is direct about this: it doesn’t use hreflang, or your HTML lang attribute, to detect what language a page is written in. It uses its own algorithms for that, and hreflang only connects the versions you’ve already built.
Get the cluster wrong, and the failure is invisible from the page itself. Nothing breaks visually. Your localized pages just compete against each other, or the version you built for a market never shows up there at all.
When to use hreflang
You need hreflang whenever your site publishes more than one language or regional version of the same page. That covers more cases than “we translated the site.”
Separate languages are the obvious case: a French page and an English page covering the same content. Same language, different regions, is the one teams miss: en-US, en-GB, and en-AU versions of one English page, each with its own spelling, pricing, or examples.
A language selector, a country selector, or a homepage that auto-redirects by locale needs one more thing: an x-default tag. x-default is a reserved value built for exactly this case, pointing at a fallback page for a visitor whose language doesn’t match any version you’ve built. You don’t give it a language code, since it isn’t targeted at one.
A single-language, single-region site doesn’t need any of this. There’s no real downside to adding it anyway, but it’s not a checklist item a one-locale site should chase.
Hreflang vs automatic geo-redirects: which to use
Hreflang and an automatic redirect solve the same problem from opposite directions. Hreflang tells Google which version to show a searcher. A geo-redirect, or one keyed off the Accept-Language header, forces every visitor, human and crawler alike, to one version the moment they land.
That second approach has a real cost. Google’s own hreflang guidance flags an auto-redirecting homepage as exactly the case that needs an x-default fallback, because a forced redirect can trap a crawler on one locale and leave your other versions unseen.
Use hreflang to make every version discoverable, and let Google route searchers to the right one. If you also redirect visitors by locale, give them a way to override it. Never redirect a crawler the way you’d redirect a person.
Common hreflang issues
The issues, one by one
A missing return link is the most common failure. Google’s own troubleshooting guidance names it first: if page A links to page B but B doesn’t link back, Google can ignore the annotation on both.
Incorrect language or region codes come next. A language code alone is valid (fr), but a region code alone is not; you need the language first, then the region (fr-CA, never just CA). Reserved codes like EU, UN, or UK get silently ignored too, since they aren’t assigned ISO 3166-1 region codes.
A hreflang target that returns a redirect, a 404, or a server error is another common break. Google can’t confirm a return link to a page that doesn’t resolve, so the pair fails quietly, the same way a redirected canonical does.
Pointing hreflang at a noindex or non-canonical URL causes a similar silent failure. The target can’t carry the signal if it isn’t the version Google is allowed to index in the first place.
Missing a self-referencing tag, where a page doesn’t list itself among its own alternates, breaks the “every version lists every version, including itself” rule Google states plainly in its own guidelines.
Common hreflang issues at a glance
| Issue | What it causes | The fix |
|---|---|---|
| Missing return link | Google may ignore the annotation on both pages | Add the matching tag on each alternate, pointing back |
| Region code without a language code | The annotation is invalid | Use language first, then region (fr-CA, not CA) |
| Reserved or unassigned region code | Google ignores that part of the tag | Use an assigned ISO 3166-1 Alpha-2 code |
| Hreflang target is non-200 | The pair can’t be confirmed | Point hreflang only at live, 200 URLs |
| Target is noindex or non-canonical | The signal has nowhere valid to land | Hreflang only indexable, canonical URLs |
| Missing self-reference | Breaks the “list every version” rule | Add the page’s own URL to its own alternate set |
How to check a page’s hreflang tags
Checking a hreflang cluster takes the same four steps every time.
- Paste the URL into a hreflang checker.
- Read every declared alternate, its language and region code, and its HTTP status.
- Confirm each alternate links back to the page you started on.
- Fix whatever’s missing, broken, or one-directional.
Check a single page with the Sprout web tool
Paste any URL into the tool at the top of this page. It returns every hreflang alternate the page declares, the status of each target URL, and whether each one links back. No crawl, no login required.
The tool doesn’t store the URL you check or the result anywhere, so there’s nothing to clean up or worry about later.
See hreflang as you browse with the Sprout extension
Install the extension, and its Page Info tab shows the hreflang table for whatever page you’re on, including the same back-reference check: it flags any alternate that doesn’t point back. You get that on every page in your normal workflow, not just the ones you remember to paste in somewhere.
See the hreflang cluster, right from your browser
Lists every hreflang alternate, its status, and flags any that don't link back, instantly, on every page you visit.

Why Search Console can’t confirm this at scale
Here’s a gap a lot of teams don’t expect. Google’s own hreflang documentation doesn’t point to a Search Console report for debugging hreflang. It links out to a couple of third-party tools instead, and says plainly that Google doesn’t maintain or check them.
So there’s no first-party dashboard that catches a broken hreflang cluster across your whole site. A per-page checker, or a full crawl with a hreflang audit built in, is the only way to catch it before a searcher, or a competitor, does.
How to fix a broken hreflang cluster
Fixing a broken cluster starts with the version that’s missing from the set, not the one you happened to notice first.
- List every intended version of the page, and confirm each one is live, indexable, and carries its own canonical tag pointing at itself.
- Add the missing return link. Every version needs a tag pointing to every other version, including itself.
- Add
x-defaultif the page is a language selector, a country selector, or an auto-redirecting homepage. - Recheck once Google reprocesses the pages. A fixed cluster doesn’t take effect the moment you publish it. Treat the fix as directional, not immediate.
Check every page’s hreflang as you browse (Chrome, Firefox, Edge)
Install the Sprout SEO extension once. After that, the hreflang table for whatever page you’re viewing is one click away, with no separate tool to open and no URL to paste.
The hreflang table in the Page Info tab, inline as you browse
Open the extension on any page in a localized set. Its Page Info tab lists every alternate, its status, and whether it links back, the same back-reference check as the web tool above. Browse from language version to language version during a normal audit, and that table updates with you.
See the hreflang cluster of every page you visit, instantly, right in your browser. Add Sprout SEO to Chrome, and it’s one click away on every page from then on. The same extension works in Firefox and Edge too.
Check your hreflang, then stop guessing on every locale after this one
One missing return link can get an entire hreflang cluster ignored, not just the broken pair. Check it before you launch a new locale, migrate a multi-language site, or add a language selector.
Add Sprout SEO to Chrome to see the hreflang cluster on every page you browse, free, with no crawl and no account required. It also works in Firefox and Edge.