Accessibility rules, explained

Every finding in a Reviseberg report carries a rule id – color-contrast, image-alt, keyboard:trap. Each rule below has its own page: what fails, who it affects, why it usually happens, and how to fix it, with code that has been run against the same check before it was published.

Two engines report these rules. axe-core is the open-source rules engine our crawler runs on every page; its rule ids are the ones a CI pipeline or a browser extension shows too. The keyboard agent is ours: it walks a journey on your site with real key presses and reports what no rules engine can see, such as a focus nobody can see or a trap nobody can leave.

Every rule with a page, and what it checks
RuleProblemWCAGLevelEngine
image-alt Image without alt text 1.1.1 Non-text Content A axe-core
input-image-alt Image button without alt text 1.1.1 Non-text Content
4.1.2 Name, Role, Value
A axe-core
role-img-alt role="img" element without a name 1.1.1 Non-text Content A axe-core
svg-img-alt SVG image without a text alternative 1.1.1 Non-text Content A axe-core
aria-required-children ARIA role missing required children 1.3.1 Info and Relationships A axe-core
aria-required-parent ARIA role missing required parent 1.3.1 Info and Relationships A axe-core
label Form field without a label 1.3.1 Info and Relationships
3.3.2 Labels or Instructions
4.1.2 Name, Role, Value
A axe-core
list Invalid list structure 1.3.1 Info and Relationships A axe-core
listitem List item outside a list 1.3.1 Info and Relationships A axe-core
select-name Select without a label 1.3.1 Info and Relationships
3.3.2 Labels or Instructions
4.1.2 Name, Role, Value
A axe-core
td-headers-attr Broken table header association 1.3.1 Info and Relationships A axe-core
autocomplete-valid Invalid autocomplete value 1.3.5 Identify Input Purpose AA axe-core
link-in-text-block Link distinguished by colour only 1.4.1 Use of Color A axe-core
color-contrast Insufficient colour contrast 1.4.3 Contrast (Minimum) AA axe-core
meta-viewport Zoom disabled 1.4.4 Resize Text AA axe-core
keyboard:unreachable Element not reachable by keyboard 2.1.1 Keyboard A Keyboard agent
scrollable-region-focusable Scrollable region not keyboard accessible 2.1.1 Keyboard A axe-core
keyboard:trap Keyboard trap 2.1.2 No Keyboard Trap A Keyboard agent
keyboard:skip-link No skip link 2.4.1 Bypass Blocks A Keyboard agent
document-title Page title missing 2.4.2 Page Titled A axe-core
link-name Link without discernible text 2.4.4 Link Purpose (In Context)
4.1.2 Name, Role, Value
A axe-core
keyboard:focus-invisible Focus on an invisible element 2.4.7 Focus Visible AA Keyboard agent
keyboard:focus-visible Focus not visible 2.4.7 Focus Visible AA Keyboard agent
target-size Target size too small 2.5.8 Target Size (Minimum) AA axe-core
html-has-lang Page language missing 3.1.1 Language of Page A axe-core
html-lang-valid Invalid page language 3.1.1 Language of Page A axe-core
valid-lang Invalid lang value on content 3.1.2 Language of Parts AA axe-core
aria-allowed-attr ARIA attribute not allowed 4.1.2 Name, Role, Value A axe-core
aria-hidden-focus Focusable element inside aria-hidden 4.1.2 Name, Role, Value A axe-core
aria-input-field-name ARIA input field without a name 4.1.2 Name, Role, Value A axe-core
aria-required-attr Required ARIA attribute missing 4.1.2 Name, Role, Value A axe-core
aria-valid-attr-value Invalid ARIA attribute value 4.1.2 Name, Role, Value A axe-core
button-name Button without discernible text 4.1.2 Name, Role, Value A axe-core
frame-title iframe without a title 4.1.2 Name, Role, Value A axe-core
input-button-name Input button without text 4.1.2 Name, Role, Value A axe-core
nested-interactive Nested interactive controls 4.1.2 Name, Role, Value A axe-core
aria-dialog-name Dialog without an accessible name Best practice – axe-core
empty-heading Empty heading Best practice – axe-core
heading-order Heading level skipped Best practice – axe-core
landmark-one-main No main landmark Best practice – axe-core
page-has-heading-one Page has no level-one heading Best practice – axe-core
region Content outside landmarks Best practice – axe-core

What a rule can and cannot tell you

A rule answers one narrow question. image-alt finds an image with no text alternative; it cannot tell a good description from IMG_2231.jpg. So a rule that passes is not a success criterion that passes: most WCAG criteria need a person to finish the job, and our WCAG 2.2 reference says for each criterion how far automated checks get.

Some rules are best practice: axe-core maps them to no WCAG success criterion. They are real obstacles – content outside landmarks, a skipped heading level – and Reviseberg reports them, but never as a WCAG failure and never in a compliance report.

Run these rules on your own site

See what a scan finds on your site

One page in about thirty seconds, no email needed. The full report covers up to 100 pages and a keyboard journey.