SVG et accessibilité : valider title, desc et structure sans casser l'optimisation

SVG et accessibilité : valider title, desc et structure sans casser l'optimisation

Icônes décoratives vs informatives : règles WCAG, balises title/desc et validation en ligne sans casser l’optimisation SVG.

23.07.2026
9 min de lecture
Partager cet article:
SVGaccessibilitya11ywcagvalidationTutoriel

Pourquoi l'accessibilité SVG compte avant l'optimisation

Un SVG allégé de 60 % ne sert à rien si un lecteur d'écran annonce « image » sans contexte, ou si une icône décorative encombre la navigation vocale. Les règles WCAG distinguent les SVG décoratifs, masqués aux technologies d'assistance, des SVG informatifs, qui exigent un titre ou une description. Le validateur SVG en ligne de FastMinify vérifie la syntaxe, la présence de viewBox et l'absence de <title> / <desc>, avec des avertissements à titre indicatif et non un audit WCAG complet. Le tout tourne dans le navigateur sur le hub outils SVG, avant ou après optimize SVG. Pour le contexte des préréglages SVGO, voir l'article SVGO presets expliqués.

Distinction claire décoratif vs informatif (WCAG 1.1.1)
Validation de la syntaxe, de viewBox et de title/desc pendant la saisie
Avertissements indicatifs, pour éviter un faux sentiment de conformité totale
Compatible avec optimize-svg (title/desc préservés sur les presets)
Traitement 100 % local, utile avant la livraison d'un design system

Exemples concrets avec des icônes d'interface et du SVG inline

Icône bouton avec libellé (décoratif)

Un bouton « Supprimer » avec une poubelle SVG à gauche du texte : le SVG reçoit aria-hidden="true" et n'a pas de title. validate-svg affiche un avertissement title/desc, ce qui est attendu. L'accessibilité repose sur le texte du bouton, pas sur l'icône.

Avant optimisation

Taille des fichiers
SVG avec title export Figma (~2,1 Ko)

Après optimisation

Taille des fichiers
aria-hidden + optimize default (~0,9 Ko)
Statut seul sans texte (informatif)

Un badge « succès » ou « erreur » représenté uniquement par un SVG doit avoir <title>Succès</title> ou un aria-label explicite sur le composant. validate-svg confirme la présence du texte. Testez ensuite au clavier et avec un lecteur d'écran.

Bonnes pratiques pour WCAG, optimize et design system

Liste de contrôle avant la mise en production

Intégrez validate-svg à votre revue d'assets, surtout pour les icônes livrées par des designers qui ne testent pas avec des technologies d'assistance.

Classer chaque icône : décoratif ou informatif (doc design system)
validate-svg : syntaxe + viewBox + title/desc si informatif
Test lecteur d'écran sur 2–3 icônes représentatives
Lancer optimize puis revalider sur l'échantillon informatif
Versionner le SVG source avec ses métadonnées a11y
Pièges après SVGO ou conversion JSX

Les préréglages default et aggressive exécutent cleanupIds, qui peut supprimer ou raccourcir des id, donc vérifiez qu'un id utilisé par aria-labelledby survit (safe laisse les id intacts). Le préréglage aggressive fusionne en plus les paths, donc comparez toujours visuellement. svg-to-jsx conserve le markup, mais vérifiez que title/desc restent les premiers enfants du <svg> dans le composant React.

Ne supprimez pas le title « pour alléger » : optimize allège déjà le fichier ailleurs
aria-hidden avec title : le title est ignoré par les technologies d'assistance, c'est sans conséquence
Dupliquer le même title sur 50 icônes : préférer aria-label contextuel
Inline SVG dans HTML : minify-html ne remplace pas validate-svg
Hub SVG pour enchaîner validation, optimisation et conversion en JSX
Limites du validateur dans le navigateur

FastMinify validate-svg est un filet de sécurité structurel, pas un substitut à un audit accessibilité de page entière. Contrastes, focus clavier, ordre de tabulation et alternatives longues restent votre responsabilité ou celle d'outils dédiés.

