Accessibility testing checklist
Twenty-three checks in the order that stops you repeating work. The automated pass runs first, not because it decides anything, but because it clears the findings a machine can state so the manual passes are spent on the ones it cannot. On the page these procedures were written against, axe reported zero violations and Lighthouse scored 100 while four real defects sat in the markup, including a button a keyboard user could reach and not identify. That is the reason for every group below the first. Each check names what it decides and what it leaves open, and none of them claims what a screen reader announces, because no screen reader was run.
23 checksabout 223 min end to end
Clear the machine-checkable findings first
- How to run an axe accessibility test
A short run that names its failing elements, which is the cheapest way to remove the findings a manual pass should not spend time on. - How to check lighthouse accessibility score
Read the score as the arithmetic it is, since the denominator changes per page and ten of its audits are weighted zero. - How to check the html lang attribute
A missing language and a wrong one read identically on five of six measurements, and only one of them is an attribute test.
The page's shape
- How to check heading structure of a page
The tag list and the computed tree disagree about which headings exist, so a check against either one alone is incomplete. - How to check landmark regions of a page
Several unnamed navigation landmarks collapse into one indistinguishable group, which a selector count cannot show. - How to check accessibility tree
The computed name, role and state are what assistive technology is given, and they are frequently not what the markup says.
Keyboard, in the order a keyboard meets the page
- How to test keyboard navigation on a website
Everything below assumes each control can be reached at all, which is the one thing to establish before measuring how. - How to test a skip to content link
A skip link can move the focus start point without moving focus, so the next Tab lands correctly on a link that is still broken. - How to check focus order
Visual order and tab order are set by different mechanisms, and a single positive tabindex reorders the whole page. - How to check visible focus indicator
A removed outline and a custom ring drawn with box-shadow look the same to a selector and different to a person. - How to test a focus trap in a modal
A correct dialog passes through the document body once per cycle, so the obvious test fails dialogs that work. - How to check aria hidden elements are not focusable
Hidden from the tree and reachable by Tab is the combination that puts a keyboard user somewhere they cannot be told about.
What each control is called
- How to check aria labels
An aria-labelledby pointing at nothing falls through to the visible text, so the name check passes and the name is wrong. - How to check alt text on images
Present and empty are different decisions, and only one of them is a defect. - How to check link text for accessibility
Four links reading Read more to three destinations pass every attribute test and answer no question a reader has. - How to check if a form is accessible
A placeholder can supply the accessible name and disappear as soon as someone types, which passes the name check and loses the label. - How to test aria attributes
An invalid ARIA value is treated as true rather than ignored, so a misspelling turns a state on instead of leaving it off. - How to test aria live regions
A region built with its message already inside it looks identical afterwards to one that announced, so only the before and after separates them.
Colour, motion and size
- How to check color contrast ratio
The naive background read returns transparent on most elements, which measures the text against black and reports a ratio nobody sees. - How to check a website for color blindness
A simulation cannot decide whether a person can use the page, only whether colour is carrying meaning alone. - How to test prefers reduced motion
The CSS half of a page usually honours the setting and the scripted half usually does not, and the setting says nothing about which. - How to test a page at 200 percent zoom
Browser zoom and a narrow viewport are different operations, and a layout that survives one can break under the other. - How to check tap target size
The hit box is set by padding and borders rather than by the declared size, and line-height does not enlarge it.
Take it with you
The file is the same list as Markdown checkboxes, ready to paste into a release ticket or a pull request description.
Ticks are kept in this browser only. They are not sent anywhere and other people do not see them.