---
title: "Accessibility rules (a11y/*)"
description: "All 48 accessibility rules void reports, each with severity, why it matters and how to fix it."
canonical: https://void-design.vercel.app/rules/a11y
lastModified: 2026-09-16
---

# Accessibility rules

WCAG 2.2 AA through axe-core, plus checks axe can't do alone: visible keyboard focus, 24/44px target size on mobile, 320px reflow and disabled zoom. Run `void a11y` or `void audit`.

| Rule | Severity | Problem |
| --- | --- | --- |
| [`a11y/color-contrast`](https://void-design.vercel.app/rules/a11y/color-contrast.md) | error | Text has insufficient color contrast |
| [`a11y/image-alt`](https://void-design.vercel.app/rules/a11y/image-alt.md) | error | Image has no text alternative |
| [`a11y/button-name`](https://void-design.vercel.app/rules/a11y/button-name.md) | error | Button has no accessible name |
| [`a11y/link-name`](https://void-design.vercel.app/rules/a11y/link-name.md) | error | Link has no accessible name |
| [`a11y/label`](https://void-design.vercel.app/rules/a11y/label.md) | error | Form field has no label |
| [`a11y/select-name`](https://void-design.vercel.app/rules/a11y/select-name.md) | error | Select element has no accessible name |
| [`a11y/input-button-name`](https://void-design.vercel.app/rules/a11y/input-button-name.md) | error | Input button has no accessible name |
| [`a11y/input-image-alt`](https://void-design.vercel.app/rules/a11y/input-image-alt.md) | error | Image button has no alt text |
| [`a11y/html-has-lang`](https://void-design.vercel.app/rules/a11y/html-has-lang.md) | error | <html> has no lang attribute |
| [`a11y/html-lang-valid`](https://void-design.vercel.app/rules/a11y/html-lang-valid.md) | error | <html lang> is not a valid language tag |
| [`a11y/document-title`](https://void-design.vercel.app/rules/a11y/document-title.md) | error | Page has no <title> |
| [`a11y/landmark-one-main`](https://void-design.vercel.app/rules/a11y/landmark-one-main.md) | warn | Page has no <main> landmark |
| [`a11y/region`](https://void-design.vercel.app/rules/a11y/region.md) | warn | Content is outside landmark regions |
| [`a11y/landmark-unique`](https://void-design.vercel.app/rules/a11y/landmark-unique.md) | info | Landmarks are not uniquely identifiable |
| [`a11y/page-has-heading-one`](https://void-design.vercel.app/rules/a11y/page-has-heading-one.md) | warn | Page has no level-one heading |
| [`a11y/heading-order`](https://void-design.vercel.app/rules/a11y/heading-order.md) | warn | Heading levels skip |
| [`a11y/empty-heading`](https://void-design.vercel.app/rules/a11y/empty-heading.md) | warn | Heading is empty |
| [`a11y/list`](https://void-design.vercel.app/rules/a11y/list.md) | warn | List contains invalid children |
| [`a11y/listitem`](https://void-design.vercel.app/rules/a11y/listitem.md) | warn | <li> is not inside a list |
| [`a11y/aria-allowed-attr`](https://void-design.vercel.app/rules/a11y/aria-allowed-attr.md) | error | ARIA attribute is not allowed on this role |
| [`a11y/aria-required-attr`](https://void-design.vercel.app/rules/a11y/aria-required-attr.md) | error | Required ARIA attribute is missing |
| [`a11y/aria-required-children`](https://void-design.vercel.app/rules/a11y/aria-required-children.md) | error | ARIA role is missing required children |
| [`a11y/aria-required-parent`](https://void-design.vercel.app/rules/a11y/aria-required-parent.md) | error | ARIA role is missing its required parent |
| [`a11y/aria-roles`](https://void-design.vercel.app/rules/a11y/aria-roles.md) | error | Invalid ARIA role |
| [`a11y/aria-valid-attr`](https://void-design.vercel.app/rules/a11y/aria-valid-attr.md) | error | Invalid ARIA attribute name |
| [`a11y/aria-valid-attr-value`](https://void-design.vercel.app/rules/a11y/aria-valid-attr-value.md) | error | Invalid ARIA attribute value |
| [`a11y/aria-hidden-focus`](https://void-design.vercel.app/rules/a11y/aria-hidden-focus.md) | error | Focusable element inside aria-hidden |
| [`a11y/aria-hidden-body`](https://void-design.vercel.app/rules/a11y/aria-hidden-body.md) | error | aria-hidden on <body> |
| [`a11y/aria-command-name`](https://void-design.vercel.app/rules/a11y/aria-command-name.md) | error | ARIA button/link/menuitem has no accessible name |
| [`a11y/aria-input-field-name`](https://void-design.vercel.app/rules/a11y/aria-input-field-name.md) | error | ARIA input field has no accessible name |
| [`a11y/aria-toggle-field-name`](https://void-design.vercel.app/rules/a11y/aria-toggle-field-name.md) | error | ARIA toggle has no accessible name |
| [`a11y/aria-prohibited-attr`](https://void-design.vercel.app/rules/a11y/aria-prohibited-attr.md) | warn | ARIA attribute is prohibited for this role |
| [`a11y/nested-interactive`](https://void-design.vercel.app/rules/a11y/nested-interactive.md) | error | Interactive controls are nested |
| [`a11y/duplicate-id-aria`](https://void-design.vercel.app/rules/a11y/duplicate-id-aria.md) | error | Duplicate id referenced by ARIA |
| [`a11y/frame-title`](https://void-design.vercel.app/rules/a11y/frame-title.md) | warn | <iframe> has no title |
| [`a11y/svg-img-alt`](https://void-design.vercel.app/rules/a11y/svg-img-alt.md) | error | SVG image has no text alternative |
| [`a11y/role-img-alt`](https://void-design.vercel.app/rules/a11y/role-img-alt.md) | error | role="img" element has no text alternative |
| [`a11y/tabindex`](https://void-design.vercel.app/rules/a11y/tabindex.md) | warn | Positive tabindex |
| [`a11y/scrollable-region-focusable`](https://void-design.vercel.app/rules/a11y/scrollable-region-focusable.md) | warn | Scrollable region is not keyboard accessible |
| [`a11y/link-in-text-block`](https://void-design.vercel.app/rules/a11y/link-in-text-block.md) | warn | Links in text are distinguished only by color |
| [`a11y/autocomplete-valid`](https://void-design.vercel.app/rules/a11y/autocomplete-valid.md) | warn | Invalid autocomplete value |
| [`a11y/meta-viewport`](https://void-design.vercel.app/rules/a11y/meta-viewport.md) | error | Zooming is disabled |
| [`a11y/bypass`](https://void-design.vercel.app/rules/a11y/bypass.md) | warn | No way to skip repeated content |
| [`a11y/video-caption`](https://void-design.vercel.app/rules/a11y/video-caption.md) | error | Video has no captions |
| [`a11y/axe-other`](https://void-design.vercel.app/rules/a11y/axe-other.md) | warn | Other axe-core accessibility violation |
| [`a11y/target-size`](https://void-design.vercel.app/rules/a11y/target-size.md) | warn | Touch target is smaller than 24×24 px |
| [`a11y/focus-not-visible`](https://void-design.vercel.app/rules/a11y/focus-not-visible.md) | error | Keyboard focus is not visible |
| [`a11y/reflow-overflow`](https://void-design.vercel.app/rules/a11y/reflow-overflow.md) | warn | Content overflows horizontally at 320px |
