How to Fix Hreflang Tags With Errors Across Every Localized Page

AI OVERVIEW

Hreflang errors break the whole cluster. Fix return tags, redirected and non-canonical alternates, and codes per template, then re-crawl every localized page.

A page can pass every hreflang syntax check and still belong to a broken hreflang cluster. That is why so many hreflang errors survive a "fix": the tags on each page look right, but the localized pages do not agree with each other.

Here is a common example. The English page lists https://example.com/fr/ as its French alternate. The French page lists itself as https://example.com/fr with no trailing slash, and canonicalizes to that version. Each page is valid on its own. Together, the return tag never matches, and Google may ignore the annotations for the whole cluster.

This guide shows how to fix hreflang tags with errors at the cluster level, not one page at a time.

How to Fix Hreflang Errors: The Short Answer

  1. Sort the errors by severity, so cluster-breaking problems come first.
  2. Map every localized page and the alternates it declares.
  3. Trace each alternate URL to its final destination and status code.
  4. Check that every alternate is the canonical, indexable version of its page.
  5. Confirm your HTML, sitemap and HTTP header annotations do not disagree.
  6. Validate language codes, region codes and the actual content language.
  7. Fix the template that produces the error, not each URL.
  8. Re-crawl and compare results to confirm the fix held.

Step 1: Sort Hreflang Errors by Severity

Not every hreflang warning carries the same weight. Most guides list errors as equals, and some contradict each other on whether self-references or x-default are required. A severity model settles that and tells you where to start.

SeverityErrorsWhat happens
Breaks the clusterMissing return tags, hreflang pointing to non-canonical URLs, alternates that 404, redirect, are noindexed or blocked in robots.txt, one URL assigned to two languagesGoogle may drop the annotations for some or all pages in the cluster
Weakens targetingWrong market code, missing x-default where users need a fallback, declared language that does not match the content, HTML and sitemap annotations that disagreeThe right page may rank but the wrong version gets shown
Usually toleratedUnderscore instead of a hyphen, en-UK instead of en-GB, missing self-reference, relative URLsFix them for other search engines and cleaner data, but do not lead with them

Start with the top row. A cluster with one missing return tag can undo every other correct annotation in it.

Step 2: Map the Hreflang Cluster Before Checking Tags

An hreflang cluster is the set of localized pages that should all point to one another. Checking tags page by page hides problems that only show when you compare the pages side by side.

Run a technical SEO crawl and export, for every URL, the hreflang values and alternate URLs it declares. Then group the rows by cluster and read across them. Every page in a cluster should list the exact same set of URLs, including itself.

This cluster looks valid on each page, but it is broken:

<!-- https://example.com/en/pricing/ -->
<link rel="alternate" hreflang="en" href="https://example.com/en/pricing/" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/preise/" />

<!-- https://example.com/fr/tarifs -->
<link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs" />
<link rel="alternate" hreflang="en" href="https://example.com/en/pricing/" />
<link rel="alternate" hreflang="de" href="https://www.example.com/de/preise/" />

Two URL normalization problems hide here. The English page points to /fr/tarifs/ with a trailing slash, but the French page identifies itself without one. The French page also points to the www host for German. Neither return link matches, so the French and German pages never confirm the relationship.

When you compare a cluster, check these exact differences:

  • Trailing slash versus no trailing slash
  • http versus https
  • www versus the bare domain
  • Uppercase versus lowercase paths
  • Tracking or session parameters added to the URL

Step 3: Trace Every Alternate URL to Its Final Destination

An hreflang alternate must return a 200 status and be indexable. Most guides stop at broken pages, but redirects cause just as many failures, and they are harder to spot because the page still loads in a browser.

For each declared alternate, record two URLs: the one in the hreflang tag and the one the crawler finally lands on. If they differ, the annotation points to the wrong place. Our guide to HTTP status codes and SEO covers each response in more detail.

