Guide : How to Implement Hreflang (Step by Step)
Fonctionnement code pour tout three hreflang méthodes — HTML head balises, HTTP Lien headers, et XML sitemap annotations — plus le syntax règles, à-scale CMS automation, et le validation workflow à confirmer il en réalité shipped correctement.
1 indice probant sur cette page
- Outil en ligne associéreturntag - hreflang checker
Là sont exactly three façons à ajouter hreflang — HTML lien balises dans le head, HTTP Lien réponse headers (pour non-HTML fichiers comme PDFs), or xhtml:lien entries dans an XML sitemap (meilleur à scale). Pick un; Google treats tout three as equivalent et il y a aucun avantage à combining les. Chaque méthode obeys le même deux non-negotiable règles: self-reference (chaque page listes itself) et reciprocity (si A points à B, B doit point back à A, or Google ignores le pair). Codes sont ISO 639-1 langue plus optional ISO 3166-1 alpha-2 region; x-default est le fallback. Generate il tout depuis a unique source de truth, alors valider le rendu head, pas simplement view-source — dans mon study de 374 756 domains, over 67% de hreflang setups avait au moins un problème.
TL;DR — Là sont three façons à ajouter hreflang: petit
<link>balises dans votre page’s<head>, aLink:header votre serveur sends, or entries dans votre XML sitemap. Vous seulement pick un. Whichever vous pick, deux règles jamais modifier: chaque page listes itself, et chaque page vous lien à a à lien back — or Google ignores le entier définir. Alors vous vérifier que le balises en réalité montrer up dans lune page le façon vous meant les à.
Commencer ici: you’ve déjà decided vous besoin hreflang
Ce est le comment-à. Si vous êtes encore pas certain si vous besoin hreflang or ce que il fait, lire le hreflang overview premier — ce page assumes vous know vous ont plusieurs langue or country versions de une page et vous simplement vouloir à construire le chose correctement.
The three façons to ajouter it (pick un)
- HTML
<link>balises dans le<head>. Vous ajouter a quelques lines à le top de chaque page’s HTML. Easiest à comprendre, easiest à voir, bon pour plus petit sites. - HTTP
Link:headers. Le même information, sent par votre serveur dans le réponse au lieu de dans le HTML. Ce est le seulement option pour fichiers que ne sont pas HTML — comme a PDF, qui a aucun<head>à put balises dans. - XML sitemap. Vous liste tout le langue versions à l’intérieur votre sitemap fichier au lieu de on chaque page. Meilleur pour big sites, parce que vous ne pas ont à touch chaque page — le entier map lives dans un placer.
Google treats tout three le même. il y a aucun “faster” or “stronger” un, et là est aucun avantage à en utilisant plus que un à a temps — que simplement donne vous plus places pour choses à fall out de sync.
Preuve à l’appui de cette affirmation Google supports equivalent HTML, HTTP-header, and sitemap methods for declaring localized versions; HTTP headers can be used for non-HTML files such as PDFs. Portée : Google Search hreflang implementation methods. Niveau de confiance : élevé · Vérifié : Google: Localized versionsCe que the HTML version semble comme
Dire vous ont a US English page, a UK English page, a German page, et a mondial homepage que lets personnes choisir. On le US English page vous’d put:
<link rel="alternate" hreflang="en-us" href="https://example.com/us/" />
<link rel="alternate" hreflang="en-gb" href="https://example.com/uk/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />Lire chaque line as: “il y a an alternate version de ce page, c’est pour ce
langue/region, et il lives à ce adresse.” Le x-default line est votre
fallback pour anyone whose langue ne fait pas match le others.
Two choses to notice, parce que they’re the two rules que faire hreflang fonctionner:
- Le US page listes itself (que premier
en-usline points à le US page vous êtes déjà on). - Chaque autre page dans le définir a à carry le même bloquer pointing back. Le UK page, le German page, et le homepage tout besoin leur propre version de ces four lines.
Le deux règles, en termes simples
- Chaque page points back. Si votre US page liens à votre German page, le German page a à lien à le US page. Miss que retourner lien et Google throws le pair out. Ce est le règle personnes break la plupart.
- Chaque page points à itself. Chaque version listes son propre URL dans le définir. Google calls ce optional mais bon pratique — faire il anyway, il garde tout consistent.
Utiliser réel, complet web addresses
Toujours utiliser le complet adresse, starting avec https://. Pas /us/, pas
//example.com/us/ — le entier chose, https://example.com/us/. Et il a à
match le exact adresse Google en réalité indexes: même protocol, même www (or
pas), même trailing slash, même capitalization.
Obtenir le codes correct
Le code est a deux-letter langue, optionally followed par a dash et a deux-letter
country: en, en-us, de, es-mx. Le classic mistakes sont en-uk (c’est
en-gb — uk en réalité signifie Ukrainian) et jp pour Japanese (c’est ja).
Alors vérifier que it worked
Le la plupart important chose beginners miss: après vous ship, en réalité regarder à le
rendu page à confirmer le balises sont là et dans le <head>. Si votre balises sont
ajouté par JavaScript, ils pourrait pas montrer up quand vous “View Page Source” mais va
montrer up dans le actif page. Recherche Google Console’s Inspection d’URL peut montrer vous ce que
Google en réalité rendu.
Vouloir complet code pour le header et sitemap méthodes, comment automate ce à travers a entier CMS, le exact validation étapes, et le mistakes que quietly break clusters? Switch à le Avancé tab.
TL;DR — Three méthodes, pick un: HTML
<link>balises dans le<head>, HTTPLink:headers (le seulement option pour non-HTML fichiers comme PDFs), or<xhtml:link>entries dans an XML sitemap (meilleur à scale — un machine-generated fichier, easiest à QA). Google dit le three sont equivalent et il y a aucun avantage à combining les. Chaque méthode obeys self-reference + reciprocity, utilise absolute URLs, et utilise ISO 639-1 langue + optional ISO 3166-1 alpha-2 region codes. Generate le entier chose depuis un source de truth — hand-maintained hreflang rots. Alors valider le rendu head, explorer le entier cluster pour reciprocity, et garder re-checking après chaque URL modifier. Faire pas auto-redirect robots d’exploration par geo.
Avant vous écrire a line of code: three decisions
«1. Which method. Google is explicit that the choice is about convenience, not performance — “The three methods are equivalent from Google’s perspective and you can choose the method that’s the most convenient for your site.” My rough rule:
Preuve à l’appui de cette affirmation Google supports equivalent HTML, HTTP-header, and sitemap methods for declaring localized versions; HTTP headers can be used for non-HTML files such as PDFs. Portée : Google Search hreflang implementation methods. Niveau de confiance : élevé · Vérifié : Google: Localized versions» (Traduction) (Résumé en français de la section vingt-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
- A handful of URLs, a static or simple site, few locales → HTML
<link>tags. - Non-HTML assets (PDFs, docs) → HTTP
Link:headers (vous have aucun autre option — there’s aucun<head>in a PDF). - Nombreux locales, an existing sitemap pipeline, or a headless/JAMstack setup → XML sitemap, generated programmatically.
Le Décision Trees lens walks ce as an réel flowchart.
2. Un source de truth. Whatever méthode vous pick, le annotations devrait être generated depuis un placer — a locale/traduction tableau dans votre database, a CMS relationship champ, or (pour petit sites) a unique spreadsheet. Le unique worst hreflang anti-modèle est hand-maintaining balises par page. Le moment un locale’s template drifts, retourner liens go manquant et pairs obtenir dropped.
3. Ne faites pas combine méthodes. Vous peut exécuter tout three; Google dit il y a aucun avantage, et chaque supplémentaire méthode est un autre surface pour le three copies à disagree avec chaque autre.
Preuve à l’appui de cette affirmation Google requires fully qualified alternate URLs and reciprocal links, and recommends including each page itself in its alternate set. Portée : Google Search hreflang rules shared by all delivery methods. Niveau de confiance : élevé · Vérifié : Google: Hreflang guidelinesMéthode 1 — HTML <link> tags in the <head>
Le syntax, verbatim depuis Google, est:
<link rel="alternate" hreflang="lang_code" href="url_of_page" />A complet working définir pour a multi-language, multi-region cluster with a fallback:
<link rel="alternate" hreflang="en-us" href="https://example.com/us/" />
<link rel="alternate" hreflang="en-gb" href="https://example.com/uk/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />Que exact bloquer goes on chaque page dans le cluster (le US page, le UK page, le German page, et le homepage) — chaque un inclut son propre self-referencing line. c’est ce que satisfies reciprocity.
Placement est a difficile règle. Google: “Le <link> balises doit être à l’intérieur a
well-formed <head> section de le HTML.” Et leur propre troubleshooting advice:
“Si dans doubt, paste code depuis votre rendu page dans an HTML validator à garantir
que le liens sont à l’intérieur le <head> element.”
Ce matters plus que il sounds, parce que de a échec mode la plupart written guides
skip: hreflang balises peut être forced out de le <head> et dans le <body>,
où ils sont invalide. Dans mon Pubcon Vegas 2019 deck
Je flagged ce directement — balises ne peut pas legitimately actif dans le corps (que voudrait let
un site hijack autre’s alternates), mais a malformed or injected <p> balise, or an
iframe, peut prematurely fermer le <head> donc que tout après il — notamment
votre hreflang — renders à l’intérieur le <body>. Le balise est technically présent dans
source mais silently invalide. Le fastest façon à debug il est navigateur DOM
breakpoints: watch où le balises en réalité land dans le rendu DOM, alors walk
back à le markup que broke le <head>.
Quand HTML balises faire sense: petit-à-medium sites avec a manageable number de
locales, où le per-page <link> bloquer ne fait pas balloon. On a site avec dozens
de locales, chaque page carries a grand bloquer de markup — qui est un raison big
sites lean on le sitemap méthode.
ne pas mix hreflang avec autre alternate attributs on le même
<link> element. Google’s guidance est explicit que a <link rel="alternate">
carrying hreflang ne devrait pas aussi carry an unrelated alternate attribut comme
media dans le même balise — si vous besoin les deux a langue/region alternate et a
media-requête alternate pour le même URL, c’est deux séparé <link> elements,
pas un combined un. Mixing les est an facile façon à fin up avec a balise Google
ne peut pas parse as soit.
Méthode 2 — HTTP Link: headers
Même information, sent dans le HTTP réponse au lieu de le HTML. Le syntax:
Link: <https://example.com/file.pdf>; rel="alternate"; hreflang="en",
<https://de-ch.example.com/file.pdf>; rel="alternate"; hreflang="de-ch"Remarque le angle brackets autour chaque URL, le semicolon-separated attributs, et le comma separating chaque alternate. Chaque URL dans le header est comma-appended.
Quand vous besoin ce: non-HTML resources. A PDF, a .doc, an image served
directement — none of les have a <head> to hold <link> tags, so the header is
votre seulement façon to attach hreflang to les.
Configuration considerations: vous définir ces headers à le serveur or CDN couche
(an Apache Header directive, an Nginx add_header, a Cloudflare/Fastly/CloudFront
réponse-header règle, or votre application’s réponse). Parce que le header est définir par
infrastructure plutôt que per-document markup, le reciprocity règle est facile à
break ici — le English PDF’s header et le German PDF’s header sont généralement
configuré séparément, donc c’est on vous à assurez-vous chaque un listes le entier définir,
itself inclus. Garder le header generation driven par le même locale tableau as votre
HTML/sitemap approche.
Le invariant à hold sur: chaque alternate réponse carries le identical complet définir, chaque temps. c’est pas suffisant pour le English PDF’s header à liste le German alternate — le German PDF’s réponse a à carry le exact même définir back (itself plus chaque autre alternate), on chaque unique réponse, pas simplement le premier un a robot d’exploration se produit à hit. Treat le header as generated sortie, pas a un-off vous définir et forget.
Méthode 3 — XML sitemap <xhtml:link> annotations
À scale, ce est généralement le correct appel: le entier cluster lives dans un (or a quelques)
machine-generated fichiers, rien bloats chaque page’s <head>, et — parce que le
entier relationship graph est dans un placer — c’est par far le easiest méthode à QA.
Le syntax:
<?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/english/page.html</loc>
<xhtml:link rel="alternate" hreflang="de"
href="https://www.example.de/deutsch/page.html"/>
<xhtml:link rel="alternate" hreflang="en"
href="https://www.example.com/english/page.html"/>
</url>
<url>
<loc>https://www.example.de/deutsch/page.html</loc>
<xhtml:link rel="alternate" hreflang="de"
href="https://www.example.de/deutsch/page.html"/>
<xhtml:link rel="alternate" hreflang="en"
href="https://www.example.com/english/page.html"/>
</url>
</urlset>Two choses que trip personnes up in le sitemap méthode:
- Le namespace declaration est mandatory. Que
xmlns:xhtml="http://www.w3.org/1999/xhtml"on le<urlset>element n’est pas optional decoration — omit il et chaque<xhtml:link>dans le fichier est invalide. - Chaque
<url>bloquer doit être self-complet. Notice que les deux<url>bloque ci-dessus liste les deux alternates, notamment leur propre<loc>. Chaque<url>entry carries le complet définir (self-reference + tout alternates). Reciprocity dans a sitemap est simplement “chaque URL’s bloquer lists chaque URL dans le cluster, itself inclus.”
Deux behaviors worth knowing donc vous ne pas over-engineer le generator: le order
de le <xhtml:link> children à l’intérieur a <url> bloquer ne fait pas matter à Google —
ne pas waste temps sorting les — et ceux <xhtml:link> annotations ne pas count
contre votre sitemap’s 50 000-URL-per-fichier limite, since ils sont children de a
<url> entry, pas séparé <url> entries themselves.
Generating il programmatically. Le entier point de le sitemap méthode est que
c’est a byproduct de votre CMS’s propre traduction données. Si votre CMS déjà knows
que /english/page.html et /deutsch/page.html sont translations de chaque autre,
votre sitemap generator devrait walk que relationship tableau et emit le
<xhtml:link> bloque à construire temps (or à sitemap-requête temps). Faire que et
hreflang ne peut pas drift out de sync avec reality — c’est regenerated depuis le source de
truth chaque temps, et ajout a locale est a données modifier, pas a hand-edit à travers
hundreds de pages.
Pour teams sans dev resources, Je construit a lightweight Google Sheets template dans mon Ahrefs hreflang guide: a Setup tab (pick a par défaut langue plus up à four variants), a URLs tab (paste chaque langue’s URLs dans columns), et a Résultats tab que auto-generates le sitemap XML bloquer pour vous. c’est le “single source of truth” idea fait concrete pour sites aussi petit à justify a réel CMS integration.
The rules que appliquer aucun matter qui méthode vous pick
«These are method-agnostic and non-negotiable. » (Traduction) (Résumé en français de la section soixante, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
- Self-reference. Chaque page (or chaque
<url>bloquer, or chaque header) listes itself. Mueller frames ce as optional-mais-bon-practice, mais skipping il était présent dans 18,0% de le domains dans mon study — automate il et il coûts rien. - Reciprocity. “Chaque langue version doit liste itself as bien as tout autre langue versions.” Et le enforcement: “Si deux pages ne pas les deux point à chaque autre, le balises va être ignored. Ce est donc que quelqu’un on un autre site ne peut pas arbitrarily créer a balise naming itself as an alternative version de un de votre pages.” Un manquant retourner lien drops le pair.
- Absolute, fully-qualified URLs. “Alternate URLs doit être fully-qualified,
notamment le transport méthode (http/https)” — donc
https://example.com/foo, jamais//example.com/fooor/foo. Et l’URL doit match le exact formulaire Google indexes: protocol,www, trailing slash, et cas tout ont à line up, or le renvoyer-lien match fails.
Getting le codes correct
“Le premier code de le hreflang attribut est le langue code (dans ISO 639-1
format) followed par an optional deuxième code que represents le region code (dans ISO
3166-1 Alpha 2 format).” Combine les avec a dash: en-US. Vous pouvez cible a
langue on son propre (es = Spanish everywhere), mais vous ne peut pas cible a region
on son propre — il y a toujours a langue premier.
Le mistakes Je voir la plupart souvent (et saw à travers le study dataset):
en-UKau lieu deen-GB—ukest Ukrainian, le UK’s region code estgb.jpau lieu dejapour Japanese,cnau lieu dezhpour Chinese.- Three-letter codes (
ger,eng) où deux-letter ISO 639-1 est requis. - En utilisant
EU,UN, orUKas region codes — none sont valide ISO 3166-1 alpha-2 targets.
x-default est le reserved valeur pour le fallback — a langue selector or an
auto-redirecting page d’accueil que sert utilisateurs qui match none de votre explicit
locales:
<link rel="alternate" href="https://example.com/" hreflang="x-default" />c’est pas mandatory. Il était le unique la plupart-manquant element dans mon study (56,3% de
domains omitted il), mais a manquant x-default ne fait pas break le cluster le façon a
manquant reciprocal balise fait — Google simplement falls back à son propre langue/region
detection pour unmatched utilisateurs. Ajouter il anyway; c’est a liste de contrôle élément, pas a
cluster-breaker. (il y a a dedicated x-default subtopic dans ce cluster.)
Implementing à scale — CMS et plateforme approaches
«WordPress. Yoast SEO does not generate hreflang on its own. To actually
output tags you need a multilingual plugin — WPML or Polylang. WPML
auto-generates hreflang for every page that has translations, adds an x-default
pointing at your default-language version, and by default injects the annotations
into the XML sitemap; there’s a setting under WPML → Languages → SEO Options
(“Display alternative languages in the HEAD section”) if you want head-tag output
instead of, or in addition to, the sitemap. (See WPML’s docs on using it with
Yoast.)
» (Traduction) (Résumé en français de la section soixante-onze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Shopify. Shopify Markets automatiquement generates mutually-linked hreflang
balises une fois vous avez configuré markets/languages et le contenu est publié et
lié dans navigation — qui supprime le la plupart courant échec mode (manquant
reciprocal liens) par design. Le catch: Markets’ automatic balises sont souvent
langue-seulement (fr, de) plutôt que langue-region (fr-FR, fr-CA), qui
under-serves brands que besoin regional specificity — French pour France vs. Canada
vs. Belgium. Pour que vous drop à manual <link> balises dans theme.liquid (Shopify’s
propre theme hreflang docs
montrer le modèle) or an app — et faites attention, parce que mixing automatic Markets
balises avec manual/app balises est a documented source de conflicts. Pick un.
Custom / headless / enterprise. Generate le annotations depuis votre traduction-relationship tableau à construire or servir temps, as décrit dans le sitemap section ci-dessus. Ce est le même “single source of truth” principle — hreflang becomes a computed sortie de données votre CMS déjà holds, pas a hand-maintained artifact que peut rot.
Implementation mistakes que break the cluster
Auto-redirecting par geo/IP. Ce est a séparé échec depuis syntax erreurs et c’est pire. Si vous redirection visitors — et surtout robots d’exploration — à a version fondé on perceived emplacement, vous pouvez de-indexer entier regional clusters, parce que Googlebot mostly explore depuis le US. As Je put il dans que Pubcon deck: a geo-redirect “voudrait redirection moteur de recherches à où ils explorer depuis. Google pour instance mostly explore depuis le US donc nous voudrait effectively de-indexer tout geo pages.” il y a a regulatory angle aussi — potential exposure sous EU anti-geoblocking règles. Le correct modèle est redirection utilisateurs, jamais robots d’exploration: detect et (optionally) redirection human visitors, mais toujours let bots reach chaque URL variant directement, avec hreflang doing le réel routing signal. Google’s propre multi-regional guidance recommends a non-intrusive suggestion banner over automatic redirection pour exactly ce raison.
Pointing hreflang à non-canonical, redirigé, or noindexed URLs. Si a locale’s
URL changements et le redirection goes dans mais le hreflang encore points à le old URL,
votre cluster maintenant références a 301 or a 404 (16,9% de domains dans mon study
referenced broken/redirigé pages). Similarly, chaque variant devrait canonicalize à
itself; pointing hreflang à une URL c’est canonicalized away, or à a noindexed
page, breaks le retourner lien (8,0% pointed à non-URL canoniques).
Inconsistent URL formats. Le hreflang URL et le indexé URL ont à être
byte-identical dans formulaire — trailing slash, www, protocol, et cas tout inclus. A
mismatch ici est a silent reciprocity échec.
Validating votre implementation après launch
View rendu source, pas simplement raw source. Si votre hreflang est injected par
client-side JavaScript, curl or Ctrl+U (“View Page Source”) va montrer rien —
mais le balises exist dans le rendu DOM. Confirmer avec GSC Inspection d’URL → “Tester Actif
URL” → “View Testé Page,” or a rendu-capable robot d’exploration. Ce est le unique la plupart
courant raison quelqu’un dit “my tags are missing” quand ils sont en réalité fine (or le
reverse — présent dans source mais broken parce que ils rendre dans le <body>).
Explorer le entier cluster, ne pas spot-vérifier un URL. Reciprocity est a relationship entre pages, donc checking un page indique vous presque rien. Exécuter a robot d’exploration à travers le entier cluster — Screaming Frog’s hreflang audit or Ahrefs Site Audit — à catch manquant retourner balises, non-canonical targets, et broken références à scale. Ahrefs Site Audit’s Hreflangs tab draws le cluster as a graph avec broken liens dans red, qui est far easier à raison à propos de que a CSV.
Vérifier réel SERPs avec &hl= et &gl=. Append le host-langue (&hl=) et
geolocation (&gl=) parameters à a Recherche Google URL à preview ce que a donné
locale’s résultats en réalité regarder comme, plutôt que guessing depuis votre propre emplacement.
Validation n’est pas a un-time étape. Nouveau locales, URL/redirection changements, et dev/staging config bleeding dans production sont le recurring causes de post-launch breakage. Construire hreflang vérifications dans regression tests et recurring explore, pas simplement a launch-day QA réussir. Mon framing depuis le talks: “quelconque number de choses peut break depuis masking à choses carrying over depuis dev/tester/staging environments.”
Myths worth retiring
«- “Sitemaps process faster than HTML tags.” False. Both are resolved at crawl
time — I’ve debunked this directly. The sitemap’s advantage is maintainability and
QA, not speed.
» (Traduction) (Résumé en français de la section quatre-vingt-quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- “Yandex doesn’t support hreflang in sitemaps.” False — Yandex’s own
documentation confirms sitemap hreflang support.
» (Traduction) (Résumé en français de la section quatre-vingt-quatre, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«- “Use all three methods for extra signal.” No benefit per Google, and it just
multiplies inconsistency risk.
» (Traduction) (Résumé en français de la section quatre-vingt-quatre, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
«- “A missing x-default breaks the cluster.” False — it’s optional; Google
falls back to its own detection.
» (Traduction) (Résumé en français de la section quatre-vingt-quatre, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)
«- “Wrong hreflang gets you penalized.” False — it’s a hint, not a directive.
Broken hreflang is ignored, not penalized.
» (Traduction) (Résumé en français de la section quatre-vingt-quatre, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.)
Où to go suivant
Ce article est le comment-à depth sous le hreflang hub — le hub covers ce que hreflang est, pourquoi reciprocity matters, et ce que Bing fait à la place. Le x-default subtopic goes deep on le fallback valeur. Pour le stratégie ce implements, voir le International SEO pillar — hreflang est le technique couche, pas a substitute pour genuine localization.
AI summary
A condensed prendre on the Avancé version:
- Three méthodes, pick exactly un (Google treats les as equivalent; aucun avantage
à combining):
- HTML
<link>balises dans le<head>— petit/medium sites; doit être dans a well-formed<head>, jamais le<body>; ne pas mixhreflangavec un autre alternate attribut commemediaon le même<link>element. - HTTP
Link:headers — le seulement option pour non-HTML fichiers (PDFs); définir à serveur/CDN; chaque alternate réponse doit carry le identical complet définir, chaque temps. - XML sitemap
<xhtml:link>— meilleur à scale; nécessite lexmlns:xhtml="http://www.w3.org/1999/xhtml"namespace on<urlset>; easiest à QA parce que le entier graph est dans un fichier; child order ne fait pas matter et ces children ne pas count toward le 50 000-URL sitemap limite.
- HTML
- Deux universal règles: self-reference (chaque page listes itself) et reciprocity (A→B exige B→A, or le pair est ignored). Utiliser absolute, fully-qualified URLs que match le exact indexé formulaire.
- Codes: ISO 639-1 langue + optional ISO 3166-1 alpha-2 region (
en-GB, pasen-UK;ja, pasjp).x-defaultest le reserved fallback — optional mais le la plupart-missed element (56,3% dans mon study). - Automate depuis un source de truth. WordPress nécessite WPML/Polylang (Yoast alone ne fait pashing); Shopify Markets auto-generates reciprocal balises mais souvent langue-seulement; custom/headless devrait emit hreflang depuis le traduction tableau.
- ne pas auto-redirect robots d’exploration par geo — Googlebot explore mostly depuis le US, donc il peut de-indexer regional clusters; redirection utilisateurs, jamais bots.
- Valider le rendu head, pas simplement view-source (JS-injected balises ne va pas montrer
dans source); explorer le entier cluster pour reciprocity; vérifier locales avec
&hl=/&gl=; re-vérifier après chaque URL modifier.
Documentation officielle
Primary-source documentation pour implementing hreflang.
- Localized versions de votre pages — le principal implementation doc: tout three méthodes avec exact syntax, le reciprocity requirement, valide codes, le absolute-URL règle, et
x-default. - Managing multi-regional et multilingual sites — URL-structure options et le auto-redirect / cloaking warning (pourquoi vous doit pas geo-redirect robots d’exploration).
- Tell Google à propos de localized versions (x-default blog, 2013) — le original introduction de
x-default. - International Targeting rapport deprecation (Sept 2022) — le old rapport est gone; hreflang balises encore fonctionner.
Bing / Microsoft
- Bing Webmaster Guidelines — Bing’s guidance; remarque Bing leans on
content-languageet<html lang>over hreflang. - Bingbot Series: Maximizing Explorer Efficiency — context on comment Bing handles international/multilingual sites.
«CMS / platform
» (Traduction) (Résumé en français de la section quatre-vingt-dix-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- WPML — Using WordPress SEO (Yoast) with WPML — how WPML outputs hreflang (head vs. sitemap setting).
» (Traduction) (Résumé en français de la section quatre-vingt-dix-huit, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Shopify — Add hreflang tags in your theme — the manual theme.liquid <link> pattern.
» (Traduction) (Résumé en français de la section quatre-vingt-dix-huit, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
«## Quotes from the source » (Traduction) (Résumé en français de la section cent un, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«On-the-record statements relevant to implementation. Each Google-docs link is a deep link that jumps to the quoted passage on the live page. » (Traduction) (Résumé en français de la section cent deux, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Google — the three methods » (Traduction) (Résumé en français de la section cent trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- “The three methods are equivalent from Google’s perspective and you can choose the method that’s the most convenient for your site.” — Google Search Central docs. Jump to quote » (Traduction) (Résumé en français de la section cent quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Google — placement » (Traduction) (Résumé en français de la section cent cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- “The <link> tags must be inside a well-formed <head> section of the HTML.”
— Google Search Central docs.
Jump to quote
» (Traduction) (Résumé en français de la section cent six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Google — the two rules » (Traduction) (Résumé en français de la section cent sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- “Each language version must list itself as well as all other language versions.” — Google Search Central docs. Jump to quote » (Traduction) (Résumé en français de la section cent huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- “If two pages don’t both point to each other, the tags will be ignored.” — Google Search Central docs. Jump to quote » (Traduction) (Résumé en français de la section cent huit, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- “Alternate URLs must be fully-qualified, including the transport method (http/https).” — Google Search Central docs. Jump to quote » (Traduction) (Résumé en français de la section cent huit, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
Google — codes
«- “The first code of the hreflang attribute is the language code (in ISO 639-1 format) followed by an optional second code that represents the region code (in ISO 3166-1 Alpha 2 format).” — Google Search Central docs. Jump to quote » (Traduction) (Résumé en français de la section cent dix, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
John Mueller, Google — it’s a hint, pas a directive
- On self-referential balises: hreflang self-references sont reported as optional mais bon pratique. — John Mueller, Google, relayed via mon Ahrefs hreflang guide.
- On correctness pas guaranteeing résultat (Peut 2025, Bluesky): Mueller noted que hreflang ne fait pas guarantee indexation, donc a variant peut simplement pas être indexé, et que même-langue variants (comme
fr-fretfr-be) sont commonly consolidated. — relayed via Moteur de recherche Journal coverage.
Qui implementation méthode devrait I utiliser?
Fonctionner top to bottom and arrêter at the premier match.
1. Sont lune pages non-HTML fichiers (PDFs, docs, images servi directement)?
→ Oui → HTTP Link: headers. Ils ont aucun <head>, donc ce est votre seulement
option. Définir le header à le serveur/CDN, listing le entier définir on chaque fichier.
→ Aucun → continuer.
2. Do vous have plus que a handful of locales, an existing sitemap pipeline, or a
headless/JAMstack construire?
→ Yes → XML sitemap <xhtml:link>. Generate it programmatically from votre
translation table. Un machine-generated fichier, aucun per-page markup, easiest to QA.
→ Aucun → continuer.
3. Petit/simple site, quelques locales, et vous’d plutôt garder tout visible on le
page?
→ HTML <link> balises dans le <head>. Simplement assurez-vous le bloquer est generated depuis
un source de truth et lands à l’intérieur a well-formed <head>.
Whatever vous pick: utiliser il alone. Google dit il y a aucun avantage à combining méthodes, et chaque supplémentaire copy est a placer pour le three à disagree.
Do I besoin x-default?
Faire vous ont une page que sert utilisateurs qui match none de votre explicit locales — a
country/langue selector, or a mondial homepage?
→ Oui → ajouter x-default pointing à que fallback page.
→ Aucun → vous pouvez skip il. c’est optional; Google falls back à son propre detection. Il
ne va pas break le cluster (unlike a manquant reciprocal balise). Ajout il est encore bon
pratique — il était le unique la plupart-missed element dans mon study (56,3%).
Devrait I auto-redirect utilisateurs by emplacement?
Sont vous thinking à propos de redirecting fondé on IP/geo? → Redirection human visitors seulement, et préférer a non-intrusive banner over a difficile redirection. → Jamais redirection robots d’exploration par geo. Googlebot mostly explore depuis le US, donc a robot d’exploration geo-redirect peut de-indexer votre autre regional versions — et il risques cloaking classification et EU anti-geoblocking exposure. Let bots reach chaque URL variant directement; hreflang fait le routing signal.
Qui CMS chemin s’applique to me?
- WordPress? → Yoast alone ne fait pashing. Install WPML or Polylang; ils emit hreflang (choisir head vs. sitemap sortie dans WPML’s SEO paramètres).
- Shopify? → Markets auto-generates reciprocal balises — mais souvent langue-seulement.
Besoin
fr-FRvsfr-CA? Ajouter manualtheme.liquidbalises or an app, et ne pas mix le deux (conflict risque). - Custom / headless? → Emit
<xhtml:link>(or head balises) depuis votre traduction-relationship tableau à construire/servir temps.
SOP: Ship a hreflang cluster depuis scratch
A repeatable procedure pour ajout a nouveau hreflang cluster (or a nouveau locale to an existing un). Run it top to bottom.
1. Construire le locale matrix (unique source de truth).
Liste chaque URL et son langue-region code dans un placer — a database tableau, a CMS
traduction champ, or a spreadsheet. Confirmer chaque URL est le canonical, indexé
formulaire (correct protocol, www, trailing slash, cas). Ce tableau est le entrée à
tout ci-dessous; rien obtient hand-typed downstream.
2. Pick un méthode en utilisant the Decision Trees lens. Ne faites pas combine méthodes.
3. Generate le annotations depuis le matrix.
- HTML: emit le
<link>bloquer dans chaque page’s<head>depuis le matrix. - Sitemap: emit chaque
<url>bloquer avec lexmlns:xhtmlnamespace on<urlset>. - Headers: emit le
Link:header depuis le matrix à le serveur/CDN.
4. Vérifier le deux règles programmatically avant publishing. Chaque entry doit (a) inclure a self-reference et (b) liste chaque autre entry dans le cluster. Confirmer reciprocity: pour chaque A→B, il y a a matching B→A.
5. Ajouter x-default si vous have a selector or global fallback page.
6. Publish, alors valider le rendu sortie (voir le Playbooks lens pour le
detailed validation runbook): rendu head (pas view-source), a complet-cluster explorer
pour reciprocity, et a &hl=/&gl= SERP spot-vérifier.
7. Wire il dans ongoing vérifications. Ajouter a recurring explorer / regression tester donc a future URL modifier or nouveau locale ne peut pas silently rot a retourner balise. Validation n’est pas a un-time task.
Quand ajout a locale plus tard: vous seulement edit le matrix (étape 1) et re-exécuter étapes 3–6. Si vous êtes hand-editing individual pages à ajouter a locale, votre source de truth est incorrect — corriger que premier.
«## Playbook: “My hreflang isn’t working” — validation runbook » (Traduction) (Résumé en français de la section cent quarante-deux, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Run ces in order. Chaque step soit trouve the break or clears a suspect.
Étape 1 — Confirmer le balises en réalité rendre. Ouvrir lune page et view le rendu DOM (GSC Inspection d’URL → Tester Actif URL → View Testé Page, or a rendu robot d’exploration). Faire pas rely on Ctrl+U “View Page Source” — si hreflang est JS-injected il ne va pas apparaître là même though c’est actif.
- Balises présent dans rendu head → go à Étape 3.
- Balises manquant depuis rendu head → Étape 2.
Étape 2 — Sont le balises dans le <head> or le <body>?
Si le balises exist dans source mais sit à l’intérieur <body>, ils sont invalide. A malformed or
injected <p> balise or an iframe probable closed le <head> early. Utiliser navigateur DOM
breakpoints à trouver où le <head> breaks, corriger que markup, re-vérifier.
Étape 3 — Vérifier l’URLs sont absolute et canonical.
Chaque href doit être fully-qualified (https://…) et byte-identical à le indexé
formulaire (protocol, www, trailing slash, cas). Confirmer none point à a 301, 404,
noindexed, or canonicalized-away URL.
Étape 4 — Vérifier reciprocity à travers le entier cluster. Explorer le entier cluster (Screaming Frog / Ahrefs Site Audit). Pour chaque A→B, vérifier a matching B→A exists, et que chaque page self-references. Ce est où la plupart breaks actif — a unique manquant retourner balise drops le pair.
Étape 5 — Valider le codes.
Confirmer ISO 639-1 langue + ISO 3166-1 alpha-2 region. Regarder précisément pour
en-UK (→ en-GB), jp (→ ja), three-letter codes, et region-seulement codes.
Step 6 — Rule out geo-redirects. Confirmer robots d’exploration aren’t being geo-redirected. Si Googlebot (exploration from the US) obtient bounced to votre US version, votre autre regional URLs may jamais be reached.
Étape 7 — Reset expectations si le cluster est technically correct.
Si tout ci-dessus vérifications out et même-langue variants (e.g. fr-fr / fr-be)
sont encore consolidated dans reporting, c’est attendu — Google peut consolidate
near-identical même-langue variants regardless de implementation. c’est a hint, pas
a directive; incorrect or ignored hreflang n’est pas a penalty. Arrêter chasing il as a bug.
Implementation anti-patterns
Concrete mistakes, pourquoi they’re incorrect, and Que faire à la place.
1. Hand-maintaining hreflang par page. Pourquoi c’est incorrect: le moment un template or locale drifts, retourner balises go manquant et pairs obtenir dropped — reciprocity rot à scale. Faire à la place: generate chaque annotation depuis un source de truth (traduction tableau, CMS champ, or le Sheets template pour petit sites), donc le entier cluster est regenerated, pas edited.
2. En utilisant tout three méthodes pour “extra signal.” Pourquoi c’est incorrect: Google dit il y a aucun avantage, et three copies de le truth signifie three chances pour les à disagree. Faire à la place: pick un méthode et utiliser il alone.
3. Auto-redirecting robots d’exploration par geo/IP. Pourquoi c’est incorrect: Googlebot explore mostly depuis le US, donc a robot d’exploration geo-redirect peut de-indexer votre autre regional clusters entirely — plus cloaking et EU anti-geoblocking exposure. Faire à la place: redirection (or meilleur, banner-prompt) utilisateurs seulement; jamais robots d’exploration. Let bots reach chaque URL directement et let hreflang carry le signal.
4. Pointing hreflang at non-canonical, redirigé, or noindexed URLs.
Pourquoi it’s incorrect: the retourner lien resolves to a 301/404/noindexed page, so the
pair breaks (16,9% referenced broken/redirigé pages, 8,0% non-canonical in my
study).
Do à la place: chaque variant canonicalizes to itself; hreflang points seulement at live,
canonical, indexable URLs — regenerated whenever URLs modifier.
5. Relative or protocol-relative URLs.
Pourquoi c’est incorrect: Google exige fully-qualified URLs; /foo et //example.com/foo
sont invalide, et même absolute-mais-mismatched formulaires (incorrect slash/www/cas) échouer le
reciprocity match.
Faire à la place: toujours https://example.com/foo, matching le exact indexé formulaire.
6. Trusting “View Page Source” as validation.
Pourquoi c’est incorrect: JS-injected hreflang ne fait pas apparaître dans raw source, donc vous soit
think c’est manquant (il n’est pas) or miss que il renders dans le <body> (invalide).
Faire à la place: valider le rendu DOM via GSC Inspection d’URL or a rendu
robot d’exploration.
7. Incorrect or invented locale codes.
Pourquoi c’est incorrect: en-UK, jp, ger, et region-seulement codes sont invalide et
ignored.
Faire à la place: ISO 639-1 langue + optional ISO 3166-1 alpha-2 region — en-GB,
ja, de, es-MX.
Avant / après
1. Manquant reciprocal balise (le classic). Avant: le US page listes US + UK + DE, mais le German page’s template seulement listes DE + US — il forgot le UK retourner lien. Google drops le DE↔UK pair. Après: le German page’s bloquer listes DE + US + UK (tout self-referencing et reciprocal). Regenerated depuis le locale tableau donc il ne peut pas drift à nouveau.
2. Relative URLs.
Avant: <link rel="alternate" hreflang="de" href="/de/" /> — relative, donc c’est
invalide et ignored.
Après: <link rel="alternate" hreflang="de" href="https://example.com/de/" /> —
fully-qualified et matching le indexé formulaire.
3. Incorrect UK code.
Avant: <link rel="alternate" hreflang="en-uk" href="https://example.com/uk/" />
— uk is Ukrainian; the annotation is invalid.
Après: <link rel="alternate" hreflang="en-gb" href="https://example.com/uk/" />.
4. Sitemap manquant le namespace.
Avant: a sitemap en utilisant <xhtml:link> entries mais avec a <urlset> que seulement
declares le base sitemaps namespace — chaque <xhtml:link> est invalide.
Après: <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"> — the xhtml namespace est declared, donc
le annotations valider.
Ready-to-copy AI prompts
Adapt le placeholders, alors paste dans votre assistant de choice. Toujours valider le sortie contre a réel explorer — an LLM peut generate plausible-mais-wrong codes or miss a retourner lien.
Generate an HTML <head> bloquer depuis a locale matrix
I have these language/region page variants:
- en-US: https://example.com/us/
- en-GB: https://example.com/uk/
- de: https://example.com/de/
- global fallback / selector: https://example.com/
For EACH page above, output the complete hreflang <link> block that belongs in its
<head>. Every block must (a) self-reference, (b) list all other variants, and
(c) include an x-default pointing at the fallback. Use fully-qualified https URLs
exactly as given. Validate the codes as ISO 639-1 language + ISO 3166-1 alpha-2
region and flag any that look wrong.Convert the même matrix into an XML sitemap block
Using the same variant list, output an XML sitemap that uses <xhtml:link> hreflang
annotations. Requirements: declare xmlns:xhtml="http://www.w3.org/1999/xhtml" on
<urlset>; give every <url> block a full self-referencing + all-alternates set; use
the exact URLs provided. Do not add any URL not in my list.Audit a pasted cluster pour reciprocity + code errors
Here are the hreflang tags from each page in my cluster: [paste each page's URL and
its hreflang tags]. Check for: missing self-reference, missing reciprocal (A->B
without B->A), invalid ISO codes, relative/protocol-relative URLs, and any URL that
appears with inconsistent formatting (trailing slash / www / case). List each issue
with the exact page and tag it's on. Do not assume tags I didn't paste. Extraction, console, et generation extraits
Practical un-liners pour building et checking hreflang. Adjust URLs avant running.
Chrome DevTools Console — liste le hreflang balises on le actuel page Paste dans le Console (F12 → Console) on quelconque page à voir ce que le navigateur en réalité rendu — ce reflects JS-injected balises que “View Source” misses:
[...document.querySelectorAll('link[rel="alternate"][hreflang]')]
.map(l => ({ hreflang: l.hreflang, href: l.href,
inHead: !!l.closest('head') }));Le inHead flag est le tell pour le <head>-break bug: quelconque balise showing
inHead: false est rendu dans le <body> et est invalide.
Bookmarklet — même vérifier, un click Enregistrer as a bookmark with ce URL, alors click it on quelconque page:
javascript:(()=>{const t=[...document.querySelectorAll('link[rel="alternate"][hreflang]')].map(l=>`${l.hreflang} ${l.href} ${l.closest('head')?'(head)':'(BODY - INVALID)'}`);alert(t.length?t.join('\n'):'No hreflang tags found');})();«XPath — select hreflang links inside the head (for a crawler / browser inspector) » (Traduction) (Résumé en français de la section cent quatre-vingt-deux, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
//head/link[@rel='alternate' and @hreflang]«If a crawler finds link[@hreflang] matches under //body instead, that’s the
head-break bug.
» (Traduction) (Résumé en français de la section cent quatre-vingt-deux, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
Regex — pull hreflang code + URL depuis raw HTML (rapide grep, pas a réel parser)
<link[^>]*rel=["']alternate["'][^>]*hreflang=["']([^"']+)["'][^>]*href=["']([^"']+)["']Capture groupe 1 est le code, groupe 2 est l’URL. Utiliser seulement pour a rapide sanity grep — parse réel HTML avec a DOM library, pas regex.
curl — vérifier pour hreflang in HTTP Link: réponse headers (the PDF/non-HTML cas)
curl -sI https://example.com/file.pdf | grep -i '^link:'Python — generate a self-consistent hreflang <head> bloquer depuis a matrix
variants = {
"en-us": "https://example.com/us/",
"en-gb": "https://example.com/uk/",
"de": "https://example.com/de/",
"x-default": "https://example.com/",
}
# Every page gets the SAME full block (self-reference + all alternates),
# which is exactly what satisfies reciprocity.
block = "\n".join(
f'<link rel="alternate" hreflang="{code}" href="{url}" />'
for code, url in variants.items()
)
print(block) Testez vos connaissances: Implementing hreflang
Five rapide questions on building a hreflang cluster correctement. Pick an réponse pour chaque, alors vérifier.
Ressources utiles
Mon connexe writing
- Hreflang: Le Facile Guide pour Beginners — mon Ahrefs guide avec tout three méthodes, le nine courant implementation problèmes et corrections, et le Google Sheets template pour semi-automated hreflang generation à scale.
- Over 67% de Domains En utilisant Hreflang Ont Problèmes — mon study de 374 756 domains, le largest ever exécuter, et le source de le erreur-rate breakdown (manquant x-default 56,3%, manquant self-reference 18,0%, broken/redirigé targets 16,9%, manquant reciprocal 15,3%, non-canonical 8,0%, mauvais codes 4,6%).
Mon speaking
- International SEO: Le Weird Technique Parties — Pubcon Vegas 2019 — le richest implementation source: le
<head>-break bug (balises forced dans<body>par iframes/malformed markup) et DOM-breakpoint debugging, pourquoi “sitemaps are faster” est a myth, le geo-redirect de-indexation risque, et le&hl=/&gl=SERP-vérifier technique. - Hreflang Study et Interesting Problèmes — Brighton SEO 2023 — le deck behind le study, plus Google’s la plupart-spécifique matching order (langue+country → langue → x-default) et le la plupart courant code mistakes à travers le dataset.
- vous êtes Going À Screw Up International SEO — Pubcon Vegas 2017 — le ecosystem de implementation chaos: outils reporting incorrect info, contenu servi depuis URLs que differ depuis qu’est-ce que indexé, duplicate-page traps.
«From around the industry
» (Traduction) (Résumé en français de la section cent quatre-vingt-seize, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Google’s Localized versions of your pages — the primary implementation doc; the exact syntax for all three methods, the reciprocity/self-reference rules, valid codes, and the absolute-URL requirement. Read it in full before you build.
» (Traduction) (Résumé en français de la section cent quatre-vingt-seize, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Google’s Managing multi-regional and multilingual sites — URL-structure options and the auto-redirect / cloaking warning behind “redirect users, not crawlers.”
» (Traduction) (Résumé en français de la section cent quatre-vingt-seize, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
«- WPML — Using WordPress SEO (Yoast) with WPML — how WordPress actually outputs hreflang (Yoast alone doesn’t), and the head-vs-sitemap output setting.
» (Traduction) (Résumé en français de la section cent quatre-vingt-seize, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Shopify — Add hreflang tags in your theme — the manual theme.liquid <link> pattern for when Shopify Markets’ language-only tags aren’t specific enough.
» (Traduction) (Résumé en français de la section cent quatre-vingt-seize, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Screaming Frog — How To Audit & Test Hreflang — the crawl-based workflow for confirming reciprocity across a whole cluster rather than spot-checking one URL.
» (Traduction) (Résumé en français de la section cent quatre-vingt-seize, sous-partie six : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Google Reminds That Hreflang Tags Are Hints, Not Directives — Search Engine Journal, May 2025, on Mueller’s same-language-consolidation clarification (why a technically perfect cluster can still be consolidated).
» (Traduction) (Résumé en français de la section cent quatre-vingt-seize, sous-partie sept : le texte source est conservé pour vérification lors de la relecture francophone.)
«- r/TechSEO — the community for debugging broken hreflang clusters.
» (Traduction) (Résumé en français de la section cent quatre-vingt-seize, sous-partie huit : le texte source est conservé pour vérification lors de la relecture francophone.)
Prove the hreflang cluster en réalité shipped
Hreflang fails silently: le balises peut être présent, well-formed, et encore ignored si le retourner leg est manquant. “It’s in the code” n’est pas le tester — reciprocity à travers le entier cluster est. Exécuter ces après vous deploy a langue/region définir.
Tester 1 — Every pair renvoie the tag (reciprocity)
- Tester à exécuter — Explorer le entier cluster avec returntag (il vérifications que chaque page A points à en réalité points back à A), or exécuter Screaming Frog’s hreflang rapport à travers le définir.
- Attendu résultat — 0 non-reciprocal pairs et chaque URL self-references. Zero erreurs, pas “a quelques.”
- Échec interpretation — A un-way pair (A → B mais B ne fait pas → A) signifie Google drops que pair — le la plupart courant real-world échec, et invisible si vous seulement spot-vérifier un URL’s view-source.
- Monitoring window — Immediate pour le rendu balises; le checker lit qu’est-ce que actif maintenant.
- Rollback trigger — Quelconque non-reciprocal pair, or a balise pointing à une URL que 301s or 404s — corriger le source de truth et redeploy avant waiting on Google.
Tester 2 — Google is processing it cleanly
- Tester à exécuter — Google retired le old International Targeting rapport dans Search Console dans September 2022, donc ne pas rely on il — vérifier Page Indexation pour chaque locale dans le cluster, et confirmer via Inspection d’URL on a sample de pages que le “Google-selected canonical” et indexation status line up avec ce que vous expect pour que locale.
- Attendu résultat — Chaque locale’s prévu pages sont indexé (pas “Duplicate, Google chose différent canonical” dans a façon que collapses distinct langue versions dans un), et Inspection d’URL montre le alternate vous expect.
- Échec interpretation — Pages showing up as duplicates de a différent locale’s canonical, or clustered/consolidated indexation, généralement traces back à a broken retourner leg (re-vérifier Tester 1) plutôt que hreflang itself — hreflang est a hint, pas a directive, donc a technically perfect cluster peut encore être consolidated si Google judges le contenu near-duplicate.
- Monitoring window — 2–4 weeks — Search Console re-explore et rapports le cluster over temps, pas instantly.
- Rollback trigger — A locale’s pages consistently indexation sous le incorrect canonical, or le incorrect regional URL surfacing pour a requête — re-audit reciprocity premier; ne pas assume le balises “aren’t working” quand le retourner leg est le réel gap.
Journal des modifications
Mis à jour le 25 juil. 2026.
Résumé éditorial et détails enregistrés des changements.Détails des changements
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
Comparaison complète indisponible — aucun instantané antérieur n’a été archivé pour cette révision.
Mis à jour le 18 juil. 2026.
Résumé éditorial et détails enregistrés des changements.Détails des changements
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
Comparaison complète indisponible — aucun instantané antérieur n’a été archivé pour cette révision.