Auditeur d'Accessibilité Web

VérifiéSûr

Audit les applications web pour la conformité WCAG 2.1 niveau AA. Vérifie les attributs ARIA, la navigation au clavier et la compatibilité lecteurs d'écran.

Spar Skills Guide Bot
TestingIntermédiaire
28/02/2026
Claude CodeCursorWindsurfCopilotCodex
#accessibility#wcag#aria#keyboard-navigation#frontend

Recommandé pour

Synthèse automatique

Ce skill passe en revue des composants d'interface web pour vérifier leur conformité WCAG 2.1 niveau AA (HTML sémantique, ARIA, navigation clavier, contrastes, formulaires, structure de titres).

Points forts

  • Couvre les huit axes classiques d'un audit a11y : sémantique, ARIA, clavier, alt, contraste, formulaires, titres, contenu dynamique.
  • Chaque point est illustré par un exemple de code « à éviter » et « à privilégier », directement réutilisable.
  • Rappelle le premier principe d'ARIA (ne pas utiliser ARIA si le HTML sémantique suffit) et les seuils de contraste 4.5:1 / 3:1.
  • Reste en lecture seule (Read, Grep, Glob) : aucun risque de modification involontaire du code.

Limites

  • Analyse statique uniquement : ne teste pas le rendu réel, les lecteurs d'écran ni les ratios de contraste calculés sur les couleurs effectives.
  • Aucune intégration à des outils automatisés (axe, Lighthouse, Pa11y) et pas de rapport chiffré de type score de conformité.
  • La section sur le contenu dynamique est incomplète dans le fichier fourni, et le skill ne traite pas les cas de formulaires multi-étapes ou de SPA complexes.
Quand l'utiliser

À utiliser lorsqu'on écrit ou relit un composant frontend et que l'on veut un contrôle de conformité WCAG AA avec des correctifs concrets.

Quand l'éviter

À éviter si l'on attend une validation automatisée en navigateur ou un audit formel certifié incluant des tests avec utilisateurs et lecteurs d'écran réels.

Analyse de sécurité

Sûr
Score qualité92/100

The skill only uses read-only tools (Read, Grep, Glob) and provides educational guidance on accessibility auditing. It contains no destructive, exfiltrating, or obfuscated actions. The included npx commands are for accessibility testing tools and are not executed by the skill itself, and even if run manually, they are benign.

Aucun point d'attention détecté

Comment cette analyse est faite

Exemples

Audit a modal component
Review src/components/Modal.tsx for accessibility: check focus trapping, returning focus on close, ARIA roles, and Escape key handling. Give me the specific fixes.
Fix an inaccessible form
My signup form uses placeholder text instead of labels and shows errors only in red. Audit it against WCAG AA and show me the corrected markup.
Custom dropdown keyboard support
This custom dropdown is a div with onClick and no keyboard support. Tell me what's broken for a11y and write the keyboard/ARIA version.

name: accessibility-auditor description: Reviews UI components for WCAG compliance, ARIA attributes, keyboard navigation, and screen reader support. Use when building frontend components or user requests accessibility improvements. allowed-tools: Read, Grep, Glob

Accessibility Auditor

Audits web applications for accessibility compliance (WCAG 2.1 Level AA) and suggests improvements.

When to Use

  • Building or reviewing UI components
  • User requests accessibility improvements
  • Preparing for accessibility audit
  • User mentions "accessibility", "a11y", "WCAG", "screen reader", or "keyboard navigation"

Instructions

1. Semantic HTML Check

Use proper HTML elements:

<!-- Bad -->
<div onclick="submit()">Submit</div>

<!-- Good -->
<button onclick="submit()">Submit</button>

Semantic structure:

  • <header>, <nav>, <main>, <footer>
  • <article>, <section>, <aside>
  • <h1> through <h6> in proper hierarchy
  • <button> for actions, <a> for navigation

2. ARIA Attributes

When to use ARIA:

  • Custom widgets (tabs, accordions, modals)
  • Dynamic content updates
  • Complex interactions
  • When semantic HTML isn't sufficient

Common ARIA attributes:

<!-- Landmark roles -->
<nav role="navigation" aria-label="Main">

