Public sector — mandatory
All French state services, local authorities (collectivités territoriales), public establishments (établissements publics), and operators of services of general economic interest (SIEG) — regardless of size or revenue.
RGAA stands for Référentiel Général d’Amélioration de l’Accessibilité — the French national reference framework for digital accessibility. It is published and maintained by DINUM (Direction Interministérielle du Numérique), the French government’s digital directorate.
RGAA v4.1.2 is the current version. It is the official French transposition of the international WCAG 2.1 Level A and AA standard (Web Content Accessibility Guidelines), supplemented with additional French methodological requirements for verifying conformance.
RGAA defines 106 criteria grouped into 13 themes. Each criterion has one or more technical tests that specify exactly how to verify compliance. When your site passes all applicable criteria, it is considered conformant with RGAA — and by extension, with WCAG 2.1 A/AA and the European standard EN 301 549.
| # | Theme | What it covers |
|---|---|---|
| 1 | Images | Alt text, decorative images, complex image descriptions |
| 2 | Frames | <iframe> titles, accessible frame content |
| 3 | Colors | Contrast ratios, color not used as the sole information carrier |
| 4 | Multimedia | Video captions, audio transcripts, audio descriptions |
| 5 | Tables | Headers, captions, layout vs. data tables |
| 6 | Links | Link text clarity, title attributes |
| 7 | Scripts | Focus management, ARIA updates, keyboard trap prevention |
| 8 | Mandatory elements | <html lang>, <title>, unique id attributes |
| 9 | Structure | Heading hierarchy, landmark regions, lists |
| 10 | Presentation | Visible focus, text resize without loss, CSS-only information |
| 11 | Forms | Labels, error messages, required fields, ARIA compliance |
| 12 | Navigation | Skip links, consistent navigation across pages |
| 13 | Consultation | Time limits, flashing content, reading order |
RGAA compliance is not optional in France. It is established by Loi n°2016-1321 pour une République numérique (October 7, 2016) and its implementing decree (Décret n°2019-768). These texts require that certain organizations comply with RGAA and publish an accessibility declaration (déclaration d’accessibilité) on every public-facing digital service.
Public sector — mandatory
All French state services, local authorities (collectivités territoriales), public establishments (établissements publics), and operators of services of general economic interest (SIEG) — regardless of size or revenue.
Large private companies — mandatory
Private companies whose annual revenue exceeds 250 million euros for the three previous fiscal years in France are also subject to the full RGAA obligations.
Organizations subject to RGAA must:
The accessibility declaration must disclose:
Non-compliance may result in:
Eqo is a two-phase RGAA v4.1.2 accessibility analyzer built specifically for Next.js projects. It integrates into your development workflow and CI/CD pipeline to catch accessibility regressions before they reach production.
Eqo parses your Next.js source files (.tsx, .jsx, .ts, .js) using a Babel AST parser running in a parallel worker pool. Without launching a browser, it detects issues directly in your component code:
| RGAA criterion | What Eqo detects statically |
|---|---|
| 1.1 | <img> without an alt attribute |
| 1.2 | <img alt=""> that may be incorrectly decorative |
| 2.1 | <iframe> without a title attribute |
| 5.4 | <table> without <th> or <caption> |
| 6.1 | <a> with no text content |
| 8.2 | Duplicate id attributes in a single file |
| 8.3 | Missing lang attribute on <html> |
| 8.5 | Missing <title> element in the document |
| 9.1 | Broken heading hierarchy (e.g., <h3> before <h2>) |
| 9.3 | Unordered or ordered list items outside a list container |
| 11.1 | <input> without an associated <label> |
| 11.9 | <button> with no accessible name |
Performance: Static analysis runs across all your source files in parallel using Piscina worker threads. Expect ~50 ms per file. An incremental cache (SHA-256 file hashing) skips unchanged files on subsequent runs, making CI reruns dramatically faster.
Eqo launches a headless Chromium browser using Playwright, navigates to each URL defined in your configuration, and runs the axe-core accessibility engine on the fully rendered DOM. This catches issues that only exist at runtime:
| RGAA theme | What Playwright detects |
|---|---|
| 3 — Colors | Color contrast failures on rendered text and UI components |
| 7 — Scripts | ARIA live region updates, focus management, keyboard traps |
| 10 — Presentation | Visible focus indicators, text spacing, reflow |
| 12 — Navigation | Skip link presence, consistent navigation structure |
| 13 — Consultation | Duplicate IDs across the rendered DOM |
axe-core results are mapped from axe’s internal rule IDs back to their RGAA criterion identifiers, so your report always speaks RGAA — not axe-core internals.
Some RGAA criteria assess the quality or relevance of content — not merely its presence. A tool can detect that an <img> has an alt attribute. It cannot judge whether that alternative text is accurate, descriptive, and contextually appropriate.
| Criterion | Why it requires a human |
|---|---|
| 1.3 | Is the alt text relevant and meaningful, not just a filename or “image”? |
| 1.6 | Is the detailed description of a complex image accurate and complete? |
| 2.2 | Is the title of each frame meaningful, not just “iframe” or “content”? |
| 6.1 | Is each link text explicit enough to be understood out of context? |
Eqo detects the absence of these attributes. It cannot evaluate their quality.
| Criterion | Why it requires a human |
|---|---|
| 4.1 | Does each pre-recorded video have a synchronized text caption? |
| 4.2 | Is the caption accurate and relevant to the spoken content? |
| 4.3 | Does audio content have a complete text transcript? |
| 4.9 | Does each audio-only file have a full, accurate transcription? |
| Criterion | Why it requires a human |
|---|---|
| 13.1 | Can users control or disable all time limits? |
| 13.7 | Does any content flash more than 3 times per second (seizure risk)? |
| 13.8 | Can users pause, stop, or hide all moving or auto-updating content? |
These criteria involve temporal and behavioral judgments that cannot be reliably detected by static or runtime analysis.
Every Eqo report clearly distinguishes three outcome states for each criterion:
| Status | Meaning |
|---|---|
validated | All automated checks passed for this criterion |
invalidated | At least one automated check failed — action required |
needs-review | Cannot be fully assessed automatically — manual review required |
not-applicable | The criterion does not apply to any audited page (or is exempted) |
When you publish your accessibility declaration, needs-review criteria must be audited manually and their status documented. The needs-review count is excluded from the automated compliance rate calculation — which is why a 100% Eqo compliance rate is not the same as a fully conformant site.
RGAA v4.1.2 is the French technical implementation of WCAG 2.1 Level A and AA. Every RGAA criterion references one or more WCAG 2.1 success criteria.
Practical implications:
wcag field on every issue, enabling cross-referencing with the international standardThis means Eqo’s output is directly useful for organizations that need to satisfy both French domestic law and European procurement requirements simultaneously.