Product design skills

accessibility/wcag-checklist.md

A supporting file of the design-review skill.

WCAG 2.2 Accessibility Checklist

Comprehensive checklist organized by the four POUR principles. Each criterion includes its WCAG level (A, AA, AAA), priority tier, and testing guidance.

Priority Tiers:

  • P0 — Must Fix: Legal requirements, blocks users entirely
  • P1 — Should Fix: Significant usability impact
  • P2 — Nice to Have: Enhances experience, not blocking

1. Perceivable

Information and UI components must be presentable in ways users can perceive.

1.1 Text Alternatives

#CriterionLevelPriorityHow to Test
1.1.1Non-text Content — All images, icons, and controls have text alternativesAP0Check every <img> has meaningful alt; decorative images use alt="" or role="presentation". SVG icons have <title> or aria-label.

1.2 Time-based Media

#CriterionLevelPriorityHow to Test
1.2.1Audio/Video (Prerecorded) — Provide captions or transcriptAP0Verify captions exist for all video content
1.2.2Captions (Prerecorded) — Synchronized captions for all audio in videoAP0Play video with captions; verify accuracy and timing
1.2.3Audio Description — Provide audio description for videoAP1Check if important visual information is described
1.2.5Audio Description (Prerecorded) — Audio description for all prerecorded videoAAP1Full audio description track available

1.3 Adaptable

#CriterionLevelPriorityHow to Test
1.3.1Info and Relationships — Structure conveyed visually is also in markupAP0Check headings use <h1><h6>, lists use <ul>/<ol>, tables use <th>. Forms have <label> associations.
1.3.2Meaningful Sequence — Reading order matches visual orderAP0Linearize page (disable CSS) and verify content makes sense
1.3.3Sensory Characteristics — Instructions don't rely solely on shape, size, position, or soundAP1Search for "click the round button" or "see the sidebar" — provide alternatives
1.3.4Orientation — Content not restricted to single display orientationAAP1Rotate device; verify content adapts
1.3.5Identify Input Purpose — Input fields identify their purposeAAP1Check autocomplete attributes on personal data fields

1.4 Distinguishable

#CriterionLevelPriorityHow to Test
1.4.1Use of Color — Color is not the only means of conveying informationAP0View in grayscale; verify information is still clear. Error states need icons, not just red.
1.4.2Audio Control — Mechanism to pause/stop audio that plays > 3 secAP0Check autoplay audio has controls
1.4.3Contrast (Minimum) — Text: 4.5:1, Large text (18px bold/24px): 3:1AAP0Use contrast checker on all text/background pairs
1.4.4Resize Text — Text resizable up to 200% without loss of contentAAP0Zoom browser to 200%; verify no overflow or truncation
1.4.5Images of Text — Use real text, not images of textAAP1Check logos are the only images of text
1.4.10Reflow — Content reflows at 320px width (no horizontal scroll)AAP0Set viewport to 320px; verify single-column reflow
1.4.11Non-text Contrast — UI components and graphical objects: 3:1 contrastAAP0Check borders, icons, focus indicators, chart elements against backgrounds
1.4.12Text Spacing — Content adapts when user overrides text spacingAAP1Apply bookmarklet: line-height 1.5×, paragraph spacing 2×, letter spacing 0.12em, word spacing 0.16em
1.4.13Content on Hover or Focus — Hover/focus content is dismissible, hoverable, persistentAAP1Tab to tooltips; verify Escape dismisses, content is hoverable

2. Operable

UI components and navigation must be operable.

2.1 Keyboard Accessible

#CriterionLevelPriorityHow to Test
2.1.1Keyboard — All functionality available via keyboardAP0Tab through entire page; verify every interactive element is reachable and operable
2.1.2No Keyboard Trap — Keyboard focus can always be moved awayAP0Tab into every component (especially modals, widgets); verify you can Tab or Escape out
2.1.4Character Key Shortcuts — Single character shortcuts can be remapped/disabledAP1Identify single-key shortcuts; verify they have a mechanism to remap or disable

2.2 Enough Time

#CriterionLevelPriorityHow to Test
2.2.1Timing Adjustable — Time limits can be extended, turned off, or are > 20 hrsAP0Find session timeouts, auto-advancing carousels; verify user controls
2.2.2Pause, Stop, Hide — Moving, blinking, auto-updating content can be pausedAP0Check carousels, animations, live feeds have pause controls

2.3 Seizures and Physical Reactions

#CriterionLevelPriorityHow to Test
2.3.1Three Flashes or Below — No content flashes more than 3 times/secondAP0Review all animations and video for flash frequency

2.4 Navigable

#CriterionLevelPriorityHow to Test
2.4.1Bypass Blocks — Skip navigation link or landmark regionsAP0Verify "Skip to content" link exists; test landmark regions (<main>, <nav>, <aside>)
2.4.2Page Titled — Pages have descriptive titlesAP0Check <title> is unique and descriptive per page
2.4.3Focus Order — Focus order is logical and intuitiveAP0Tab through page; verify order matches visual layout
2.4.4Link Purpose (In Context) — Link text describes destinationAP0Check for "click here", "read more" without context — add aria-label or surrounding context
2.4.5Multiple Ways — Multiple ways to locate pages (search, sitemap, nav)AAP1Verify at least two navigation mechanisms exist
2.4.6Headings and Labels — Headings and labels are descriptiveAAP1Review heading hierarchy; verify labels match their fields
2.4.7Focus Visible — Keyboard focus indicator is always visibleAAP0Tab through page; verify visible focus ring on every focusable element
2.4.11Focus Not Obscured (Minimum) (WCAG 2.2 NEW) — Focused item is not entirely hidden by sticky headers, footers, or other contentAAP0Tab through page with sticky elements; verify focused element is at least partially visible
2.4.12Focus Not Obscured (Enhanced) (WCAG 2.2 NEW) — Focused item is fully visibleAAAP2Tab through page; no part of focused element is covered
2.4.13Focus Appearance (WCAG 2.2 NEW) — Focus indicator has sufficient area and contrastAAAP2Focus ring area ≥ 2px perimeter, 3:1 contrast change

