Vérifiez la hiérarchie des titres et les erreurs de H1
Listez vos titres dans l'ordre de la page et voyez si la hiérarchie tient : h1, h2, h3, h2, h3 passe, tandis que passer de h2 directement à h4 est signalé comme un h3 manquant, à sa position exacte. Un seul h1 est exigé. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Titres
- h1, h2, h3, h2, h3
- Nombre de titres
- 5
- Nombre de H1
- 1
Une hiérarchie de titres peut sembler correcte à l’écran alors que les balises sous-jacentes racontent une autre histoire. Ce vérificateur reçoit les balises dans l’ordre du document, par exemple h1, h2, h3 et h2, puis applique deux règles précises : il doit exister exactement un h1 et aucun titre ne peut descendre de plus d’un niveau à la fois. La réponse indique la validité, le nombre de h1 et la position exacte de chaque saut afin que les équipes éditoriales et les systèmes de publication puissent les corriger.
Préparez la séquence dans l’ordre du document
Commencez par les balises telles qu’elles apparaissent dans le document rendu, et non dans une maquette ou un plan éditorial. Une entrée classique peut être h1, h2, h3, h2, h3. L’ordre est essentiel, car la hiérarchie résulte du passage d’un titre au suivant.
Le vérificateur accepte les balises de h1 à h6, supprime les espaces périphériques et traite les formes majuscules comme H2 de la même manière que les minuscules. Il n’accepte ni HTML arbitraire, ni texte de titre, ni classe CSS, ni nombre isolé. Extrayez ces informations avant la requête afin de conserver une liste sans ambiguïté.
Une liste vide est refusée comme entrée incorrecte puisqu’elle ne contient aucune structure à évaluer. Une balise mal formée est également refusée avec son indice, ce qui facilite le diagnostic d’une extraction défectueuse. Cette séparation convient aux pipelines : l’extraction détermine les balises présentes, tandis que cette capacité évalue uniquement leur ordre et leur niveau.
Comprenez les deux règles de hiérarchie
La première règle exige exactement un h1 dans la liste complète. Sans h1, le document ne possède pas de titre supérieur unique ; avec deux h1 ou davantage, le niveau principal est répété. La seconde règle examine chaque paire adjacente et signale un saut lorsque le nombre suivant dépasse le précédent de plus d’une unité.
Le passage de h2 à h4 indique donc qu’un h3 manque. Le passage de h1 à h5 signale l’absence de h2, h3 et h4 dans cette transition. Remonter de h4 à h2 est autorisé, car cela ferme un contenu imbriqué et revient à une section plus générale.
Répéter un niveau est également permis : deux h2 consécutifs peuvent ouvrir des sections sœurs. Le vérificateur recense tous les sauts sans s’arrêter au premier. Chaque enregistrement comprend l’indice de destination compté depuis zéro, la transition et toutes les balises intermédiaires manquantes.
Le résultat n’est valide que si le nombre de h1 vaut un et si aucun saut n’est présent.
Exploitez le résultat dans les revues et les contrôles
Utilisez le champ de validité pour décider simplement du succès ou de l’échec, puis conservez les détails afin de proposer une correction utile. Le nombre total confirme combien de balises ont été évaluées, et le décompte des h1 explique si la règle supérieure est respectée. Chaque saut désigne l’indice de destination où survient la descente incorrecte ; un éditeur ou un outil de build peut ainsi retrouver le titre sans interpréter un message ambigu.
La liste des problèmes fournit de brefs résumés en anglais pour les journaux, les commentaires de revue ou une interface de gestion de contenu. Cette capacité ne juge ni le libellé, ni les mots-clés, ni la taille visuelle, ni le texte vide, ni le nombre idéal de sections. Elle ne télécharge pas non plus d’URL et n’analyse pas le HTML : vous devez d’abord extraire les balises ordonnées.
Cas d’usage
Bloquer les plans d’article incorrects
Refusez un brouillon si ses balises extraites omettent le h1 unique ou passent directement à un niveau mal imbriqué.
Contrôler les modèles après une refonte
Comparez des pages rendues représentatives et repérez les sauts introduits par des composants réutilisables ou un nouveau thème.
Ajouter un contrôle structurel à la CI
Transformez la liste ordonnée issue d’un build statique en résultat déterministe avant le déploiement.
Questions fréquentes
Combien coûte la vérification ?
Le calcul est déterministe et ne sollicite aucun service externe.
Le retour de h4 à h2 constitue-t-il un saut ?
Non. Le retour vers un niveau plus général est permis ; seule une descente de plus d’un niveau est signalée.
Les balises en majuscules sont-elles acceptées ?
Oui. Les formes comme H1 et H3 sont normalisées en minuscules après validation, et les espaces périphériques sont ignorés.
Cette capacité analyse-t-elle une page HTML ?
Non. Elle attend une liste déjà extraite de balises h1 à h6 dans l’ordre du document et ne valide que cette séquence.
Que se passe-t-il si la page n'a aucun h1 ou en a plusieurs ?
La vérification échoue dans les deux cas. Sans h1, le document n'a pas de titre principal unique ; avec deux ou plus, le niveau supérieur est répété. Le nombre de h1 est indiqué pour que vous voyiez lequel des deux cas s'applique.
Outils associés
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/heading-structure-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"headings":["h1","h2","h3","h2"]}'const res = await fetch("https://api.kit.forhosting.com/seo/heading-structure-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"headings": [
"h1",
"h2",
"h3",
"h2"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/seo/heading-structure-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"headings": [
"h1",
"h2",
"h3",
"h2"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/seo/heading-structure-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"headings":["h1","h2","h3","h2"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"headings":["h1","h2","h3","h2"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/seo/heading-structure-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
{
"headings": [
"h1",
"h2",
"h3",
"h2"
]
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "seo.heading_structure_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. |
Questions techniques
Que se passe-t-il si la liste est vide ?
La requête renvoie une erreur invalid_input, car une séquence vide ne contient aucune structure à valider.