Hreflang

What hreflang is, the three ways to implement it, the reciprocal and self-referential rules, valid language/region codes, and how to audit clusters at scale.

First published: Jun 25, 2026 · Last updated: Jul 18, 2026 · Advanced
demand #1 in Hreflang#1 in International SEO#54 on the site
1 evidence signal on this page

Hreflang tells search engines which language/region version of a page to show which user. You declare it one of three ways — HTML head tags, HTTP headers, or XML sitemap — using ISO 639-1 language + ISO 3166-1 alpha-2 region codes. It only works as a reciprocal cluster: every page must link to itself and to all its alternates, and if any return link is missing, Google ignores the pair. It's a hint, not a directive — wrong hreflang is ignored, not penalized. It's also fragile: in my study of 374,756 hreflang-using domains, over 67% had at least one issue. Bing barely uses it (content-language is the stronger signal there). This hub explains the whole thing and points you to the deep dives.

TL;DR — HreflangHreflang is an annotation (in HTML, HTTP headers, or XML sitemaps) that tells search engines which language and optional region a page targets, and which alternate versions exist. It only works when every page in the cluster references all the others. is a reciprocal cluster signal: every page lists itself and all alternates, and a missing return tag voids the pair. Declare it one way only — HTML head, HTTP Link headers (PDFs), or XML sitemapAn XML sitemap is a UTF-8 file listing the canonical URLs on your site (with optional lastmod) so search engines can discover and prioritize them. It's a discovery and diagnostic aid, not a guarantee of indexing — and Google ignores its priority and changefreq tags. (best at scale). Codes are ISO 639-1Two-letter language codes used in hreflang (en, es, de). language + ISO 3166-1 alpha-2Two-letter country codes used in hreflang region targeting (us, gb, au). region; en-UK is wrong, it’s en-GB. It’s a hint, not a directive (Mueller) — wrong hreflang is ignored, not penalized, and Google can override it for same-language consolidation or indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. reasons. It breaks constantly: in my Ahrefs study of 374,756 domains, over 67% had at least one issue. Bing treats it as a far weaker signal than content-language. Audit clusters visually rather than in spreadsheets.

Hreflang is a cluster, not a tag

Hreflang sits between one piece of content and the right version showing up for each market's search. Source: /international-seo/hreflang/

© Patrick Stox LLC · CC BY 4.0 ·

A hreflang cluster is a bidirectional graph — one missing return link breaks just that pair. Source: /international-seo/hreflang/

© Patrick Stox LLC · CC BY 4.0 ·

The mental model that fixes most hreflang confusion: it isn’t a per-page tag, it’s a bidirectional graph. Google’s own requirement is blunt — “Each language version must list itself as well as all other language versions,” and “if two pages don’t both point to each other, the tags will be ignored.” So if page X points to Y but Y doesn’t point back to X, that edge is silently dropped. One missing return tag can cause the affected annotations to be ignored or interpreted incorrectly — but Google says it can still process the pairs that are correctly reciprocal, so one broken relationship doesn’t necessarily take down every annotation in a larger cluster.

Evidence for this claim Each hreflang set should include the page itself, use fully qualified URLs, and include return links; without reciprocity, the affected annotations may be ignored or misinterpreted. Scope: Google Search hreflang guidelines; the documentation does not say one missing return link invalidates every annotation in a cluster. Confidence: high · Verified: Google: Localized versions guidelines

Two non-negotiables flow from that:

  • Reciprocity. Every reference must be returned. This is where implementations break at scale — the moment one template, one CMSA content management system (CMS) is software that lets users create, manage, and publish digital content — like blog posts and pages — without writing raw code. WordPress, Drupal, and Joomla are the most common open-source CMS platforms. field, or one region’s pages fall out of sync, return links go missing.
  • Self-reference. Each page lists itself. Mueller calls it “optional—but good practice”; in practice, a self-referential set is the cleanest way to keep clusters consistent and is flagged as an issue when missing.

Absolute, fully-qualified URLs are required too — https://example.com/foo, never //example.com/foo or /foo.

Three methods — and the trade-offs