Warnings ≠ échec WCAG automatique
Decorative sans title : warning acceptable si aria-hidden
L'outil ne détecte pas aria-hidden
Compléter avec tests utilisateurs ou axe/WAVE
Documenter la décision décoratif/informatif dans le PR

Quand l'outil navigateur suffit

Cas d'usage fréquents

Pas besoin d'installer svgo-cli ou un linter a11y lourd pour vérifier un export Figma avant merge.

Revue de PR d'un design system : icônes collées une par une
Debug d'un SVG inline qui casse le parseur XML
Contrôle viewBox avant responsive ou resize-svg
Vérification title/desc avant svg-to-jsx
Former les designers à l'usage de title et d'aria-hidden

Compléter avec la CI et les audits AT

Ce que le navigateur ne remplace pas

Les tests automatisés de page (Pa11y, axe-core en CI, Lighthouse accessibilité) couvrent le DOM rendu, au-delà du fichier SVG source. Gardez validate-svg en amont sur les assets et ajoutez des tests E2E avec lecteur d'écran pour les parcours critiques.

CI : svgo + snapshot visuel sur le dossier icons/
Storybook a11y addon sur les composants icônes
eslint-plugin-jsx-a11y pour aria-hidden / aria-label
Audit trimestriel WCAG niveau AA sur les templates
Pas de traitement par lot dans validate-svg sur FastMinify : une icône à la fois
Aligner optimize et validation

Utilisez le même préréglage SVGO dans l'aperçu du navigateur et en CI. Après l'étape optimize du pipeline, extrayez un échantillon et passez-le dans validate-svg à la main. Voir SVGO presets et le guide optimisation SVG.

Préréglage safe ou default pour les assets avec title/desc
Revalider après aggressive sur les icônes informatives
Documenter la politique a11y du design system
Lien vers article SVG → React si composants
Hub SVG comme référence outils pour l'équipe

Outils complémentaires

Validateur structurel vs audit complet

FastMinify validate-svg cible le markup SVG source. D'autres outils couvrent la page rendue ou des normes plus larges.

FastMinify validate-svg

Syntaxe XML, viewBox, title/desc : dans le navigateur, sans compte.

Avantages :
Retour pendant l'édition
Stats SVG intégrées
Traitement local et privé
Inconvénients :
Pas d'audit WCAG page entière
Pas de simulation lecteur d'écran

axe DevTools / WAVE

Extensions navigateur pour audit accessibilité DOM.

Avantages :
Contrastes, ARIA, landmarks
Rapport WCAG orienté page
Inconvénients :
Ne valide pas un fichier .svg isolé aussi directement
Faux positifs possibles sur SVG inline complexe

SVGO + validate manuel

Pipeline CLI classique sans validate-svg.

Avantages :
Batch sur des centaines d'icônes
Config versionnée svgo.config.js
Inconvénients :
Aucun avertissement title/desc par défaut
Installation Node requise

SVG décoratif ou informatif, les règles de base

Quand le SVG est décoratif

Une icône à côté d'un libellé visible (« Enregistrer », « Fermer ») n'apporte pas d'information supplémentaire : elle est purement visuelle. Les bonnes pratiques d'accessibilité recommandent de la masquer aux lecteurs d'écran avec aria-hidden="true" sur le <svg>, ou avec role="presentation". Dans ce cas, <title> et <desc> sont inutiles, voire contre-productifs s'ils répètent le texte voisin.

Icône + texte visible → aria-hidden sur le SVG
Pas de title/desc requis si le sens est déjà dans le DOM
validate-svg peut signaler l'absence de title et de desc, ce qui est normal pour un SVG décoratif
Ne pas confondre « pas de title » et « SVG cassé »
Tester avec VoiceOver / NVDA : l'icône ne doit pas être lue
Quand le SVG est informatif

