---
title: Accessibility
description: Every Accessibility rule svelte-vitals runs.
---

{/* rules-index:start */}

ARIA validity, landmark structure, accessible names, and semantic markup: what makes a site usable for everyone.

| Rule                                                                    | Severity   | Summary                                                                                                                                                                           |
| ----------------------------------------------------------------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`a11y/accessible-name`](/rules/a11y/accessible-name)                   | 🟡 warning | A button, link, image button, or iframe needs a way to compute its accessible name.                                                                                               |
| [`a11y/aria-hidden-focus`](/rules/a11y/aria-hidden-focus)               | 🟡 warning | A keyboard-focusable element must not be hidden from assistive technology with aria-hidden="true".                                                                                |
| [`a11y/disallowed-aria-props`](/rules/a11y/disallowed-aria-props)       | 🟡 warning | An aria-\* attribute the element's role does not support is ignored; one the role prohibits, such as a name on a bare div, is a name that is not exposed.                         |
| [`a11y/disallowed-element`](/rules/a11y/disallowed-element)             | 🟡 warning | Reports every occurrence of the elements a project declares it does not want, and nothing until something is declared.                                                            |
| [`a11y/duplicate-landmark`](/rules/a11y/duplicate-landmark)             | 🟡 warning | A route should have at most one main, banner, and contentinfo landmark.                                                                                                           |
| [`a11y/id-duplication`](/rules/a11y/id-duplication)                     | 🟡 warning | Every id in a route should be unique.                                                                                                                                             |
| [`a11y/interactive-nesting`](/rules/a11y/interactive-nesting)           | 🟡 warning | An interactive element should not sit inside another interactive element.                                                                                                         |
| [`a11y/invalid-aria-value`](/rules/a11y/invalid-aria-value)             | 🟡 warning | An aria-\* attribute's value should match the type the WAI-ARIA spec defines for it.                                                                                              |
| [`a11y/invalid-role`](/rules/a11y/invalid-role)                         | 🟡 warning | A role attribute should name a concrete WAI-ARIA role, not a typo or an abstract role.                                                                                            |
| [`a11y/label-has-control`](/rules/a11y/label-has-control)               | 🟡 warning | A label needs a for attribute or a wrapped control to be associated with the field it names.                                                                                      |
| [`a11y/no-accesskey`](/rules/a11y/no-accesskey)                         | 🟡 warning | The accesskey attribute assigns a page-level shortcut key whose actual combination varies by browser and OS, is undiscoverable, and conflicts with assistive-technology bindings. |
| [`a11y/no-autofocus`](/rules/a11y/no-autofocus)                         | 🟡 warning | autofocus moves focus on page load without the user asking, so screen reader users lose the page context they were building and keyboard users are dropped mid-page.              |
| [`a11y/no-missing-id-ref`](/rules/a11y/no-missing-id-ref)               | 🟡 warning | An id reference should point to an id that exists somewhere in the composed route.                                                                                                |
| [`a11y/permitted-contents`](/rules/a11y/permitted-contents)             | 🟡 warning | Every element must be permitted content of its parent, per the HTML content models.                                                                                               |
| [`a11y/placeholder-label-option`](/rules/a11y/placeholder-label-option) | 🟡 warning | A required, single-selection select needs an empty first option so users can't submit it unchanged.                                                                               |
| [`a11y/positive-tabindex`](/rules/a11y/positive-tabindex)               | 🟡 warning | A tabindex above 0 puts the element ahead of every naturally-ordered element on the page, so a single tabindex="1" reorders keyboard navigation globally.                         |
| [`a11y/required-aria-props`](/rules/a11y/required-aria-props)           | 🟡 warning | A role that requires state or property attributes needs them present, unless native host semantics already supply them.                                                           |
| [`a11y/required-element`](/rules/a11y/required-element)                 | 🟡 warning | Every route must contain the elements a project declares, judged on the composed route, so a layout's &lt;main&gt; counts.                                                        |
| [`a11y/top-level-landmark`](/rules/a11y/top-level-landmark)             | 🟡 warning | A banner, main, complementary, or contentinfo landmark should not be nested inside another landmark.                                                                              |
| [`a11y/unknown-aria-attribute`](/rules/a11y/unknown-aria-attribute)     | 🟡 warning | An aria-\* attribute should name a real WAI-ARIA attribute, not a typo.                                                                                                           |
| [`a11y/abbr-title`](/rules/a11y/abbr-title)                             | 🔵 info    | An &lt;abbr&gt; without a title gives readers no expansion. Visual users get no tooltip and assistive technology has nothing to expand.                                           |
| [`a11y/deprecated-aria`](/rules/a11y/deprecated-aria)                   | 🔵 info    | A role or aria-\* attribute ARIA 1.3 has deprecated, globally or on the role it sits on, still works today and is no longer defined there.                                        |
| [`a11y/deprecated-attr`](/rules/a11y/deprecated-attr)                   | 🔵 info    | An attribute the HTML spec data marks deprecated on this element has its behavior defined by legacy compatibility, not by the standard.                                           |
| [`a11y/deprecated-element`](/rules/a11y/deprecated-element)             | 🔵 info    | An element in the HTML standard's obsolete-features list is non-conforming and has a conforming replacement.                                                                      |
| [`a11y/doctype`](/rules/a11y/doctype)                                   | 🔵 info    | src/app.html should open with &lt;!doctype html&gt;.                                                                                                                              |
| [`a11y/no-duplicate-dt`](/rules/a11y/no-duplicate-dt)                   | 🔵 info    | Within a single dl element there should not be more than one dt element for each name; a duplicated term usually means two descriptions were meant to share one dt.               |
| [`a11y/pattern-title`](/rules/a11y/pattern-title)                       | 🔵 info    | When an input has a pattern, the spec says authors should include a title describing the expected format; without it a failed submit tells the user only that the value is wrong. |
| [`a11y/require-datetime`](/rules/a11y/require-datetime)                 | 🔵 info    | A time element's text should be machine-readable, or a datetime attribute should supply the machine-readable value.                                                               |
| [`a11y/unverified-id-ref`](/rules/a11y/unverified-id-ref)               | 🔵 info    | Opt-in: flags id references that cannot be verified on routes whose composition is not fully resolved.                                                                            |
| [`a11y/use-list`](/rules/a11y/use-list)                                 | 🔵 info    | A bullet character typed into plain text should be a real list element instead.                                                                                                   |

{/* rules-index:end */}

See [Configuration](/guides/configuration) to change a rule's severity or turn it off.