Google treats HTML tags, HTTP headers, and XML sitemapsA sitemap is a file that lists the pages, images, videos, and other files on your site so search engines can discover them. It helps discovery, but submitting a sitemap doesn't guarantee crawling or indexing. as equivalent — there’s no Search benefit to implementing more than one. Pick one method per site based on what your stack can maintain reliably; mixing them invites conflicts.

  • HTML <head> tags. Simplest, most visible. Downside: on a site with dozens of locales, every page carries a large block of <link> tags, adding markup weight, and any page in the <body> (from malformed HTML or JS injection) is invalid — hreflang only counts in the <head> of the page as Google renders/parses it.
  • HTTP Link headers. The only option for non-HTML resources like PDFs. Sent in the response, so they don’t bloat the document.
  • XML sitemapsAn XML sitemap is a UTF-8 file listing the canonical URLs on your site (with optional lastmod) so search engines can discover and prioritize them. It's a discovery and diagnostic aid, not a guarantee of indexing — and Google ignores its priority and changefreq tags.. The right call at scale. The annotations live centrally (xhtml:link children under each <url>, with the xmlns:xhtml="http://www.w3.org/1999/xhtml" namespace), so you can regenerate the whole cluster from a database without redeploying pages. There’s no “faster” method — both HTML and sitemapsA sitemap is a file that lists the pages, images, videos, and other files on your site so search engines can discover them. It helps discovery, but submitting a sitemap doesn't guarantee crawling or indexing. are resolved at crawl time — but sitemaps are far easier to QA because you can validate the entire graph in one file instead of crawlingCrawling is how search engines use automated bots (like Googlebot and Bingbot) to discover URLs and download pages. A page has to be crawlable to be indexed, but crawling on its own isn't a ranking factor. every page.
Evidence for this claim Google accepts hreflang in HTML, HTTP headers, or XML sitemaps and says the methods are equivalent from its perspective. Scope: Google Search hreflang implementation methods. Confidence: high · Verified: Google: Localized versions

Reciprocal linking at scale — where it breaks

In a 5-locale site, that’s a 5×5 matrix of references per page set, regenerated every time you add or remove a locale, fix a slug, or migrate a URL. The failure modes are predictable:

  • Inconsistent URL formatsURL structure is how the parts of a web address — scheme, domain, path, query string, and fragment — are organized and formatted. It mostly affects crawling, usability, and how engines understand a page, not rankings directly.. Trailing-slash vs. not, http vs. https, www vs. apex, or uppercase vs. lowercase paths — any mismatch between the URL in the hreflang and the URL Google actually indexes breaks the return-link match.
  • Pointing at redirected or broken URLs. A locale URL changes, the redirectA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't. goes in, but the hreflang still points at the old URL. The cluster now references a 301 or a 404.
  • Code drift. jp instead of ja for Japanese, three-letter codes where two-letter is required, en-UK instead of en-GB. Invalid codes are ignored.

The lesson from my conference talks holds: automate hreflang generation from a single source of truth. Hand-maintained hreflang at scale is a guarantee of return-tag rot.

Canonicalization conflicts

Hreflang depends on what’s indexed, not on what’s canonicalized — but the two interact, and getting it wrong breaks clusters:

  • Self-referencing canonicals are the safe default. Each language version should canonicalize to itself. If your Spanish page canonicalizes to the English page, you’re telling Google the Spanish URL isn’t the one to index — and hreflang pointing at a non-canonical URLHow search engines pick one canonical URL among duplicates and consolidate signals onto it. is one of the more common errors.
  • The same-language, multi-country edge case. When you have, say, en-us and en-gb pages that are near-identical, Google may consolidate them and index one — but it can still swap the displayed URL in the SERP to the correct country version via the hreflang links. So a “canonicalized-away” URL can still surface for the right user. That’s a feature, not a bug, but it surprises people auditing index coverage.
  • noindexNoindex is a directive that tells search engines to keep a page out of their index, so it won't appear in search results. It works only on pages a crawler can actually fetch — a page blocked in robots.txt can never be noindexed. and robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere.. A page blocked from indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. can’t participate in a cluster — its hreflang can’t be acted on, and pointing to a noindexed/blocked URL breaks the return link. Don’t block or noindexNoindex is a directive that tells search engines to keep a page out of their index, so it won't appear in search results. It works only on pages a crawler can actually fetch — a page blocked in robots.txt can never be noindexed. language variants you want served.

It’s a hint, not a directive

This is the framing to internalize. In May 2025 on Bluesky, John Mueller responded to a case of fr-be pages showing up in fr results despite correct hreflang: “hreflang doesn’t guarantee indexing, so it can also just be that not all variations are indexed,” and “I suspect this is a ‘same language’ case where our systems just try to simplify things for sites.” Google reserves the right to override hreflang for same-language consolidation, indexing gaps, or its own canonical choices.

Google’s canonicalizationHow search engines pick one canonical URL among duplicates and consolidate signals onto it. guidance is the flip side of that: it recommends choosing a canonical in the same language as the page (or the best available substitute), and it says it prefers URLs that are part of a complete reciprocal hreflang cluster over otherwise-similar URLs sitting outside it. That’s a preference, not a promise — being in a correctly-built cluster improves your odds of the right URL getting selected, but it doesn’t guarantee indexing or which URL shows.

The practical consequence: wrong hreflang is ignored, not penalized. If your cluster is broken, Google falls back to its own language/region detection. The cost is opportunity (the wrong URL shows for some users), not a ranking hit. So “my hreflang is wrong” is rarely an emergency — but it’s also rarely doing anything useful.