2.5 Input Modalities

#CriterionLevelPriorityHow to Test
2.5.1Pointer Gestures — Multi-point gestures have single-pointer alternativesAP1Check pinch-to-zoom, multi-finger swipes have button alternatives
2.5.2Pointer Cancellation — Actions fire on up-event, can be abortedAP1Test that mousedown alone doesn't trigger actions; verify dragging away cancels
2.5.3Label in Name — Visible label is contained in accessible nameAP0Compare visible text labels with aria-label/aria-labelledby; visible text must be contained
2.5.4Motion Actuation — Device motion actions have UI alternativesAP1Shake-to-undo etc. must have button alternative
2.5.7Dragging Movements (WCAG 2.2 NEW) — Dragging has non-dragging alternativeAAP1All drag-and-drop has button/input alternative (up/down arrows, select)
2.5.8Target Size (Minimum) (WCAG 2.2 NEW) — Touch targets are at least 24×24pxAAP0Measure all interactive targets; minimum 24×24px or adequate spacing

3. Understandable

Information and UI operation must be understandable.

3.1 Readable

#CriterionLevelPriorityHow to Test
3.1.1Language of Pagelang attribute on <html>AP0Check <html lang="en"> (or appropriate language code)
3.1.2Language of Parts — Content in other languages marked with langAAP1Find foreign language text; verify lang attribute

3.2 Predictable

#CriterionLevelPriorityHow to Test
3.2.1On Focus — Focus alone doesn't trigger unexpected context changesAP0Tab to all elements; verify no auto-submit, navigation, or popup on focus
3.2.2On Input — Changing a setting doesn't auto-trigger context change without warningAP0Change selects, toggles; verify no unexpected navigation or submission
3.2.3Consistent Navigation — Navigation is consistent across pagesAAP1Compare navigation across 3+ pages; verify consistent order and structure
3.2.4Consistent Identification — Same function = same label across pagesAAP1Check "Search", "Submit", "Close" buttons use same labels everywhere
3.2.6Consistent Help (WCAG 2.2 NEW) — Help mechanisms appear in same relative positionAP1Verify help/support links, chat widgets are consistently placed

3.3 Input Assistance

#CriterionLevelPriorityHow to Test
3.3.1Error Identification — Errors are identified and described in textAP0Submit invalid form; verify errors are announced (not just red borders)
3.3.2Labels or Instructions — Form fields have labels or instructionsAP0Every input has a visible label; complex fields have instructions
3.3.3Error Suggestion — Provide correction suggestions for known errorsAAP1Submit wrong format; verify helpful suggestion shown
3.3.4Error Prevention (Legal, Financial, Data) — Submissions are reversible, verifiable, or confirmableAAP1Check checkout, delete actions have confirmation or undo
3.3.7Redundant Entry (WCAG 2.2 NEW) — Don't ask for same information twice unless necessaryAP1Multi-step forms auto-populate previously entered data
3.3.8Accessible Authentication (Minimum) (WCAG 2.2 NEW) — Authentication doesn't require cognitive function testAAP0Login allows password managers, copy-paste; no CAPTCHA without alternative
3.3.9Accessible Authentication (Enhanced) (WCAG 2.2 NEW) — No object/image recognition required for authAAAP2No "select all traffic lights" as sole auth method

4. Robust

Content must be robust enough for diverse user agents and assistive technologies.

4.1 Compatible

#CriterionLevelPriorityHow to Test
4.1.2Name, Role, Value — All UI components have accessible names and rolesAP0Run axe/WAVE; check custom components expose correct roles, names, and states
4.1.3Status Messages — Status messages use ARIA live regionsAAP0Trigger toast, error, success; verify screen reader announces without focus change

Automated Testing Tools

ToolWhat It CatchesHow to Use
axe DevTools~57% of WCAG issuesBrowser extension → scan page
WAVEStructure, labels, contrastBrowser extension → visual overlay
LighthouseScore + specific violationsChrome DevTools → Accessibility audit
Pa11yCI/CD integrationpa11y https://url in pipeline
Contrast CheckerColor contrast ratiosInput FG/BG colors → get ratio
Screen ReaderReal user experienceVoiceOver (Mac), NVDA (Win), Orca (Linux)

Manual Testing Protocol

  1. Keyboard-only navigation — Unplug mouse, Tab through entire flow
  2. Screen reader walkthrough — Complete primary user journey with VoiceOver/NVDA
  3. Zoom to 200% — Verify no content is lost or overlapping
  4. 320px viewport — Verify content reflows without horizontal scroll
  5. Color blindness simulation — Use Sim Daltonism or built-in browser tools
  6. Motion sensitivity — Enable prefers-reduced-motion and verify animations respect it
  7. Text spacing override — Apply WCAG text spacing bookmarklet
  8. High contrast mode — Test in Windows High Contrast Mode

On this page