
Every URL referenced in an hreflang annotation must return a live 200 status and be an indexable, canonical page; when an hreflang target points to a 4xx, 5xx, redirected, or robots-blocked URL, search engines ignore the annotation and the language cluster falls apart, so update the broken target to the correct live URL or remove it.
What this issue means
Hreflang annotations tell search engines which version of a page to serve to users in different languages or regions. Each annotation points to an alternate URL, and that URL is a promise: "this is the live, equivalent page for this audience." This audit flags pages where one or more of those promises is broken. The hreflang target does not return a clean 200 status code. Instead it returns a client error (4xx), a server error (5xx), a redirect (3xx), a "no response," or it is blocked by robots.txt.
Google's guidance is explicit that hreflang URLs must be crawlable and indexable. Screaming Frog raises the same flag under "Non-200 Hreflang URLs," noting that any annotation whose target does not respond with a 200 status is treated as an error and ignored. The reference is technically present in your markup, but it points at nothing usable.
Why broken hreflang targets break the whole cluster
Hreflang is reciprocal by design. For a cluster of localized pages to be understood, every page must reference every other page in the set, and each of those references must resolve to a live page that points back. This is the "return tag" relationship. When one target URL is broken, search engines cannot confirm the bidirectional link, so the annotation is dropped.
The damage rarely stays contained to the single broken URL. Because the cluster depends on mutual confirmation, a dead target can invalidate the return-tag relationship for several pages at once, leaving search engines to guess which version to rank for a given audience. The result is the wrong language version showing in results, duplicate-content confusion across regional variants, and wasted crawl budget, since crawlers still attempt to fetch and validate the dead URLs before discarding them.
Common causes
Site migrations and URL changes
A migration that changes URL structure, switches domains, or moves to HTTPS will often update the canonical and internal links while leaving hardcoded hreflang annotations pointing at the old paths. Those old paths now redirect or 404, and every annotation referencing them breaks.
Deleted or unpublished localized pages
When a regional team retires a localized page, or a translation is unpublished, the page returns a 404 or 410. Other pages in the cluster still reference it in their hreflang set, so they now point to a dead target.
Redirects, robots blocks, and trailing-slash drift
Pointing hreflang at a URL that 301-redirects to the canonical (instead of pointing at the canonical directly), blocking the target in robots.txt, or a mismatch in trailing slashes, casing, or http versus https will all push the target off the clean 200 path.
How to diagnose
Run a crawl that extracts and validates hreflang. In Screaming Frog, crawl the site and use Reports > Hreflang > Non-200 Hreflang URLs. This export lists each source page alongside the exact hreflang target that errors or redirects, one row per broken link, so you can see precisely which annotations to fix. Sitebulb and Lumar produce equivalent hreflang reports that flag non-indexable and broken targets.
To check a single page by hand, view its source and pull the annotation block, then test each target's status code:
<link rel="alternate" hreflang="en" href="https://example.com/page/" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/page/" />
# Test each target status code
curl -o /dev/null -s -w "%{http_code} %{url_effective}\n" -L https://example.com/fr/page/Any target returning something other than 200 needs attention. A clean target returns 200 with no redirect hop.
How to fix it
There are two correct outcomes for every broken annotation: repair it or remove it. Pick based on whether an equivalent live page still exists.
If the localized page still exists at a new URL
Update the hreflang target to the live, canonical, 200 URL. Point at the final destination, not at a URL that redirects to it. Then update the reciprocal annotation on that page so the return tag is restored across the whole cluster.
<!-- Before: target 404s -->
<link rel="alternate" hreflang="fr" href="https://example.com/old/fr-page/" />
<!-- After: live 200 canonical URL -->
<link rel="alternate" hreflang="fr" href="https://example.com/fr/page/" />If the localized page is gone for good
Remove that hreflang annotation entirely, and remove the corresponding reference from every other page in the cluster. An hreflang set with no dead entries is healthier than one padded with broken promises. Confirm each remaining target is a self-canonical, indexable 200 URL, then re-crawl to verify the cluster is clean.
Common mistakes
Pointing hreflang at a redirecting URL because it "still works" in a browser. Search engines want the final 200 URL, not the hop. Fixing the source page but forgetting to update the reciprocal annotation, which leaves the return tag broken. Repairing the visible HTML annotations while a stale XML sitemap still carries the old hreflang entries. Pointing hreflang at a URL that is canonicalized to a different page, or blocked by robots.txt, since a target that is not independently indexable is treated the same as a broken one.
FAQ
A: The broken annotation is ignored, and because hreflang relies on reciprocal confirmation, a dead target can also invalidate the return-tag relationship for other pages in the cluster. Fix or remove every broken target rather than relying on the survivors.
A: No. Hreflang targets should resolve directly to a live 200 URL with no redirect hop. Replace any redirecting hreflang target with the direct link to the final destination page.
A: It does not apply a direct penalty, but it stops search engines from serving the correct regional version, which causes the wrong page to rank for an audience, duplicate-content confusion, and wasted crawl budget on dead URLs.
Need a full technical audit?
SEO ProCheck runs deep crawls that catch issues like this across your whole site.
Claude Vincent is a technical SEO consultant focused on crawlability, rendering, and AI-search visibility. He writes the field guides and case studies at SEO ProCheck, with a bias toward the durable, unglamorous work that decides whether search engines and AI answer engines can actually read and cite a site.
About SEO ProCheck
Technical SEO consulting and GEO strategy with 20 years of enterprise experience. Case studies, resources, and tools for search and AI visibility.
Work With Me
Technical SEO audits, GEO strategy, site migrations, and international SEO. Hourly consulting for teams who need hands-on support, not just reports.








