Produire un EPUB accessible, pas à pas
À la fin de ce tutoriel, vous aurez fabriqué de vos mains un fichier EPUB 3 complet : structure du paquet, contenu balisé sémantiquement, métadonnées d'accessibilité, table des matières navigable, image avec alternative, puis archive assemblée et validée. Vous n'aurez pas besoin d'outil de génération : on écrit chaque fichier soi-même, parce que c'est la meilleure façon de comprendre comment un EPUB est réellement construit.
Un EPUB n'est rien d'autre qu'une archive ZIP de fichiers XHTML décrits par un manifeste. Si vous savez écrire du HTML accessible, vous savez déjà 80 % du travail — le reste, c'est de la plomberie de paquet, que ce tutoriel vous fait traverser étape par étape.
Ce tutoriel se concentre sur l'accessibilité à l'intérieur d'un EPUB. Les principes d'accessibilité du contenu (structure de titres, alternatives textuelles, contrastes, langue) sont exactement ceux du web : pour les approfondir, voir le guide « Rendre un site conforme au RGAA (niveau AA) ».
Ce dont vous avez besoin
- Un éditeur de texte capable d'enregistrer en UTF-8.
- De quoi créer une archive ZIP en contrôlant l'ordre des fichiers (un
utilitaire
zipen ligne de commande convient ; l'explorateur de fichiers graphique ne convient pas, on verra pourquoi à l'étape 6). - Deux validateurs gratuits, que l'on installera au moment de s'en servir : EPUBCheck (conformité) et Ace by DAISY (accessibilité).
Aucune connaissance préalable de l'EPUB n'est requise. Une base de HTML suffit.
Étape 1 — Créer l'arborescence
Créez un dossier de travail, par exemple mon-livre/, et à l'intérieur la
structure suivante. On la remplira fichier par fichier.
mon-livre/
├── mimetype
├── META-INF/
│ └── container.xml
└── EPUB/
├── content.opf
├── nav.xhtml
├── chapitre1.xhtml
├── style.css
└── img/
└── schema.png (une image de votre choix)
Trois zones à retenir :
mimetype: déclare que le paquet est un EPUB. Un seul rôle, une seule ligne.META-INF/: le point d'entrée que le lecteur ouvre en premier.EPUB/: tout votre contenu (le nom de ce dossier est libre, maisEPUB/est la convention).
Étape 2 — Déclarer le type de paquet (mimetype)
Créez le fichier mimetype avec exactement cette ligne, sans saut de ligne
final si votre éditeur vous laisse le choix, et rien d'autre :
application/epub+zip
Ce fichier a une contrainte inhabituelle : dans l'archive finale, il devra être le premier fichier et non compressé. Retenez-le, on y reviendra à l'étape 6 — c'est le piège classique de l'EPUB fait main.
Étape 3 — Poser le point d'entrée (META-INF/container.xml)
Ce fichier indique au lecteur où trouver le manifeste du livre (le .opf).
<?xml version="1.0" encoding="UTF-8"?> <container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container"> <rootfiles> <rootfile full-path="EPUB/content.opf" media-type="application/oebps-package+xml"/> </rootfiles> </container>
Le seul point d'attention : full-path doit correspondre exactement au
chemin de votre fichier .opf dans l'arborescence. Une faute de chemin ici, et
le livre ne s'ouvre pas.
Étape 4 — Écrire le manifeste et les métadonnées d'accessibilité (content.opf)
C'est le cœur du livre : il déclare son identité, liste ses fichiers (le
manifest) et fixe l'ordre de lecture (le spine). C'est aussi ici que se
joue l'accessibilité déclarée de la publication.
<?xml version="1.0" encoding="UTF-8"?> <package xmlns="http://www.idpf.org/2007/opf" version="3.0" xml:lang="fr" unique-identifier="pub-id"> <metadata xmlns:dc="http://purl.org/dc/elements/1.1/"> <dc:identifier id="pub-id">urn:uuid:REMPLACEZ-PAR-UN-UUID-UNIQUE</dc:identifier> <dc:title>Mon premier EPUB accessible</dc:title> <dc:creator>Votre nom</dc:creator> <dc:language>fr</dc:language> <meta property="dcterms:modified">2026-07-14T10:00:00Z</meta> <!-- Métadonnées d'accessibilité : lues par les validateurs et les liseuses --> <meta property="schema:accessMode">textual</meta> <meta property="schema:accessMode">visual</meta> <meta property="schema:accessModeSufficient">textual</meta> <meta property="schema:accessibilityFeature">structuralNavigation</meta> <meta property="schema:accessibilityFeature">tableOfContents</meta> <meta property="schema:accessibilityFeature">alternativeText</meta> <meta property="schema:accessibilityHazard">none</meta> <meta property="schema:accessibilitySummary">Publication structurée, avec table des matières navigable et alternatives textuelles pour les images.</meta> </metadata> <manifest> <item id="nav" href="nav.xhtml" media-type="application/xhtml+xml" properties="nav"/> <item id="ch1" href="chapitre1.xhtml" media-type="application/xhtml+xml"/> <item id="css" href="style.css" media-type="text/css"/> <item id="img1" href="img/schema.png" media-type="image/png"/> </manifest> <spine> <itemref idref="ch1"/> </spine> </package>
Ce qu'il faut comprendre ligne à ligne :
xml:langetdc:language: indispensables. C'est ce qui permet à une synthèse vocale de choisir la bonne voix. Un EPUB sans langue déclarée est un échec d'accessibilité de base.dc:identifier: un identifiant unique. Générez un vrai UUID (n'importe quel générateur d'UUID fait l'affaire) et remplacez le texte d'exemple.- Les
meta property="schema:…": ce sont les métadonnées d'accessibilité définies par le vocabulaire schema.org. Elles déclarent comment le contenu peut être perçu (accessMode), ce qui suffit à le consulter (accessModeSufficient), les fonctionnalités présentes (accessibilityFeature) et l'absence de risque (accessibilityHazard). Déclarez-les honnêtement : ne prétendez pasalternativeTextsi vos images n'ont pas d'alt. properties="nav": marque le fichier qui contient la table des matières (étape suivante). Obligatoire en EPUB 3.- Chaque fichier du paquet doit apparaître dans le
manifest— y compris les images. Un fichier oublié ici fera échouer la validation.
Étape 5 — Rédiger le contenu accessible (chapitre1.xhtml)
L'EPUB 3 utilise HTML5, mais sérialisé en XML (on parle de XHTML5). En clair : c'est du HTML5, avec la rigueur du XML par-dessus.
Trois règles à ne pas oublier :
- Déclarez le namespace :
xmlns="http://www.w3.org/1999/xhtml". - Fermez toutes les balises, y compris les auto-fermantes :
<br />,<hr />,<img … />. Une balise non fermée corrompt le livre. - Balises et attributs en minuscules.
<?xml version="1.0" encoding="UTF-8"?> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="fr" lang="fr"> <head> <meta charset="UTF-8"/> <title>Chapitre 1 — Introduction</title> <link rel="stylesheet" type="text/css" href="style.css"/> </head> <body> <section epub:type="chapter" role="doc-chapter"> <h1>Introduction</h1> <p>L'accessibilité d'un livre numérique se construit dès la <strong>structure du contenu</strong>, pas après coup.</p> <section> <h2>Une image avec alternative</h2> <figure> <img src="img/schema.png" alt="Schéma des trois zones d'un paquet EPUB : le mimetype, le dossier META-INF et le dossier de contenu."/> <figcaption>Les trois zones d'un paquet EPUB.</figcaption> </figure> </section> <section> <h2>Un tableau de données</h2> <table> <caption>Fichiers obligatoires d'un EPUB minimal</caption> <thead> <tr> <th scope="col">Fichier</th> <th scope="col">Rôle</th> </tr> </thead> <tbody> <tr> <td>mimetype</td> <td>Déclare le type de paquet</td> </tr> <tr> <td>content.opf</td> <td>Manifeste et métadonnées</td> </tr> </tbody> </table> </section> </section> </body> </html>
Les gestes d'accessibilité ici sont les mêmes que sur le web :
- Hiérarchie de titres sans saut (
h1→h2), qui décrit la structure et sert de navigation au lecteur d'écran. <figure>/<figcaption>avec unaltqui décrit le contenu et la fonction de l'image — sans commencer par « Image de… ». Pour une image purement décorative, on mettraitalt=""(attribut présent, valeur vide).- Tableau avec
<caption>et en-têtes<th scope="col">: jamais un tableau pour la mise en page. - Langue déclarée sur
<html>. Marquez tout passage dans une autre langue avec unlanglocal (<span lang="en">…</span>). epub:typeetroleenrichissent la sémantique :doc-chapterindique à la technologie d'assistance qu'elle entre dans un chapitre.
Étape 6 — Construire la table des matières navigable (nav.xhtml)
La table des matières n'est pas un luxe : c'est le principal moyen de
navigation structurelle pour un lecteur d'écran. En EPUB 3, c'est un simple
fichier XHTML contenant un <nav> marqué epub:type="toc".
<?xml version="1.0" encoding="UTF-8"?> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="fr" lang="fr"> <head> <meta charset="UTF-8"/> <title>Table des matières</title> </head> <body> <nav epub:type="toc" id="toc" role="doc-toc"> <h1>Table des matières</h1> <ol> <li><a href="chapitre1.xhtml">Introduction</a> <ol> <li><a href="chapitre1.xhtml#toc">Une image avec alternative</a></li> </ol> </li> </ol> </nav> </body> </html>
Points clés :
- Utilisez une vraie liste ordonnée (
<ol>), imbriquée pour refléter la hiérarchie des titres. - Les libellés de liens doivent être explicites hors contexte : le titre du chapitre, pas « cliquez ici ».
Étape 7 — Soigner le style sans casser l'accessibilité (style.css)
Le CSS d'un EPUB obéit aux mêmes règles d'accessibilité que sur le web. Deux principes structurants : ne jamais figer les tailles (le lecteur doit pouvoir agrandir le texte) et garantir les contrastes.
body { font-size: 1rem; /* jamais de px pour le texte : rem / em / % */ line-height: 1.6; color: #1a1a1a; background-color: #ffffff; } /* Contraste conforme au niveau AA (ratio ≥ 4,5:1 pour le texte normal) */ a { color: #0066cc; } a:hover, a:focus { color: #004499; text-decoration: underline; } /* Respecter la préférence de thème du lecteur */ @media (prefers-color-scheme: dark) { body { color: #e0e0e0; background-color: #1a1a1a; } a { color: #66b3ff; } }
À retenir : dimensionnez en rem/em, vérifiez le contraste dans les deux
thèmes (clair et sombre) et n'introduisez aucune information par la seule
couleur.
Étape 8 — Assembler l'archive (attention au mimetype)
C'est l'étape la plus piégeuse. L'ordre de compression compte : le mimetype
doit être le premier fichier de l'archive et être stocké sans
compression. C'est pour ça qu'un outil de compression graphique ne convient
généralement pas — il ne vous laisse pas contrôler cet ordre.
Avec un utilitaire zip en ligne de commande, en deux temps :
# 1. Le mimetype d'abord, NON compressé (option -0) zip -0Xq mon-livre.epub mimetype # 2. Le reste ensuite, compressé zip -rgq mon-livre.epub META-INF EPUB
Placez-vous à la racine de mon-livre/ pour lancer ces commandes, afin que les
chemins internes de l'archive soient corrects.
Si vous automatisez cette étape dans un langage de programmation, le principe est identique : ajoutez d'abord
mimetypeen mode « stocké » (sans compression), puis les autres fichiers. Toute bibliothèque d'archives ZIP sérieuse permet de forcer le mode de compression fichier par fichier.
Étape 9 — Valider
Un EPUB accessible se prouve avec des outils. Deux passes complémentaires :
-
EPUBCheck — valide la conformité structurelle (XML bien formé, manifeste cohérent, ordre du ZIP). Il attrape les erreurs de plomberie : fichier oublié dans le
manifest, balise non fermée,mimetypemal placé.epubcheck mon-livre.epub -
Ace by DAISY — audite l'accessibilité : présence des métadonnées
schema:…, alternatives textuelles, structure de titres, langue déclarée. Il produit un rapport listant les points à corriger.ace mon-livre.epub
Corrigez jusqu'à ce qu'EPUBCheck ne remonte aucune erreur et qu'Ace ne signale aucun problème critique. Pour finir, ouvrez le livre dans une liseuse qui gère la synthèse vocale et écoutez un passage : c'est la vérification qui compte le plus, car aucun outil ne remplace l'usage réel.
Ce que vous avez appris
Vous avez fabriqué un EPUB 3 de bout en bout et compris que son accessibilité se joue à trois niveaux :
- le paquet (structure,
mimetype, manifeste complet, ordre du ZIP) ; - les métadonnées d'accessibilité déclarées honnêtement dans le
.opf; - le contenu lui-même, où s'appliquent les mêmes règles que sur le web
(titres,
alt, tableaux, langue, contrastes, tailles relatives).
Pour aller plus loin
- Guide « Rendre un site conforme au RGAA (niveau AA) » — les gestes d'accessibilité du contenu, transposables tels quels dans un EPUB.
- Spécifications de référence : EPUB 3.3 et EPUB Accessibility 1.1 (W3C), WCAG 2.1.
- Outils : EPUBCheck (validation), Ace by DAISY (audit d'accessibilité), et une liseuse de bureau pour tester le rendu et la synthèse vocale.