What the crawl findsWhy it failsFix
301 or 302 redirectGoogle treats the target, not the declared URL, as the pagePoint hreflang at the final URL
Redirect chainEach hop adds a chance to drop the signalUpdate hreflang to the end of the chain, then remove the chain
404 or 410No page exists to confirm the return tagRemove the alternate or restore the page
5xx errorGooglebot cannot read the return tagsFix server stability, then re-crawl
noindexThe page cannot be served in resultsRemove noindex or drop the page from the cluster
Blocked in robots.txtGoogle cannot see the return tags at allAllow crawling for localized pages

Watch for geo-redirects too. If your server sends visitors to a local version by IP or browser language, Googlebot may never reach some alternates. Most Google crawls come from US addresses, so a site that redirects US traffic to /en-us/ can hide every other version. Use a suggestion banner instead of a forced redirect.

Step 4: Compare Hreflang Against Canonical Tags

Every URL in an hreflang cluster should be the canonical version of its own page. When hreflang and canonical signals disagree, Google has to pick one, and it usually trusts the canonical.

  • Hreflang to a non-canonical URL. The tag points to /de/preise/?ref=nav, but that page canonicalizes to /de/preise/. Update the hreflang to the canonical URL.
  • Cross-language canonicals. The French and German pages canonicalize to the English page. This tells Google they are duplicates of the English version, so the localized pages drop out of the index. Each language version needs a self-referencing canonical.
  • Same-language regional pages. An en-us page and an en-gb page that differ only by currency can look like duplicate content. Google may choose one as canonical and ignore the other, even with correct hreflang. Localize more than the price: spelling, shipping details, contact information and examples.

To confirm what Google chose, use the URL Inspection tool in Google Search Console. Compare the user-declared canonical with the Google-selected canonical for each page in the cluster.

Step 5: Make Sure Your Implementation Methods Agree

Hreflang can live in HTML link tags, HTTP headers or an XML sitemap. Google accepts all three, but you should pick one. Running two at once invites conflicts, especially after a CMS migration or a plugin update.

The typical failure: a sitemap plugin generates hreflang from an old URL structure while the page templates output the new one. Both sets look valid. Google sees two different clusters for the same page. If you find annotations in more than one place, compare them URL by URL, keep the method your team can maintain, remove the other, and re-crawl.

Raw HTML versus rendered HTML

Some sites inject hreflang with JavaScript or a tag manager. Check both the source HTML and the rendered DOM. Common problems include:

  • Tags that only appear after rendering, which other search engines may never see
  • Scripts or unclosed elements that push link tags out of the <head>, where Google ignores them
  • Duplicate sets, one hardcoded and one injected, that list different URLs

Server-side output in the <head> is the safest option.

Step 6: Validate Codes, Targeting and Content Language

Hreflang values use an ISO 639-1 language code, optionally followed by an ISO 3166-1 alpha-2 region code. A malformed code is easy to catch. A valid code aimed at the wrong market is not.

ValueProblemUse instead
es-419Latin America is a UN M.49 region, not an ISO 3166-1 country codeOne code per country, such as es-mx and es-ar, or plain es
zh-cn on a Traditional Chinese pageRegion code says mainland China, script says Taiwan or Hong Kongzh-Hant or zh-Hant-TW for Traditional, zh-Hans for Simplified
en-euEU is not a country codeen, or one value per target country
usRegion code with no languageen-us
jpCountry code used as a language codeja (or ja-jp)

Then check that the declared language matches the page. Untranslated templates are a common source of hreflang tag errors: the page is tagged de but still serves English placeholder copy. Every syntax checker passes it. Spot-check one URL per language per template, and compare the hreflang value with the lang attribute on the <html> element.

Finally, decide on x-default. It tells Google which page to show when no language or region matches. It is optional, but useful when you have a language selector page or a global version. If you use it, every page in the cluster should point to the same x-default URL.