Bing and the other engines use a different stack

Hreflang is a Google (and Yandex) signal. Bing’s signal stack is completely different. Fabrice Canel, Principal Program Manager on Microsoft Bing, has said plainly that “hreflang is indeed a far weaker signal than content-language at Bing.” Bing leans on the content-language HTTP header / meta tag, the <html lang=""> attribute, inbound links, visitor geography, and server/ccTLDCountry-code top-level domain like .de or .co.uk — a strong geotargeting signal. location, and Canel has advised against “duplicating URLs just to have them tagged with these language-markets” in most cases. Baidu doesn’t support hreflang at all (it keys off hosting location, Chinese domain registration, ICP licensing, and content-language). So a robust international setup pairs hreflang for Google with a correct content-language / html lang for everyone else.

The error rate is the story

Over 67% of domains using hreflang have at least one issue — missing x-default is the top offender. Source: Data: Ahrefs

When I ran the largest hreflang study to date at Ahrefs374,756 domains, nearly 10× larger than any prior studyover 67% of domains using hreflang had at least one issue. The distribution:

Issue% of domains
Missing x-defaultx-default is the reserved hreflang value that points to a fallback URL — the page Google shows when a user's locale doesn't match any of your other hreflang tags. It is optional and does not mean \"English.\"56.3%
Missing self-referencing tags18.0%
Referencing broken/redirected pages16.9%
Missing reciprocal tags15.3%
Pointing to non-canonical URLs8.0%
Incorrect language/country codes4.6%
Inconsistent language attributes3.2%
Multiple pages for same language2.5%
Same page for multiple languages2.5%

My study’s summary still stands: hreflang is complex and hard to get right, and it can break in a lot of different ways.

Auditing at scale — visualize the cluster, don’t read a spreadsheet

See your own cluster with returntag - hreflang checker:

  1. Paste one page URL, a sitemap URL, or a list of page URLs into the tool.
  2. Click Validate cluster.
  3. Read the GRAPH view — broken or missing return links stand out by severity color — or switch to MATRIX for a row-by-row view, and export a fix-list CSV if you need to hand it to someone else.

The reason hreflang errors hide is that a return-tag problem is a relationship between pages, and relationships are nearly impossible to read across rows of a spreadsheet. Ahrefs Site Audit was the first tool to render the hreflang cluster as a graph — open any page’s URL details and the Hreflangs tab draws the whole cluster as a network, with the broken pages and missing/incorrect links highlighted in red. You can see at a glance which return tag is missing or which link was added by mistake — and it’s far easier to show a stakeholder than a CSV. Site Audit also runs the underlying checks (invalid annotation, missing self-reference, more than one page per language, hreflang/html lang mismatch, missing reciprocal tag, non-canonical target, broken target) that map directly to the study’s error list.

Beyond that:

  • GSC URL Inspection confirms how a single URL was crawled and indexed. Note the old International Targeting report was deprecated on September 22, 2022 — Google said it “had little value for the ecosystem.” Hreflang tags themselves still work; only the report is gone.
  • Manual SERP testing with the &hl= (host language) and &gl= (geolocation) parameters on a Google search URL lets you preview what a given locale’s results look like.

Hreflang is also a technical-SEO audit concern

Although hreflang’s home is international SEOInternational SEO is the practice of optimizing a site so search engines understand which countries and/or languages it targets, and serve the right version to each user. It spans URL structure, hreflang, and on-page localization., it shows up in nearly every technical SEOTechnical SEO is the practice of making a site easy for search engines to crawl, render, index, and (now) be eligible for AI answers. It's the foundation that lets your content and links rank — not a ranking trick of its own. audit of a multi-language or multi-region site — it sits right alongside canonicalization, indexing, and crawl-accessibility checks, and it’s one of the items most likely to be silently broken. If you’re running a technical audit and the site has more than one locale, the hreflang cluster belongs on the checklist.

Where to go next

This hub is the map for the hreflang sub-cluster. The first deep dive:

  • x-default — the fallback value for users whose locale matches none of your explicit tags (a country selector or a global homepage). It’s not required, but it was the single most common omission in my study (56.3% of sites). The dedicated subtopic covers when to use it, when to skip it, and how it interacts with the rest of the cluster.

For the broader strategy this implements, see the International SEOInternational SEO is the practice of optimizing a site so search engines understand which countries and/or languages it targets, and serve the right version to each user. It spans URL structure, hreflang, and on-page localization. pillar — hreflang is the technical layer of an international strategy; it doesn’t replace genuine localizationLocalization is adapting content for a specific target market — not just translating the words, but adjusting currency, formats, idioms, cultural references, local search terms, and trust signals so the experience feels native. (local intent, local content, local authority).

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.