Vos balises hreflang sont-elles correctes ?
Les balises hreflang indiquent à Google quelle version d’une page servir selon la langue du visiteur. Cet outil les extrait de votre code et repère les erreurs fréquentes : codes de langue invalides, liens qui ne se répondent pas, version par défaut manquante. Indispensable pour un site multilingue.
Lancer gratuitement
Tout se passe dans votre navigateur : gratuit, sans envoi de vos données.
À quoi servent les balises hreflang
Un site décliné en plusieurs langues doit dire à Google quelle version montrer à qui : la page française à un visiteur francophone, l’anglaise à un anglophone. C’est le rôle des balises hreflang. Bien posées, elles évitent qu’une page française remonte pour un internaute anglophone, ou que deux traductions soient traitées comme des doublons. Mal posées, elles sèment la confusion et annulent le bénéfice attendu du travail de traduction.
Les erreurs que l’outil repère
Collez le HTML de la page : l’outil liste chaque balise hreflang et signale les défauts classiques — code de langue mal formé (« en-UK » au lieu de « en-GB »), URL relative au lieu d’absolue, ou absence de la valeur « x-default » qui indique la page à servir par défaut. Il vérifie surtout la réciprocité : si la page française pointe vers l’anglaise, l’anglaise doit pointer en retour vers la française, faute de quoi Google ignore l’ensemble.
Sans envoi de vos pages
L’analyse du code collé reste dans votre navigateur : aucune donnée ne part, rien n’est stocké, c’est gratuit et sans inscription. Cette confidentialité compte au regard du RGPD, notamment quand on contrôle un ensemble de traductions encore en préparation, avant toute mise en ligne. Pour vérifier une page déjà publiée directement par son adresse, la variante par URL passe par l’API et se facture $0.002 par requête.
Cas d’usage
Site bilingue français-anglais
Studio Lumen SAS livre un site en français et en anglais. L’agence colle le HTML de chaque version et confirme que les balises hreflang se répondent bien d’une langue à l’autre, sans oubli.
Version par défaut oubliée
Une TPE exportatrice a ajouté l’anglais mais aucun visiteur d’un pays tiers n’est correctement orienté. L’outil montre l’absence de « x-default », la valeur qui désigne la page à servir par défaut.
Codes de langue erronés
Un indépendant a écrit « fr-FR » d’un côté et « fr » de l’autre, sans cohérence. L’outil signale les codes mal formés pour qu’il harmonise l’ensemble avant que Google ne renonce à les suivre.
Questions fréquentes
Qu’est-ce que la réciprocité des balises hreflang ?
C’est la règle clé : si la page A pointe vers la page B comme sa version dans une autre langue, la page B doit pointer en retour vers A. Sans ce renvoi mutuel, Google ignore les balises. L’outil vérifie que chaque lien trouve bien sa réponse.
À quoi sert la valeur « x-default » ?
Elle désigne la page à servir quand aucune langue déclarée ne correspond au visiteur — par exemple un internaute d’un pays non prévu. L’outil signale son absence, cause fréquente d’un mauvais aiguillage international.
Le code de mes pages est-il envoyé sur un serveur ?
Non, en mode collé. L’analyse se fait dans votre navigateur ; le HTML ne quitte pas la page et rien n’est conservé. Seule la vérification par URL via l’API suppose un traitement à distance.
Faut-il des balises hreflang pour un site en une seule langue ?
Non. Elles ne servent que si le même contenu existe en plusieurs langues ou variantes régionales. Sur un site uniquement francophone, elles sont inutiles ; l’outil s’adresse aux sites multilingues.
L’outil est-il payant ?
Le mode collé est gratuit, sans compte ni limite. Seule l’analyse directe d’une adresse en ligne, via l’API, est facturée $0.002 la requête, en dollars US.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/seo/hreflang-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://ejemplo.com"}'const res = await fetch("https://api.kit.forhosting.com/seo/hreflang-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"url": "https://ejemplo.com"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/seo/hreflang-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"url": "https://ejemplo.com"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/seo/hreflang-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"url":"https://ejemplo.com"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"url":"https://ejemplo.com"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/seo/hreflang-check", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"url": "https://ejemplo.com"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "seo.hreflang_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |