Complete Accessibility Rules Reference
Comprehensive guide to web accessibility rules. Learn about WCAG compliance, discover practical solutions, and implement accessible web experiences.
Engine coverage by WCAG criterion
Each success criterion is tagged to a primary engine: Axe-core, Ablelytics-core, Ablelytics-AI, or Manual review. Manual-only items require human validation.
| SC | Title | Level | Engine |
|---|---|---|---|
| 1.1.1 | Non-text Content | A | Axe-core |
| 1.2.1 | Audio-only and Video-only (Prerecorded) | A | Ablelytics-AI |
| 1.2.2 | Captions (Prerecorded) | A | Ablelytics-AI |
| 1.2.3 | Audio Description or Media Alternative (Prerecorded) | A | Ablelytics-AI |
| 1.2.4 | Captions (Live) | AA | Manual |
| 1.2.5 | Audio Description (Prerecorded) | AA | Ablelytics-AI |
| 1.2.6 | Sign Language (Prerecorded) | AAA | Ablelytics-AI |
| 1.2.7 | Extended Audio Description (Prerecorded) | AAA | Ablelytics-AI |
| 1.2.8 | Media Alternative (Prerecorded) | AAA | Ablelytics-AI |
| 1.2.9 | Audio-only (Live) | AAA | Manual |
| 1.3.1 | Info and Relationships | A | Axe-core |
| 1.3.2 | Meaningful Sequence | A | Axe-core |
Show all criteria
| SC | Title | Level | Engine |
|---|---|---|---|
| 1.3.3 | Sensory Characteristics | A | Ablelytics-AI |
| 1.3.4 | Orientation | AA | Axe-core |
| 1.3.5 | Identify Input Purpose | AA | Axe-core |
| 1.3.6 | Identify Purpose | AAA | Axe-core |
| 1.4.1 | Use of Color | A | Axe-core |
| 1.4.2 | Audio Control | A | Ablelytics-core |
| 1.4.3 | Contrast (Minimum) | AA | Axe-core |
| 1.4.4 | Resize Text | AA | Axe-core |
| 1.4.5 | Images of Text | AA | Axe-core |
| 1.4.6 | Contrast (Enhanced) | AAA | Axe-core |
| 1.4.7 | Low or No Background Audio | AAA | Ablelytics-AI |
| 1.4.8 | Visual Presentation | AAA | Ablelytics-AI |
| 1.4.9 | Images of Text (No Exception) | AAA | Axe-core |
| 1.4.10 | Reflow | AA | Axe-core |
| 1.4.11 | Non-text Contrast | AA | Axe-core |
| 1.4.12 | Text Spacing | AA | Axe-core |
| 1.4.13 | Content on Hover or Focus | AA | Axe-core |
| 2.1.1 | Keyboard | A | Ablelytics-core |
| 2.1.2 | No Keyboard Trap | A | Ablelytics-core |
| 2.1.3 | Keyboard (No Exception) | AAA | Ablelytics-core |
| 2.1.4 | Character Key Shortcuts | A | Axe-core |
| 2.2.1 | Timing Adjustable | A | Axe-core |
| 2.2.2 | Pause, Stop, Hide | A | Ablelytics-core |
| 2.2.3 | No Timing | AAA | Manual |
| 2.2.4 | Interruptions | AAA | Manual |
| 2.2.5 | Re-authenticating | AAA | Manual |
| 2.2.6 | Timeouts | AAA | Manual |
| 2.2.7 | Dragging Movements | AA | Ablelytics-core |
| 2.2.8 | Target Size (Minimum) | AA | Axe-core |
| 2.3.1 | Three Flashes or Below Threshold | A | Axe-core |
| 2.3.2 | Three Flashes | AAA | Axe-core |
| 2.3.3 | Animation from Interactions | AA | Axe-core |
| 2.4.1 | Bypass Blocks | A | Ablelytics-core |
| 2.4.2 | Page Titled | A | Axe-core |
| 2.4.3 | Focus Order | A | Ablelytics-core |
| 2.4.4 | Link Purpose (In Context) | A | Axe-core |
| 2.4.5 | Multiple Ways | AA | Ablelytics-AI |
| 2.4.6 | Headings and Labels | AA | Axe-core |
| 2.4.7 | Focus Visible | AA | Ablelytics-core |
| 2.4.8 | Location | AAA | Ablelytics-AI |
| 2.4.9 | Link Purpose (Link Only) | AAA | Axe-core |
| 2.4.10 | Section Headings | AAA | Axe-core |
| 2.4.11 | Focus Not Obscured (Minimum) | AA | Ablelytics-core |
| 2.4.12 | Focus Not Obscured (Enhanced) | AAA | Ablelytics-core |
| 2.4.13 | Focus Appearance | AAA | Axe-core |
| 2.5.1 | Pointer Gestures | A | Ablelytics-core |
| 2.5.2 | Pointer Cancellation | A | Ablelytics-core |
| 2.5.3 | Label in Name | A | Axe-core |
| 2.5.4 | Motion Actuation | A | Ablelytics-core |
| 2.5.5 | Target Size (Enhanced) | AAA | Axe-core |
| 2.5.6 | Concurrent Input Mechanisms | AAA | Ablelytics-core |
| 2.5.7 | Dragging Movements | AA | Ablelytics-core |
| 2.5.8 | Target Size (Minimum) | AA | Axe-core |
| 3.1.1 | Language of Page | A | Axe-core |
| 3.1.2 | Language of Parts | AA | Axe-core |
| 3.1.3 | Unusual Words | AAA | Ablelytics-AI |
| 3.1.4 | Abbreviations | AAA | Ablelytics-AI |
| 3.1.5 | Reading Level | AAA | Ablelytics-AI |
| 3.1.6 | Pronunciation | AAA | Ablelytics-AI |
| 3.2.1 | On Focus | A | Axe-core |
| 3.2.2 | On Input | A | Axe-core |
| 3.2.3 | Consistent Navigation | AA | Ablelytics-core |
| 3.2.4 | Consistent Identification | AA | Ablelytics-core |
| 3.2.5 | Change on Request | AAA | Ablelytics-AI |
| 3.2.6 | Consistent Help | A | Ablelytics-core |
| 3.3.1 | Error Identification | A | Axe-core |
| 3.3.2 | Labels or Instructions | A | Axe-core |
| 3.3.3 | Error Suggestion | AA | Axe-core |
| 3.3.4 | Error Prevention (Legal, Financial, Data) | AA | Ablelytics-AI |
| 3.3.5 | Help | AAA | Ablelytics-AI |
| 3.3.6 | Error Prevention (All) | AAA | Ablelytics-AI |
| 3.3.7 | Redundant Entry | A | Ablelytics-AI |
| 3.3.8 | Accessible Authentication (Minimum) | AA | Ablelytics-AI |
| 3.3.9 | Accessible Authentication (Enhanced) | AAA | Ablelytics-AI |
| 4.1.2 | Name, Role, Value | A | Axe-core |
| 4.1.3 | Status Messages | AA | Axe-core |
ARIA
9 rulesARIA attributes must be allowed for the element's role
An element has ARIA attributes that are not allowed for its role. This can confuse assistive technologies and provide incorrect information to users.
ARIA Role Must Be Appropriate for Element
The `role` attribute must be appropriate for the HTML element on which it is used. Some ARIA roles are not allowed on certain HTML elements because the element's native semantics conflict with or override the ARIA role, or because the combination creates invalid or nonsensical accessibility information.
ARIA Hidden Elements Must Not Contain Focusable Elements
Elements with `aria-hidden="true"` must not contain focusable elements. When an element is hidden from assistive technologies using `aria-hidden="true"`, any focusable descendants within it create a confusing experience where keyboard users can focus on elements that screen readers cannot perceive or announce.
Elements with ARIA roles must have all required attributes
An element with an ARIA role is missing one or more required ARIA attributes. Assistive technologies cannot properly interpret the element without these required attributes.
Elements with ARIA Roles Must Have Required Children
Certain ARIA roles require specific child roles to be present to create valid accessibility structures. For example, a `listbox` must contain `option` elements, a `tablist` must contain `tab` elements, and a `menu` must contain `menuitem`, `menuitemcheckbox`, or `menuitemradio` elements. Missing required children breaks the accessibility tree and prevents assistive technologies from correctly interpreting the interface.
Elements with ARIA Roles Must Have Required Parent
Certain ARIA roles can only be used as children of specific parent roles. For example, `option` must be contained in a `listbox` or `combobox`, `tab` must be in a `tablist`, and `menuitem` must be in a `menu` or `menubar`. Using these child roles without their required parent roles breaks the accessibility tree and prevents assistive technologies from correctly interpreting the widget structure.
ARIA roles must be valid
An element has an invalid or non-existent ARIA role. Assistive technologies cannot interpret invalid roles, leading to broken accessibility.
ARIA roles must conform to valid values
An ARIA attribute has an invalid value. Screen readers and assistive technologies cannot interpret invalid ARIA values, breaking accessibility features.
ARIA Attributes Must Be Valid
ARIA (Accessible Rich Internet Applications) attributes used in HTML elements must be valid attributes that are defined in the ARIA specification. Using invalid or misspelled ARIA attributes can cause assistive technologies to ignore or misinterpret the intended accessibility information.
Forms & Inputs
5 rulesAutocomplete attribute values must be valid
Form fields use invalid or unsupported `autocomplete` tokens.
Buttons must have discernible text
A button element does not have text content or accessible text. Screen reader users cannot understand the button's purpose.
Input buttons must have discernible text
An `<input>` element with `type="button"`, `type="submit"`, or `type="reset"` does not have discernible text. Screen reader users cannot understand the button's purpose.
Image input buttons must have alternate text
`<input type="image">` elements are missing meaningful `alt` text.
Form elements must have labels
Form input elements do not have associated labels. Screen reader users cannot determine what information to enter into form fields, and all users lose the benefit of clickable labels.
Images & Media
6 rulesImage map area elements must have alternate text
`<area>` elements inside image maps are missing meaningful `alt` text.
Audio-only content must provide a transcript
Audio-only media is presented without an equivalent text transcript.
Frames must have a title attribute
An `<iframe>` or `<frame>` element does not have a `title` attribute, or the title is empty. Screen reader users cannot understand the frame's purpose without a descriptive title.
Images must have alternate text
Images do not have alternative text (alt attributes). Screen reader users cannot access the information conveyed by images, and if the image fails to load, all users lose context.
Object elements must have text alternatives
An `<object>` element is missing equivalent text content or fallback information.
`<video>` elements must have captions
A `<video>` element with audio lacks captions. Deaf and hard-of-hearing users cannot access the audio content.
Document Structure
7 rulesDocuments must have a title element
The document does not have a `<title>` element in the `<head>`, or the title is empty. Users need page titles to identify and navigate between pages.
IDs must be unique
Two or more elements on the page have the same `id` attribute value. Duplicate IDs break assistive technologies, form labels, ARIA relationships, and JavaScript functionality.
Headings must have discernible text
A heading element (h1-h6 or role="heading") is empty or has no accessible text. Empty headings confuse screen reader users and break document structure.
Heading levels should only increase by one
Heading levels skip one or more levels (e.g., jumping from `<h1>` to `<h3>`, skipping `<h2>`). This breaks the document outline and confuses screen reader users navigating by headings.
HTML element must have a lang attribute
The `<html>` element does not have a `lang` attribute. Screen readers and assistive technologies need this to pronounce content correctly and apply appropriate language-specific rules.
html element must have a valid lang attribute value
The `<html>` element has a `lang` attribute with an invalid value. Screen readers and browsers cannot determine the correct language for pronunciation and processing.
Page must have a level-one heading
The page does not contain a level-one heading (`<h1>`). Screen reader users rely on heading structure to understand page content and navigate efficiently.
Lists & Landmarks
6 rulesDefinition lists must only contain dt and dd elements
A `<dl>` contains invalid direct children that are not `<dt>`, `<dd>`, `<script>`, or `<template>`.
Definition list items must be inside a definition list
`<dt>` or `<dd>` elements are used outside a `<dl>` container.
Page must contain a level-one heading
The page does not have exactly one `<main>` landmark or `role="main"` element. Users need a main landmark to skip directly to the main content and understand page structure.
`<ul>` and `<ol>` must only directly contain `<li>`, `<script>` or `<template>` elements
A `<ul>` or `<ol>` element contains children other than `<li>`, `<script>`, or `<template>` elements. This breaks the semantic list structure and confuses screen readers.
`<li>` elements must be contained in a `<ul>` or `<ol>`
An `<li>` element exists outside of a `<ul>`, `<ol>`, or `<menu>` element. This breaks semantic list structure and confuses screen readers.
All page content should be contained by landmarks
Important page content is not grouped inside landmark regions (`main`, `nav`, `header`, `footer`, `aside`, `section` with accessible name).
Need Help with Accessibility?
Our automated accessibility checker can scan your website and identify issues based on these rules.
Start Your Free Trial