Ressources pour développeur web

Théme de la semaine : WebDesign

Coder une FAQ en CSS pur et optimisée SEO : Code complet

Temps de lecture estimé : 13 minutes
Accueil CSS3 Coder une FAQ en CSS pur et optimisée SEO : Code complet

Vous souhaitez coder une FAQ efficace, moderne et optimisée SEO sans alourdir votre site avec du JavaScript ? Bonne nouvelle : une Foire aux questions en CSS pur permet d’offrir une expérience fluide, rapide et parfaitement adaptée aux exigences de Google. Dans ce tutoriel, vous allez apprendre à coder une FAQ élégante, responsive et conçue pour améliorer à la fois votre visibilité et l’expérience utilisateur.

  • Coder une FAQ moderne et interactive sans JavaScript pour améliorer les performances et simplifier votre code
  • Booster votre référencement grâce à une Foire aux questions structurée et optimisée pour Google
  • Offrir une meilleure expérience utilisateur avec un design élégant, responsive et facile à personnaliser

Dans ce tutoriel frontend, nous allons comprendre chaque ligne, et surtout apprendre pourquoi ça fonctionne. Vous allez repartir avec une FAQ professionnelle, uniquement avec du HTML et du CSS, performante et prête à être intégrée sur votre site.

  • Voici ce que vous allez apprendre à coder :

Foire aux questions

Une FAQ en CSS pur est une foire aux questions interactive qui permet d’afficher ou masquer des réponses simplement en cliquant sur une question, sans utiliser de JavaScript.

Créer une FAQ sans JavaScript permet d’améliorer les performances du site, de simplifier le code et d’assurer une compatibilité maximale avec tous les navigateurs.

Oui, une FAQ bien structurée améliore le référencement naturel, augmente la visibilité sur Google et permet d’apparaître dans les résultats enrichis grâce aux données structurées.

Vous pouvez facilement personnaliser votre FAQ en modifiant les variables CSS pour adapter les couleurs, les animations, les bordures et la typographie à votre charte graphique.

Pourquoi créer une FAQ en CSS pur ?

Avant de plonger dans le code, prenons 30 secondes pour comprendre l’intérêt.

Une FAQ (Foire aux questions) est essentielle pour :

  • répondre aux interrogations fréquentes des visiteurs
  • améliorer l’expérience utilisateur
  • réduire les frictions (et donc augmenter les conversions)
  • booster votre SEO (Google adore les contenus structurés)
FAQ

Et utiliser uniquement du CSS apporte plusieurs avantages :

  • chargement ultra rapide
  • zéro dépendance JavaScript
  • compatibilité maximale
  • maintenance simplifiée

En résumé : moins de code, plus d’efficacité. Plutôt séduisant, non ?

Structure globale en HTML de votre FAQ

Voici la logique générale du code HTML :

  • une section principale .faq-container
  • plusieurs blocs .faq-item
  • dans chaque bloc : un input (le cœur du système), un label (la question) et une div (la réponse)
  • C’est ce trio qui va permettre l’effet accordéon.

Le secret : le checkbox hack

C’est LA technique clé de ce tutoriel.

Vous utilisez un <input type="checkbox"> invisible :

<input type="checkbox" id="faq1" class="faq-toggle">

Puis vous liez cet input à un label :

<label for="faq1" class="faq-question">

Quand l’utilisateur clique sur la question, il coche/décoche la checkbox.

Et grâce au CSS, vous pouvez détecter cet état :

.faq-toggle:checked + .faq-question + .faq-answer {
    max-height: 300px;
}

C’est ce qu’on appelle : le “checkbox hack”

Sans JavaScript, vous créez une interaction. Simple, malin, efficace.

Étape 1 : une base propre avec le reset CSS

Le code commence par un reset CSS :

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

Pourquoi c’est important ?

Parce que chaque navigateur applique ses propres styles par défaut. Résultat :

  • marges incohérentes
  • espacements imprévisibles

Avec ce reset, vous partez sur une base saine. C’est une bonne pratique incontournable.

Étape 2 : des variables CSS modernes

On utilise des variables CSS pour les couleurs et les arrondis :

:root {
    --bg: #f9fafb;
    --card: #ffffff;
    --text: #111827;
    --muted: #6b7280;
    --border: #e5e7eb;
    --accent: #6366f1;
    --radius: 16px;
}

