Méthodologie
D'où vient le score de risque de procédure.
Chaque résultat dans votre rapport de scan porte un score de 0 à 100. Cette page explique précisément comment ce score est calculé, quelles sources il utilise, et — point crucial — ce qu'il ne peut pas vous dire.
Le score en un paragraphe
Un heuristique de priorisation, pas un avis juridique.
Issu du croisement de trois corps de données : (1) bases de données de procédures 2025-2026, (2) analyse de la fréquence des mises en demeure, (3) la décision FTC d'avril 2025 contre AccessiBe. Mis à jour à chaque publication de rapport annuel ou de contentieux significatif.
| Tranche de score | Signification |
|---|---|
| 90 – 100 | Cité verbatim de manière routinière dans les mises en demeure |
| 70 – 89 | Présent dans > 40 % des plaintes destinées aux consommateurs |
| 40 – 69 | Cité mais pas central dans la plupart des plaintes |
| 0 – 39 | Règles techniques rarement invoquées dans les contentieux |
Top 10 règles déclenchantes
Les règles axe-core que nous priorisons — et pourquoi.
Extraites de notre module de classement du risque interne, mis à jour à chaque publication annuelle de données.
| ID de règle | Score | WCAG SC | Nom en clair | Raison de la citation |
|---|---|---|---|---|
| image-alt | 95 | 1.1.1 | Texte alternatif manquant sur les images | Violation la plus citée dans les mises en demeure web 2025-2026 (ADA + EAA) |
| link-name | 90 | 2.4.4 | Texte de lien ambigu ou vide | Deuxième barrière la plus citée dans les rapports de plaignants utilisant un lecteur d'écran |
| button-name | 88 | 4.1.2 | Bouton sans libellé (paiement, panier, envoi de formulaire) | Cité de façon récurrente dans les mises en demeure spécifiques au commerce électronique |
| color-contrast | 80 | 1.4.3 | Rapport de contraste insuffisant entre le texte et l'arrière-plan | Résultat automatisé le plus signalé dans les rapports d'experts côté plaignant |
| label | 78 | 1.3.1 / 4.1.2 | Champ de formulaire sans libellé programmatique | Cité dans les plaintes relatives aux barrières à la création de compte et au paiement |
| document-title | 60 | 2.4.2 | Titre de page manquant ou vide | Cité dans les mises en demeure génériques ; moins central que les violations visuelles |
| html-has-lang | 55 | 3.1.1 | Attribut lang manquant sur l'élément HTML | Citation occasionnelle ; argument de mauvaise prononciation par les AT |
| page-has-heading-one | 50 | 1.3.1 | Page sans titre h1 | Présent dans les mises en demeure génériques ; rarement la demande principale |
| region | 45 | 1.3.6 | Contenu non contenu dans une région landmark | Mentionné dans les plaintes mais rarement la barrière centrale |
| landmark-one-main | 45 | 1.3.1 | Page sans landmark main unique | Citation accessoire ; schéma de navigation structurelle |
L'écart de 25–57 %
Ce que les scans automatisés ne peuvent pas détecter.
Plusieurs études évaluées par des pairs, la documentation Deque et le rapport WebAIM Million indiquent de façon constante que les outils automatisés détectent 25 à 57 % des violations WCAG sur une page donnée. Les échecs restants nécessitent un jugement humain.
Complétude de la navigation au clavier
Chaque élément interactif peut-il être atteint, actionné et quitté avec uniquement le clavier ? Les outils automatisés détectent le tabindex manquant mais ne peuvent pas vérifier le flux de navigation complet.
Qualité de la sortie du lecteur d'écran
VoiceOver ou NVDA lit-il la page dans un ordre logique et compréhensible ? L'analyse du DOM peut signaler des rôles manquants mais ne peut pas tester l'expérience audio.
Pertinence du texte alternatif
Les outils détectent le alt manquant (score 95 ci-dessus) mais ne peuvent pas juger si le alt présent est exact. « Image d'une chaussure rouge » est techniquement présent ; « Nike Air Max 90 rouge université » est pertinent.
Charge cognitive et langage clair
Les orientations WCAG 3.2 sur le contenu compréhensible n'ont pas de signal automatisé.
Widgets interactifs personnalisés
Carrousels, modales, sélecteurs de date et champs d'autocomplétion nécessitent des tests manuels au clavier et avec les AT pour vérifier le comportement des régions ARIA live.
Tests avec utilisateurs de technologies d'assistance
Les utilisateurs réels de lecteurs d'écran, de commandes de switch, de contrôle vocal et de loupe révèlent des barrières qu'aucune analyse statique ne peut prédire.
Liste de contrôle pour la revue manuelle (incluse dans chaque PDF Defense)
- 01Navigation au clavier — tous les éléments interactifs accessibles et actionnables sans souris
- 02Indicateur de focus — anneau de focus visible sur tous les éléments focusés
- 03Test lecteur d'écran — NVDA/VoiceOver lit tout le contenu dans un ordre logique
- 04Sous-titres vidéo — toutes les vidéos pré-enregistrées ont des sous-titres précis
- 05Descriptions audio — toutes les vidéos pré-enregistrées ont une audiodescription ou une alternative textuelle
- 06Avertissements d'expiration — les sessions qui expirent donnent au moins 20 secondes d'avertissement
- 07Identification des erreurs — les erreurs de formulaire identifient le champ et décrivent le problème en texte
- 08Navigation cohérente — la nav apparaît dans le même ordre sur toutes les pages
- 09Au focus / à la saisie — aucun changement de contexte déclenché uniquement par le focus ou la saisie
- 10Langue des parties — le texte en langue étrangère inline utilise l'attribut lang
Formules détaillées
Comment chaque score est calculé — formules exactes.
Vous trouverez ci-dessous les calculs réels derrière chaque métrique affichée dans l'application et dans le PDF Defense. Aucune formule n'est modifiée lors du scan — cette page documente simplement ce qui tourne déjà en production.
Score d'accessibilité (0–100)
Score unifié affiché en bandeau. Ratio pondéré passes axe vs défauts ouverts — user-status-aware : marquer une issue traitée fait monter le score sans rescan.
weighted_passes = nodes_passed_total × 3 weighted_failures = Σ count_open(impact) × poids(impact) poids : critique=10 / sérieux=5 / modéré=2 / mineur=1 accessibility_score = round(100 × weighted_passes / (weighted_passes + weighted_failures)) Renvoie null si dénominateur = 0 (scan dégénéré).- Seules les issues ouvertes (statut = open) contribuent aux weighted_failures. Les issues marquées traitées (done) ou ignorées sont exclues — le tri améliore directement le score.
- nodes_passed_total est le total cumulé de nœuds DOM ayant passé une règle axe, capturé au moment du scan.
- Le coefficient passes (×3) approxime le poids moyen de sévérité d'un test passant. Calibré empiriquement sur des scans de référence.
- Score unique exposé. Les scans historiques antérieurs au déploiement affichent null jusqu'au prochain recompute (déclenché par un triage manuel d'issue).
Couverture légale %
Taux de disponibilité moteur — part d'une référence légale pour laquelle une règle automatisée existe. PAS la part de votre site qui passe.
legal_coverage_pct = count(règles_avec_couverture_moteur) / count(règles_dans_référence) × 100- Une couverture % élevée signifie que le moteur peut tester beaucoup de règles de ce standard — pas que votre site est conforme sur ces règles.
- La couverture est rapportée par standard (WCAG 2.2 AA, RGAA 4.1, Section 508, EN 301 549) puis agrégée pondérée par le nombre de règles testables de chaque standard.
- Les critères manuels uniquement (ex. WCAG 1.2.2 Exactitude des sous-titres) sont par définition exclus de la couverture.
Sous-scores par principe WCAG (Perceptible / Utilisable / Compréhensible / Robuste)
Quatre taux de conformité par principe, dérivés des issues trouvées et mappés via WCAG SC → principe.
sous_score(principe) = 1 − (issues_failed_du_principe / règles_testables_du_principe) où failed exclut manual_required et needs_review- Une issue taguée avec plusieurs principes WCAG (ex. une issue mappée à la fois sur 1.3.1 Perceptible et 4.1.2 Robuste) incrémente chaque principe indépendamment. La somme des quatre sous-scores peut donc dépasser 100 % du total d'issues — c'est voulu.
- manual_required et needs_review sont exclus du compte failed pour ne pas pénaliser des critères que le moteur ne peut pas trancher.
- Utilisé pour les radars diagnostiques uniquement — pas pour le score de conformité affiché en bandeau.
Risque de procédure — Score de probabilité (0-100, par issue)
Score de probabilité par issue combinant impact × multiplicateur WCAG × boost jurisprudence quand des données de contentieux existent pour cette règle.
base = impact_base[issue.impact] × max(wcag_multiplier[tag] pour tag dans issue.wcag_tags) si rule_id dans RULE_JURISPRUDENCE_TABLE : settlements_boost = min(SETTLEMENTS_BOOST_CAP, count_settlements / DIVISOR) median_boost = min(MEDIAN_BOOST_CAP, median_usd / DIVISOR) score = round(base × (1 + settlements_boost + median_boost)) sinon : score = base score = clamp(score, 0, 100)- Affiché dans l'application et dans le PDF Defense (colonne priorité par issue).
- Ce n'est PAS une estimation en USD — c'est un classement relatif de probabilité pour trier quelles issues corriger en premier.
- Les règles absentes de la table jurisprudence retombent sur la formule legacy impact × WCAG uniquement.
Source : RULE_JURISPRUDENCE_TABLE issue de UsableNet ADA Web Lawsuit Trends 2025 + Seyfarth ADA Title III FY2024.
Risque de procédure — Estimation en USD (PDF Defense uniquement)
Estimation de l'exposition monétaire. Affichée UNIQUEMENT dans le PDF Defense, jamais en chiffre isolé dans le dashboard, pour éviter qu'elle soit lue comme une prédiction.
raw = sum_issues( litigation_weight(rule) × impact_multiplier × volume_factor(nodes) ) exposure_usd = raw × BASE_SETTLEMENT_USD × jurisdiction_multiplier exposure_usd = clamp(exposure_usd, LAWSUIT_RISK_MIN_USD, LAWSUIT_RISK_MAX_USD) # BASE_SETTLEMENT_USD = 55 000 $ # jurisdiction_multiplier vaut 1.0 (US) par défaut # Caps appliqués : plancher 20 k$ (scan unique), plafond 150 k$ (scan unique) # Hard cap 500 k$ uniquement sur les bandes de scénarios optimistic/pessimistic- BASE_SETTLEMENT_USD (55 000 $) = midpoint de la fourchette médiane 25 k$-75 k$ rapportée par le Seyfarth ADA Title III Year-End FY2024 pour les settlements digitaux ADA pre-litigation.
- Les caps ramènent le résultat dans la bande statistique observée en 2024-2025 (plancher 20 k$ et plafond 150 k$ sur l'estimation single-scan ; hard cap 500 k$ sur les bandes de scénarios). Les valeurs aberrantes ne sont PAS extrapolées.
- Le jurisdiction_multiplier est 1.0 (US) par défaut. Les juridictions hors-US ne sont pas encore calibrées — à lire comme US-only.
- Ce chiffre est indicatif, pas un avis juridique. À ré-évaluer chaque année à publication du rapport Seyfarth suivant.
Source : Seyfarth Shaw LLP — ADA Title III Federal Lawsuits Year-End Report FY2024.
Quick wins — gain_points
Liste de triage des issues à fort impact et faible effort. La valeur `gain_points` est un nombre d'unités de templating à corriger, PAS un delta de score.
gain_points = nombre_d_emplacements_template_uniques_à_corriger- Ne PAS interpréter gain_points comme « points ajoutés au score si je corrige cette issue ». C'est un compte de patches distincts à appliquer sur les templates / composants.
- Un seul fix de template peut résoudre des dizaines d'occurrences au niveau page (ex. un fix image-alt dans un composant fiche produit).
Effort de correction (heures par issue)
Estimation indicative du temps de correction par règle axe-core, utilisée pour classer les quick wins. Estimations internes basées sur l'historique des fixes.
effort = FIX_EFFORT_HOURS.get(rule_id, FIX_EFFORT_HOURS_DEFAULT) # Plage observée : 0,1 h - 4 h par règle. Défaut = 1,0 h.- Les estimations sont PAR EMPLACEMENT DE TEMPLATE UNIQUE, pas par occurrence au niveau page.
- Ces valeurs sont des calibrations issues de l'historique du projet. Elles ne couvrent ni la QA, ni le déploiement, ni les tests de régression.
Avertissement écart viewport (desktop vs mobile)
Signale les scans où les scores de densité desktop et mobile divergent significativement, indice de défaillances responsive uniquement.
viewport_gap_warning = abs(desktop_score − mobile_score) > VIEWPORT_GAP_WARNING_THRESHOLD # VIEWPORT_GAP_WARNING_THRESHOLD = 15 (seuil empirique projet)- Le seuil de 15 points est empirique (calibration projet). Ce n'est pas une valeur dérivée du WCAG.
- Quand il se déclenche, le rapport ajoute un bloc de recommandation spécifique au viewport — mais ne pénalise pas le score principal.
Détection de régression (vs scan précédent)
Compare le scan courant au scan précédent dont les références légales correspondent, en remontant les règles qui échouent à nouveau.
régression = (delta_failed de la règle ≥ DEFAULT_REGRESSION_MIN_FAILED_DELTA) # DEFAULT_REGRESSION_MIN_FAILED_DELTA = 1- Un delta de 1 est volontairement agressif — un seul nouveau nœud en échec déclenche le flag de régression.
- La comparaison est filtrée sur les références légales correspondantes entre scans (fix issue #211). Un scan sur un référentiel différent ne sera pas comparé en régression.
Cohérence multi-page — amplification
Quand la même règle échoue sur plusieurs pages, la pénalité est amplifiée pour refléter le défaut de template récurrent.
penalty += SCORE_WEIGHT_SERIOUS × pages_affected # Pas de cap aujourd'hui — itération future.- Une issue affectant 10 pages contribue 10× le poids SERIOUS, indépendamment du niveau d'impact propre de l'issue. Logique : un défaut de template récurrent est par nature sérieux.
- Aucun cap supérieur sur pages_affected pour l'instant — les sites très volumineux avec des défauts de template généralisés peuvent voir le score principal saturer à 0.
Sources
Fondé sur des citations — public, daté, vérifiable.
- UsableNet ADA Web Lawsuit Trends 2026
Rapport annuel sectoriel ; source pour la statistique des 1 023 procédures ciblant des sites avec overlay et les comptages mensuels de défendeurs au 1er semestre 2025.
- TestParty ADA Lawsuit Trends 2025–2026
Fréquence des types de violations dans les dépôts de défendeurs e-commerce.
- FTC Final Order — AccessiBe (avril 2025)
Base réglementaire pour identifier les types d'échecs constituant des barrières d'accessibilité matérielles.
- LFLegal — Action collective UserWay (février 2025)
Décision du magistrat identifiant l'exposition légale spécifique aux overlays.
- LFLegal — Action collective AccessiBe (juillet 2024)
Les allégations de la plainte détaillent les types d'échecs sur lesquels les plaignants se sont appuyés.
- WCAGsafe — Conformité Shopify ADA 2026
Décomposition par vertical Shopify de la fréquence des violations.
- axe-core 4.10 ruleset (Deque Systems)
Moteur de test WCAG utilisé par la 18F américaine, Microsoft, Google et des milliers de programmes d'accessibilité.
Pourquoi cela diffère d'un avis juridique
C'est un heuristique, pas un conseil juridique.
Le score de risque de procédure priorise les violations à corriger en premier selon leur fréquence statistique dans les dépôts de contentieux. Il ne prédit pas si un site particulier sera poursuivi, quel serait l'issue d'une procédure, ou si une violation donnée constitue une infraction légale à l'EAA, au RGAA, ou à toute autre loi.
Déterminer si un site est légalement accessible en vertu de l'EAA ou du RGAA est une question factuelle et juridique qui nécessite l'avis d'un avocat, des tests manuels d'accessibilité, et souvent des tests avec des utilisateurs de technologies d'assistance. Les scans et les PDF de ScanAccess sont des outils permettant de documenter une démarche de conformité de bonne foi — ce ne sont pas des avis juridiques et ils ne doivent pas être présentés comme tels.
Scan automatisé WCAG 2.2 AA via axe-core 4.10. Les outils automatisés détectent environ 25 à 57 % des violations d'accessibilité. Ce n'est pas une garantie de conformité légale. C'est la preuve d'une démarche documentée et récurrente de bonne foi.