Missing Reciprocal Hreflang (No Return-Tag): How to Fix It

No Comments
Missing reciprocal hreflang (no return-tag): how to fix it

TL;DR: Hreflang must be reciprocal — if page A points to page B, page B has to point back to A (the "return tag"). Miss the return tag and Google ignores the whole language cluster, serving the wrong-language URL in the wrong region. Fix it by rendering one identical, self-referencing annotation block on every URL in the set.

What a missing reciprocal hreflang means

Hreflang annotations must be mutual: if your English page points to a French version with hreflang="fr", that French page has to point back with hreflang="en" — a "return tag." When A links to B but B doesn't link back to A, Google sees a broken, untrustworthy relationship and quietly ignores the entire cluster.

And here's the honest part most guides skip: hreflang is a signal, not a directive. Even when it's perfect, Google decides whether to swap in your localized URL — it's a hint, not a command. But a hint with no return tag isn't even a hint; it's noise Google discards, leaving the wrong-language page to show in the wrong region.

A real example and the fix

Broken — the English page annotates French, but the French page is silent:

<!-- On https://example.com/en/ -->
<link rel="alternate" hreflang="en" href="https://example.com/en/" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/" />

<!-- On https://example.com/fr/ -->
<!-- (no hreflang tags at all — the return tag is missing) -->

Fixed — every page in the set lists every page in the set, including itself, using identical absolute URLs:

<!-- Identical block on BOTH /en/ and /fr/ -->
<link rel="alternate" hreflang="en" href="https://example.com/en/" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/" />

The trick that fixes 90% of these: build the annotation block once and inject the exact same block on every URL in the cluster. Self-reference and reciprocity fall out for free.

Pick one method — don't mix

There are three ways to declare hreflang. Choose one and use it consistently; mixing HTML tags on some pages and sitemap entries on others is how return tags go missing.

MethodBest forWatch out for
HTML <link> in <head>Small/medium sites, static templatesBloats the head on large clusters
XML sitemap xhtml:linkLarge sites, many localesEvery URL must still self-reference
HTTP Link: headerNon-HTML files (PDFs)Harder to audit; easy to forget

How to detect it

  1. Screaming Frog hreflang tab: after crawling, open the Hreflang tab and its filters — "Missing Return Links" and "Non-Reciprocal" list exactly which pages fail to point back. This is the fastest full-site view.
  2. Search Console: the (legacy) International Targeting report and URL Inspection flag "no return tags" errors for hreflang pairs.
  3. curl the head: curl -s -A 'Mozilla/5.0' https://example.com/fr/ | grep -i hreflang on each URL in the cluster — every one should print the full set.
  4. Dedicated validator: our Hreflang Validator checks reciprocity and return tags for a URL set in one shot.

How to fix it

  • Make the block symmetric: generate one annotation set for the cluster and render the identical block on every member URL, self-reference included.
  • Use absolute URLs and correct codes: hreflang="fr" for language, hreflang="fr-CA" for language-region. Region-only codes like hreflang="CA" are invalid.
  • Add x-default: point it at your language-selector or primary page so Google has a fallback for unmatched users.
  • Don't point to noindexed or redirecting URLs: every hreflang target must be a live 200 that self-references. A hreflang pointing at a redirect breaks the return chain.
  • Generate it programmatically: our Hreflang Tag Generator spits out reciprocal blocks so you don't hand-maintain them.

Why return tags go missing in the first place

Almost nobody sets out to break reciprocity — it breaks itself through drift. A few repeat offenders:

  • A new locale added to some templates but not others. You launch /de/, wire it into the English and French heads, and forget the Spanish one. Now Spanish has no return tag to German.
  • Trailing-slash inconsistency. The generator emits /fr/ but a stray template links /fr. Google treats them as different URLs and the return chain snaps.
  • Hreflang pointing at a redirecting URL. The target 301s to a canonical, so the "return" lands on a URL that doesn't itself carry the annotation.
  • CMS caching one locale's head across all locales. Every page ends up advertising the same (wrong) alternate set.

The structural fix beats chasing individual errors: centralize the cluster definition, render it identically everywhere, and let self-reference and reciprocity be automatic properties of that one block.

Common mistakes

  • Region-only codes. hreflang="uk" is invalid — there's no "uk" language. Use en-GB.
  • Underscores instead of hyphens. It's en-US, never en_US.
  • Pointing hreflang at a noindexed or canonicalized-away URL. Every target must be an indexable 200 that self-references.

FAQ

Is hreflang a ranking factor?

No. It doesn't lift rankings — it's a signal that helps Google serve the right language/region version of a page that already ranks. Get it wrong and you show the wrong URL to the right user; get it right and you show the right one.

Does the return tag have to use the exact same URL?

Yes — character for character, including trailing slash and protocol. https://example.com/fr/ and https://example.com/fr are treated as different URLs and will break reciprocity.

Can I mix HTML tags and sitemap hreflang?

You can, but don't. Google reads both, but mixing methods is the single most common cause of missing return tags. Pick one and apply it everywhere.

Do I need to self-reference?

Yes. Every page must include an hreflang entry pointing to itself. Without self-reference the cluster is incomplete and Google may discard it even when reciprocity looks fine.

Where do I learn the whole system?

Read our complete hreflang implementation guide and the international SEO FAQ for edge cases like region targeting and canonical interplay.

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