Les variables CSS permettent :

  • de centraliser le design
  • de modifier facilement les couleurs
  • de rendre le code plus lisible

Par exemple :

background: var(--card);

Si vous changez --card, tout le design s’adapte automatiquement.

Étape 3 : mise en page globale

Le body est stylisé ainsi :

body {
    display: flex;
    justify-content: center;
    padding: 60px 20px;
}

Vous centrez votre FAQ horizontalement avec Flexbox. Résultat :

  • design moderne
  • lecture agréable
  • mise en valeur du contenu

La classe .faq-container limite la largeur :

max-width: 760px;

Cela améliore la lisibilité (très important en SEO et UX).

Étape 4 : le design des blocs FAQ

Chaque question/réponse est contenue dans :

.faq-item {
    background: var(--card);
    border-radius: var(--radius);
    margin-bottom: 16px;
    border: 1px solid var(--border);
}

Ce qui donne :

  • effet “card” moderne
  • espacement propre
  • structure claire

Auquel on ajoute un effet hover :

.faq-item:hover {
    box-shadow: 0 10px 30px rgba(0,0,0,0.04);
}

C’est un petit détail… pour énorme impact visuel.

Étape 5 : cacher l’input tout en le gardant actif

.faq-toggle {
    display: none;
}

On ne veut pas voir la checkbox… mais on veut l’utiliser.

  • C’est comme un moteur invisible qui fait tourner votre FAQ.

Étape 6 : rendre la question cliquable

.faq-question {
    display: flex;
    justify-content: space-between;
    cursor: pointer;
}

On transforme notre label en bouton interactif.

Résultat :

  • toute la zone est cliquable
  • meilleure ergonomie
  • meilleure expérience utilisateur

Étape 7 : l’animation de l’icône

Notre icône “+” est créée uniquement en CSS :

.icon::before,
.icon::after {
    position: absolute;
    background: var(--muted);
}

On dessine deux lignes :

  • une horizontale
  • une verticale

Puis, quand on clique :

.faq-toggle:checked + .faq-question .icon::after {
    transform: scaleY(0);
}

La ligne verticale disparaît → le “+” devient un “–”

C’est simple… mais très élégant.

Étape 8 : l’effet accordéon

Par défaut :

.faq-answer {
    max-height: 0;
    overflow: hidden;
}

La réponse est cachée.

Quand on clique :

.faq-toggle:checked + .faq-question + .faq-answer {
    max-height: 300px;
}

La réponse apparaît avec une animation fluide.

Petit point important :

  • max-height est utilisé car height: auto ne s’anime pas

Étape 9 : optimisation SEO

Le code inclut :

<script type="application/ld+json">

Ce sont des données structurées FAQ

Google peut :

  • afficher vos questions directement dans les résultats
  • améliorer votre visibilité
  • augmenter votre taux de clic

C’est un énorme avantage SEO.

👉 Pour aller plus loin : Balisage Schema.org FAQ pour enrichir vos résultats Google

Étape 10 : accessibilité et bonnes pratiques

On utilise les attributs Aria :

<section aria-labelledby="faq-title">

C’est excellent pour :

  • les lecteurs d’écran
  • l’accessibilité
  • le SEO indirect

Et chaque question est bien structurée avec un <h3>.

Désormais, notre code :

  • est propre
  • utilise des techniques modernes
  • respecte le SEO
  • fonctionne sans JavaScript
  • est responsive

Honnêtement, c’est déjà un niveau professionnel.

Vous venez de comprendre quelque chose d’important : une FAQ performante ne dépend pas de la complexité, mais de l’intelligence du code.

Avec quelques lignes bien pensées, vous avez créé une Foire aux questions :

  • interactive
  • élégante
  • rapide
  • SEO friendly

Et surtout… vous avez appris un principe clé du développement web : faire mieux avec moins.

Optimiser notre FAQ pour le SEO (niveau supérieur)

Même si nous avons déjà une excellente base. Nous voulons que notre FAQ (Foire aux questions) devienne un levier de visibilité sur Google, il faut donc aller un peu plus loin.

Formation web et informatique - Alban Guillier - Formateur

Des formations informatique pour tous !

Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…

Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.

Découvrez mes formations Qui suis-je ?

Car oui, une FAQ bien construite peut :

  • apparaître directement dans les résultats Google (rich snippets)
  • capter des mots-clés longue traîne
  • augmenter fortement votre taux de clic

