Achieving WCAG 2.2 AA compliance can feel overwhelming. The specification contains over 50 success criteria across four principles. This checklist breaks them down into practical, testable items organized by category. Use it as a working audit document for your website. Each item includes what to check, why it matters, and how to fix common violations.
Perceivable: Content Users Can See and Hear
Images and Non-Text Content
- Every
<img>element has a meaningfulaltattribute. Decorative images usealt=""orrole="presentation". - Complex images (charts, infographics) have extended descriptions via
aria-describedbyor a linked text alternative. - Icon buttons and image links have accessible names (via
alt,aria-label, or visually hidden text). - CAPTCHAs provide a non-visual alternative (audio CAPTCHA or alternative verification).
Color and Contrast
- Normal text (below 18pt or 14pt bold) has a contrast ratio of at least 4.5:1 against its background.
- Large text (18pt+ or 14pt+ bold) has a contrast ratio of at least 3:1.
- User interface components (form borders, icons, focus indicators) have a contrast ratio of at least 3:1.
- Color is never the only means of conveying information. Error states use icons or text in addition to red color.
Text and Typography
- Text can be resized up to 200% without loss of content or functionality.
- Content reflows properly at 320px viewport width (no horizontal scrolling for vertical content).
- Line height is at least 1.5 times the font size. Paragraph spacing is at least 2 times the font size. Letter spacing is at least 0.12 times the font size. Word spacing is at least 0.16 times the font size. Overriding these values does not break the layout.
Multimedia
- Prerecorded video has synchronized captions.
- Prerecorded audio has a text transcript.
- Prerecorded video has audio descriptions for important visual content.
- Live video has real-time captions.
- No audio plays automatically for more than 3 seconds, or a mechanism is provided to pause or stop it.
Operable: Users Can Navigate and Interact
Keyboard Accessibility
- All functionality is available using a keyboard alone. No mouse-only interactions.
- There are no keyboard traps. Users can always navigate away from any component using Tab, Shift+Tab, Escape, or arrow keys.
- Focus order follows a logical, intuitive sequence (typically left-to-right, top-to-bottom in LTR languages).
- Focus indicators are visible on all interactive elements. The default browser outline is not suppressed unless replaced with a custom focus style that meets contrast requirements.
- Skip navigation links are provided to bypass repetitive content (headers, nav menus).
Timing and Motion
- If there is a time limit on any interaction, users can turn off, adjust, or extend the time limit.
- Auto-updating content (news tickers, carousels, auto-refreshing feeds) can be paused, stopped, or hidden.
- No content flashes more than three times per second (seizure prevention).
- Animations triggered by interaction can be disabled (prefers-reduced-motion media query is respected).
Navigation
- Pages have descriptive, unique
<title>elements. - Heading hierarchy is logical (h1 followed by h2, not h1 followed by h4).
- Links have descriptive text. "Click here" and "Read more" without context are insufficient.
- Multiple ways to find pages are provided (navigation menu, search, sitemap).
- When an element receives focus, it is not entirely obscured by sticky headers, cookie banners, or other fixed elements (new in WCAG 2.2).
Input and Interaction (New in 2.2)
- Dragging actions have a single-pointer alternative (click, tap, or keyboard).
- Interactive targets are at least 24x24 CSS pixels, or have sufficient spacing from adjacent targets. Inline links are exempt.
Understandable: Content Makes Sense
Language and Readability
- The page language is declared via
langattribute on the<html>element. - Content in a different language from the page default uses the
langattribute on the containing element.
Predictability
- Navigation menus appear in the same relative order across all pages.
- Components with the same function are labeled consistently across pages.
- Focusing on an element or changing its value does not automatically trigger unexpected context changes (page reload, new window, form submission).
- Help mechanisms (contact, chat, FAQ) appear in the same location on every page (new in WCAG 2.2).
Forms and Error Handling
- All form inputs have associated
<label>elements oraria-label. - Error messages identify the specific field and describe the error in text (not just a red border).
- Suggestions for fixing errors are provided when possible.
- For legal or financial transactions, submissions are reversible, verified, or confirmed.
- Previously entered information is auto-populated in multi-step forms; users are not asked to re-enter data (new in WCAG 2.2).
- Authentication does not rely on cognitive function tests. Password managers and paste functionality are not blocked (new in WCAG 2.2).
Robust: Works with Assistive Technology
- HTML is valid and well-formed. Use a validator to check for unclosed tags, duplicate IDs, and improper nesting.
- All custom components have appropriate ARIA roles, states, and properties.
- Status messages (success notifications, progress updates, error alerts) use
role="alert",role="status", oraria-liveregions so screen readers announce them without focus change.
How to Use This Checklist
Start with automated testing. Tools like Accessify's WCAG scanner, axe-core, and Lighthouse can detect roughly 30-40% of violations automatically — missing alt text, low contrast, missing form labels, and missing document language. These are your quick wins.
Next, conduct manual testing. Navigate your entire site using only a keyboard. Test with a screen reader (NVDA on Windows, VoiceOver on macOS). Check that all interactive elements are reachable, that the focus order makes sense, and that all content is announced correctly.
Finally, test with real users. Invite people who use assistive technologies to complete key tasks on your site. Their feedback will reveal issues that no automated tool or developer test can catch.