Comment nous calculons votre score de conformité
Pas de boîte noire. Notre formule de scoring 0-100 combine 6 catégories pondérées, un clustering log-scalé et un cap pour empêcher qu'un seul problème écrase tout. Voici les détails, et un calculateur interactif pour simuler.
Six catégories, six poids
Le score global est une moyenne pondérée des scores de catégorie. Les poids ci-dessous reflètent l'impact réglementaire et l'urgence terrain ; ils sont configurables par offre.
Formule : score_global = Σ (score_categorie × poids). Si une catégorie est non scorable (ex : axe-core en échec sur toutes les pages), elle est exclue et les poids sont renormalisés sur les catégories restantes.
1 cause racine = 1 cluster
Plutôt que de compter chaque finding individuellement, nous regroupons par règle (rule_id) avant de calculer la pénalité. Cela évite qu'un site avec 100 pages soit pénalisé 100× pour le même problème de configuration.
Le piège du comptage brut
Si un cookie tiers est posé avant consentement sur 100 pages, c'est UNE CMP mal configurée, pas 100 problèmes. Compter 100× la même non-conformité fausse complètement la lecture du rapport.
Échelle logarithmique
Pour chaque cluster, la pénalité de base (selon la sévérité) est multipliée par un facteur log : (1 + ln(N)). Effet : 1 instance = ×1.00 ; 10 instances = ×3.30 ; 100 instances = ×5.61. Plus on a d'occurrences, plus on pénalise, mais à un taux décroissant.
penalty = base × (1 + ln(N))Site-wide vs per-page
Toutes les non-conformités ne se valent pas. Un header HTTP absent est UN problème de configuration serveur, peu importe qu'on l'observe sur 1 ou 100 pages. À l'inverse, un tracker chargé sur chaque page est bien N occurrences réelles.
Pénalité brute (pas de log-scale). 1 cluster = 1 décision serveur, indépendant du nombre de pages.
- · Content-Security-Policy
- · TLS expiry
- · Bannière de consentement RGPD
- · Liens footer (mentions, CGU, privacy)
Pénalité log-scalée (1 + ln(N)). Chaque page apporte une vraie occurrence du problème.
- · Trackers chargés (Google Analytics, Matomo)
- · Cookies tiers posés avant consentement
- · Images format legacy (JPG vs WebP)
- · Formulaires sans mention RGPD
Cap par cluster : 25 pts max
Pour empêcher qu'un seul cluster (ex : 619 trackers détectés) écrase toute la catégorie à 0%, nous plafonnons la pénalité par cluster à 25 pts.
Conséquence : même un cluster majeur avec des centaines d'instances ne peut pas vous coûter plus de 25 pts sur une catégorie de 100. Si votre score chute, c'est qu'il y a au moins 3 ou 4 vrais problèmes distincts. La distribution force la lisibilité.
cluster_penalty = min(penalty, 25)Exemple chiffré
Pour illustrer la mécanique, voici comment une non-conformité d'accessibilité majeure pénalise le score global.
Scénario
Une règle RGAA « contrastes insuffisants » détectée sur 40 instances réparties sur 15 pages d'un site (sévérité majeure, catégorie Accessibilité pondérée 30 %).
Clustering par règle
Les 40 instances partagent le même rule_id RGAA-1.3.1 → 1 seul cluster (pas 40 pénalités cumulées).
cluster_count = 1Pénalité de base
Sévérité majeure → 10 points de pénalité de base par cluster.
base = 10Échelle logarithmique
Nombre d'instances dans le cluster : N = 40. La pénalité scale en ln(N) pour ne pas exploser proportionnellement.
penalty = 10 × (1 + ln(40)) ≈ 47Cap par cluster
Borne supérieure : 25 points max par cluster, même si la formule produit plus. Force la distribution sur d'autres règles.
cluster_penalty = min(47, 25) = 25Catégorie Accessibilité
Le score catégorie part de 100 et soustrait les pénalités cumulées de tous les clusters de la catégorie. Ici, un seul cluster pèse 25 pts.
score_a11y = 100 − 25 = 75Score global
Le global est la moyenne pondérée des 6 catégories. A11y vaut 30 % du total.
impact_global = 25 × 30 % = 7,5 points sur 100
Conclusion : 40 instances d'une même règle ne « pulvérisent » pas le score. La pénalité est sévère mais bornée, l'objectif est de signaler un problème significatif sans le rendre catastrophique.