Step 7: Fix Hreflang Errors at the Template Level

A crawl that reports 1,500 hreflang issues rarely means 1,500 separate problems. Hreflang is usually generated by a handful of templates, so a few root causes multiply across every page. Group the issues before you fix anything:

  1. By template. Product pages, blog posts, category pages and landing pages each generate tags differently. If 900 issues share one template, that is one fix.
  2. By cluster. Rank clusters by how much organic traffic they earn. Fix the clusters behind your highest-value pages first.
  3. By severity. Use the table from Step 1. Clear cluster-breaking errors before targeting and cosmetic ones.

Write each fix as a ticket with the template name, an example URL, the current output, the expected output and the URL count it affects. That gives developers one clear change instead of a spreadsheet of URLs.

Step 8: Re-crawl and Compare to Confirm the Fix Held

A fix is not done until a second crawl proves it. Deployments, CMS updates and new translations can reintroduce hreflang errors weeks after you closed the ticket. After each release, run a hreflang audit and compare it with the previous crawl:

  • Resolved: URLs that had errors and now pass
  • Still open: errors that survived the fix, often a second template or a cached sitemap
  • New: errors that did not exist before, the clearest sign of a regression

Also watch Google's side. Search Console no longer has the International Targeting report, so connect Search Console and use URL Inspection and the Performance report filtered by country. If a localized page starts losing impressions in its target market, check its cluster first.

Proof: What Happens When Localized Pages Are Not Connected

Why fix every hreflang error? Because when localized pages are not connected, Google decides on its own which version each country sees, and it usually picks the strongest page, not the right one.

Here is a B2B services site, anonymized, with four English versions: Australia at the root, plus /us/, /uk/ and /ph/. None of its pages carry hreflang, the most extreme form of the errors in this guide, and the homepage declares lang="en-US" on the Australian version.

Page source of the Australian homepage declaring html lang en-US with no hreflang tags
The Australian homepage declares US English, and its head contains no hreflang annotations.

Search Console shows the result. Each report below is filtered to one country and excludes that country's own folder, so every row is a page ranking in the wrong market.

Search Console report for the Philippines showing Australian and US pages ranking
Philippines, last 3 months: the Australian homepage earned 3,166 clicks and 45,676 impressions that belonged to the Philippine site.
Search Console report for the United States showing Australian and Philippine pages ranking
United States: the Australian homepage collected 20,528 impressions, and Philippine pages surfaced for US searchers.
Search Console report for Australia showing Philippine and US pages ranking
Australia: Philippine and US pages, including the Philippine homepage, appeared for Australian searchers.

Every market loses some of its own traffic to another version of the same site. Broken hreflang produces the same pattern on a smaller scale: each missing return tag, redirected alternate or conflicting canonical disconnects a page from its cluster, and Google falls back to guessing. That is why fixes have to be verified across every localized page, not only the one that reported the error.

Hreflang Errors FAQ

Why are my hreflang tags not working?

The most common cause is a return tag that does not match exactly. Check that every page in the cluster lists the same URLs, character for character, and that each URL returns a 200 status and is canonical.

Is x-default required?

No. Google recommends it when you have a fallback page, such as a language selector or global homepage, but a cluster without x-default can still work.

Do I need a self-referencing hreflang tag?

Google's documentation says each version should list itself, and it is best practice. Google often tolerates a missing self-reference, so treat it as a lower priority than missing return tags.

Why does Google show the wrong language version?

Usually because hreflang is missing, a canonical conflicts with it, an alternate URL redirects, or same-language regional pages look like duplicates. Start with Steps 3 and 4.

How often should I run a hreflang audit?

After every deployment that touches templates, URLs or translations, plus a scheduled monthly crawl for large multilingual sites.

Find the hreflang errors your last fix missed. Crawl your site with SiteAuditLint, fix the affected templates, then run another audit and compare the results.100 URLs free. $99 one-time for unlimited URLs.