You translated your site, added hreflang, and… nothing changed. German visitors still land on the Italian page, the wrong language outranks the right one in the wrong country, and Search Console keeps flagging “no return tags.” Here’s the uncomfortable truth about hreflang: Google treats it as a hint, and the moment your annotations look inconsistent, it quietly discards the entire set. These are the seven mistakes we find most often in audits — and exactly how to fix each one.
First, what hreflang actually does
hreflang is a set of annotations that tell Google which language and region each version of a page is meant for, so it can serve the right one in search results. It does not boost rankings — it stops the wrong-language page from showing to the wrong person. For it to work, every page in a language group has to agree with every other page. One broken link and Google throws the whole group out.
1. Missing return tags
Symptom: Search Console reports “No return tags.” Your pages point outward to their translations, but those translations don’t point back.
Fix: hreflang must be bidirectional. If your English page references the German one, the German page must reference the English one. Think of it as a mutual handshake — every page in the set lists every version, and if even one link is one-directional, Google ignores the pair. This single mistake is the number-one reason hreflang silently fails.
2. Invalid language and region codes
Symptom: Codes like en-uk, en-eu, or de-german. Google can’t parse them, so it drops the annotation.
Fix: Use an ISO 639-1 language code (en, de, sq), optionally followed by an ISO 3166-1 Alpha-2 region code (GB, DE, AL), in the form language-REGION. The United Kingdom is GB, not UK. There is no code for “Europe.” The language part is required; the region is optional and only needed when you target the same language in different countries.
3. No x-default
Symptom: A visitor whose language you don’t target gets a more-or-less random version, and you have no fallback to control it.
Fix: Add an x-default annotation pointing to your default page or language selector. It’s what Google serves when none of your other versions match the user — your safety net for every market you haven’t explicitly targeted.
4. hreflang fighting the canonical tag
Symptom: Your German page canonicalizes to the English page. Google follows the canonical, decides the German page is just a duplicate, and ignores its hreflang entirely.
Fix: Each language version must canonicalize to itself. The canonical tag says “this is the original”; hreflang says “here are its language siblings.” They must never contradict — a page’s canonical and its self-referencing hreflang should point to the exact same URL.
5. Annotations pointing at dead or non-final URLs
Symptom: hreflang URLs that 404, redirect, are noindexed, or are blocked by robots.txt. Google can’t index the target, so it discards the annotation.
Fix: Every hreflang URL must be the final, absolute, indexable https URL — no relative paths, no redirect chains, no noindex. If a URL changes, the annotation has to change with it.
6. Missing the self-referencing tag
Symptom: A page lists all of its translations but forgets to list itself.
Fix: Every page must include an hreflang entry for its own URL and language. If you run three languages, each of the three pages carries all three annotations — one of which points back to itself. On the English (UK) page it looks like this:
<link rel="alternate" hreflang="en-gb" href="https://example.com/uk/" />
<link rel="alternate" hreflang="de-de" href="https://example.com/de/" />
<link rel="alternate" hreflang="sq" href="https://example.com/sq/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />
Notice the page includes its own en-gb line. The German and Albanian pages carry the identical four lines — only the self-reference differs.
7. Letting hreflang go stale
Symptom: You add a new market or retire a page, but the annotations still reference the old set. Broken references invalidate the whole group.
Fix: Treat hreflang as a living system, not a one-time task. Generate it automatically from your CMS or XML sitemap so annotations regenerate whenever pages are added, moved, or removed — then re-validate after every structural change.
How to check yours in five minutes
Crawl your site with any SEO tool that validates hreflang, and confirm three things across your language versions: every annotated URL returns a 200 status (no redirects, 404s, or noindex); every page self-references and the set is fully reciprocal; and every page’s canonical matches its own self-hreflang URL.
If any one of those fails, Google is likely ignoring your translations right now — which means the wrong pages are showing in the wrong countries, and you’re competing against yourself. This is exactly the kind of silent, fixable problem our hreflang & international SEO work is built around.
Broken hreflang doesn’t throw an error your visitors can see. It just quietly sends the wrong language to the wrong market — for months — until someone checks.
Selling in more than one language? Get a free snapshot and we’ll show you which markets Google is misrouting today.