Et c’est souvent là que la différence se fait entre un site “correct”… et un site qui performe.

Comprendre le rôle des mots-clés dans une FAQ

Une erreur fréquente consiste à écrire une FAQ “au hasard”. En réalité, une bonne FAQ doit répondre à de vraies recherches utilisateur.

Par exemple :

  • “Qu’est-ce qu’une FAQ ?”
  • “Comment créer une foire aux questions ?”
  • “FAQ SEO : pourquoi c’est important ?”
  • Chaque question devient une opportunité de positionnement.

Dans notre code, nous allons placer des questions pertinentes :

<h3>Pourquoi utiliser du CSS sans JavaScript ?</h3>

C’est bien… mais nous pourrions aller encore plus loin :

Version optimisée SEO :

“Pourquoi créer une FAQ en CSS sans JavaScript ?”

Cela ajoute naturellement les mots-clés principaux :

  • FAQ
  • Foire aux questions

Sans forcer. Sans tricher. Juste intelligemment.

Le pouvoir de la longue traîne

Une FAQ est parfaite pour capter ce qu’on appelle la longue traîne SEO.

Ce sont des recherches très précises comme :

  • “comment faire une FAQ accordéon en CSS”
  • “FAQ sans JavaScript exemple”
  • “foire aux questions SEO comment faire”

Ces requêtes ont :

  • moins de concurrence
  • mais un trafic très qualifié

Résultat : on sera attractif pour les bonnes personnes.

Aller plus loin avec les données structurées

Notre code contient déjà ceci :

<script type="application/ld+json">

C’est excellent.

Mais comprenons vraiment ce que ça fait.

Vous dites à Google : “Ceci est une FAQ structurée”

Et Google peut afficher ceci directement dans les résultats :

  • les questions
  • les réponses
  • des extraits enrichis

C’est ce qu’on appelle un rich snippet.

Exemple concret d’amélioration

Actuellement, nous avons :

{
"@type": "Question",
"name": "Est-ce responsive ?"
}

Ce n’est pas encore optimal pour le SEO.

Voici une version améliorée :

"name": "Une FAQ en CSS est-elle responsive sur mobile ?"

Pourquoi c’est mieux ?

  • plus précis
  • plus naturel
  • plus proche des recherches Google

Optimisation du contenu : écrire pour l’utilisateur

Une bonne FAQ SEO ne doit jamais être robotique.

Voici une règle simple : écrivez comme si vous répondiez à un client.

Par exemple :

❌ Mauvais :

“Oui, ce design est responsive.”

✅ Meilleur :

“Oui, cette FAQ en CSS s’adapte parfaitement aux mobiles, tablettes et grands écrans, sans aucun effort supplémentaire de votre part.”

  • Plus humain, plus engageant… et meilleur pour le SEO.

Améliorer l’UX : une seule question ouverte

Actuellement, votre FAQ permet d’ouvrir plusieurs réponses en même temps.

Ce n’est pas forcément idéal. Un variante plus UX-friendly doit permettre d’avoir qu’une seule question ouverte à la fois.

Mais attention : Sans JavaScript, c’est limité !

Solution simple : remplacer checkbox par radio

<input type="radio" name="faq" id="faq1">

Ainsi, tous les inputs partagent le même name. Ce qui permet d’ouvrir une question tout en fermant les autres automatiquement.

C’est plus propre, plus professionnel.

Améliorer les animations

Notre animation actuelle est déjà fluide :

transition: all 0.35s ease;

Mais nous pouvons aller toujours plus loin. Par exemple :

.faq-answer {
    transition: max-height 0.4s ease, opacity 0.3s ease;
    opacity: 0;
}

.faq-toggle:checked + .faq-question + .faq-answer {
    opacity: 1;
}

Cela provoquera un effet plus doux, plus moderne.

Ajouter une micro-interaction

Un petit détail qui change tout :

.faq-question:hover h3 {
    color: var(--accent);
}

Au survol :

  • la question change de couleur
  • l’utilisateur comprend que c’est interactif

C’est subtil… mais très efficace.

Améliorer l’accessibilité et le SEO indirectement

Ajoutez ceci :

<label for="faq1" class="faq-question" role="button" aria-expanded="false">

Puis en CSS (optionnel), on peut gérer l’état visuel.

