
What "conflicting outgoing" means
Hreflang is a set of annotations that tell Google which URL serves each language and region. Each annotation is a pair: a language or region code, and the single URL that code maps to. The rule is one to one. A given code, say de-AT for German in Austria, must resolve to exactly one URL from any page that references it.
A conflicting outgoing annotation is when one page emits the same code twice or more, pointing at different URLs. The page says hreflang="fr" href=".../fr/page-a/" and also hreflang="fr" href=".../fr/page-b/". Now Google has two candidates for French and no way to know which one you meant. "Outgoing" is the direction: these are the annotations leaving this page, as opposed to what other pages point back at it. The word conflicting is the diagnosis: the outgoing set contradicts itself.
Why Google throws it out
Hreflang only works when the signals are consistent. Google has said that if it finds conflicting or invalid hreflang annotations, it may ignore some or all of them. It does not guess. Faced with two URLs claiming the same code, the safe move for Google is to discard the ambiguous mapping, and often the surrounding cluster with it, then fall back to its own judgment about which page to serve.
The practical damage: the wrong language version can surface for a user, or your carefully built alternates get ignored and Google picks based on other signals. For a site that invested in localization, that is your whole international targeting quietly failing. The pages still exist, they just stop being connected the way you intended. That is the frustrating part, because the content is fine; the wiring is what broke.
What a conflict looks like
The usual causes
Conflicts rarely come from someone typing the same tag twice on purpose. They come from generation logic and duplication:
- Two systems both emit hreflang. A plugin and a theme, or a CMS and a CDN edge worker, each write their own set, and the two disagree on which URL a code maps to.
- Trailing slash and protocol drift. One annotation uses
/fr/page/and another/fr/page, or one is http and the other https. To a validator those are different URLs for the same code. - Parameter and case variants. A tracking parameter or a difference in capitalization produces two distinct URLs for one language.
- Stale mappings after a migration. Old hreflang entries survive a restructure and now point at moved or redirected URLs alongside the new correct ones.
- Region and language mixups. A template outputs both
frandfr-FRpointing at different URLs when they should agree or the plan should choose one.
Reference: conflict patterns and fixes
| Pattern | Why it conflicts | Fix |
|---|---|---|
| Same code, two hrefs | Google has no tiebreaker | Delete the wrong one |
| Slash vs no slash | Counted as two URLs | Standardize on canonical form |
| http and https for one code | Protocol mismatch | Use absolute https everywhere |
| Two plugins output hreflang | Duplicate, disagreeing sets | Disable one source |
| Redirecting URL in the set | Points away from the real page | Point at the final 200 URL |
How to detect it
- Screaming Frog. Its hreflang tab and reports flag inconsistent, missing, and conflicting annotations across a full crawl. This is the fastest way to find every offending page at once.
- Search Console, International Targeting. The legacy report and general coverage signals still surface hreflang problems Google encountered, including ignored annotations.
- A dedicated hreflang validator. Tools that parse a URL's annotations will show you exactly which code is claimed by more than one href.
- View source and the raw HTML. Grep the head for repeated
hreflangvalues. If one code appears twice with different hrefs, you have found it. Do the same for HTTP header and sitemap hreflang if you use those delivery methods, since the conflict can live in any of the three. - Check all three delivery channels. Hreflang can ship in the HTML head, in HTTP headers, or in the XML sitemap. Mixing methods is a common way to create a conflict without noticing, so audit whichever ones your stack uses.
- Map every language and region code to one URL
- Use absolute https URLs in a consistent format
- Pick a single system to generate hreflang
- Point annotations at final 200 pages, not redirects
- Validate the full cluster with Screaming Frog
- Emit the same code with two different hrefs
- Let a plugin and theme both write hreflang
- Mix slash and no slash versions of one URL
- Leave stale mappings live after a migration
- Assume a conflict only weakens one code, it can void the set
How to fix it, step by step
- Find the source of truth. Decide which system owns hreflang generation and turn the others off. Two generators is the most common root cause and it will keep reappearing until you consolidate.
- Deduplicate every code. For each page, ensure each language and region code appears exactly once. Delete the extra annotations, do not just reorder them.
- Normalize the URLs. Absolute, https, one consistent trailing slash convention, no tracking parameters. This kills the slash and protocol variants that masquerade as separate URLs.
- Confirm return links. Hreflang must be bidirectional. Once outgoing is clean, verify each referenced page points back with a matching annotation. A missing return link is the next error you will hit.
- Recrawl and verify. Run Screaming Frog again and check the validator until the conflict is gone across the whole cluster, not just the page you started with.
What good looks like
Every page emits one hreflang set from one system. Each code maps to exactly one absolute https URL. There are no duplicate codes, no slash or protocol variants, and no redirecting targets. Return links match in both directions, and a fresh Screaming Frog crawl reports zero hreflang conflicts. Google honors your mapping and serves the right language version to the right audience.
FAQ
Does a conflict only break the one code, or the whole set?
Can I have both fr and fr-FR pointing at different URLs?
Is a trailing slash difference really treated as two URLs?
/fr/page/ and /fr/page are different strings. If your annotations mix them for one code, a validator will read that as a conflict, so standardize on one form site wide.Where should I put hreflang to avoid conflicts?
International targeting quietly failing?
Conflicting hreflang is one of those errors that never throws a visible warning, it just makes your localization stop working. A technical audit maps every annotation and finds the conflicts before they cost you traffic in the wrong markets.
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.







