Markup Language

HTML Sémantique

L'HTML sémantique utilise des éléments qui décrivent leur signification. Cela rend les pages accessibles, indexables et plus faciles à maintenir, sans coût supplémentaire.

beginner14 min readUpdated 15 sept. 2026
article.html
html
<!-- article.html -->
<article>
  <header>
    <h1>How DNS works</h1>
    <p><time datetime="2026-09-15">September 15, 2026</time></p>
  </header>
  <p>The Domain Name System turns names into addresses.</p>
  <nav aria-label="Related">
    <a href="/guides/http">HTTP / HTTPS</a>
  </nav>
</article>
Objectif
Décrire la signification
Accessibilité
Utilisé par les lecteurs d'écran
SEO
Utilisé par les robots d'indexation
Contenu
article, section, aside

Pourquoi c'est important

Pourquoi la sémantique est importante

Mieux pour les technologies d'assistance

Les lecteurs d'écran et autres outils naviguent via les repères, les titres et les rôles, que les éléments sémantiques fournissent nativement.

Mieux pour les moteurs de recherche

Les robots d'indexation utilisent les titres et la structure pour comprendre une page, ce qui favorise le classement et les résultats enrichis.

Plus facile à maintenir

Un balisage significatif est lisible d'un coup d'œil, vous et vos coéquipiers comprenez donc la structure sans avoir besoin de commentaires.

Le tableau complet

Les trois avantages de l'HTML sémantique

L'accessibilité, la découvrabilité et la maintenabilité s'améliorent lorsque les éléments décrivent ce qu'ils contiennent.

Repères (Landmarks)

Structure

header, nav, main, aside et footer définissent les régions d'une page.

Éléments de contenu

Signification

article, section, figure et time décrivent ce qu'est le contenu, et non son apparence.

Titres

Plan

Une hiérarchie logique de h1 à h6 donne à la page un plan navigable.

La sémantique en un coup d'œil

Les éléments fondamentaux

header et footer

Contenu d'introduction ou de navigation, et contenu de clôture pour une page ou une section.

nav

Un bloc de liens de navigation, idéalement étiqueté avec aria-label lorsqu'il est répété.

main

Le contenu principal de la page, utilisé une seule fois et accessible via des raccourcis pour les lecteurs d'écran.

article

Contenu autonome qui pourrait être extrait, comme un article de blog ou un commentaire.

section

Un regroupement thématique, généralement accompagné d'un titre.

button vs a

Les liens naviguent ; les boutons effectuent des actions. Utilisez l'élément correspondant.

Un bref aperçu

Des tableaux de mise en page au sens

  1. 1998

    Tableaux de mise en page

    Les premières pages utilisent des tableaux et des images d'espacement pour contrôler la mise en page.

    98
  2. 2000

    La soupe de divs

    La mise en page CSS remplace les tableaux, mais les divs génériques n'ont aucune signification.

    00
  3. 2011

    Sémantique HTML5

    header, nav, main, article et section deviennent des standards.

    11
  4. 2014

    Rôles de repères

    Les outils d'accessibilité mappent les éléments sémantiques aux rôles de repères ARIA.

    14
  5. Aujourd'hui

    Une attente fondamentale

    Le balisage sémantique fait partie intégrante du travail front-end professionnel.

    Aujourd'hui

Le guide complet

HTML Sémantique: Tout ce que vous devez savoir

Qu’est-ce que le HTML sémantique ?

Le HTML sémantique consiste à choisir des éléments qui décrivent ce qu’est le contenu, et non son apparence. Un <nav> est un bloc de navigation. Un <article> est un contenu autonome. Un <button> effectue une action. Ces éléments portent une signification que les navigateurs, les technologies d’assistance et les moteurs de recherche peuvent exploiter.

L’alternative est une page construite à partir d’éléments <div> et <span> génériques, ce que l’on appelle souvent la “div soup”. Le résultat peut être identique à l’écran, tout en étant opaque pour un lecteur d’écran et plus difficile à maintenir. La sémantique ne coûte rien et s’avère payante partout.

Landmarks

Les éléments de landmark définissent les régions principales d’une page et permettent aux utilisateurs de naviguer rapidement entre elles.

<!-- layout.html -->
<body>
  <header>
    <a href="/">hackweb</a>
    <nav aria-label="Main">
      <a href="/guides">Guides</a>
    </nav>
  </header>

  <main>
    <h1>Guides</h1>
  </main>

  <footer>
    <p>© 2026 hackweb.dev</p>
  </footer>
</body>
  • header — contenu introductif de la page ou d’une section.
  • nav — un bloc de liens de navigation. Étiquetez les navs répétées avec aria-label.
  • main — le contenu principal, utilisé une seule fois et accessible via les raccourcis des lecteurs d’écran.
  • aside — contenu tangentiellement lié au contenu principal.
  • footer — contenu de clôture tel que le copyright ou des liens connexes.

Les utilisateurs de lecteurs d’écran peuvent lister et sauter d’un landmark à l’autre, ce qui transforme une page longue en une structure navigable.

Titres

Les titres constituent le plan de la page. Utilisez un seul <h1> pour le sujet principal, puis des <h2> et <h3> pour les sections et sous-sections.

<!-- outline.html -->
<h1>CSS Grid</h1>
<h2>Tracks and lines</h2>
<h3>Defining columns</h3>
<h3>Placing items</h3>
<h2>Responsive grids</h2>

