Hreflang is an annotation that tells Google which language or regional version of a page to show each searcher. It links equivalent pages — for example a UK English, a US English and a German version — so Google can send people to the version that matches their language and location.
Key takeaways
- Google treats its three hreflang methods — HTML link tags, HTTP headers and XML sitemaps — as equivalent, and says using more than one brings no benefit in Search.
- Annotations must work both ways: if two pages don’t point to each other, Google ignores the tags.
- Codes combine an ISO 639-1 language with an optional ISO 3166-1 Alpha-2 region. A region on its own is invalid, and codes such as es-419 or en-UK aren’t supported.
- About one in five pages used hreflang in 2025 (20.3% desktop, 19.7% mobile) — roughly double 2024’s 9–10%, according to the HTTP Archive Web Almanac.
- Google doesn’t use hreflang or the HTML lang attribute to detect a page’s language; it reads the visible content.
What hreflang does — and what it doesn’t
When you publish the same page for different languages or regions, Google has to decide which one to show. Google’s documentation on localized versions of a page says hreflang helps Google Search “point users to the most appropriate version of your page by language or region.” Google may find alternate versions without it, but it says it is usually best to label them explicitly.
Google recommends hreflang in three situations:
- Only the template is translated — the navigation and footer change, but the main content stays in one language (common on forums and other user-generated content).
- Small regional variations in one language — for example English pages for the US, Great Britain and Ireland that differ mainly in prices, spelling or shipping details.
- Fully translated content — for example a German and an English version of every page.
Two points cause a lot of confusion. First, Google says localized versions are only treated as duplicates if the main content stays untranslated. Second, hreflang is a hint about alternates, not a language detector: Google says it uses algorithms, not hreflang or the lang attribute, to work out what language a page is in. If a “French” page is mostly English, hreflang won’t fix that.
Multilingual, multi-regional or both?
Google’s guide to managing multi-regional and multilingual sites separates the two ideas. Knowing which one you are shapes your URL structure and your hreflang codes.
Multilingual
- Offers content in more than one language
- Example: a Canadian business with English and French versions
- Google tries to match the searcher’s language
- hreflang codes are often language-only:
en,fr
Multi-regional
- Explicitly targets users in different countries
- Example: a manufacturer shipping to Canada and the United States
- Google tries to find the right locale page
- hreflang codes add a region:
en-CA,en-US
Plenty of sites are both — say, separate US and Canadian sections, with the Canadian content in English and French. In that case each page simply belongs to a larger cluster of language-region combinations.
Choose a URL structure first
Hreflang needs a separate URL for every version. Google recommends different URLs for each language rather than using cookies or browser settings to switch the content, partly because Googlebot usually crawls from the US and sends requests without an Accept-Language header — so it may never see your other versions. Google compares the main options like this:
| Structure | Example | Pros (per Google) | Cons (per Google) |
|---|---|---|---|
| Country-code domain (ccTLD) | example.de | Clear geotargeting; server location irrelevant; easy separation of sites | Expensive; more infrastructure; strict ccTLD rules in some countries; targets a single country |
| Subdomain on a gTLD | de.example.com | Easy to set up; different server locations allowed; easy separation | Users might not know if “de” means language or country |
| Subdirectory on a gTLD | example.com/de/ | Easy to set up; low maintenance (same host) | Geotargeting less obvious to users; single server location; harder to separate |
| URL parameters | site.com?loc=de | — | Not recommended: URL-based segmentation is difficult |
For most small and mid-sized businesses, subdirectories are the practical default: one domain, one hosting setup and one link profile. ccTLDs make sense when you have a genuine local operation in a country and the budget to run a separate site. Whatever you choose, note that Google treats some country codes — including .io, .co, .ai, .me and .tv — as generic domains, and treats .eu and .asia as generic too.
How widely is hreflang used?
The HTTP Archive Web Almanac 2025 SEO chapter found hreflang on 20.3% of desktop pages and 19.7% of mobile pages in the raw HTML (20.8% and 20.2% after rendering). That is roughly double the 9–10% recorded a year earlier. The small gap between raw and rendered figures suggests most sites output hreflang server-side rather than relying on JavaScript to add it.

Usage is concentrated in a few values. English leads, closely followed by x-default — a sign that many international sites already provide a fallback page. French, German and Spanish form the next tier.
The three ways to implement hreflang
Google supports three methods and says they are equivalent. Pick the one your platform can maintain reliably — running two or three at once only creates more places for errors.
| Method | Where it lives | Best for | Watch out for |
|---|---|---|---|
HTML <link> elements | Inside the <head> of every version | Smaller sites and CMSs with a plugin or template control | Tags must sit in a well-formed <head>; invalid elements above them can push them into the body, where they are ignored |
HTTP Link: header | The server’s response to each URL | Non-HTML files such as PDFs | Every version must return an identical header listing all versions |
| XML sitemap | <xhtml:link> children of each <url> | Large sites; changes managed centrally | Each URL entry lists every version, including itself; declare the xhtml namespace |
Here is what a complete set of HTML annotations looks like for a page with UK, US, generic English and German versions plus a language-selector home page. The same block goes on every version:
<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="en" href="https://example.com/en/page/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/page/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />
In a sitemap, Google notes that the <xhtml:link> child entries don’t count towards sitemap URL limits — useful if you are already managing large sitemaps (see our guide to XML sitemaps and crawl budget).
The rules every hreflang cluster must follow

