Review & Compliance Checklist
Optional reference. Use during code reviews, accessibility remediation, or pre-assessment preparation. Not required for day-to-day implementation — see the main skill for that.
⚠️ Prerequisite: Run an automated scan first and fix all reported violations before using this checklist. Automation detects ~30-40% of WCAG issues; this list covers what tools cannot verify on their own.
Zero-setup options: axe DevTools browser extension (Chrome/Firefox) · Lighthouse in Chrome DevTools › Accessibility tab
Core Patterns
Level A — Minimum conformance
Failures here are blockers. A product without Level A is not accessible.
Semantics & Structure
-
<html lang="...">present and correct for the page language (SC 3.1.1) - Single
<h1>per page; heading hierarchy h1→h2→h3 without gaps (SC 1.3.1) -
<nav>wraps<ul>/<li>; multiple<nav>elements have distinctaria-label(SC 1.3.1) -
<button>for actions;<a href>for navigation — not<div>or<span>(SC 4.1.2) - No context change triggered by focus alone (SC 3.2.1)
Images & Icons
- Informative
<img>:altdescribes the content, not filename or “image of” (SC 1.1.1) - Decorative
<img>:alt=""explicitly set (SC 1.1.1) - Informative SVG / SVGR component:
role="img"+aria-labelpresent (SC 1.1.1) - Icon-only buttons:
aria-labelon the button or<span class="sr-only">inside (SC 4.1.2)
Keyboard
- All interactive elements reachable and operable by keyboard alone (SC 2.1.1)
- No keyboard trap outside modal dialogs (SC 2.1.2)
- Skip link present as first focusable element (SC 2.4.1)
Links
- Link text is descriptive out of context — no “click here”, “read more”, “learn more” (SC 2.4.4)
Forms
- Every
<input>,<select>,<textarea>has associated<label>oraria-label(SC 1.3.1, SC 3.3.2) - Required fields:
aria-required="true"or nativerequiredattribute (SC 3.3.2) - Field error:
aria-invalid="true"on the input +aria-describedby→ error message id (SC 3.3.1) - Error message text is specific — states what to correct, not just “Invalid” (SC 3.3.1)
Dynamic Content
-
document.titleupdated on every SPA route change (SC 2.4.2) - Disclosure (accordion/expandable):
aria-expanded+aria-controlson trigger (SC 4.1.2)
Level AA — Standard target
Industry standard for WCAG compliance. Most legal requirements and client contracts target AA.
Focus
- Focus indicator is visible beyond browser default —
focus-visibleCSS present (SC 2.4.7) - Focus not obscured by sticky headers or fixed elements (SC 2.4.11 — WCAG 2.2)
Dynamic Content & SPA
- Persistent
aria-live="polite"region announces SPA route changes (SC 4.1.3) - Focus moved to
<main tabindex="-1">or<h1 tabindex="-1">after route change (SC 2.4.3) - Tooltip / popover dismissible with
Escapewithout moving focus (SC 1.4.13)
Widgets
- Modal:
role="dialog"+aria-modal="true"+aria-labelledby+ focus trap + Escape (SC 4.1.2) - Confirmation dialog:
role="alertdialog", default focus on safe/cancel action (SC 4.1.2) -
aria-current="page"on the active navigation link (SC 4.1.2) - Toggle button:
aria-pressedreflects current state; button label stays constant (SC 4.1.2)
Forms (AA)
- Submit with errors: focus moved to error summary with
tabindex="-1"+role="alert"(SC 3.3.3) - Personal data fields have correct
autocompleteattribute (name, email, tel, etc.) (SC 1.3.5) - Destructive or financial actions: reversible, or require confirmation step (SC 3.3.4)
- Authentication: no cognitive function test required (CAPTCHA must have alternative) (SC 3.3.8 — WCAG 2.2)
Touch
- Interactive targets minimum 24×24px with adequate spacing (SC 2.5.8 — WCAG 2.2)
Level AAA — Enhanced (optional)
AAA is rarely a contractual requirement. Include only when explicitly scoped.
- Touch targets minimum 44×44px (SC 2.5.5)
- Section headings used to organize and label all page regions (SC 2.4.10)
- All form submissions: error prevention applies regardless of content type (SC 3.3.6)
What this checklist does NOT cover
These criteria require dedicated tools or browser testing — not code review alone:
| Criterion | Tool |
|---|---|
| Contrast 4.5:1 text, 3:1 UI (SC 1.4.3, 1.4.11) | axe DevTools · WebAIM Contrast Checker |
| Zoom 200% without loss of content (SC 1.4.4) | Browser — zoom to 200% |
| Reflow at 400% (SC 1.4.10) | Browser — zoom to 400%, viewport 1280px |
| Text spacing (SC 1.4.12) | Text Spacing Bookmarklet |
| Captions / audio description (SC 1.2.x) | Content review |
For formal WCAG assessments, use WCAG-EM methodology and document evidence per criterion.