C’est important pour offrir un plus pour les lecteurs d’écran et c’est par extension meilleur pour Google (indirectement).

Comment intégrer cette FAQ dans WordPress

Si vous utilisez WordPress (comme le Créa-blog), plusieurs options :

  • Option simple : coller le code dans un bloc HTML personnalisé.
  • Option propre : créer un template réutilisable
  • Option avancée : transformer en composant dynamique (PHP)

Honnêtement, notre version actuelle est déjà parfaite pour un blog !

Transformer la FAQ en levier SEO

Voici une stratégie simple mais redoutable :

  1. Créez une page (ex : “Guide SEO”)
  2. Ajoutez une FAQ en bas
  3. Répondez aux questions fréquentes
  4. Intégrez vos mots-clés naturellement

Résultat :

  • plus de contenu
  • meilleure pertinence
  • meilleure position Google

C’est exactement le type de stratégie que vous pouvez exploiter sur votre blog, boutique en ligne (sur les fiches produit) ou site web.

Les erreurs à éviter

Même avec un bon code, certaines erreurs peuvent tout gâcher.

Évitez :

  • des réponses trop courtes
  • du contenu dupliqué
  • des questions inutiles
  • une FAQ trop longue sans structure
  • Une FAQ doit rester utile, pas décorative.

Transformer une FAQ statique en FAQ dynamique

Cette version actuelle est statique. Mais plus tard, vous pourriez :

  • générer les questions depuis une base de données
  • personnaliser selon l’utilisateur
  • ajouter un moteur de recherche

👉 Mais pour 90% des sites, cette version suffit largement.

Le code complet de notre FAQ en CSS pur

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>FAQ - Foire aux questions en CSS pur</title>
<meta name="description" content="Créer une FAQ moderne en CSS pur sans JavaScript. Une foire aux questions optimisée SEO, rapide, élégante et responsive pour améliorer l'expérience utilisateur.">

<style>

/* RESET */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

/* VARIABLES */
:root {
    --bg: #f9fafb;
    --card: #ffffff;
    --text: #111827;
    --muted: #6b7280;
    --border: #e5e7eb;
    --accent: #6366f1;
    --radius: 16px;
}

/* BODY */
body {
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
    background: linear-gradient(180deg, #f9fafb, #f3f4f6);
    color: var(--text);
    display: flex;
    justify-content: center;
    padding: 60px 20px;
}

/* CONTAINER */
.faq-container {
    width: 100%;
    max-width: 760px;
}

/* TITLE */
.faq-title {
    font-size: 2.2rem;
    font-weight: 600;
    text-align: center;
    margin-bottom: 40px;
    letter-spacing: -0.5px;
}

/* ITEM */
.faq-item {
    background: var(--card);
    border-radius: var(--radius);
    margin-bottom: 16px;
    border: 1px solid var(--border);
    overflow: hidden;
    transition: all 0.25s ease;
}

/* HOVER */
.faq-item:hover {
    border-color: #d1d5db;
    box-shadow: 0 10px 30px rgba(0,0,0,0.04);
}

/* INPUT */
.faq-toggle {
    display: none;
}

/* QUESTION */
.faq-question {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 22px 24px;
    cursor: pointer;
}

/* QUESTION TEXT */
.faq-question h3 {
    font-size: 1.05rem;
    font-weight: 500;
    transition: color 0.3s ease;
}

/* HOVER TEXT */
.faq-question:hover h3 {
    color: var(--accent);
}

/* ICON */
.icon {
    width: 24px;
    height: 24px;
    position: relative;
    flex-shrink: 0;
}

/* ICON LINES */
.icon::before,
.icon::after {
    content: "";
    position: absolute;
    background: var(--muted);
    transition: all 0.3s ease;
}

.icon::before {
    width: 16px;
    height: 2px;
    top: 11px;
    left: 4px;
}

.icon::after {
    width: 2px;
    height: 16px;
    top: 4px;
    left: 11px;
}

/* ANSWER */
.faq-answer {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.4s ease, opacity 0.3s ease;
    opacity: 0;
    padding: 0 24px;
}

/* ANSWER TEXT */
.faq-answer p {
    color: var(--muted);
    line-height: 1.7;
    padding: 20px 0;
}

/* OPEN STATE */
.faq-toggle:checked + .faq-question + .faq-answer {
    max-height: 300px;
    opacity: 1;
}

/* ICON ANIMATION */
.faq-toggle:checked + .faq-question .icon::after {
    transform: scaleY(0);
}

/* ACTIVE BORDER */
.faq-toggle:checked + .faq-question {
    border-bottom: 1px solid var(--border);
}

/* RESPONSIVE */
@media (max-width: 600px) {
    .faq-title {
        font-size: 1.7rem;
    }

    .faq-question {
        padding: 18px;
    }
}

</style>

<!-- DONNÉES STRUCTURÉES SEO -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Qu’est-ce qu’une FAQ en CSS pur ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Une FAQ en CSS pur est une foire aux questions interactive qui utilise uniquement HTML et CSS pour afficher ou masquer les réponses sans JavaScript."
}
},
{
"@type": "Question",
"name": "Pourquoi créer une foire aux questions sans JavaScript ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Cela améliore les performances, simplifie le code, réduit les erreurs et garantit une compatibilité maximale avec tous les navigateurs."
}
},
{
"@type": "Question",
"name": "Une FAQ en CSS est-elle bonne pour le SEO ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Oui, une FAQ bien structurée améliore le référencement naturel, permet d'apparaître en rich snippets et répond directement aux questions des internautes."
}
},
{
"@type": "Question",
"name": "Comment personnaliser une FAQ en CSS ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Vous pouvez modifier les couleurs, les animations, les espacements et la typographie grâce aux variables CSS et aux styles personnalisés."
}
}
]
}
</script>

