Conflicting Hreflang Entries: How to Diagnose and Fix Them

No Comments
Conflicting hreflang entries: how to diagnose and fix them

What this check flags

SEO ProCheck found a URL whose hreflang set contradicts itself: the same language-region value is declared twice with different destinations, or two rows point at the same destination with different language values. When Googlebot hits a contradiction it can't resolve, it discards the ambiguous entries — sometimes the whole set — and your carefully mapped localized pages fall back to whatever Google would have chosen on its own.

The three shapes a conflict takes

Conflicts are not one bug; they are a family. A duplicate-key conflict lists de-de twice with two different URLs, so Google can't tell which German-German page is real. A duplicate-target conflict maps two different language values to the identical URL, telling Google one page is simultaneously the French and the Spanish version. A directional conflict is subtler: page A calls page B its fr alternate, but page B calls itself fr-ca, so the return tag never matches and the pair fails validation. All three produce the same outcome — an unconfirmed, unusable relationship.

A real failing example

This set declares en twice, pointing at two rival URLs, and reuses one URL for both es and es-mx:

<link rel="alternate" hreflang="en" href="https://shop.example/en/" />
<link rel="alternate" hreflang="en" href="https://shop.example/en-row/" />   <!-- second en, different URL -->
<link rel="alternate" hreflang="es" href="https://shop.example/es/" />
<link rel="alternate" hreflang="es-mx" href="https://shop.example/es/" />   <!-- same URL as plain es -->

Give each key exactly one destination and each destination exactly one key. If you genuinely need a generic Spanish page and a Mexico-specific one, they must be separate URLs:

<link rel="alternate" hreflang="en" href="https://shop.example/en/" />
<link rel="alternate" hreflang="es" href="https://shop.example/es/" />
<link rel="alternate" hreflang="es-mx" href="https://shop.example/es-mx/" />
<link rel="alternate" hreflang="x-default" href="https://shop.example/en/" />

Then confirm https://shop.example/es-mx/ actually exists and returns the same complete set back. One key, one URL, in both directions — that is the whole rule.

Reading a conflict at a glance

Symptom in the markupConflict typeGoogle's resolution
Same hreflang value on two rows, two URLsDuplicate keyBoth entries ignored for that key
Two hreflang values on rows sharing one URLDuplicate targetAmbiguous mapping dropped
Alternate says fr, return tag says fr-caDirectional mismatchPair fails, no confirmed link
Sitemap says one thing, head tag says anotherMethod conflictUndefined; signals compete

How to detect it

  1. Screaming Frog — Hreflang tab. After a crawl, use the filters Multiple Entries, Inconsistent Language & Region Return Links, and Missing Confirmation Links. The Multiple Entries filter is the direct hit for duplicate keys; export it and sort by URL.
  2. Google Search Console. The legacy International Targeting report groups errors under "no return tags" and "unknown language code"; a spike there usually traces to directional and duplicate-key conflicts. Use URL Inspection to see the alternates Google actually parsed for a page.
  3. An hreflang validator. Paste the set into a validator such as the site's Hreflang Validator, which flags duplicate keys and reciprocity gaps in one pass. Regenerate clean markup with the Hreflang Tag Generator to eliminate hand-editing mistakes.
  4. Diff the delivery methods. If some pages ship hreflang in the head and others in an XML sitemap, extract both and diff them — competing methods are a frequent hidden source of contradictions.

How to fix it

  1. Export the full annotation list for the affected URL cluster and build a two-column map: language-region key on one side, destination URL on the other.
  2. Enforce a strict one-to-one relationship. Delete any row that duplicates a key, and split any URL that is doing double duty into distinct pages.
  3. Rebuild the return tags so every member lists every other member with identical, consistent keys — if A calls B fr-ca, B must call itself fr-ca.
  4. Commit to a single delivery method for the whole set. Mixing head tags and sitemap entries is where most "phantom" conflicts hide.
  5. Re-crawl and confirm the Multiple Entries filter returns nothing.

Because reciprocity is where most of these break, it helps to review the mechanics of return tags in the hreflang implementation walkthrough and the canonical international SEO guide. If your generic-versus-regional split is the culprit, our note on lang and x-default shows how to keep the fallback distinct.

FAQ

Is it ever valid to list the same language twice?

Only with different region subtags — en-us and en-gb are fine. The bare same value (en twice) pointing at two URLs is always a conflict.

Can two pages share one hreflang URL if they're near-identical?

No. Each language-region key needs a unique destination. If two pages are that similar, merge them or canonicalize one to the other and annotate only the survivor.

Why does one bad row break the whole set?

Hreflang is bidirectional. A row that Google can't confirm leaves a dangling return tag, and depending on where the ambiguity sits, Google may distrust neighbouring entries rather than just the broken one.

My CMS injects hreflang and I also have a sitemap version — which wins?

Neither reliably. Running two methods for the same set is itself a conflict source. Turn one off so a single source of truth remains.

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.

Subscribe to our newsletter!

More from our blog