Ne choisissez jamais un niveau de titre en fonction de sa taille. Utilisez le CSS pour l’apparence et les titres pour la structure. Sauter des niveaux, comme passer directement du h1 au h4, rend le plan confus pour les technologies d’assistance.

Éléments de contenu

Au-delà des landmarks, HTML propose des éléments pour des types de contenus spécifiques.

  • article — un contenu autonome qui pourrait être publié indépendamment, comme un article de blog ou un commentaire.
  • section — un groupe thématique, généralement accompagné d’un titre.
  • figure et figcaption — un média accompagné d’une légende.
  • blockquote et cite — une citation et sa source.
  • time — une date ou une heure avec un datetime lisible par une machine.
  • address — des informations de contact.
  • ul, ol, dl — des listes non ordonnées, ordonnées et des listes de description.
<!-- post.html -->
<article>
  <h1>What is DNS?</h1>
  <p><time datetime="2026-09-15">September 15, 2026</time></p>

  <figure>
    <img src="/dns.svg" alt="A DNS lookup walks the name hierarchy" width="800" height="400" />
    <figcaption>Resolving a name step by step.</figcaption>
  </figure>

  <blockquote cite="https://example.com">
    <p>DNS is the internet's phone book.</p>
  </blockquote>
</article>

L’utilisation de l’élément approprié vous permet de bénéficier du comportement par défaut et de la sémantique corrects, sans effort supplémentaire.

Liens versus boutons

C’est l’erreur sémantique la plus courante.

  • Utilisez <a href> pour la navigation vers une URL. Cela permet le clic droit, l’ouverture dans un nouvel onglet, la mise en favoris et l’activation au clavier.
  • Utilisez <button> pour les actions qui modifient un état ou soumettent des données. Il est focalisable, utilisable au clavier et annoncé comme un bouton.
<!-- controls.html -->
<a href="/guides/css">Read the CSS guide</a>
<button type="button" onclick="toggleMenu()">Toggle menu</button>

Un <div onclick="..."> a l’air cliquable mais n’est pas accessible au clavier, n’est pas annoncé comme un contrôle et n’est pas focalisable. Le corriger nécessite de recréer manuellement tout ce que le bouton vous offre nativement.

Formulaires et tableaux

Les formulaires possèdent leur propre sémantique : <form>, <label>, <fieldset>, <legend>, <input>, <select> et <textarea>. Chaque champ de saisie doit avoir un label, et le regroupement des contrôles associés avec fieldset et legend facilite l’utilisation pour tous. Le guide Formulaires & Validation approfondit ce sujet.

Les tableaux sont destinés aux données tabulaires, et non à la mise en page. Utilisez <table>, <thead>, <tbody>, <th> avec scope et <caption> afin que la relation entre les cellules et les en-têtes soit claire.

Quand utiliser une div

Les éléments génériques ne sont pas un péché. Utilisez <div> et <span> lorsque vous avez réellement besoin d’un conteneur pour le style ou la mise en page, sans signification sémantique. La règle est simple : privilégiez un élément sémantique quand il en existe un, et utilisez une div quand aucun ne convient. Ajouter section sans titre ou nav autour d’un seul lien sans rapport ajoute du bruit plutôt que du sens.

Bonnes pratiques

  • Utilisez un seul h1 et respectez l’ordre des niveaux de titres.
  • Structurez vos pages avec header, nav, main et footer.
  • Utilisez article et section pour le contenu, et non div.
  • Privilégiez button pour les actions et les ancres pour la navigation.
  • Donnez à chaque image un texte alt significatif, ou alt="" si elle est décorative.
  • Étiquetez les contrôles de formulaire et groupez ceux qui sont liés.
  • Validez votre HTML pour éviter que le parseur n’ait à effectuer de corrections.

Erreurs courantes

  • Tout construire avec des divs et des spans.
  • Utiliser une div avec un onclick au lieu d’un bouton.
  • Choisir le niveau des titres en fonction de la taille de la police.
  • Utiliser plusieurs éléments h1 sans sujet principal clairement défini.
  • Utiliser des tableaux pour la mise en page.
  • Envelopper un lien unique dans un nav, ou utiliser un section sans titre.

Et après ?

La sémantique est le fondement d’une page accessible et facile à trouver. Appuyez-vous sur les bases du HTML, rendez-la inclusive grâce au guide d’accessibilité, optimisez-la avec les bases du SEO, et complétez le tableau avec les formulaires et la validation.

Contrôles interactifs

Un bouton est focalisable, utilisable au clavier et annoncé correctement. Une div avec un gestionnaire de clic n'est rien de tout cela.

Préférer
<button type="button" onclick="save()">
  Save
</button>
Éviter
<div class="btn" onclick="save()">
  Save
</div>

Structuration d'une page

Les repères et les éléments de contenu donnent du sens à la page et la rendent navigable par les technologies d'assistance.

Préférer
<header>...</header>
<nav aria-label="Main">...</nav>
<main>
  <article>...</article>
</main>
<footer>...</footer>
Éviter
<div class="header">...</div>
<div class="nav">...</div>
<div class="content">
  <div class="post">...</div>
</div>

FAQ

Foire aux questions

Keep learning

Related topics from the roadmap.

$ commencer à apprendre

Prêt à apprendre Semantic HTML ?

Notre tutoriel interactif vous guide à travers Semantic HTML pas à pas — avec des quiz et du vrai code que vous pouvez exécuter dans le navigateur.