Skip to content

Check a page

We fetch the page, check its HTML, then open it in a real browser and check what renders. You get a report at its own address, worst issues first, each with the guide that fixes it. One page per scan, plus up to four pages it links to. Automated checks find only part of the issues; a person reviews the rest.

For a page behind a login, or on your own machine, run the same check locally:

npx -y github:vojtaholik/good-a11y check http://localhost:3000

Page to check

Takes 20 to 90 seconds. What we store

What we check

Anything not checked here needs a person to review it.

Of the 50 WCAG 2.1 Level A and AA success criteria, 25 have at least one automated check: 9 on the served HTML, 23 on the rendered page and 6 asked of a model. 25 have none, and a person reviews them.

WCAG 2.2 adds 6 criteria, newer than the reference benchmark: 2 have an automated check, 4 have none.

A check covers only part of what its criterion asks, so a criterion with a check still needs a manual review. The rendered page is checked with axe-core and our own probes; a model's answers are shown apart and never counted as issues.

Each success criterion, and how it is tested today
Success criterionHow we test it
1.1.1 Non-text Content (Level A)

served HTML

  • Images have a text alternative
  • Alt text is not a file name or placeholder

rendered page

  • ARIA meters without a name
  • ARIA progress bars without a name
  • Images without a text alternative
  • Image buttons without a text alternative
  • Embedded objects without a text alternative
  • Elements with role="img" without a text alternative
  • SVG images without a text alternative
1.2.1 Audio-only and Video-only (Prerecorded) (Level A)

Not automated. A person compares the audio or video with its alternative.

1.2.2 Captions (Prerecorded) (Level A)

rendered page

  • Video without captions
1.2.3 Audio Description or Media Alternative (Prerecorded) (Level A)

Not automated. A person watches the video and its description.

1.2.4 Captions (Live) (Level AA)

Not automated. A person watches the live captions.

1.2.5 Audio Description (Prerecorded) (Level AA)

Not automated. A person watches the video and its audio description.

1.3.1 Info and Relationships (Level A)

served HTML

  • Form fields have an accessible name

rendered page

  • aria-hidden="true" on the page body
  • ARIA roles missing the children they need
  • ARIA roles outside the parent they need
  • Definition lists with invalid children
  • Definition terms or details outside a <dl>
  • Lists with invalid children
  • List items outside a list
  • Table cells whose headers attribute points elsewhere
  • Table headers with no data cells

asked of a model (labelled, never counted as an issue)

  • Text that may look like a heading but is not marked up as one
1.3.2 Meaningful Sequence (Level A)

Not automated. A person compares the reading order with the layout; layouts can reorder content and keep its meaning.

1.3.3 Sensory Characteristics (Level A)

Not automated. A person reads instructions that may rely on shape, size or position.

1.3.4 Orientation (Level AA)

Not automated. A person turns the screen; this is not checked yet.

1.3.5 Identify Input Purpose (Level AA)

served HTML

  • Autocomplete values on form fields are valid

rendered page

  • Fields with an invalid autocomplete value
1.4.1 Use of Color (Level A)

rendered page

  • Links told apart from text by colour alone
1.4.2 Audio Control (Level A)

rendered page

  • Audio or video that plays sound on its own
1.4.3 Contrast (Minimum) (Level AA)

rendered page

  • Text with low contrast against its background
1.4.4 Resize Text (Level AA)

served HTML

  • Zoom is not blocked

rendered page

  • Zoom disabled on the page
1.4.5 Images of Text (Level AA)

Not automated. A person looks at each image for text that could be real text.

1.4.10 Reflow (Level AA)

rendered page

  • Sideways scrolling at 320 CSS pixels
1.4.11 Non-text Contrast (Level AA)

Not automated. A person checks borders and icons; shadows and gradients make automated results unreliable.

1.4.12 Text Spacing (Level AA)

rendered page

  • Text spacing locked by inline styles
1.4.13 Content on Hover or Focus (Level AA)

Not automated. A person hovers and focuses to see what appears.

2.1.1 Keyboard (Level A)

rendered page

  • Frames with focusable content taken out of the tab order
  • Scrolling areas the keyboard cannot reach
  • Server-side image maps
  • Controls the Tab key never reaches
2.1.2 No Keyboard Trap (Level A)

rendered page

  • Keyboard focus that cannot leave
2.1.4 Character Key Shortcuts (Level A)

Not automated. A person tries the single-key shortcuts.

2.2.1 Timing Adjustable (Level A)

served HTML

  • The page does not refresh or redirect on a timer

rendered page

  • Timed page refresh
2.2.2 Pause, Stop, Hide (Level A)

rendered page

  • Blinking text (<blink>)
  • Scrolling text (<marquee>)
2.3.1 Three Flashes or Below Threshold (Level A)

Not automated. A person watches the page for flashing.

2.4.1 Bypass Blocks (Level A)

rendered page

  • No way to skip repeated blocks
2.4.2 Page Titled (Level A)

served HTML

  • The page has a title
  • The page title is not a placeholder

