You've done everything right. Every page has hreflang tags, the codes are correct, the URLs are absolute. Then Search Console shows it anyway: a warning that a chunk of your pages have "no return tags," and Google is quietly ignoring the annotation you spent hours adding. This is the single most common way hreflang fails, and it usually has nothing to do with the tags being wrong — it's about them not matching up.
This guide walks through exactly what a return tag error is, the specific ways it sneaks into a site that looks correctly configured, and how to audit and fix an entire cluster instead of chasing one broken pair at a time.
A return tag error occurs when one page in an hreflang set references another page as an alternate, but that second page doesn't reference the first one back. Hreflang is only considered valid when the relationship is confirmed in both directions across every page in the cluster, including a self-referencing tag on each page. When a return link is missing, Google typically disregards the annotation for that pair rather than guessing which page was correct.
What is a return tag error, exactly?
Hreflang isn't a one-way pointer. When Page A declares that Page B is its Spanish equivalent, Google requires Page B to declare Page A back as its English equivalent before it will trust the relationship. This is what's called a return tag, and it applies to every single pair inside a language or region cluster — including each page pointing back to itself.
<!-- On example.com/en/ --> <link rel="alternate" hreflang="en" href="https://example.com/en/" /> <link rel="alternate" hreflang="es" href="https://example.com/es/" /> <!-- On example.com/es/ --> <link rel="alternate" hreflang="es" href="https://example.com/es/" /> <!-- en tag missing here — no return link -->
<!-- On example.com/en/ --> <link rel="alternate" hreflang="en" href="https://example.com/en/" /> <link rel="alternate" hreflang="es" href="https://example.com/es/" /> <!-- On example.com/es/ --> <link rel="alternate" hreflang="en" href="https://example.com/en/" /> <link rel="alternate" hreflang="es" href="https://example.com/es/" />
With three or more pages in a cluster, the same rule multiplies fast — every page needs a complete list of every other page in the set. Miss one entry on one page, and that specific pair is broken, even if the other nine pairs in a ten-page cluster are fine.
Why return tag errors happen even when tags look correct
Most of the time, this isn't a case of forgetting to write the tags. It's a mismatch somewhere that makes two technically-present tags fail to recognize each other.
1. URL format mismatches
Google matches hreflang href values as exact strings. https://example.com/es/
and https://example.com/es (no trailing slash) are different URLs to a
crawler, even though they load the same page to a human. The same applies to
http vs https and www vs non-www
versions of a domain.
2. Redirected URLs used as hreflang targets
If the href in your hreflang tag points to a URL that 301-redirects somewhere else, Google generally won't follow the redirect and count the final page as fulfilling the return tag. The tag should always point straight at the final, canonical destination.
3. Cached or stale page versions
Some CDNs and full-page caches serve an older snapshot of a page for a while after it's updated. If a new page in the cluster was added but a cached version of an older page (without the new return link) keeps getting served to Googlebot, the error will persist until the cache clears — even though the live source code is already correct.
4. Partial rollout across templates
On larger sites, hreflang is often injected via a template or component. If that component was only updated on some page types (product pages, say, but not category pages), you get a cluster where some pages have full return links and others are missing entirely — a very common source of a "some pages pass, some don't" pattern in Search Console.
5. New pages added without updating the existing cluster
Launching a fourth regional version of a page means the three existing pages all need their hreflang block updated to include it. It's easy to publish the new page correctly and forget the older three still don't know it exists.
How to find every broken pair in your cluster
- Open the International Targeting report in Search Console. It lists specific URLs with hreflang issues, generally flagging missing return tags separately from invalid language codes.
- List every page you believe is in each cluster. Don't rely on memory — pull the actual set of language/region variants for each piece of content from your CMS or sitemap.
- Compare hreflang blocks side by side. For a small cluster, open each page's source and check that every other page in the set appears, including the self-reference.
- For larger clusters, use a crawler or validator tool that can pull the hreflang block from every URL in one pass and cross-reference them automatically, rather than opening dozens of pages by hand.
- Check the exact string, not just the page. Confirm trailing slashes, protocol, and domain format match precisely between the href value and the page's actual canonical URL.
Step-by-step: fixing a broken cluster
- Rebuild the cluster list from scratch. Write down the canonical URL for every language/region variant of the content, exactly as it resolves after any redirects.
- Normalize the URL format first. Decide on trailing-slash, protocol, and www conventions before writing a single hreflang tag, so every href you write already matches the site's actual canonical format.
- Generate the full tag set for every page at once rather than editing pages individually — this is where most return tag errors get introduced in the first place.
- Paste the matching block into each page, confirming each page includes every other page in the cluster plus itself.
- Re-validate before publishing with a validator tool to catch mismatches before Googlebot does.
- Request indexing on the affected URLs in Search Console to speed up recrawling, rather than waiting for the next natural crawl cycle.
- Recheck the International Targeting report after a few days to confirm the specific pairs have cleared, not just that new errors haven't appeared.
Common causes compared
A quick reference for diagnosing which cause you're actually dealing with.
| Cause | How it looks in GSC | Fix difficulty | How to confirm it |
|---|---|---|---|
| URL format mismatch | Consistent errors on the same pairs every crawl | Easy | Compare href strings character by character |
| Redirected hreflang target | Error persists despite tag looking correct | Easy | Check if the href URL returns a 301/302 |
| Caching / CDN staleness | Error appears, then clears without any code change | Moderate | Compare live HTML source vs cached response headers |
| Partial template rollout | Some page types pass, others in same cluster fail | Moderate | Check if affected URLs share a template or component |
| Cluster not updated after new page added | New URL's error mentions older, established pages | Needs full audit | Confirm older pages' hreflang blocks list the new URL |
Generate a return-tag-safe cluster right now — free
The Rebrixe Hreflang Generator builds a complete set of hreflang link tags for every page in your cluster in one pass, including the self-reference and x-default, so there's no page left out and no pair left one-directional. No account, no watermark.