Seven hreflang mistakes we find on international sites
The hreflang errors that show the wrong page in the wrong country, from missing return links and invalid codes to clashing canonicals, and how to audit them.
Hreflang is simple on paper: each version of a page lists every other version, and Google shows each searcher the right one. In practice it’s one of the most error-prone parts of an international site, and the errors are silent. Nothing breaks; the wrong page just ranks in the wrong country. These are the seven mistakes we find most often, and how to check your own setup.
How hreflang works
Hreflang annotations tell Google which URLs are language or regional versions of the same page. Each version lists all the others and, ideally, itself, while x-default names the fallback for everyone else. A complete set for one page looks like this:
<link rel="alternate" hreflang="en-GB" href="https://example.com/uk/" />
<link rel="alternate" hreflang="en-US" href="https://example.com/us/" />
<link rel="alternate" hreflang="tr-TR" href="https://example.com/tr/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />
Hreflang helps Google choose which version to show. It doesn’t boost rankings, and it doesn’t tell Google what language a page is in: Google works that out from the visible content.
1. Missing return links
If the en-GB page points to the tr-TR page but the Turkish page doesn’t point back, Google ignores that pair. Google lists missing return links first among common hreflang mistakes, and they’re the error we find most. They usually appear when versions live in different systems or launch at different times: the new Turkish pages were added to the English templates, but nobody updated the Turkish ones.
Hreflang annotations by page
| Page ↓ links to → | en-GB | en-US | tr-TR | x-default |
|---|---|---|---|---|
en-GB | present | present | present | present |
en-US | present | present | missing | present |
tr-TR | missing | present | present | present |
x-default | present | present | present | present |
2. Invalid language and region codes
Each value is an ISO 639-1 language code, optionally followed by an ISO 3166-1 alpha-2 region code. The classic error is en-UK: the United Kingdom’s assigned code is GB, so en-UK doesn’t target British searchers, and the value should be en-GB. A region code on its own is invalid, because the first code is always read as a language: Google’s own example is be, which means Belarusian, not Belgium.
Valid and invalid hreflang values
| Value | What it means | Verdict |
|---|---|---|
| en-GB | English, for the United Kingdom | Valid |
| en-UK | UK isn’t the assigned region code, so it doesn’t target the UK | Invalid |
| uk | Ukrainian, for any region | Wrong language |
| gb | A region on its own, with no language | Invalid |
| tr | Turkish, for any region | Valid |
| tr-TR | Turkish, for Türkiye | Valid |
| x-default | The fallback when no other version matches | Valid |
Case doesn’t matter, so en-gb and en-GB are equivalent. Meaning does.
3. Annotations pointing at the wrong URLs
Every URL in a hreflang set should return a 200, be indexable and be its own canonical. In audits we find annotations pointing at URLs that redirect (often an old path, or the http version), return a 404, carry noindex, or canonicalise somewhere else. Each of those breaks the pair, because the target isn’t a page Google will index in its own right. Generate annotations from the same source as your canonical URLs, not from a hand-maintained list.
4. Canonicals that point every version at one language
A related mistake is pointing the canonical of every language version at the English page, often because a plugin treats translations as duplicates. That tells Google the Turkish page is a copy of the English one, so it can drop out of the index, taking its hreflang with it. Google’s guidance is to specify a canonical in the same language. Translated pages aren’t duplicates: each version should be its own canonical.
5. A missing or wrong x-default
x-default tells Google which URL to show when no version matches the searcher’s language or region. It isn’t required, but without it Google picks the fallback itself. A wrong x-default can do more harm than a missing one: we see it pointing at a page outside the set, at a URL that redirects visitors by location, or at different URLs from different pages. Choose one fallback, usually your international English page or a language selector, and use it everywhere.
6. Inconsistent or partial implementation
Hreflang can live in the HTML head, in HTTP headers or in the XML sitemap. Google treats the three methods as equivalent, so using more than one adds maintenance without adding benefit, and leaves room for them to disagree. Headers are mainly useful for PDFs and other files without a head. We often find the head saying one thing and the sitemap another after a redesign, or hreflang on the homepage and main categories but missing from products and articles. Pick one method and apply it to every template that has equivalents.
7. Auto-redirects, and pages localised in name only
Redirecting visitors by IP address is risky: Googlebot mostly crawls from the US, so it may never see your UK or Turkish versions. Suggest the right version with a banner instead, and let people choose.
The quieter problem is pages localised in name only: en-GB and en-US pages with identical prices, spelling and delivery terms, or a “Turkish” page whose main content is still in English. Google judges language from the visible content, and near-identical pages give it little reason to keep them apart. Localising for the UK, the US and Türkiye means different spelling, prices, delivery terms and proof, not just a different flag in the header.
How to audit your hreflang
Since the International Targeting report was retired, Search Console no longer flags hreflang errors, so you need your own checks. Crawl every language version with a tool that extracts hreflang from the head, headers and sitemaps, then work through the list below.
Hreflang audit
- Crawl every language version and extract all annotations
- Confirm every pair is reciprocal, self-references included
- Validate codes: ISO 639-1 language, optional ISO 3166-1 region
- Check every target returns 200, is indexable and self-canonical
- Compare head, header and sitemap annotations if you use more than one
- Confirm a single, consistent x-default across the set
- Check Google’s selected canonical with URL Inspection
- Read each version as a local customer would
URL Inspection shows the canonical Google has selected for a URL. If it picked the English page for your Turkish URL, mistake 4 or 7 is the likely cause. Repeat the audit before and after any website migration, because hreflang is easy to lose when templates and URLs change. It’s also one of the first things we check in an international SEO review.
Not sure your hreflang is doing its job? Request a free SEO audit and a senior strategist will review your site’s technical health by hand, with your top priorities in your inbox within 48 hours.