24/10/2026
A version per market is useless if Google shows the wrong one to a Belgian or British user. The hreflang attribute links the equivalent versions of the same page and states the language, and where needed the country, of each one. This implementation guide covers valid codes, the three implementation methods, return tags, self-referencing and x-default, the mistakes that make Google ignore the signal and how to check them. The overall framework is covered in our guide to international SEO and multi-country structure.
What hreflang Does, and What It Does Not Do
The hreflang attribute, introduced in 2011, is carried by a <link rel="alternate"> element. It declares to Google a set of equivalent pages, each associated with a language and, optionally, a country. It is a signal, not a directive: Google applies it if the declarations are consistent and the pages genuinely equivalent.
Here is what it does, and what it is wrongly credited with:
- It selects the version displayed based on the user's language and region: the
fr-BEpage for a query from Belgium, theen-GBpage from the United Kingdom. - It stops close versions competing with each other: without it, two English pages for the United States and the United Kingdom may be treated as duplicates.
- It does not rank pages: hreflang is not a ranking factor.
- It does not replace localisation: an
fr-CHlabel on a page priced in euros does not create a Swiss version. - It does not work alone: since Search Console's International Targeting tool was removed in 2022, country targeting relies only on the ccTLD or on hreflang, and the annotation is only credible if the content follows.
So first check that each version exists for a reason: a different language, or real differences in pricing, delivery or offer. Otherwise, a single version is enough.
Syntax and Codes: ISO 639-1 Language, ISO 3166-1 Country
The hreflang value combines an ISO 639-1 language code, in lower case (fr, en, es), and where necessary an ISO 3166-1 alpha-2 country code, in upper case (FR, BE, GB). Google does not read the case, but the convention makes reviews easier. The following table lists the codes most often found in audits:
The es-419 code deserves a mention: it covers Latin America in one go and avoids duplicating an identical version for each country. How it fits with es-ES and es-MX is explained in our guide to Spanish SEO, from Spain to Latin America.
Language Only or Language and Country
A language alone (fr) is enough when the offer is the same everywhere: same prices, same terms, same contact details. As soon as currency, delivery, VAT, returns or product range change, add the country (fr-FR, fr-BE, fr-CH). A useful test: if a user in country A lands on the country B version, is the experience degraded? If yes, the country version is justified; if not, an fr page avoids near-duplicates.
Both levels can be combined in the same cluster: fr-FR, fr-BE, and fr for the other French-speaking countries.
The Three Methods: Tags, XML Sitemap, HTTP Header
Google recognises three ways of declaring versions, and they carry the same weight. Choose one primary method per page type: two methods that contradict each other create clusters that are impossible to diagnose.
Tags in the Head
Each version lists every version, including itself, with absolute URLs. Here is the <head> of the French version of a guide page available in four versions, with a selector page as x-default:
<html lang="fr-FR"><head><link rel="canonical" href="https://www.example.com/fr-fr/guide/" /><link rel="alternate" hreflang="fr-FR" href="https://www.example.com/fr-fr/guide/" /><link rel="alternate" hreflang="fr-BE" href="https://www.example.com/fr-be/guide/" /><link rel="alternate" hreflang="en-GB" href="https://www.example.com/en-gb/guide/" /><link rel="alternate" hreflang="en-US" href="https://www.example.com/en-us/guide/" /><link rel="alternate" hreflang="x-default" href="https://www.example.com/guide/" /></head>
The same list, unchanged, appears in the <head> of the fr-BE, en-GB and en-US pages. Only the canonical changes, since each version points to itself. Here, x-default designates the /guide/ selector page, not the homepage.
XML Sitemap With xhtml:link
A sitemap with xhtml:link annotations becomes the best option for thousands of URLs, multiple templates or limited access to the <head>. It requires the xhtml namespace to be declared at the top of the file:
<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>https://www.example.com/fr-fr/guide/</loc><xhtml:link rel="alternate" hreflang="fr-FR" href="https://www.example.com/fr-fr/guide/" /><xhtml:link rel="alternate" hreflang="fr-BE" href="https://www.example.com/fr-be/guide/" /><xhtml:link rel="alternate" hreflang="en-GB" href="https://www.example.com/en-gb/guide/" /><xhtml:link rel="alternate" hreflang="x-default" href="https://www.example.com/guide/" /></url></urlset>
Each version has its own <url> block with the complete list, self-reference included. The declared URLs must be exactly the indexable canonicals: same protocol, same trailing slash, no parameters that are not canonical.
HTTP Header for PDFs
For a PDF or a document served without HTML, the declaration goes through the HTTP Link: header, configured on the server. The rules do not change: each file lists all its versions and itself, and each URL returns 200 without a redirect. It is the only possible route when the resource has no <head> and no sitemap covers it.
Return Tags, Self-Referencing and x-default
Google treats the declarations as a cluster. Four rules determine whether they are taken into account, and a single break can make Google ignore all or part of the signal:
- Return tags: if A declares B, B must declare A, with the same set of versions.
- Self-referencing: each page lists itself in its own set.
- Absolute, indexable URLs: full protocol and domain, 200 response, no
noindex, no redirect, no robots.txt block. - Equivalent pages: same intent, same product or same article. Linking a French category page to a Belgian homepage breaks the cluster.
Building the Mapping by Template
At scale, return tags cannot be managed URL by URL. Build a mapping table by template: categories with categories, product pages with product pages, articles with articles. Tag generation then relies on this table. A template fix repairs thousands of pages at once, but a template mistake breaks them all. Roll out in stages and check a sample before each release.
Using x-default
x-default indicates the page to serve when no declared language or country matches the user: a language selector page, a neutral international page or the default version. Three mistakes recur in audits:
- setting as
x-defaulta page that is actually a country version, which muddies the signal; - pointing it to a redirected or non-indexable page;
- sending users from a product page or article to the homepage rather than to an equivalent page.
The value remains optional: without a useful neutral page, you can do without it.
Aligning the Other Signals: Canonical, lang Attribute, Generative Engines
Google cross-checks hreflang against the page's other declarations about its language and status. When they contradict each other, hreflang rarely wins.
A Self-Referencing Canonical per Version
Each version's canonical points to itself. If the fr-BE page canonicalises to fr-FR, you are sending two contradictory messages: "this version matters" through hreflang, "do not index it" through the canonical. Google then arbitrates against your international intent and keeps the canonical page. The same logic applies to alternates: only declare URLs that are their own canonical.
The canonical chooses which URL to index among duplicates of the same version; hreflang links different, legitimate versions.
The lang Attribute and Bing
<html lang="fr-FR"> describes the language of the page itself, whereas hreflang links several versions together. Keep the two aligned. Bing relies more on the content-language declaration and URL signals than on hreflang: an accurate lang attribute and a readable URL structure therefore serve both search engines.
There is no <meta name="hreflang"> tag: only the three methods described above are read.
One Version per Language for Generative Engines
ChatGPT, Perplexity, Gemini, AI Overviews and AI Mode answer in the language of the query and cite sources in that language. One version per language, indexable and served to the right market, is therefore what makes it possible to be cited in each language. Entities stay consistent from one version to the next: same organisation name, same facts.
AI Overviews are rolled out in 200 countries (Sebastien Vallat, 2026). AI Mode has been available in France since summer 2026, and further benchmarks are in our GEO statistics. Structured data markup with the inLanguage property complements hreflang by stating the language of each piece of content.
Defining Clusters: Equivalent Pages and Edge Cases
Most broken clusters stem from a question poorly framed upstream: which pages exist in which versions, and which ones are equivalent? Answer it template by template.
Facets, Pagination and Partially Translated Content
Five edge cases need an explicit rule:
- Facets and filters: a non-indexable filtered version is not declared as an alternate. See our e-commerce SEO guide.
- Pagination: only link paginated pages that are strictly equivalent, with the same sorting and the same display rules.
- Partially translated blog: incomplete clusters are acceptable, but each existing cluster stays reciprocal. An article without a translation carries no hreflang.
- Mixed pages: a half-translated page blurs the detected language.
- Non-indexable pages:
noindexpages, pages blocked by robots.txt, temporary sort pages and internal search results stay out of the cluster.
No Automatic IP-Based Redirects
Redirecting based on IP address or the Accept-Language header creates three problems:
- Googlebot mostly crawls from the United States: once redirected, it never sees some versions;
- travellers, VPN users and bilingual users can no longer reach the version they want;
- URLs lose their stability, since the same address returns different content depending on context.
Instead, offer a banner or selector that suggests the appropriate version, keep stable URLs and let hreflang do the routing in search results. Do not block Googlebot by country either.
The Most Common hreflang Mistakes and How to Fix Them
The same mistakes explain most cases of hreflang being ignored. The table links each one to the observed symptom and the fix to apply:
Fix in this order, from the most blocking to the finest:
- Blockers: 404 and 5xx,
noindex, robots.txt, redirects, canonicals pointing to another version. - Cluster consistency: return tags, self-reference, missing versions, invalid codes.
- Local quality: genuinely localised pages (pricing, delivery, legal terms) and intent equivalence between versions.
Checking the Tags: URL Inspection, Crawler and Code Review
Search Console's International Targeting report, which notably flagged missing return tags, was removed in 2022 along with the country targeting tool. At the time of writing, no Google report lists hreflang errors and there is no official hreflang tester. Checking combines three approaches.
URL Inspection in Search Console
URL Inspection in Google Search Console shows, for a given page, what Google has retained. The method comes down to four steps:
- check that the page is indexable and returns 200;
- compare the declared canonical with the canonical chosen by Google, as a gap signals a conflict;
- check the rendered HTML for the expected alternates;
- repeat on the equivalent version to confirm the return tags.
The Performance report filtered by country completes this check: a page receiving impressions in the wrong country reveals inconsistent mapping.
Crawler and Code Review
A test on a single URL can mask a problem elsewhere in the cluster. A crawler extracts alternates, HTTP statuses, canonicals and indexability in bulk, then spots missing return tags. Complete this with a review of the source code on a sample per template (categories, products, articles) and, where relevant, of the sitemap.
Pre-Release Checklist
Before publishing a new version or a new template, run through these seven points:
- valid ISO codes, language in lower case, country in upper case;
- self-reference present on every page;
- return tags across all versions in the cluster;
- absolute, final URLs returning 200 and indexable;
- self-referencing canonical on every version;
- same list in the tags and in the sitemap if both coexist;
- clusters built on equivalent pages,
x-defaultpointing to a selector or a default version.
Depending on Your Situation
Depending on where you are, these resources take the subject further:
- You are preparing a full site diagnosis, beyond language versions alone: our SEO audit method.
- You want to check that search engine and AI crawlers can access each version: our guide to the robots.txt file.
- You want to be cited in AI answers, market by market: our guide to Generative Engine Optimization.
- You are linking versions together in navigation and content: our guide to internal linking.
To spot missing return tags, contradictory canonicals and redirected or noindex alternates across an entire site, the Incremys 360° SEO & GEO audit checks hreflang, canonicals and indexing for each version, as well as the brand's presence in AI answers by country.
Frequently Asked Questions About hreflang
Is hreflang a ranking factor?
No. Hreflang does not push a page up the results. It tells Google which version to serve based on the user's language and country, and stops close versions competing with each other. A poorly ranked page stays poorly ranked, even with perfect annotations.
What is x-default for?
x-default designates the page to display when no declared version matches the user's language or country. It points to a language selector page or an equivalent default version, never to a redirected, non-indexable or unrelated page. Declaring it remains optional.
How do you check hreflang without a Search Console report?
By combining three checks. URL Inspection shows the canonical chosen by Google and a page's rendered HTML. A crawler extracts alternates, statuses and canonicals in bulk to spot missing return tags. Reviewing the code on a sample per template confirms the result.
Do you need a self-referencing canonical with hreflang?
Yes. Each version canonicalises to itself and declares the others as alternates. A canonical pointing to another version contradicts hreflang: Google indexes the canonical page and the version concerned disappears from the results in its market. Every declared URL must be its own canonical.
Should you write fr or fr-FR?
Both are valid. The fr code targets all French speakers, whatever their country; fr-FR targets France. Use the language alone when the offer is identical everywhere, and add the country when prices, delivery or terms differ. Both levels can coexist in a cluster.
Does Bing use hreflang?
Bing relies more on the content-language declaration and URL signals than on hreflang. To cover both search engines, keep an accurate lang attribute in the html element, a URL structure that makes language and country readable, and complete hreflang annotations for Google.
Do you need hreflang tags on a partially translated blog?
Only on articles that exist in several versions. An article without a translation carries no hreflang; a translated article lists its versions and itself, with return tags. Incomplete clusters are acceptable as long as each existing cluster links genuine, equivalent translations.
.png)
%2520-%2520blue.jpeg)

.jpeg)
.jpeg)
.avif)