Rules

Every rule maps to one or more WCAG 2.1 success criteria. Rules without a WCAG mapping are tagged as best practices.

Rule ID WCAG Level Description
accesslint-001 2.4.2 A Documents must have a <title> element to provide users with an overview of content.
accesslint-002 Best practice A Page must have a mechanism to bypass repeated blocks of content.
accesslint-003 Best practice A Page should contain a level-one heading.
accesslint-004 4.1.2 A Frames must have an accessible name.
accesslint-005 4.1.2 A Frame titles should be unique.
accesslint-006 1.4.4 AA Viewport meta tag must not disable user scaling.
accesslint-007 2.2.1 A Meta refresh must not redirect or refresh automatically.
accesslint-008 2.2.1 A Meta refresh must not be used with a delay (no exceptions).
accesslint-009 2.2.2 A The <blink> element must not be used.
accesslint-010 2.2.2 A The <marquee> element must not be used.
accesslint-011 1.1.1 A Images must have alternate text. Add an alt attribute to <img> elements. Decorative images may use an empty alt attribute (alt=""), role='none', or role='presentation'.
accesslint-012 1.1.1 A SVG elements with an img, graphics-document, or graphics-symbol role must have an accessible name via a <title> element, aria-label, or aria-labelledby.
accesslint-013 1.1.1, 4.1.2 A Image inputs (<input type="image">) must have alternate text via alt, aria-label, or aria-labelledby. The text should describe the button action, not the image.
accesslint-014 Best practice A Image alt text should not duplicate adjacent link or button text. When alt text repeats surrounding text, screen reader users hear the same information twice.
accesslint-015 Best practice A Image alt text should not contain words like 'image', 'photo', or 'picture' — screen readers already announce the element type.
accesslint-016 1.1.1, 4.1.2 A Image map <area> elements must have alternative text.
accesslint-017 1.1.1 A <object> elements must have alternative text.
accesslint-018 1.1.1 A Elements with role='img' must have an accessible name.
accesslint-019 2.1.1 A Server-side image maps must not be used.
accesslint-020 4.1.2 A Form elements must have labels. Use <label>, aria-label, or aria-labelledby.
accesslint-021 Best practice A Form fields should not have multiple label elements.
accesslint-022 4.1.2 A Select elements must have a programmatically associated label via <label>, aria-label, or aria-labelledby.
accesslint-023 4.1.2 A Input buttons must have discernible text via value, aria-label, or aria-labelledby.
accesslint-024 1.3.5 AA Autocomplete attribute must use valid values from the HTML specification.
accesslint-025 Best practice A Interactive elements with visible text must have accessible names that contain that text.
accesslint-026 Best practice A Form elements should not use title attribute as the only accessible name.
accesslint-027 Best practice A Elements should not have tabindex greater than 0, which disrupts natural tab order.
accesslint-028 Best practice A Elements that receive keyboard focus must have an appropriate role so assistive technologies can convey their purpose. Non-interactive elements with tabindex='0' need a valid interactive ARIA role.
accesslint-029 4.1.2 A Interactive controls must not be nested inside each other.
accesslint-030 2.1.1 A Scrollable regions must be keyboard accessible.
accesslint-031 Best practice A Accesskey attribute values must be unique.
accesslint-032 2.4.7 AA Elements in sequential focus order must have a visible focus indicator.
accesslint-033 Best practice A Heading levels should increase by one; skipping levels (e.g. h2 to h4) makes navigation harder.
accesslint-034 Best practice A Headings must have discernible text.
accesslint-035 Best practice A Paragraphs should not be styled to look like headings.
accesslint-036 Best practice A Page should have exactly one main landmark.
accesslint-037 Best practice A Page should not have more than one banner landmark.
accesslint-038 Best practice A Page should not have more than one contentinfo landmark.
accesslint-039 Best practice A Page should not have more than one main landmark.
accesslint-040 Best practice A Banner landmark should not be nested within another landmark.
accesslint-041 Best practice A Contentinfo landmark should not be nested within another landmark.
accesslint-042 Best practice A Main landmark should not be nested within another landmark.
accesslint-043 Best practice A Aside (complementary) landmark should be top-level or directly inside main.
accesslint-044 Best practice A Landmarks should have unique labels when there are multiple of the same type.
accesslint-045 Best practice A All page content should be contained within landmarks.
accesslint-046 1.3.1 A <ul> and <ol> must only contain <li>, <script>, or <template> as direct children.
accesslint-047 1.3.1 A <li> elements must be contained in a <ul>, <ol>, or <menu>.
accesslint-048 1.3.1 A <dt> and <dd> elements must be contained in a <dl>.
accesslint-049 1.3.1 A <dl> elements must only contain <dt>, <dd>, <div>, <script>, or <template>.
accesslint-050 1.4.12 AA Letter spacing set with !important in style attributes must be at least 0.12em.
accesslint-051 1.4.12 AA Line height set with !important in style attributes must be at least 1.5.
accesslint-052 1.4.12 AA Word spacing set with !important in style attributes must be at least 0.16em.
accesslint-053 1.3.4 AA Page orientation must not be restricted using CSS transforms.
accesslint-054 4.1.2 A ARIA role values must be valid.
accesslint-055 4.1.2 A ARIA attributes must be valid (correctly spelled).
accesslint-056 4.1.2 A ARIA attributes must have valid values.
accesslint-057 4.1.2 A Elements with ARIA roles must have all required ARIA attributes.
accesslint-058 4.1.2 A ARIA attributes must be allowed for the element's role.
accesslint-059 4.1.2 A ARIA role must be appropriate for the element.
accesslint-060 1.3.1 A Certain ARIA roles require specific child roles to be present.
accesslint-061 1.3.1 A Certain ARIA roles must be contained within specific parent roles.
accesslint-062 4.1.2 A aria-hidden='true' must not be present on the document body.
accesslint-063 4.1.2 A Elements with aria-hidden='true' must not contain focusable elements.
accesslint-064 4.1.2 A ARIA commands must have an accessible name.
accesslint-065 4.1.2 A ARIA input fields must have an accessible name.
accesslint-066 4.1.2 A ARIA toggle fields must have an accessible name.
accesslint-067 4.1.2 A ARIA meter elements must have an accessible name.
accesslint-068 4.1.2 A ARIA progressbar elements must have an accessible name.
accesslint-069 4.1.2 A ARIA dialogs must have an accessible name.
accesslint-070 4.1.2 A ARIA tooltips must have an accessible name.
accesslint-071 4.1.2 A ARIA treeitem elements must have an accessible name.
accesslint-072 4.1.2 A ARIA attributes must not be prohibited for the element's role.
accesslint-073 4.1.2 A Elements with role='presentation' or role='none' must not be focusable or have global ARIA attributes.
accesslint-074 4.1.2 A Elements with a role that makes children presentational must not contain focusable content.
accesslint-075 4.1.2 A Buttons must have discernible text.
accesslint-076 4.1.2 A <summary> elements must have an accessible name.
accesslint-077 2.4.4, 4.1.2 A Links must have discernible text via content, aria-label, or aria-labelledby.
accesslint-078 2.4.1 A Skip links must point to a valid target on the page.
accesslint-079 1.4.1 A Links within text blocks must be distinguishable by more than color alone.
accesslint-080 3.1.1 A The <html> element must have a lang attribute.
accesslint-081 3.1.1 A The lang attribute on <html> must have a valid value.
accesslint-082 3.1.2 AA The lang attribute must have a valid value on all elements.
accesslint-083 3.1.1 A The lang and xml:lang attributes on <html> must match.
accesslint-084 1.3.1 A All cells in a table using headers attribute must reference valid header IDs.
accesslint-085 1.3.1 A Table headers should be associated with data cells.
accesslint-086 1.3.1 A Data cells in tables larger than 3x3 should have associated headers.
accesslint-087 1.3.1 A The scope attribute on table headers must have a valid value.
accesslint-088 Best practice A Table header cells should have visible text.
accesslint-089 4.1.2 A IDs used in ARIA and label associations must be unique to avoid broken references.
accesslint-090 1.2.2 A Video elements must have captions via <track kind='captions'>.
accesslint-091 1.2.1 A Audio elements should have a text alternative or transcript.
accesslint-092 1.4.3 AA Text elements must have sufficient color contrast against the background.
accesslint-093 1.4.6 AAA Text elements must have enhanced color contrast against the background (WCAG AAA).

93 rules