</head>

<body>

<section class="faq-container" aria-labelledby="faq-title">

    <h2 id="faq-title" class="faq-title">Foire aux questions</h2>

    <article class="faq-item">
        <input type="checkbox" id="faq1" class="faq-toggle">
        <label for="faq1" class="faq-question">
            <h3>Qu’est-ce qu’une FAQ en CSS pur ?</h3>
            <span class="icon"></span>
        </label>
        <div class="faq-answer">
            <p>Une FAQ en CSS pur est une foire aux questions interactive qui permet d'afficher ou masquer des réponses simplement en cliquant sur une question, sans utiliser de JavaScript.</p>
        </div>
    </article>

    <article class="faq-item">
        <input type="checkbox" id="faq2" class="faq-toggle">
        <label for="faq2" class="faq-question">
            <h3>Pourquoi créer une foire aux questions sans JavaScript ?</h3>
            <span class="icon"></span>
        </label>
        <div class="faq-answer">
            <p>Créer une FAQ sans JavaScript permet d'améliorer les performances du site, de simplifier le code et d'assurer une compatibilité maximale avec tous les navigateurs.</p>
        </div>
    </article>

    <article class="faq-item">
        <input type="checkbox" id="faq3" class="faq-toggle">
        <label for="faq3" class="faq-question">
            <h3>Une FAQ en CSS est-elle efficace pour le SEO ?</h3>
            <span class="icon"></span>
        </label>
        <div class="faq-answer">
            <p>Oui, une FAQ bien structurée améliore le référencement naturel, augmente la visibilité sur Google et permet d'apparaître dans les résultats enrichis grâce aux données structurées.</p>
        </div>
    </article>

    <article class="faq-item">
        <input type="checkbox" id="faq4" class="faq-toggle">
        <label for="faq4" class="faq-question">
            <h3>Comment personnaliser le design d’une FAQ ?</h3>
            <span class="icon"></span>
        </label>
        <div class="faq-answer">
            <p>Vous pouvez facilement personnaliser votre FAQ en modifiant les variables CSS pour adapter les couleurs, les animations, les bordures et la typographie à votre charte graphique.</p>
        </div>
    </article>

</section>

</body>
</html>

Vous avez maintenant bien plus qu’un simple composant technique. Vous avez entre les mains un outil stratégique.

Une FAQ bien conçue, ce n’est pas juste :

  • une liste de questions
  • un élément de design

C’est un véritable levier :

  • pour rassurer vos visiteurs
  • pour améliorer votre référencement
  • pour structurer votre contenu intelligemment

Et le plus intéressant dans tout ça ? Vous l’avez fait avec du CSS pur. Sans dépendance. Sans complexité inutile. C’est exactement ce qui fait la différence entre un développeur qui “code”… et un développeur qui comprend vraiment ce qu’il fait.