WCAG 2.1 coverage: automated, assisted, manual
How much of each WCAG 2.1 Level A and AA success criterion the scan decides on its own, how much it narrows for a human reviewer, and what the EqualWeb widget repairs at run time. Generated from the rule metadata and the coverage catalog — do not edit by hand.
Of the 50 Level A and AA success criteria in WCAG 2.1, 13 are decided entirely by the scan, 29 are assisted — the scan tests part of the criterion and shortlists the rest — and 8 need manual testing. The engine runs 156 checks in total, 27 of them live probes that drive a real browser.
| Coverage | Level A | Level AA | Total |
|---|---|---|---|
| Fully automated | 8 | 5 | 13 |
| Assisted | 17 | 12 | 29 |
| Manual | 5 | 3 | 8 |
| All criteria | 30 | 20 | 50 |
Fully automated — 13 criteria
Decided by measurement on the rendered page. The scan reports a result here, not a candidate, and the finding needs no human interpretation before it can be fixed.
| Criterion | Checks | What the scan decides | What still needs a person | EqualWeb widget |
|---|---|---|---|---|
| 1.4.2 Audio Control (A) | 2 | Media that starts playing on load with no pause or stop mechanism and no muted state. | — | Fixed — Strips autoplay and adds controls, plus a visitor mute-media mode. |
| 1.4.3 Contrast (Minimum) (AA) | 1 | The true contrast ratio of every text node against its actual rendered backdrop — including text over images and gradients, by sampling the page screenshot’s pixels. Large-text thresholds applied; logotypes and disabled controls excluded per WCAG. | — | Fixed — High-contrast, monochrome and custom colour schemes on demand. |
| 1.4.10 Reflow (AA) | 1 | A live probe resizes the viewport to 320 CSS px and detects horizontal scrolling, clipping and overlap. | Confirm the WCAG exception for content that genuinely needs two-dimensional layout (maps, large data tables). | Partial — Text scaling helps; it does not rebuild the layout. |
| 1.4.12 Text Spacing (AA) | 1 | A live probe applies WCAG’s spacing overrides (line height 1.5, paragraph 2em, letter 0.12em, word 0.16em) and detects clipped or overlapping content. | — | Partial — Readability mode applies the spacing; content clipped by fixed-height CSS can survive it. |
| 1.4.13 Content on Hover or Focus (AA) | 1 | A live probe hovers tooltip and popup triggers and verifies the revealed content is dismissable with Escape, hoverable itself, and persistent. | — | Code fix |
| 2.1.2 No Keyboard Trap (A) | 1 | A live keyboard walk — real Tab and Shift+Tab traversal of the whole page including same-origin iframes — detecting focus that cannot move on, and focus bounced back to the document body. | — | Code fix |
| 2.2.2 Pause, Stop, Hide (A) | 4 | A live animation probe: motion running longer than 5 seconds with no pause control, <blink>/<marquee>, carousels without controls, and whether prefers-reduced-motion is honoured. |
— | Fixed — Stop-animation halts animation, video and blinking site-wide. |
| 2.4.1 Bypass Blocks (A) | 4 | A skip link and that its target actually exists, plus landmark and heading structure and frame titles. | — | Fixed — Injects a “skip to main content” link when the page has none. |
| 2.4.2 Page Titled (A) | 2 | Every page must carry a non-empty <title>; duplicates across the scanned site are surfaced. |
A sanity check that the wording describes the page’s topic or purpose. | Partial — Derives a title from page content when one is missing. |
| 2.4.7 Focus Visible (AA) | 1 | Tabs through every focus stop and reads the computed focus style at each one — catching outlines removed by CSS and indicators invisible against their background. | — | Fixed — Restores a focus outline when site CSS suppresses it. |
| 2.5.3 Label in Name (A) | 1 | Each control’s visible label text compared against its accessible name — a deterministic string test. | — | Fixed — Rewrites the accessible name to contain the visible text. |
| 3.1.1 Language of Page (A) | 2 | <html lang> present and a valid BCP-47 tag. |
— | Fixed — Sets a valid page language when it is missing or malformed. |
| 4.1.1 Parsing (obsolete) (A) | 1 | Duplicate id values across the document — the criterion’s only remaining requirement. |
— | Fixed — Re-keys duplicate ids and repairs the references pointing at them. |
Assisted — 29 criteria
The scan machine-verifies the structural half of the criterion and shortlists the rest, with a screenshot and a code snippet per finding. What it cannot judge is meaning — whether wording, media content or visual design says the right thing.
| Criterion | Checks | What the scan decides | What still needs a person | EqualWeb widget |
|---|---|---|---|---|
| 1.1.1 Non-text Content (A) | 9 | Missing alternative text on images, image buttons, image-map areas, SVGs, embedded objects and role="img" elements; alt text that is a file name or repeats adjacent text; generic accessible names. |
Whether the alternative text conveys the same information as the image, and whether an image marked decorative really is. | Partial — Repairs filename and empty alts, derives names from context, and can supply AI-generated alt text. |
| 1.2.1 Audio-only and Video-only (Prerecorded) (A) | 1 | Audio or video with no transcript link and no text alternative anywhere near the player. | Whether the transcript is complete and equivalent to the recording. | Code fix |
| 1.2.2 Captions (Prerecorded) (A) | 1 | Video with no <track kind="captions">. |
Caption accuracy, synchronisation and speaker identification — and captions held inside third-party players (YouTube, Vimeo) that the DOM does not expose. | Aid only — Offers auto-generated subtitles — a usability aid, not a conformance substitute. |
| 1.2.3 Audio Description or Media Alternative (Prerecorded) (A) | 1 | Video with neither a descriptions track nor a transcript linked from its container. | Whether the alternative covers everything presented visually. | Code fix |
| 1.2.5 Audio Description (Prerecorded) (AA) | 1 | Video with no synchronized audio-description track. | Whether the description covers the essential visual information. | Code fix |
| 1.3.1 Info and Relationships (A) | 33 | Heading order and empty headings, one main and distinguishable landmarks, list and definition-list structure, data-table headers/scope/caption, fieldset and legend for grouped controls, ARIA required children and parents, ID reference integrity, and the structural contract of tabs, comboboxes, accordions, breadcrumbs and feeds. |
Content that only looks like a heading, list or table through styling, and whether the coded relationships match what is conveyed visually. | Partial — Repairs heading order, landmarks, list/table/fieldset structure and broken ID references. |
| 1.3.2 Meaningful Sequence (A) | 2 | Live comparison of on-screen position against DOM and focus order, flagging CSS-driven reordering inside a container. | Whether the reading sequence carries meaning; reorders across separate containers are deliberately out of scope to avoid false alarms. | Code fix |
| 1.3.4 Orientation (AA) | 1 | Orientation-locking CSS (counter-rotation or hiding inside an orientation media query) and viewport locks. | External stylesheets are not fetched by this check — confirm on a rotated device when the site keeps its CSS in one. | Code fix |
| 1.3.5 Identify Input Purpose (AA) | 3 | Invalid autocomplete tokens, and personal-data fields (email, phone, name, address, card) carrying no token at all. |
Whether a field really collects information about the user — the scan infers this from name, id and label patterns. | Fixed — Adds the correct autocomplete token and repairs invalid ones. |
| 1.4.1 Use of Color (A) | 1 | Links distinguished from surrounding text by colour alone, with no underline, weight or other non-colour cue. | Every other colour-only meaning: chart legends, red required fields, status dots, “the green rows are in stock”. | Partial — Underlines links automatically; a highlight-links mode goes further on demand. |
| 1.4.4 Resize Text (AA) | 1 | Viewport declarations that block zoom (user-scalable=no, a capped maximum-scale). |
Confirm content stays usable at 200% browser zoom on the pages that matter. | Fixed — Removes the zoom lock and gives the visitor text-size control. |
| 1.4.5 Images of Text (AA) | 1 | The rendered pixels of each image are examined for the structure of set type — few colours, ink gathered into horizontal bands with clear gaps between them, and dense stroke edges within each band — which separates a text banner from a photograph. Logos and brand marks are skipped as exempt. | Confirm each shortlisted image really is text, and whether its particular presentation is essential — a logotype, or typography being shown as an example — which the criterion allows. | Code fix |
| 1.4.11 Non-text Contrast (AA) | 1 | Real screenshot pixels sampled at UI-component and icon boundaries, measured against adjacent colours at 3:1. | Which parts of a graphic are essential to understanding it, and whether a boundary is required at all. | Partial — Contrast schemes lift most components; icon shapes can remain. |
| 2.1.1 Keyboard (A) | 14 | Two live probes — a real Tab traversal confirming every interactive element is reachable, and an arrow-key probe driving composite widgets (tabs, menus, trees, grids, toolbars) — plus scrollable regions without keyboard access, duplicate accesskeys, roving-tabindex correctness and interactive roles that cannot take focus. | Exercising every function of the application end to end: drag and drop, canvas interactions, custom gestures. | Partial — Keyboard navigation aids plus tabindex, scroll-region and roving-focus repairs. |
| 2.2.1 Timing Adjustable (A) | 2 | Meta-refresh redirects, and live instrumentation of scripted timers that redirect, reload or submit between 1 second and 20 hours. | Server-side session limits, and whether the user is warned in time and can extend the limit. | Code fix |
| 2.3.1 Three Flashes or Below Threshold (A) | 1 | Animation and transition cycles running faster than three times per second. | Flashing inside video or canvas content, which needs frame-level review. | Partial — Stop-animation suppresses CSS and script flashing; embedded video is unaffected. |
| 2.4.3 Focus Order (A) | 5 | Positive tabindex values, live tab order against visual order, and a probe confirming that closing a dialog returns focus to the control that opened it. |
Whether the order preserves meaning and operability through multi-step flows. | Partial — Neutralises positive tabindex and removes focusable content from hidden subtrees. |
| 2.4.4 Link Purpose (In Context) (A) | 5 | Links with no discernible text, generic text (“click here”, “read more”), identically named links pointing at different destinations, and image-map areas without alternatives. | Whether the link text plus its programmatic context actually describes the destination. | Partial — Names empty links from context and disambiguates identical link names. |
| 2.4.5 Multiple Ways (AA) | site-level | A site-level check across every scanned page: presence of a search mechanism, a sitemap link, and site navigation. | Confirm the mechanisms work and that two independent ways genuinely reach each page. The criterion also stays on the manual audit checklist, where the verdict is recorded by a person. | Code fix |
| 2.4.6 Headings and Labels (AA) | 3 | Empty headings, missing labels, and accessible names that are generic or otherwise low-quality. | Whether each heading and label actually describes its topic or purpose. | Partial — Fills empty headings and replaces generic names where a source of text exists. |
| 3.1.2 Language of Parts (AA) | 1 | The validity of every lang attribute on inline content. |
Finding passages written in another language that carry no lang attribute — this means reading the content. |
Partial — Repairs invalid language tags. |
| 3.2.1 On Focus (A) | 3 | Inline onfocus handlers that navigate, submit or blur, plus a live check that tabbing through the page never triggers navigation. |
Context changes driven by framework-attached listeners that produce no navigation. | Code fix |
| 3.2.2 On Input (A) | 2 | Inline onchange/oninput handlers that submit or navigate, and buttons inside forms with no type (which submit unexpectedly). |
Framework-attached change listeners that alter context without navigating. | Partial — Sets an explicit type on form buttons. |
| 3.2.3 Consistent Navigation (AA) | site-level | A site-level check: a navigation digest per page, compared across every scanned page for link set and relative order. | Confirm that pages which legitimately differ (checkout, campaign landing pages) are intended exceptions. Also carried on the manual audit checklist. | Code fix |
| 3.2.4 Consistent Identification (AA) | site-level | A site-level check comparing the accessible names given to components with the same function across pages. | Confirm that two similarly-named components really do have the same function. Also carried on the manual audit checklist. | Code fix |
| 3.3.1 Error Identification (A) | 2 | Fields marked invalid with no associated error message, plus a live form-validation probe that submits the form and verifies an error surfaces both visibly and programmatically. | Whether the error text identifies the field and the problem, and journeys validated server-side. | Partial — Promotes detected error containers to live alert regions. |
| 3.3.2 Labels or Instructions (A) | 5 | Inputs with no label, title- or placeholder-only labels, fields carrying multiple conflicting labels, and grouped controls with no legend. |
Whether the label and any instructions are enough to complete the field correctly. | Partial — Generates labels from adjacent text and repairs dangling for references and duplicate labels. |
| 4.1.2 Name, Role, Value (A) | 43 | The largest group of checks in the engine: an accessible name for every control; valid, non-abstract roles; ARIA attributes valid, allowed and required; and state accuracy across tabs, dialogs, comboboxes, disclosures, switches, tree items, radio groups, sliders and current-page markers. | Whether an accessible name matches the control’s visible purpose, and whether a custom widget’s chosen role is the right one. | Partial — The widget’s largest repair family: names, roles, required states, dialog semantics and ARIA reference integrity. |
| 4.1.3 Status Messages (AA) | 1 | Live regions that are hidden from assistive technology, focusable, or scoped too broadly to announce reliably. | Whether every dynamic status message (“added to cart”, “3 results”) is actually routed into a live region — this means triggering the flow. | Partial — Adds alert and status semantics to detected message containers. |
Manual — 8 criteria
No reliable machine signal exists. These ship as a per-page, per-round checklist in the Accessibility Audit module, with verdicts, evidence and remediation status, and they appear in the exported audit workbook.
| Criterion | Why a person is needed | EqualWeb widget |
|---|---|---|
| 1.2.4 Captions (Live) (AA) | Live audio and video must be captioned in real time; a scan cannot evaluate a stream that has not happened yet. | Aid only — Auto-generated subtitles are available to visitors. |
| 1.3.3 Sensory Characteristics (A) | Instructions must not depend on shape, size or position alone — this requires reading and understanding the wording. | Code fix |
| 2.1.4 Character Key Shortcuts (A) | Single-character shortcuts must be switchable off, remappable, or active only on focus — this needs interaction testing. | Code fix |
| 2.5.1 Pointer Gestures (A) | Multipoint and path-based gestures need a single-pointer alternative — this requires manual gesture testing. | Code fix |
| 2.5.2 Pointer Cancellation (A) | Whether an action completes on the up-event or can be aborted requires interaction testing. | Code fix |
| 2.5.4 Motion Actuation (A) | Shake and tilt triggers need a UI alternative and a way to switch motion off — this requires device testing. | Code fix |
| 3.3.3 Error Suggestion (AA) | Whether an error message offers a useful correction is a judgement about wording; the scan can find the error, not rate the advice. | Code fix |
| 3.3.4 Error Prevention (Legal, Financial, Data) (AA) | Reversible, checked or confirmable submissions can only be established by walking the transaction. | Code fix |
What the EqualWeb widget repairs
The widget works on two levels, and the scan measures both rather than assuming them.
Automatic code remediation
Runs on every page load for every visitor, whether or not they open the widget. The repair routines are aligned one-to-one with the engine’s rules, so a finding in the report has a matching fix:
- Names and alternatives — image, button, link, SVG and object names; filename alts; AI-generated alt text · 1.1.1, 2.4.4, 4.1.2
- Forms — labels from adjacent text, dangling
fortargets, duplicate labels, grouped controls, autocomplete tokens, button types · 3.3.2, 1.3.5, 3.2.2 - ARIA and roles — invalid or mistyped roles, missing required states, dialog semantics, tab/menu/tree/combobox state, orphaned references · 4.1.2
- Structure — heading order, missing H1, a single
main, landmarks, lists, tables, breadcrumbs · 1.3.1 - Navigation — an injected skip link, a restored focus outline, roving tabindex, keyboard-reachable scroll regions, positive-tabindex removal · 2.4.1, 2.4.7, 2.1.1, 2.4.3
- Document — page language, page title, duplicate ids, zoom-lock removal, autoplay audio, blink and marquee · 3.1.1, 2.4.2, 4.1.1, 1.4.4, 1.4.2, 2.2.2
Visitor-controlled modes
Adaptations the end user switches on for themselves — these cover the criteria that depend on presentation:
- Contrast schemes — high contrast, monochrome, custom colours · 1.4.3, 1.4.11
- Text size and readable font · 1.4.4, 1.4.8
- Readability / text spacing · 1.4.12
- Stop animation and mute media · 2.2.2, 2.3.1, 1.4.2
- Highlight and underline links · 1.4.1
- Enlarge buttons · 2.5.8 (WCAG 2.2)
- Keyboard navigation, screen reader, virtual keyboard, reading guide — operability aids
Every page is scanned at least twice — once as delivered, once with the widget active — and each previously failing element is re-tested individually. The report shows the score with and without the widget, tags each finding as remediated or still outstanding, and separates full remediation from partial (a contrast scheme fully resolves text contrast, only partly resolves icon contrast). Findings that only a code change can resolve — keyboard traps, media alternatives, meaningful sequence — are never reported as widget-fixed.
How a criterion is classified
A criterion is fully automated when the engine returns a definitive result on the rendered page, with no declared recall gap and no judgement about what the content means; assisted when a defined machine-verifiable subset is tested and the remainder is shortlisted for a person; and manual when no reliable machine signal exists.
Where a check documents a blind spot — only inline CSS is visible, only inline handlers are visible — its criterion is classified as assisted rather than automated, even though the check itself runs unattended. Each such limit is stated on the rule’s own page.
The Checks column counts the engine rules mapped to that criterion; the WCAG cross-reference lists them by name. site-level marks the three criteria decided by comparing scanned pages against each other rather than by a per-page rule. The counts on this page are computed from the rule metadata when the wiki is generated, and the classification is re-validated against it: adding a rule for a criterion listed as manual fails the build until it is reclassified.
Beyond Level AA the same scan also reports the WCAG 2.2 additions (2.4.11 Focus Not Obscured, 2.5.8 Target Size, 3.3.8 Accessible Authentication, 3.2.6 Consistent Help) and eight Level AAA criteria, and maps every finding to the matching clauses of EN 301 549, Section 508, IS 5568 and the ACT rules.