<!-- Widget roles -->
<div role="button" tabindex="0" aria-pressed="false">

<!-- Live regions -->
<div role="alert" aria-live="assertive">Error occurred</div>

<!-- Labels and descriptions -->
<button aria-label="Close dialog">×</button>
<input aria-describedby="password-help" />

First rule of ARIA: Don't use ARIA if semantic HTML works

3. Keyboard Navigation

All interactive elements must be keyboard accessible:

// Add keyboard support to custom elements
<div
  role="button"
  tabindex="0"
  onClick={handleClick}
  onKeyDown={(e) => {
    if (e.key === 'Enter' || e.key === ' ') {
      handleClick();
    }
  }}
>
  Click me
</div>

Tab order:

  • Use tabindex="0" for custom interactive elements
  • Avoid tabindex > 0 (creates confusing tab order)
  • Use tabindex="-1" for programmatic focus only

Focus management:

  • Visible focus indicators
  • Trap focus in modals
  • Return focus when closing dialogs
  • Skip links for main content

4. Alt Text and Images

Informative images:

<img src="chart.png" alt="Sales increased 25% in Q3" />

Decorative images:

<img src="decoration.png" alt="" />
<!-- or -->
<img src="decoration.png" role="presentation" />

Complex images:

<figure>
  <img src="complex-chart.png" alt="Quarterly sales chart" />
  <figcaption>
    Detailed description of the chart data...
  </figcaption>
</figure>

5. Color and Contrast

Contrast ratios (WCAG AA):

  • Normal text: 4.5:1 minimum
  • Large text (18pt+): 3:1 minimum
  • UI components: 3:1 minimum

Don't rely on color alone:

<!-- Bad: Color only -->
<span style="color: red;">Error</span>

<!-- Good: Icon + color -->
<span style="color: red;">
  <svg aria-hidden="true"><!-- error icon --></svg>
  <span class="sr-only">Error: </span>
  Invalid input
</span>

6. Forms and Labels

Every input needs a label:

<!-- Explicit label -->
<label for="email">Email</label>
<input id="email" type="email" />

<!-- Implicit label -->
<label>
  Email
  <input type="email" />
</label>

<!-- aria-label for icon buttons -->
<button aria-label="Search">
  <svg><!-- search icon --></svg>
</button>

Error messages:

<input
  id="password"
  aria-invalid="true"
  aria-describedby="password-error"
/>
<div id="password-error" role="alert">
  Password must be at least 8 characters
</div>

7. Headings and Document Structure

Proper heading hierarchy:

<h1>Page Title</h1>
  <h2>Section 1</h2>
    <h3>Subsection 1.1</h3>
    <h3>Subsection 1.2</h3>
  <h2>Section 2</h2>

Don't skip levels: h1 → h2 → h3 (not h1 → h3)

8. Dynamic Content

Announce updates to screen readers:

<!-- Polite: wait for user to pause -->
<div role="status" aria-live="polite">
  5 new messages
</div>

<!-- Assertive: interrupt immediately -->
<div role="alert" aria-live="assertive">
  Your session will expire in 1 minute
</div>

Loading states:

<button aria-busy="true" aria-label="Loading...">
  <span aria-hidden="true">Loading</span>
</button>

9. Screen Reader Testing

Screen reader only text:

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}

Hide decorative elements:

<svg aria-hidden="true"><!-- icon --></svg>

10. Common Issues to Check

Missing:

  • [ ] Alt text on images
  • [ ] Labels on form inputs
  • [ ] Proper heading hierarchy
  • [ ] Keyboard focus indicators
  • [ ] ARIA labels on icon buttons

Improper:

  • [ ] Low contrast text
  • [ ] Non-semantic markup (divs as buttons)
  • [ ] Missing focus management in modals
  • [ ] Keyboard traps
  • [ ] Auto-playing media

Testing:

  • [ ] Keyboard only navigation
  • [ ] Screen reader (NVDA, JAWS, VoiceOver)
  • [ ] Color blindness simulation
  • [ ] Zoom to 200%
  • [ ] Automated tools (axe, Lighthouse)

11. Automated Testing

