Ca11y · Automatische WCAG-auditor

Van aanvraag tot rapport

Ca11y crawlt een website, stelt een steekproef samen (incl. PDF's), voert een WCAG 2.2 AA audit uit op HTML én PDF, vergelijkt pagina's onderling en levert een rapport op in het W3C-standaardformaat.

82%
HTML-criteria gedekt
45+6+3
HTML · PDF · comparators
710
tests · 100% geslaagd
①
Aanvraag

Een URL of evaluatiedefinitie (WCAG-EM) wordt aangeboden, met een audittype: volledig (alle 55 criteria), quickscan (top-15, 5 pagina's), of deelonderzoek (inhoud of techniek, eigen criteria).

CLI WCAG-EM definitie 4 audittypen --type flag Zod validatie
②
Crawling & steekproef (optioneel)

De crawler respecteert robots.txt, parset sitemaps en ontdekt pagina's via BFS link-discovery — inclusief PDF-links. Een classifier categoriseert in 10 typen (incl. PDF) waarna de sampler een WCAG-EM steekproef samenstelt.

6 modules robots.txt sitemap.xml BFS crawl PDF-detectie 10 paginatypen
③
Extractie

De orchestrator routeert automatisch: HTML-pagina's naar 45 Puppeteer/CDP extractors, PDF-documenten naar 6 pdfjs-extractors. Gedeelde DOM-helpers worden geïnjecteerd via window.__ca11y.

45 HTML extractors 6 PDF extractors Puppeteer + CDP pdfjs-dist Orchestrator routing
④
Beoordeling & vergelijking

Elk criterium krijgt een oordeel per pagina als EARL-assertion. Daarna draaien 3 cross-page comparators die navigatie-consistentie, componentbenaming en hulpmechanismen over pagina's heen vergelijken (LCS-based).

45 HTML + 6 PDF criteria 3 comparators EARL assertions 10 niet-automatiseerbaar
⑤
AI-beoordeling (optioneel)

Claude beoordeelt de extractorresultaten met 24 beslisregels en schrijft bevindingen in een 7-punts patroon. Twee-lagen opbouw: site-brede bevindingen (≥80% pagina's) vs. per URL. Audittype-specifieke context bepaalt de beoordeling.

Claude API 24 beslisregels Twee-lagen bevindingen 67% token-reductie Audittype-context --assess flag
⑥
Rapport

Het eindresultaat is een JSON-bestand in het WCAG-EM Report Tool formaat — de W3C-standaard. Direct importeerbaar in de officiële Report Tool of te verwerken in eigen rapportages.

WCAG-EM Report Tool JSON JSON-LD @context W3C standaard

Verdieping

Dekking per principe45/55 · 82%
Waarneembaar
18/20
Bedienbaar
15/17
Begrijpelijk
12/13
Robuust
2/2

45 HTML-extractors + 6 PDF-extractors + 3 cross-page comparators. De 10 overige criteria zijn fundamenteel niet automatiseerbaar.

Alle 55 criteria45 auto · 10 handmatig

geautomatiseerd   handmatig   +PDF PDF-extractor   comparator cross-page

Principe 1 — Waarneembaar

1.1.1Non-text Content +PDF
1.2.1Audio-only and Video-only
1.2.2Captions (Prerecorded)
1.2.3Audio Description or Alt
1.2.4Captions (Live)
1.2.5Audio Description
1.3.1Info and Relationships +PDF
1.3.2Meaningful Sequence
1.3.3Sensory Characteristics
1.3.4Orientation
1.3.5Identify Input Purpose
1.4.1Use of Color
1.4.2Audio Control
1.4.3Contrast (Minimum)
1.4.4Resize Text
1.4.5Images of Text
1.4.10Reflow
1.4.11Non-text Contrast
1.4.12Text Spacing
1.4.13Content on Hover/Focus

Principe 2 — Bedienbaar

2.1.1Keyboard
2.1.2No Keyboard Trap
2.1.4Character Key Shortcuts
2.2.1Timing Adjustable
2.2.2Pause, Stop, Hide
2.3.1Three Flashes
2.4.1Bypass Blocks
2.4.2Page Titled +PDF
2.4.3Focus Order
2.4.4Link Purpose (In Context) +PDF
2.4.5Multiple Ways
2.4.6Headings and Labels
2.4.7Focus Visible
2.4.11Focus Not Obscured
2.5.1Pointer Gestures
2.5.2Pointer Cancellation
2.5.3Label in Name
2.5.4Motion Actuation
2.5.7Dragging Movements
2.5.8Target Size (Minimum)

Principe 3 — Begrijpelijk

3.1.1Language of Page +PDF
3.1.2Language of Parts +PDF
3.2.1On Focus
3.2.2On Input
3.2.3Consistent Navigation comparator
3.2.4Consistent Identification comparator
3.2.6Consistent Help +comparator
3.3.1Error Identification
3.3.2Labels or Instructions
3.3.3Error Suggestion
3.3.4Error Prevention
3.3.7Redundant Entry
3.3.8Accessible Authentication

Principe 4 — Robuust

4.1.2Name, Role, Value
4.1.3Status Messages
Niet-automatiseerbare criteria10 criteria

Vereisen menselijke beoordeling, device sensors, of analyses buiten browser-automatisering:

1.2.4Captions (Live)Live video-streaming
1.4.2Audio ControlGebruikersinteractie
2.3.1Three FlashesSeizure-detectie
2.5.1Pointer GesturesComplexe gestures
2.5.2Pointer CancellationPointer timing
2.5.4Motion ActuationDevice sensors
2.5.7Dragging MovementsMenselijke interpretatie
3.3.4Error PreventionFormulier-context
3.3.7Redundant EntryMulti-staps formulier
3.3.8Accessible AuthenticationAuthenticatiemethode
Implementatiefasen7/7 afgerond
Fase 1Quick wins — contrast, reflow, text spacing, page titles, label in name, name/role/value7/7
Fase 2Keyboard & interactie — keyboard, focus order, focus visible, info & relationships4/4
Fase 3Visuele beoordeling — color use, images of text, non-text contrast, link purpose4/4
Fase 4Batch 4 — language, forms, errors, bypass blocks, meaningful sequence, resize text10/10
Fase 5Batch 5 — sensory, orientation, timing, shortcuts, hover/focus, multiple ways10/10
Fase 6Batch 6 — media, keyboard trap, on focus, consistent help, target size8/8
Fase 7PDF + comparators — 6 PDF-extractors, 3 cross-page comparators, 2 extra HTML-extractors9/9
Technische stack

HTML extractie: Puppeteer + Chrome DevTools Protocol. Accessibility tree via CDP Accessibility.getFullAXTree. DOM-helpers via window.__ca11y orchestrator-injectie.

PDF extractie: pdfjs-dist voor Node.js PDF-parsing. Orchestrator routeert automatisch HTML → Puppeteer, PDF → pdfjs.

Cross-page: 3 comparators (LCS-based navigatievergelijking, component-matching, hulpmechanisme-positie). Draaien automatisch na per-page extractie.

Crawling: 6 modules — URL-normalisatie, robots.txt, sitemap, BFS crawler met PDF-detectie, classifier (10 typen), WCAG-EM sampler.

Audittypen: 4 typen (volledig, quickscan top-15, deelonderzoek-inhoud, deelonderzoek-techniek) met criteria-filter per type.

Validatie: Zod schema's op alle outputs. 710 tests over 92 suites (45 HTML + 6 PDF + 3 comparators + 49 crawler + fixtures).

Output: WCAG-EM Report Tool JSON, JSON-LD @context, 55 EARL assertions, 5 WCAG-EM stappen, criteriafilter per audittype.

AI: Claude API, 24 beoordelingsregels, Jules Ernst schrijfstijl, twee-lagen bevindingen (site-breed vs. per URL). SHA-256 caching, 67% token-reductie, audittype-context.

Trainingsdata: 32.913 bevindingen uit 450 echte auditrapporten.

Geverifieerde end-to-end runs2 maart 2026

rijksoverheid.nl — crawl + assess, 3 pagina's:
45 HTML extractors + 3 comparators → 321 findings (52 errors, 73 warnings, 196 recommendations). 45 criteria beoordeeld: 19 voldoende, 18 onvoldoende, 8 n.v.t. Kosten: 32.270 tokens, $0,25. System prompt cache 100% hit.

gemeentewestland.nl — HTML + PDF + assess, 1 HTML + 1 PDF:
15 HTML extractors + 4 PDF extractors → 113 findings (19 errors, 39 warnings, 55 recommendations). 19 criteria beoordeeld: 7 voldoende, 11 onvoldoende, 1 n.v.t. Kosten: 14.912 tokens, $0,10. System prompt cache 100% hit.

PDF-pipeline6 extractors · Fase 7

Ca11y kan nu ook PDF-documenten testen — eerder de belangrijkste gap (86% van audits bevat PDF's).

2.4.2Page Titled — PDF-metadata titel
3.1.1Language of Page — taaldefinitie in PDF-metadata
3.1.2Language of Parts — taalattributen in structure tree
1.3.1Info and Relationships — tagged PDF, heading/table structure
1.1.1Non-text Content — alt-tekst op afbeeldingen
2.4.4Link Purpose — linkdoelen in PDF

Techniek: pdfjs-dist voor parsing. De orchestrator routeert PDF-URL's automatisch. De crawler detecteert PDF-links en voegt ze toe aan de steekproef.

Wat er nog open staat4 items
MediumPDF formulier-validatie — complexere PDF-tests (formuliervelden, interactie)
Mediumdip backend-koppeling — EARL JSON is klaar voor import, nog niet gekoppeld
LaagWhisper integratie — audio transcriptie voor diepere SC 1.2.x verificatie
Laag10 niet-automatiseerbare criteria — by design, wordt afgevangen door de auditor

Gap Analysis

Op basis van 32.913 bevindingen uit 450 trainingsrapporten — hoe goed matchen de extractors de werkelijke bevindingen?

8.806
bevindingen totaal
3.777
matched (43%)
4.129
unmatched (47%)
25
criteria geanalyseerd
Volledige tabel — alle 25 criteriagesorteerd op volume
SC Criterium Failed Match Unmatch Dekking %PDF
1.3.1Info and Relationships751449302
40%
83%PDF
1.1.1Non-text Content655435220
34%
73%PDF
1.4.3Contrast (Minimum)55949465
12%
88%goed
2.4.2Page Titled481259222
46%
91%PDF
4.1.2Name, Role, Value479321158
33%
64%verbeter
2.4.4Link Purpose (In Context)430224206
48%
74%PDF
1.4.11Non-text Contrast41233478
19%
68%goed
1.4.10Reflow378227151
40%
55%verbeter
2.5.3Label in Name31479235
75%
68%verbeter
1.4.1Use of Color30467237
78%
57%verbeter
3.1.1Language of Page3022300
99%
89%PDF
2.4.3Focus Order291145146
50%
60%verbeter
2.1.1Keyboard28657229
80%
57%verbeter
1.3.2Meaningful Sequence2702268
99%
74%PDF
2.4.7Focus Visible26838230
86%
57%verbeter
3.3.1Error Identification24822424
10%
8%goed
3.1.2Language of Parts24515689
36%
34%verbeter
2.4.6Headings and Labels23520215
92%
66%verbeter
1.3.5Identify Input Purpose22181140
63%
61%verbeter
4.1.3Status Messages20223179
89%
63%verbeter
3.3.2Labels or Instructions19539156
80%
56%verbeter
1.4.4Resize Text19012169
36%
75%PDF
2.4.1Bypass Blocks18763124
66%
58%verbeter
1.4.5Images of Text16411648
29%
67%verbeter
1.4.12Text Spacing1191118
99%
56%verbeter
matched unmatched goed <20% unmatched verbeter patronen verbeteren PDF >80% PDF-gerelateerd
Drie categorieën — wat betekent dit?

goed Goed gedekt (<20% unmatched)
SC 3.3.1 Error Identification, 1.4.3 Contrast, 1.4.11 Non-text Contrast — de extractors vangen hier het overgrote deel van de bevindingen.

verbeter Hoog volume + verbeterbaar (>40% unmatched, <60% PDF)
Keyboard (229 unmatched), Use of Color (237), Focus Visible (230), Labels (156) — hier kunnen betere patronen ~40-45% van de unmatched findings vangen.

PDF Vooral PDF (>80% PDF in unmatched)
Language of Page, Page Titled, Contrast, Info and Relationships — betere patronen zijn hier zinloos, want de bevindingen gaan over PDF-documenten die de extractor niet test.

Conclusie

Ca11y dekt 45 van 55 WCAG 2.2 AA criteria (82%) met HTML-extractors, aangevuld met 6 PDF-extractors en 3 cross-page comparators. End-to-end operationeel: crawlen → steekproef (incl. PDF's) → extractie (HTML + PDF) → vergelijking → rapport → AI-beoordeling. Ondersteunt 4 audittypen. Geverifieerd op rijksoverheid.nl en gemeentewestland.nl.