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.
| Rule | Problem | WCAG | Level | Engine |
|---|---|---|---|---|
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.