Tools:

# Lighthouse
npx lighthouse https://example.com --only-categories=accessibility

# axe-core
npm install --save-dev @axe-core/cli
npx axe https://example.com

# pa11y
npm install --save-dev pa11y
npx pa11y https://example.com

In tests:

import { axe } from 'jest-axe';

test('should have no accessibility violations', async () => {
  const { container } = render(<MyComponent />);
  const results = await axe(container);
  expect(results).toHaveNoViolations();
});

12. WCAG 2.1 Level AA Checklist

Perceivable:

  • [ ] Text alternatives for non-text content
  • [ ] Captions for audio/video
  • [ ] Content adaptable (semantic markup)
  • [ ] Sufficient color contrast

Operable:

  • [ ] Keyboard accessible
  • [ ] No keyboard traps
  • [ ] Adequate time limits (adjustable)
  • [ ] No seizure-inducing flashing
  • [ ] Skip navigation links
  • [ ] Descriptive page titles
  • [ ] Focus order makes sense
  • [ ] Link purpose clear from context

Understandable:

  • [ ] Language of page specified (<html lang="en">)
  • [ ] Predictable navigation
  • [ ] Input assistance (labels, instructions, error messages)

Robust:

  • [ ] Valid HTML
  • [ ] Name, role, value for custom widgets
  • [ ] Compatible with assistive technologies

Best Practices

  • Build accessibility in from start
  • Test with real assistive technologies
  • Use semantic HTML first, ARIA second
  • Maintain logical document structure
  • Provide multiple ways to access content
  • Test keyboard navigation thoroughly
  • Don't disable zoom
  • Use landmarks and headings

Supporting Files

  • reference/wcag-checklist.md: Full WCAG 2.1 AA checklist
  • reference/aria-patterns.md: Common ARIA widget patterns

Du fichier au premier essai

Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.

Consulter la source et ses fichiers annexes

Ce téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.

1. Télécharger le fichier

Télécharger SKILL.md

Depuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/web-accessibility-auditor-mm5t8cfy/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.

Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.

mkdir -p '.skill-downloads/web-accessibility-auditor-mm5t8cfy' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/web-accessibility-auditor-mm5t8cfy/download' --output '.skill-downloads/web-accessibility-auditor-mm5t8cfy/SKILL.md.part' && mv '.skill-downloads/web-accessibility-auditor-mm5t8cfy/SKILL.md.part' '.skill-downloads/web-accessibility-auditor-mm5t8cfy/SKILL.md'

2. Vérifier les prérequis

Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.

Outils déclarés par l’auteur (à vérifier dans votre agent) : Read, Grep, Glob

Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.

Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.

3. Charger la skill

Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.

Claude Code
test -f '.skill-downloads/web-accessibility-auditor-mm5t8cfy/SKILL.md' && test -s '.skill-downloads/web-accessibility-auditor-mm5t8cfy/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/accessibility-auditor' && cp -R '.skill-downloads/web-accessibility-auditor-mm5t8cfy' '.claude/skills/accessibility-auditor'

Cursor
test -f '.skill-downloads/web-accessibility-auditor-mm5t8cfy/SKILL.md' && test -s '.skill-downloads/web-accessibility-auditor-mm5t8cfy/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/accessibility-auditor' && cp -R '.skill-downloads/web-accessibility-auditor-mm5t8cfy' '.cursor/skills/accessibility-auditor'

Codex
test -f '.skill-downloads/web-accessibility-auditor-mm5t8cfy/SKILL.md' && test -s '.skill-downloads/web-accessibility-auditor-mm5t8cfy/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/accessibility-auditor' && cp -R '.skill-downloads/web-accessibility-auditor-mm5t8cfy' '.agents/skills/accessibility-auditor'

OpenSkills

OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.

Installation officielle d’OpenSkills
openskills install './.skill-downloads/web-accessibility-auditor-mm5t8cfy'

openskills read 'web-accessibility-auditor-mm5t8cfy'

La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.

Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.

openskills sync

Mode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.

4. Faire un premier essai

Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :

Lis .skill-downloads/web-accessibility-auditor-mm5t8cfy/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.

Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.

Skills similaires