// OUTIL GRATUIT · GÉNÉRATEUR HREFLANG

générateur hreflang

Saisissez un modèle d’URL et la liste de vos codes de langue : vous obtenez le jeu complet de balises hreflang — toutes les versions, x-default compris — et le bloc xhtml:link équivalent pour le sitemap. Gratuit, dans votre navigateur.

GratuitImmédiatSans inscriptionTourne dans le navigateur

Aussi enEnglishDeutschEspañolFrançais日本語한국어Português (Brasil)繁體中文

hreflang · générateur

{locale} marque l’emplacement du segment de langue. Il est remplacé par le code en minuscules (fr-ca) ; un segment vide se replie sur la racine du site.

Codes ISO 639-1, avec -Script ou -RÉGION si besoin (fr-CA, zh-Hant). Après le code, vous pouvez écrire un chemin (fr /tarifs/ place le français à la racine), une URL complète ou un segment personnalisé (fr-CA ca).

La version servie à ceux dont la langue ne figure pas dans votre liste : en général la version anglaise, la racine ou un sélecteur de langue.

Erreurs et avertissements
    Bloc pour le head — à coller dans toutes les versions
    
                
    Bloc pour le sitemap — un <url> par version
    
              

    Comment générer vos balises hreflang

    Un modèle, une liste, deux boutons de copie. Le générateur dérive chaque URL du même modèle : le jeu est donc complet et réciproque par construction, il n’y a rien à recouper à la main.

    1. Saisissez le modèle d’URL. Prenez l’URL d’une version et placez {locale} là où se trouve le segment de langue : https://exemple.fr/{locale}/tarifs/. Le code est inséré en minuscules et un segment vide replie l’URL sur la racine du site.
    2. Listez les codes de langue. Un par ligne : fr, fr-CA, fr-BE, en, de. Si une version ne suit pas le modèle — le français est à la racine, par exemple — écrivez son chemin après le code : fr /tarifs/. Une URL complète ou un segment personnalisé fonctionnent de la même façon.
    3. Choisissez le x-default. Décidez quelle version voient ceux dont la langue ne figure pas dans votre liste. C’est en général la racine, la version anglaise ou un sélecteur de langue. L’omettre est permis, mais le générateur avertit : un jeu sans x-default laisse ce choix au moteur de recherche.
    4. Copiez les deux blocs. Collez le bloc du head tel quel dans le head de chaque version : chaque page doit citer toutes les versions, y compris elle-même. Collez le bloc du sitemap dans un urlset qui déclare l’espace de noms xhtml. Un seul canal suffit ; si vous gardez les deux, ils doivent dire la même chose.

    À quoi sert le hreflang et pourquoi le jeu doit être réciproque

    hreflang est un attribut de l’élément link qui indique aux moteurs de recherche pour quelle langue, et éventuellement pour quelle région, chaque version d’une page est écrite. Sans lui, quelqu’un qui cherche en français peut atterrir sur votre page anglaise pendant que la version française reste non indexée, considérée comme un quasi-doublon. Avec lui, Google substitue la bonne version et consolide les signaux du groupe au lieu de les éparpiller entre plusieurs URL.

    La règle sur laquelle presque tout le monde trébuche, c’est la réciprocité. Chaque version doit citer toutes les autres et elle-même. Si la page A pointe vers la page B mais que B ne renvoie pas vers A, Google juge l’annotation non fiable et l’abandonne — pour cette paire, et pas seulement d’un côté. Un jeu tenu à la main se désaligne dès qu’une langue s’ajoute : c’est pourquoi ce générateur écrit le jeu entier à partir d’un seul modèle et vous rend un bloc unique à coller partout, plutôt qu’un fragment par page à maintenir en cohérence.

    La même dérivation construit les jeux hreflang de clize.ai : le sitemap et chaque page de langue sortent d’un seul inventaire de préfixes, si bien qu’aucune page ne peut revendiquer une version que le sitemap ignore.

    fr-FR, fr-CA, fr-BE : les codes du français

    fr seul désigne le français partout : France, Belgique, Suisse, Québec, Afrique francophone. Les formes régionales — fr-FR, fr-CA, fr-BE, fr-CH — le restreignent à un pays, avec un code ISO 3166-1 alpha-2. La forme la plus précise l’emporte : une recherche depuis Montréal reçoit fr-CA si cette version existe, sinon Google se rabat sur fr.

    Le piège propre au français, c’est fr-QC. Il paraît logique — le français du Québec est bien un marché distinct — mais QC est un code de subdivision ISO 3166-2, pas un code de pays. hreflang n’accepte que les codes pays ISO 3166-1 alpha-2 (ou les zones numériques UN M.49). Pour le Québec, le bon code est fr-CA. Autrement dit : vous ne pouvez pas cibler une province, seulement le Canada — et comme le Canada anglophone est servi par en-CA, le couple fr-CA / en-CA suffit à couvrir le pays.

    Séparer fr-FR et fr-CA ne se justifie que si le contenu diffère vraiment : prix en dollars canadiens, mentions légales et conditions locales, terminologie recommandée par l’OQLF (courriel plutôt qu’e-mail, clavardage plutôt que chat), formats de date et d’adresse. Si rien de tout cela ne change, une seule page fr rapporte davantage : une URL, un jeu de signaux, rien à maintenir. Vous pouvez aussi mélanger les précisions : fr comme version de repli et fr-CA pour le seul marché qui a ses propres tarifs.

    Cas belge et suisse, souvent mal compris : ces pays sont multilingues, donc le couple langue-région est la seule façon d’être précis. Un site belge bilingue déclare fr-BE et nl-BE, un site suisse fr-CH, de-CH et it-CH. Les deux moitiés sont dans le même jeu réciproque : chacune cite l’autre.

    Enfin, le x-default, que les sites francophones à marché unique jugent inutile — à tort. Même si vous ne publiez qu’en français, une partie de vos visiteurs cherche dans une langue qui n’est pas dans votre jeu. Le x-default dit laquelle de vos pages ils obtiennent ; sans lui, le moteur choisit à votre place. Une précision honnête sur la validation : le générateur contrôle la partie langue contre ISO 639-1 et corrige la casse, mais ne vérifie pas la région. fr-QC passe ici sans protester et c’est Google qui l’ignorera ensuite.

    La canonique et le hreflang ensemble

    Chaque version a besoin d’une balise canonique auto-référente : sur la page canadienne, <link rel="canonical" href="https://exemple.fr/fr-ca/tarifs/">, c’est-à-dire elle-même. La canonique est la seule balise du head qui change d’une version à l’autre — c’est pour cela qu’elle ne fait pas partie du bloc commun ci-dessus. Écrivez-la page par page et ne la pointez jamais vers une autre langue : une page canadienne dont la canonique désigne l’URL française demande à Google d’indexer la française à sa place, et cette page sort alors du groupe hreflang.

    Les deux autres exigences sont purement mécaniques : chaque URL du jeu doit renvoyer un 200 et rester indexable — pas de redirection, pas de noindex — et les URL doivent être absolues, schéma et hôte compris. Le générateur n’émet rien d’autre. Le statut réel se vérifie par un crawl ou, gratuitement pour votre propre domaine, avec clize seo check, qui liste chaque page avec son statut HTTP et son état dans l’index de Google.

    Erreurs fréquentes de hreflang

    • fr-QC au lieu de fr-CA. QC est une subdivision, pas un pays. hreflang n’accepte que les codes ISO 3166-1 alpha-2.
    • Code de pays à la place du code de langue. ca ou be seuls sont invalides ; écrivez fr-CA, fr-BE. Et uk signifie ukrainien, pas Royaume-Uni.
    • Liens de retour manquants. A cite B, B ne cite pas A : la paire est jetée. Collez le même bloc complet dans chaque version.
    • Pas d’auto-référence. Chaque page doit figurer dans son propre jeu. Le bloc généré le fait déjà.
    • Canonique pointant vers une autre langue. Cette page sort du jeu. Une canonique auto-référente sur chaque version.
    • URL relatives. hreflang exige des URL absolues avec schéma et hôte. Le générateur n’en produit pas d’autres.
    • Versions redirigées ou en noindex. Chaque URL du jeu doit être un 200 vivant et indexable.
    • Le head et le sitemap se contredisent. Choisissez un seul canal, ou générez les deux depuis la même source — comme ici.

    Les autres faces lisibles par la machine d’une même page obéissent à la même règle de source unique : le générateur de FAQ schema écrit le JSON-LD et le HTML visible à partir d’une seule liste, et si vous publiez un llms.txt pour les agents, passez-le au validateur llms.txt (tous deux en anglais) : un lien relatif là-bas relève exactement de la même erreur qu’un hreflang relatif ici.

    // Questions fréquentes

    Qu’est-ce que le hreflang ?

    hreflang est un attribut de l’élément link qui indique aux moteurs de recherche pour quelle langue, et éventuellement pour quelle région, chaque version d’une page est écrite. Google s’en sert pour afficher la version qui correspond à la langue et à la localisation de l’internaute, et pour traiter les versions comme un seul groupe plutôt que comme des doublons.

    Faut-il écrire fr-QC pour le Québec ?

    Non. QC est un code de subdivision ISO 3166-2 et hreflang n’accepte que les codes pays ISO 3166-1 alpha-2. Pour le français du Québec, le code correct est fr-CA. Vous ciblez donc le Canada, pas une province, et le Canada anglophone est couvert en parallèle par en-CA.

    fr-FR ou simplement fr ?

    fr suffit tant que vous n’avez qu’une seule page en français. Séparer par pays ne se justifie que si le contenu change réellement : prix en dollars canadiens ou en francs suisses, mentions légales, terminologie recommandée par l’OQLF, formats de date. Vous pouvez aussi mélanger : fr comme version de repli et fr-CA pour le seul marché qui a ses propres tarifs.

    Mon site n’existe qu’en français : ai-je besoin du x-default ?

    Le hreflang lui-même ne sert que si la page existe dans au moins deux langues ou régions. Dès que c’est le cas, même avec un seul marché francophone et une version anglaise, le x-default vaut la peine : il désigne la page servie à ceux dont la langue ne figure pas dans votre jeu. Sans lui, c’est le moteur qui choisit.

    Le hreflang va-t-il dans le head ou dans le sitemap ?

    Chaque canal suffit à lui seul : éléments link dans le head, en-tête HTTP Link pour les fichiers non HTML, ou entrées xhtml:link dans le sitemap.xml. Quand une page a beaucoup de versions, le sitemap allège le head. Si vous utilisez les deux, ils doivent concorder : générez-les depuis la même source.

    Le hreflang et la balise canonique sont-ils compatibles ?

    Oui, à condition que chaque version porte une canonique auto-référente. Une canonique qui pointe vers une autre version de langue demande au moteur d’indexer celle-là, et la page sort alors du groupe hreflang.

    Cet outil vérifie-t-il mes balises hreflang existantes ?

    Non : il génère un jeu complet et réciproque à partir de votre modèle d’URL. Remplacez vos balises actuelles par le bloc généré sur chaque version plutôt que de les fusionner, pour qu’aucune page ne conserve un jeu obsolète ou partiel.

    clize seo check — gratuit pour votre propre domaine

    Balises en place ? Regardez ce que Google voit vraiment.

    Auditer votre propre site ne coûte rien : chaque page avec son statut HTTP et son état dans l’index de Google, les positions et impressions de la Search Console comparées à la période précédente, et le trafic par source avec les moteurs d’IA comptés à part. Une commande depuis votre agent.

    $ npm i -g @clize/clize && clize install
    $ clize seo check --domain votredomaine.fr
    [ Agent SEO by Clize → ]