- List every version, including itself. Each page names all its alternates and its own URL.
- Make every link reciprocal. Google says that if two pages don’t both point to each other, the tags are ignored — this stops other sites claiming to be an alternate of yours.
- Use fully qualified URLs.
https://example.com/foo, not//example.com/fooor/foo. Alternates can sit on different domains. - Use valid codes. Language in ISO 639-1, optionally followed by a region in ISO 3166-1 Alpha-2.
- Add an
x-default. Google recommends it as the fallback for users whose language settings match none of your versions; it was designed for language-selector pages.
If maintaining every pair becomes impractical on a big site, Google says you can omit some languages on some pages and it will still process the pairs that do point to each other. Its advice is to prioritise two-way links between new language versions and your original, strongest version.
Language and region codes: what’s valid
| Code | Valid? | Why |
|---|---|---|
de | Yes | Language only: German, for any region |
en-GB | Yes | English for users in the United Kingdom (GB is the ISO region code) |
de-BE, nl-BE, fr-BE | Yes | German, Dutch and French for users in Belgium |
be | Not for Belgium | be is the language code for Belarusian; Google doesn’t derive a language from a country code |
en-UK, en-EU | No effect | UK and EU are reserved codes; Google says they have no effect in Search |
es-419 | Not supported | 419 (Latin America) isn’t an ISO 3166-1 Alpha-2 code |
zh-Hant, zh-Hans-US | Yes | Script variants using ISO 15924, optionally with a region |
x-default | Yes | Reserved fallback value for unmatched languages |
Codes are case-insensitive, but Google notes that writing regions in uppercase (en-GB) follows the ISO convention — and it makes audits easier to read.
Common hreflang mistakes and how to fix them
| Mistake | What happens | Fix |
|---|---|---|
| Missing return links | Annotations may be ignored or misread | Generate the full cluster from one source (a mapping table or CMS field) so every page outputs the same set |
| Region code used alone, or wrong code | The annotation, or part of it, is ignored | Validate codes against ISO 639-1 and ISO 3166-1 Alpha-2 |
| Relative or protocol-less URLs | Breaks Google’s fully-qualified URL rule | Output absolute https:// URLs |
| Automatic redirects by language or IP | Users and Googlebot may never see some versions | Show a language/region switcher instead; Google advises against IP-based adaptation |
| Mixed-language pages | Google may detect the wrong language | Use one language for content and navigation on each page; avoid side-by-side translations |
| Same-language duplicates across regions with no preferred version | The wrong regional URL may be shown | Pick a preferred version and use rel=”canonical” alongside hreflang, as Google recommends |
Canonical tags and hreflang have to agree with each other. If you are unsure how Google picks a canonical URL, start with our guide to canonical tags and duplicate content. And if your hreflang tags are injected by JavaScript, check they appear in the rendered HTML — our JavaScript SEO guide explains how.
A 7-step hreflang setup process
- Define your markets. List each language and, where relevant, each country you actually serve. Decide whether you are multilingual, multi-regional or both.
- Choose the URL structure. ccTLDs, subdomains or subdirectories — and give every version its own URL rather than switching content with cookies.
- Build a mapping table. One row per page, one column per locale, with the full URL in each cell. This becomes the single source for every annotation.
- Pick one implementation method. HTML tags, HTTP headers or the sitemap — not all three.
- Add
x-default. Point it at a language selector or your most generic version. - Let users switch. Add visible links to the other versions on every page and avoid automatic language redirects.
- Validate and monitor. Check the rendered
<head>, return links, codes and absolute URLs, then recheck after every release or new market launch. Google lists third-party testing tools but notes it doesn’t maintain them.
Frequently asked questions
Does hreflang improve rankings?
Google describes hreflang as a way to help Search point users to the most appropriate language or regional version of a page. Its documentation doesn’t describe it as a ranking boost; the benefit is that the right version is shown to the right audience.
Do I need hreflang if my site is only in one language?
Usually not, unless you publish regional variants in that language — for example separate English pages for the US, UK and Ireland. Google lists that as one of the scenarios where indicating alternates is recommended.
Can hreflang point to pages on a different domain?
Yes. Google says alternate URLs don’t need to be on the same domain, so a cluster can mix, say, example.de and example.com/fr/. The links must still be reciprocal.
Should I use hreflang and canonical tags together?
Yes, when you have similar or duplicate content in the same language on different URLs. Google recommends picking a preferred version and using rel=”canonical” together with hreflang so the correct language or regional URL is served.
Sources
- Tell Google about localized versions of your page — Google Search Central (updated September 21, 2026) — methods, cluster rules, supported codes, x-default, common mistakes
- Managing multi-regional and multilingual sites — Google Search Central (updated December 10, 2025) — URL structures, locale signals, redirects, generic TLDs
- SEO chapter, Web Almanac 2025 — HTTP Archive (published January 15, 2026; updated June 9, 2026) — hreflang adoption and values used
Cite this article: Bright Harbour Media. “Hreflang and International SEO: A Practical Guide.” Bright Harbour Media Insights, October 2026. https://brightharbourmedia.com/hreflang-international-seo/
You are welcome to reference the charts and frameworks in this article with a link back to this page.
Planning a launch in a new country or language? Our technical SEO service covers URL structure, hreflang mapping and validation. Get in touch to talk it through.