Un pictogramme seul (statut d'erreur sans texte, graphique inline, logo servant de lien sans texte alternatif) doit transmettre son sens. Deux options : <title> et éventuellement <desc> comme premiers enfants du <svg>, ou role="img" + aria-label / aria-labelledby sur l'élément SVG ou son composant React.

title court (nom de l'icône) ; desc pour le détail si nécessaire
Premiers enfants directs de svg, dans l'ordre recommandé par la spécification
aria-labelledby pointant vers un id sur title
Graphiques de données : title + desc ou alternative textuelle longue
validate-svg avertit si title et desc sont absents ou vides
Ce que validate-svg vérifie (et ce qu'il ne vérifie pas)

L'outil analyse le XML, exige une racine <svg>, signale un viewBox manquant par un avertissement et avertit quand <title> et <desc> sont tous deux sans texte. Ce sont des contrôles structurels de base, pas une simulation de lecteur d'écran, ni un contrôle de contraste, ni une validation ARIA complexe. Pour un audit complet, ajoutez axe DevTools ou WAVE.

Erreurs : XML mal formé, pas de racine svg, entrée trop volumineuse
Avertissements : viewBox absent, ou title et desc tous deux absents ou vides
État Valide avec avertissements : syntaxe correcte, points d'accessibilité à trancher
Panneau de statistiques : dimensions, viewBox, présence de title/desc
Aucun jugement « décoratif ou informatif » : c'est vous qui décidez du traitement

Un parcours pour valider, corriger et optimiser

D'abord, coller et lire les diagnostics

Ouvrez l'outil validate SVG, collez votre markup ou chargez un fichier .svg. Les erreurs bloquent la livraison (XML invalide), tandis que les avertissements vous invitent à ajouter un viewBox ou un texte descriptif selon le cas d'usage.

Coller, importer un fichier ou charger l'exemple intégré
Lire le panneau résultats : erreurs vs avertissements
Statistiques : viewBox, title, desc, taille
Copier ou télécharger le SVG corrigé manuellement
Éditeur Monaco pour modifier title/desc directement
Ensuite, corriger title, desc et viewBox

Pour une icône informative, ajoutez par exemple <title>Erreur</title> juste après l'ouverture du <svg>. Si width et height existent sans viewBox, déduisez-en un (viewBox="0 0 24 24") ou passez par resize-svg sur le hub. Le beautifier SVG aide à relire la structure après les modifications.

title : libellé court pour lecteurs d'écran
desc : contexte supplémentaire si l'icône est ambiguë
viewBox : requis pour la mise à l'échelle responsive (avertissement sinon)
Décoratif : aria-hidden plutôt que title factice
Re-valider après chaque modification
Enfin, optimiser sans supprimer l'accessibilité

Une fois la structure validée, passez à l'optimiseur SVGO (préréglage safe ou default pour les icônes d'interface). FastMinify conserve <title> et <desc> sur les trois préréglages : relancez validate-svg après l'optimisation pour le confirmer. Le minificateur SVG rapide ne touche qu'aux espaces et aux commentaires.

optimize safe/default : icônes avec title/desc
aggressive : fusionne les paths et arrondit les coordonnées à une décimale, comparez donc visuellement
Chaîne validate → optimize → validate
Article sur les préréglages SVGO pour choisir le bon niveau
svg-to-jsx : vérifier que title/desc survivent à la conversion React

Conclusion

L'accessibilité SVG commence par une décision claire. Une icône décorative reçoit aria-hidden et pas de title, une icône informative reçoit un title, un desc ou un aria-label. validate-svg aide à sécuriser la syntaxe et la structure avant l'optimisation SVGO, sans prétendre remplacer un audit complet. Enchaînez validation, optimisation et nouvelle validation sur le hub SVG pour livrer des icônes légères et utilisables par tous.

Classer décoratif vs informatif avant d'interpréter les warnings title/desc
validate → optimize (safe/default) → validate sur les icônes informatives
aria-hidden sur les icônes redondantes avec texte visible
Compléter avec tests lecteur d'écran sur les parcours critiques
Hub SVG + article SVGO presets pour la chaîne complète
Partager cet article
Partager cet article: