Checklist
WCAG 2.2 AA, as a list you can work down
All 55 Level A and AA success criteria — the set EN 301 549 and the European Accessibility Act point at. Split by the only distinction that changes how you spend your afternoon: what a scanner can prove, and what a person has to look at.
23 automatable · 32 need a person
How to use this
- 1. Run a scan first. It clears most of the 23 automatable criteria in a minute, and it is free for one page.
- 2. Work down the manual list with a keyboard and a screen reader. Budget an hour per template, not per page.
- 3. Write down what you could not fix and why. That list is your accessibility statement, and it is what an enforcement body reads first.
A scanner can prove these
Every one of these is checked automatically on every scan. A clean result here is real evidence, and it is the cheapest evidence you will get.
Anything that is not text — an image, an icon, a chart — needs a text version that says the same thing.
image-alt · input-image-alt · aria-meter-name · aria-progressbar-name
Audio with no video, and video with no audio, need an alternative that carries the same information.
audio-caption
Pre-recorded video with sound needs captions.
video-caption
Structure you show with layout — headings, lists, tables, groups — has to exist in the markup too.
aria-hidden-body · aria-required-children · aria-required-parent · td-has-header
Do not lock the page to one screen orientation.
css-orientation-lock
Fields that ask for the user’s own details should say which detail they want, in code.
autocomplete-valid
Colour alone must not carry meaning.
link-in-text-block
Audio that plays for more than three seconds by itself needs a way to stop it.
no-autoplay-audio
Text needs a contrast ratio of at least 4.5:1 against its background — 3:1 if it is large.
color-contrast
Text has to survive being zoomed to 200% without losing content or function.
meta-viewport
The page must still work when the reader increases line height and letter spacing.
avoid-inline-spacing
Everything you can do with a mouse, you must be able to do with a keyboard.
frame-focusable-content · scrollable-region-focusable · server-side-image-map
If something is on a timer, the user needs to be able to turn it off, adjust it, or extend it.
meta-refresh
Anything that moves, blinks, scrolls or updates by itself for more than five seconds needs a pause control.
blink · marquee
Give people a way past the blocks that repeat on every page.
bypass
Every page needs a title that says what the page is.
document-title
A link's text has to say where it goes.
area-alt · link-name
The accessible name of a control must contain the words shown on it.
label-content-name-mismatch
Tap targets need to be at least 24 by 24 CSS pixels, or spaced far enough apart.
target-size
The page has to declare what language it is in.
html-has-lang · html-lang-valid · html-xml-lang-mismatch
Mark up passages that are in a different language from the page.
valid-lang
Every input needs a label, and instructions where the format is not obvious.
form-field-multiple-labels
Every control must expose what it is, what it is called, and what state it is in.
area-alt · aria-allowed-attr · aria-hidden-body · aria-required-attr
These need a person
No tool decides these. They are about meaning and behaviour — whether alt text says the right thing, whether focus order matches the page, whether a custom widget behaves like the pattern it imitates. Anyone claiming full coverage is not counting these.
Pre-recorded video needs either an audio description of what is shown, or a text alternative.
Whether the audio conveys everything the video does is a human call.
Live audio content needs live captions.
Check by hand: use a live captioning service, or a human stenographer for anything high-stakes.
Pre-recorded video needs an audio description track.
Check by hand: add an audio-description track, or re-record the narration to describe what happens.
The order the content is read in has to make sense.
A scanner cannot know what order you intended. Read the page with CSS off.
Do not explain something using only shape, size, position, or sound.
This one is entirely a reading exercise. No tool detects it.
Use real text, not pictures of text.
A scanner cannot see text inside an image. This one needs eyes.
Content must reflow into a 320px-wide window without a horizontal scrollbar.
Check by hand: build the layout to reflow. if you are responsive already, you are most of the way there.
Interface parts and meaningful graphics need 3:1 contrast, not just text.
Check by hand: bring borders, focus rings and icons to at least 3:1 against what is behind them.
Content that appears on hover or focus must be dismissible, hoverable and persistent.
Check by hand: keep it open while the pointer is over either the trigger or the popup.
Keyboard focus must never get stuck somewhere the user cannot leave.
Traps are found by tabbing through the page, not by scanning it.
A shortcut made of a single letter must be turnable off or remappable.
Check by hand: require a modifier (ctrl, alt, cmd), or only listen while the relevant control has focus, or let the user turn shortcuts off.
Nothing may flash more than three times a second.
Check by hand: keep flashes below three per second, or below the general flash and red flash thresholds.
Focus has to move in an order that preserves meaning.
Tab through the page and watch where the ring goes. That is the whole test.
Offer more than one way to find a page.
Check by hand: add search, a sitemap, or breadcrumbs. any two routes satisfy this.
Headings and labels have to describe what follows them.
A tool sees that a heading exists, not whether it is descriptive.
You must be able to see where keyboard focus is.
Check by hand: never remove the outline without replacing it. style `:focus-visible` instead of deleting `:focus`.
A sticky header or footer must not completely hide the focused element.
Check by hand: add `scroll-margin-top` matching the header height, or shrink the sticky element on scroll.
Anything you do with a multi-finger or path-based gesture must also work with a single tap.
Check by hand: add plain buttons alongside the gesture: zoom in / zoom out, previous / next.
An action must not fire on the press — the user needs a chance to back out.
Check by hand: fire on `click` / the up event, or provide an undo.
If shaking or tilting the device does something, there must be a control that does it too.
Check by hand: add the equivalent control, and let motion actuation be turned off.
Anything that works by dragging must also work without dragging.
Check by hand: add buttons, a menu, or a text input that does the same job.
Focusing something must not change the page by itself.
Check by hand: act on activation — a click, enter, or an explicit go button — never on focus alone.
Changing a value must not do something unexpected without warning.
Check by hand: add a submit button, or tell the user in advance what the control will do.
Navigation that repeats across pages must stay in the same order.
Check by hand: keep the relative order stable. adding an item is fine; shuffling is not.
The same thing must be called the same thing everywhere.
Check by hand: pick one name per concept and use it in every label, button, toast and heading.
If help is offered on several pages, it has to be in the same place on each.
Check by hand: keep help mechanisms in the same relative order on every page that has them.
When input is rejected, say which field and what is wrong, in text.
Check by hand: name the field and the problem: "postcode: use the format sw1a 1aa".
When you can tell what the user meant, suggest the fix.
Check by hand: say what would be valid: "use dd/mm/yyyy, for example 24/06/2026".
Legal, financial and data-changing submissions must be reversible, checked, or confirmable.
Check by hand: add a review step, an undo window, or an explicit confirmation. any one of the three satisfies it.
Do not make people type the same information twice in one process.
Check by hand: auto-populate, offer a copy checkbox, or let the user pick a previous value.
Do not make people solve a puzzle or recall something to log in.
Check by hand: allow paste and let password managers fill the field.
Messages that appear without moving focus must be announced.
Check by hand: use `role="status"` (polite) or `role="alert"` (assertive) for anything urgent.
Criterion text is from the W3C Web Content Accessibility Guidelines 2.2. Level AAA is excluded: it is not what the EAA asks for, and W3C does not recommend it as a site-wide target. 31 AAA criteria have their own pages in the full reference.