rendered page

  • Page without a title
2.4.3 Focus Order (Level A)

Not automated. A person compares the focus order with the reading order.

2.4.4 Link Purpose (In Context) (Level A)

served HTML

  • Links have a name

rendered page

  • Image map areas without a text alternative
  • Links without a name

asked of a model (labelled, never counted as an issue)

  • Links whose purpose may be unclear
2.4.5 Multiple Ways (Level AA)

Not automated. A person checks that each page can be found in two ways. The report lists the search and site map the scan saw, but navigation and links between pages can be enough, so no automated result is given.

2.4.6 Headings and Labels (Level AA)

Not automated. A model question exists, but it stays hidden until it is accurate on real pages. A person reads the headings and labels.

2.4.7 Focus Visible (Level AA)

rendered page

  • Focus that cannot be seen
2.4.11 Focus Not Obscured (Minimum) (Level AA)WCAG 2.2 (newer than the reference benchmark)

rendered page

  • Focused controls hidden behind a fixed layer
2.5.1 Pointer Gestures (Level A)

Not automated. A person tries the gestures.

2.5.2 Pointer Cancellation (Level A)

Not automated. A person tries pressing and releasing.

2.5.3 Label in Name (Level A)

Not automated. The automated rule was wrong too often on real pages, so it is left out. A person compares visible labels with names.

2.5.4 Motion Actuation (Level A)

Not automated. A person tries the motion controls.

2.5.7 Dragging Movements (Level AA)WCAG 2.2 (newer than the reference benchmark)

Not automated. A person tries the dragging.

2.5.8 Target Size (Minimum) (Level AA)WCAG 2.2 (newer than the reference benchmark)

rendered page

  • Targets smaller than 24 by 24 CSS pixels
3.1.1 Language of Page (Level A)

served HTML

  • The page states its language

rendered page

  • Page without a language
  • Page language that is not a valid language tag
  • lang and xml:lang naming different languages

asked of a model (labelled, never counted as an issue)

  • Declared page language may not match the text
3.1.2 Language of Parts (Level AA)

rendered page

  • lang attributes with an invalid value

asked of a model (labelled, never counted as an issue)

  • Passages that may be in another language than marked
3.2.1 On Focus (Level A)

rendered page

  • Focus that moves the page elsewhere
3.2.2 On Input (Level A)

Not automated. Changing controls on someone else's site could set off real actions, so a person checks it.

3.2.3 Consistent Navigation (Level AA)

Not automated. A person compares the navigation on several pages of the site.

3.2.4 Consistent Identification (Level AA)

Not automated. A person compares how the same things are named on several pages of the site.

3.2.6 Consistent Help (Level A)WCAG 2.2 (newer than the reference benchmark)

Not automated. A person compares where help sits on several pages of the site.

3.3.1 Error Identification (Level A)

asked of a model (labelled, never counted as an issue)

  • Form fields in error that the site's text may not identify
3.3.2 Labels or Instructions (Level A)

rendered page

  • Fields with more than one label
3.3.3 Error Suggestion (Level AA)

asked of a model (labelled, never counted as an issue)

  • Form fields in error where the site's text may not say how to correct them
3.3.4 Error Prevention (Legal, Financial, Data) (Level AA)

Not automated. Needs a real transaction, which the checker never makes.

3.3.7 Redundant Entry (Level A)WCAG 2.2 (newer than the reference benchmark)

Not automated. Needs a process of several steps.

3.3.8 Accessible Authentication (Minimum) (Level AA)WCAG 2.2 (newer than the reference benchmark)

Not automated. Needs a login, which the checker never uses.

4.1.1 Parsing (Level A)

Not automated. Always met by content in HTML (STD-WCAG21-2); WCAG 2.2 removes it.

4.1.2 Name, Role, Value (Level A)

served HTML

  • Form fields have an accessible name
  • Links have a name
  • Buttons have a name
  • Frames have a title

rendered page

  • Image map areas without a text alternative
  • ARIA attributes the element's role does not support
  • Braille ARIA attributes without a plain equivalent
  • ARIA buttons, links or menu items without a name
  • ARIA attributes used against their role's rules
  • Deprecated ARIA roles
  • aria-hidden="true" on the page body
  • Hidden elements that can still take focus
  • ARIA input fields without a name
  • ARIA attributes the element's role prohibits
  • ARIA roles missing an attribute they need
  • Invalid ARIA role values
  • ARIA tabs without a name
  • ARIA toggles without a name
  • ARIA tooltips without a name
  • Misspelled or unknown ARIA attributes
  • ARIA attributes with invalid values
  • Buttons without a name
  • Duplicate IDs referenced by ARIA or labels
  • Frames without a name
  • Frames that share the same title
  • Input buttons without a name
  • Image buttons without a text alternative
  • Form fields without a label
  • Links without a name
  • Interactive controls nested inside each other
  • Drop-down lists without a name
  • Disclosure summaries without a name
4.1.3 Status Messages (Level AA)

Not automated. A person sets off the status messages and listens for them.