Hreflang and International SEO: Complete Implementation Guide
By Kavi, SEO Consultant · Last updated: 3 September 2026
Hreflang annotations tell Google which language and regional version of a page to show to which users. They are a signal for selecting between alternates, not a ranking factor, and they must be reciprocal: every page in a set must reference every other page including itself. A one-way hreflang reference is ignored.
What is hreflang?
Hreflang is an annotation that connects pages serving equivalent content in different languages or for different regions. It does not make a page rank; it helps Google show the right version of a page that would already rank.
<link rel="alternate" hreflang="en-gb" href="https://example.com/en-gb/page/" />
<link rel="alternate" hreflang="en-us" href="https://example.com/en-us/page/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/page/" />
Hreflang is the most error-prone annotation in technical SEO. The rules are strict, the failures are silent, and a broken implementation is not merely useless, it can cause Google to show the wrong regional page to your customers.
Quick facts
| Item | Detail |
|---|---|
| Purpose | Selects between alternates; does not boost rankings |
| Reciprocity | Required. Every page references every other, including itself. |
| Language codes | ISO 639-1, two letters, e.g. en, fr, hi |
| Region codes | ISO 3166-1 Alpha-2, e.g. GB, US, IN. Optional. |
| Order | Language first, then region: en-gb, never gb-en |
| x-default | Fallback for unmatched users. Strongly recommended. |
| Implementation options | HTML head, HTTP header, or XML sitemap |
| Used by | Google and Yandex. Bing uses content-language instead. |
When do you need hreflang?
You need it when you have substantially equivalent content at more than one URL for different audiences:
- Same language, different regions: English for the UK, US, and India. This is the most common case and the one most often neglected.
- Different languages, same content: an English and a Hindi version of the same page.
- Regional pricing, currency, or legal terms on otherwise identical pages.
You do not need it when you have one site for one audience, when pages differ substantively in content rather than in language or region, or when you have only translated part of a page.
Expert tip: the most valuable use of hreflang is the least glamorous one. Same-language regional variants, en-gb against en-us, look like duplicate content to Google without it. Adding hreflang here prevents your UK page competing with your US page and stops Google picking the wrong one for each market. That is a real commercial problem, and it is entirely solvable with correct annotations.
How hreflang works
- Google discovers the annotations on each page in the set.
- It verifies reciprocity. If page A points to B but B does not point back to A, the annotation is discarded.
- It groups the confirmed set as alternates of one another.
- At query time it selects the version matching the user’s language setting and location.
- If no version matches, it uses the x-default page.
Note step two carefully. Reciprocity is not a best practice, it is a validation requirement, and one missing back-reference silently invalidates that pairing.
Implementation methods
| Method | Where | Best for | Drawback |
|---|---|---|---|
| HTML link elements | In <head> |
Small to medium sites | Page weight grows with the number of alternates |
| HTTP Link header | Response headers | PDFs and non-HTML files | Harder to inspect and debug |
| XML sitemap | Sitemap file | Large sites, many alternates | Verbose; must stay in sync with the site |
Pick exactly one method and use it consistently. Mixing methods is a frequent source of contradictory annotations. For large sites, the sitemap approach keeps page weight down and centralises the mapping; see the XML sitemap guide.
How to implement hreflang, step by step
Step 1: Map your alternates
Build a spreadsheet: one row per piece of content, one column per language or region variant, with the exact canonical URL in each cell. Blank cells mean that variant does not exist and must not be referenced.
Step 2: Choose your codes correctly
Language is ISO 639-1, region is ISO 3166-1 Alpha-2, and language comes first. Region alone is invalid: hreflang="in" means the Indonesian language, not India. Use hi-in or en-in.
Step 3: Include a self-reference
Every page in the set must reference itself as well as the others. Omitting the self-reference is the single most common implementation error.
Step 4: Add x-default
Point it at your global or language-selector page. It is the fallback for every user whose language and region match nothing in your set.
Step 5: Point at canonical URLs only
Use absolute URLs. Every hreflang target must return 200, be indexable, and be self-canonical. An hreflang pointing at a redirect or a page that canonicalises elsewhere conflicts with itself and is discarded.
Step 6: Validate
Crawl the site with hreflang extraction enabled and check for missing return links, invalid codes, and non-200 targets. Machine validation is essential here; visual inspection of a large set will not catch reciprocity errors.
Complete example
Three variants, correctly cross-referenced. Each of the three pages carries all four lines, identically:
<link rel="alternate" hreflang="en-gb" href="https://example.com/en-gb/pricing/" />
<link rel="alternate" hreflang="en-us" href="https://example.com/en-us/pricing/" />
<link rel="alternate" hreflang="hi-in" href="https://example.com/hi-in/pricing/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/pricing/" />
URL structure options for international sites
| Structure | Example | Geo-targeting strength | Cost and effort |
|---|---|---|---|
| ccTLD | example.in | Strongest | Highest: separate domains and authority |
| Subdirectory | example.com/in/ | Good, set in Search Console | Lowest; keeps authority consolidated |
| Subdomain | in.example.com | Good, set in Search Console | Medium; signals partly separated |
| Parameter | example.com?loc=in | Not recommended | Low effort, poor results |
For most businesses, subdirectories are the right answer. They keep link authority on one domain, they are cheap to run, and they can still be geo-targeted. ccTLDs make sense when local trust genuinely drives conversion or when legal requirements demand it.
Common hreflang mistakes
| Mistake | Consequence | Fix |
|---|---|---|
| Missing return links | The whole pairing is ignored | Every page references every other |
| No self-reference | Set treated as invalid | Include the page itself |
| Region code used alone | Wrong language targeted, or invalid | Always language, optionally plus region |
| Reversed order (gb-en) | Invalid, ignored | Language first |
| Relative URLs | Frequently misresolved | Absolute URLs |
| hreflang pointing at a redirect | Annotation discarded | Point at the final URL |
| hreflang conflicting with canonical | Contradictory signals | Each page self-canonical |
| hreflang on noindexed pages | Ignored entirely | Targets must be indexable |
| Invalid codes such as en-uk | Ignored (the code is GB, not UK) | Use ISO 3166-1: gb |
| Missing x-default | Unmatched users get an arbitrary version | Add a fallback |
| Mixing HTML and sitemap methods | Conflicting annotations | Choose one method |
| Auto-redirecting by IP | Blocks Googlebot from seeing other versions | Offer a banner or selector instead |
Decision guide
- One country, one language: you do not need hreflang at all.
- Same language, several countries: hreflang is essential to prevent self-competition.
- Several languages, one country: hreflang by language code alone, no region needed.
- Partially translated site: annotate only the pages that genuinely have equivalents.
- Under ten pages per language: HTML head implementation.
- Thousands of pages: sitemap implementation.
Hreflang checklist
- Every page in a set references every other page, including itself
- x-default present and pointing at a sensible fallback
- Language codes are valid ISO 639-1
- Region codes are valid ISO 3166-1 Alpha-2, and gb is used rather than uk
- Order is language then region
- All URLs absolute
- All targets return 200, are indexable, and are self-canonical
- No hreflang target is a redirect
- One implementation method only
- No automatic IP-based redirects
- Geo-targeting set in Search Console for subdirectories or subdomains
- Validated by a crawler, not by eye
Frequently asked questions
Does hreflang improve rankings?
No. It helps Google choose which of your existing pages to show to a given user. It resolves duplication between regional variants, which can prevent losses, but it does not create ranking gains on its own.
Is hreflang required if all my pages are in English?
Only if you have separate English pages for separate countries. One English site for a global audience needs nothing.
What happens if hreflang is wrong?
Google ignores the broken annotations and falls back to its own judgement. Users may then see the wrong regional version, which is a conversion problem rather than a ranking penalty.
Should I use en-uk?
No. The ISO 3166-1 code for the United Kingdom is GB, so the correct value is en-gb. en-uk is invalid and ignored.
Do I need x-default?
It is not mandatory but it is strongly recommended. Without it, users whose language and region match none of your variants get an arbitrary choice.
Does Bing use hreflang?
Bing has stated it relies primarily on the content-language meta tag rather than hreflang. If Bing matters to your market, implement both.
Should I auto-redirect users by their IP address?
No. Googlebot typically crawls from a limited set of locations, so IP redirection can prevent it from ever seeing your other versions. Suggest the local version with a banner and let the user choose.
Key takeaways
- Hreflang selects between alternates; it is not a ranking factor.
- Reciprocity is a validation requirement, not a nicety.
- Always include a self-reference and an x-default.
- Language first, region second; gb not uk.
- Targets must be absolute, 200-status, indexable, and self-canonical.
- Use one implementation method consistently.
- Subdirectories are the right default structure for most international sites.
Conclusion
Hreflang rewards precision and punishes approximation. Build the mapping spreadsheet first, generate the annotations from it programmatically, and validate with a crawler rather than by inspection. If you only take one thing from this: same-language regional variants without hreflang are competing with each other, and that is the case worth fixing first.
Related articles
- Technical SEO guide
- Canonical tags and duplicate content
- XML sitemaps explained
- Site architecture and URL structure
- How to do a technical SEO audit