BarrierLab

Rule IDs

All finding IDs from a11y-rules with tier, WCAG criterion and default severity.

The IDs are stable across all surfaces. The tables reproduce the declarations returned by structure_metas, semantics_metas, rendering_metas and stylesheet_metas; examples/a11y/rules.json is their output. The severity is the rule’s default; individual findings may deviate from it. Each row has an anchor: the ID with / replaced by - (images/alt-missing is #images-alt-missing). a11y-static sets it as help_url on its findings.

a11y-rules 0.30.0 declares 168 IDs.

Tier 1: Structure

107 IDs, Document, runs on every host.

IDWCAGSeverityRule hint
document/lang-missing3.1.1highThe <html> element needs a valid lang attribute.
document/lang-invalid3.1.1highThe <html> element needs a valid lang attribute.
document/title-missing2.4.2highEvery page needs a meaningful <title>.
document/title-empty2.4.2highEvery page needs a meaningful <title>.
zoom/viewport-locked1.4.4highA viewport must be present and must not prevent zooming.
zoom/viewport-scale-limited1.4.4highA viewport must be present and must not prevent zooming.
zoom/viewport-missing1.4.4highA viewport must be present and must not prevent zooming.
headings/empty1.3.1, 2.4.1, 2.4.6mediumHeadings form the outline; do not skip levels.
headings/skip-level1.3.1, 2.4.1, 2.4.6mediumHeadings form the outline; do not skip levels.
headings/h1-missing1.3.1, 2.4.1, 2.4.6mediumHeadings form the outline; do not skip levels.
headings/h1-multiple1.3.1, 2.4.1, 2.4.6mediumHeadings form the outline; do not skip levels.
headings/none1.3.1, 2.4.1, 2.4.6mediumHeadings form the outline; do not skip levels.
images/alt-missing1.1.1highInformative images need descriptive alt text.
images/alt-suspicious1.1.1highInformative images need descriptive alt text.
forms/label-missing1.3.1, 3.3.2, 4.1.2criticalEvery input needs an associated label.
forms/placeholder-as-label1.3.1, 3.3.2, 4.1.2criticalEvery input needs an associated label.
aria/role-invalid4.1.2highUse only roles from the ARIA specification.
aria/role-abstract4.1.2highUse only roles from the ARIA specification.
aria/reference-missing1.3.1, 4.1.2highARIA references must point to IDs that exist.
aria/required-attribute-missing4.1.2highA role that announces a state needs the attribute carrying it.
ids/duplicate4.1.2mediumAn ID that another element references must be unique.
keyboard/positive-tabindex2.4.3highPositive tabindex values break the tab order.
keyboard/hidden-focusable1.3.1, 4.1.2highFocusable elements must not be aria-hidden.
lists/invalid-structure1.3.1medium<ul> and <ol> may only have <li> as direct children and must not be empty; a list item must stand inside a list.
lists/empty1.3.1medium<ul> and <ol> may only have <li> as direct children and must not be empty; a list item must stand inside a list.
lists/item-outside-list1.3.1medium<ul> and <ol> may only have <li> as direct children and must not be empty; a list item must stand inside a list.
lists/term-without-definition1.3.1medium<ul> and <ol> may only have <li> as direct children and must not be empty; a list item must stand inside a list.
tables/header-missing1.3.1highData tables need <th> header cells.
tables/name-missing1.3.1highData tables need <th> header cells.
tables/presentational-with-headers1.3.1highData tables need <th> header cells.
landmarks/main-missing1.3.1, 2.4.1highLandmarks structure the page for everyone who cannot see it.
landmarks/main-duplicate1.3.1, 2.4.1highLandmarks structure the page for everyone who cannot see it.
landmarks/navigation-missing1.3.1, 2.4.1highLandmarks structure the page for everyone who cannot see it.
landmarks/banner-missing1.3.1, 2.4.1highLandmarks structure the page for everyone who cannot see it.
landmarks/contentinfo-missing1.3.1, 2.4.1highLandmarks structure the page for everyone who cannot see it.
keyboard/skip-link-missing2.4.1mediumA skip link bypasses blocks that repeat before the content.
aria/attribute-unknown4.1.2highUse only aria-* attributes defined by WAI-ARIA.
aria/attribute-value-invalid4.1.2highARIA attributes need a value of their type.
aria/owns-conflict4.1.2highAn element may be owned by only one aria-owns.
aria/tab-selected-missing1.3.1, 4.1.2mediumTabs mark the selected tab; an expanded combobox references its popup.
aria/tabpanel-missing1.3.1, 4.1.2mediumTabs mark the selected tab; an expanded combobox references its popup.
aria/combobox-popup-missing1.3.1, 4.1.2mediumTabs mark the selected tab; an expanded combobox references its popup.
popover/target-missing4.1.2mediumpopovertarget must reference an element with the popover attribute.
popover/target-invalid4.1.2mediumpopovertarget must reference an element with the popover attribute.
inert/dialog-inert2.1.1, 4.1.2highAn open dialog must not be inert.
manual/media-alternatives1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/image-alternatives1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/visual-structure1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/use-of-color1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/timing1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/error-handling1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/authentication1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/pointer-gestures1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/no-timing1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/interruptions1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/re-authenticating1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/unusual-words1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/help1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/dragging-movements1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/consistent-help1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/keyboard-trap1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/character-shortcuts1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/error-prevention1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/pointer-cancellation1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/consistent-navigation1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/consistent-identification1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/sensory-characteristics1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/multiple-ways1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/text-spacing1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/content-on-hover-focus1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1, 1.3.3, 1.4.1, 1.4.12, 1.4.13, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.2.4, 2.2.5, 2.4.5, 2.5.1, 2.5.2, 2.5.7, 3.1.3, 3.2.3, 3.2.4, 3.2.6, 3.3.1, 3.3.3, 3.3.4, 3.3.5, 3.3.8mediumCriteria no machine can decide. Each appears once per page when the page contains something it applies to, as UNTESTED — a checklist, not a verdict.
manual/motion-actuation2.5.4mediumChecklist item for motion actuation, shown when an inline script listens to device motion or orientation.
forms/autocomplete-invalid1.3.5lowautocomplete must use the autofill tokens of the HTML standard.
forms/error-unidentified3.3.1mediumA field marked aria-invalid needs an error description via aria-describedby or aria-errormessage.
forms/group-missing1.3.1mediumRadio buttons and checkboxes sharing a name belong in a fieldset with legend or a named group.
forms/no-submit3.2.2mediumA form that collects input needs an explicit submit control.
forms/redundant-entry3.3.7mediumInformation entered once is prefilled, autofillable or selectable when asked again.
context/on-input3.2.2mediumChanging a selection must not submit, navigate or open a window by itself.
context/on-focus3.2.1highReceiving focus must not change the context.
context/autofocus3.2.1highReceiving focus must not change the context.
auth/captcha3.3.8mediumA CAPTCHA in a sign-in form needs an alternative without a cognitive function test.
keyboard/click-handler-not-focusable2.1.1highAn element with a click handler must be a control: a <button> or <a href>, or a role and tabindex with keyboard handling.
links/used-as-button4.1.2lowA link that triggers an action instead of navigating should be a <button>.
navigation/location-missing2.4.8lowShow users where they are: a breadcrumb trail or aria-current=“page” in the navigation.
images/area-alt-missing1.1.1highAn image map <area> with href needs alt text naming its target.
images/input-alt-missing1.1.1highAn <input type="image"> needs alt text describing its action.
images/server-side-map2.1.1mediumDo not use server-side image maps (ismap); use a client-side map or text links.
objects/alt-missing1.1.1highAn <object> needs a text alternative: fallback content, aria-label or title.
media/audio-autoplay1.4.2mediumAudio that plays automatically must stop within three seconds or be pausable.
viz/text-missing1.1.1highEvery visualisation (figure[data-viz]) needs a non-empty text layer [data-viz-text] with its statement.
display/text-hidden1.1.1highNever put hidden, aria-hidden=“true” or inert on [data-viz-text] or its ancestors; hide it visually instead.
viz/caption-missing1.1.1lowEvery visualisation (figure[data-viz]) needs a <figcaption> that names it.
viz/static-missing2.2.2mediumA 3d or interactive visualisation needs a still image [data-viz-static] for calm mode.
viz/table-missing1.3.1lowA chart (data-viz=“chart”) should give its values as a <table>.
display/toggle-missing2.2.2mediumA page with visualisations needs a display-mode toggle marked [data-display-toggle].
display/init-missing2.2.2lowSet html[data-display] in a small blocking script in <head>, before <body>.
tables/header-without-data1.3.1highHeader cells need data cells to label; a table of headers only labels nothing.
tables/data-undetermined1.3.1highHeader cells need data cells to label; a table of headers only labels nothing.
tables/headers-attr-invalid1.3.1highThe headers attribute of a cell must list the ids of header cells in the same table.
document/lang-mismatch3.1.1mediumlang and xml:lang on <html> must name the same language.
language/part-unmarked3.1.2mediumA passage in another language than the page needs its own lang attribute.
language/part-undetermined3.1.2mediumA passage in another language than the page needs its own lang attribute.
language/abbreviation-unexpanded3.1.4lowMake the expansion of an abbreviation available, e.g. in the title of <abbr>.
timing/meta-refresh2.2.1highDo not reload or redirect with a delayed <meta http-equiv="refresh">; redirect on the server or let users trigger it.
headings/section-without-heading2.4.10lowGive articles and named sections a heading so users can find their content.
aria/role-redundant–lowDo not set a role the element already has implicitly.
names/title-only4.1.2mediumDo not rely on the title attribute as a control’s only name.
patterns/tooltip-unreferenced–lowReference a role=“tooltip” from its trigger with aria-describedby.

Tier 2: Semantics

35 IDs, needs Semantics, i.e. role and accessible name.

IDWCAGSeverityRule hint
links/name-missing2.4.4, 4.1.2criticalEvery link needs a name that describes its target.
buttons/name-missing4.1.2criticalEvery button needs a name that describes what it does.
svg/name-missing1.1.1highInformative SVGs need a name, decorative ones role=“presentation”.
links/ambiguous-name2.4.4mediumLinks with the same name should point to the same target.
links/generic-name2.4.4mediumLink text should say where it leads without the surrounding sentence.
links/url-name2.4.4lowA bare address as link text does not say what the target contains.
links/single-character-name2.4.4mediumA single character does not name a link’s target.
links/new-window-unannounced3.2.5lowSay in the link text when a link opens a new window or tab.
links/purpose-link-only2.4.9lowThe link text alone should name the link’s purpose.
aria/attribute-not-allowed4.1.2highUse only ARIA attributes the element’s role supports.
aria/attribute-prohibited4.1.2highUse only ARIA attributes the element’s role supports.
aria/required-parent-missing1.3.1, 4.1.2highRoles that belong together must be nested as WAI-ARIA requires.
aria/required-children-missing1.3.1, 4.1.2highRoles that belong together must be nested as WAI-ARIA requires.
names/required-missing1.1.1, 4.1.2highElements whose role requires a name (fields, toggles, menu items, meters, …) need one.
names/symbol-only4.1.2mediumAn accessible name should be words, not a single symbol.
dialog/name-missing4.1.2highEvery dialog needs a name, usually via aria-labelledby on its heading.
dialog/modal-unmarked4.1.2mediumA modal dialog should carry aria-modal=“true”.
summary/name-missing4.1.2highThe <summary> of a <details> element needs text.
status/live-overridden4.1.3highLive regions should keep the aria-live their role implies.
label-in-name/mismatch2.5.3mediumThe accessible name must contain the visible label text.
forms/purpose-missing1.3.5mediumFields asking for information about the user carry the matching autocomplete token.
forms/required-unmarked3.3.2mediumRequired fields and expected formats are stated in the label or description.
forms/instructions-missing3.3.2mediumRequired fields and expected formats are stated in the label or description.
forms/title-only-label1.3.1mediumA field should have a visible label, not only a title attribute.
forms/group-name-missing1.3.1, 3.3.2mediumA fieldset needs a legend, a form group a name.
landmarks/not-unique1.3.1mediumLandmarks of the same role should have distinct names.
landmarks/not-top-level–mediumbanner, contentinfo and main belong at the top level; banner and contentinfo at most once.
landmarks/banner-duplicate–mediumbanner, contentinfo and main belong at the top level; banner and contentinfo at most once.
landmarks/contentinfo-duplicate–mediumbanner, contentinfo and main belong at the top level; banner and contentinfo at most once.
landmarks/content-outside–mediumAll content belongs inside a landmark.
keyboard/focusable-no-role2.1.1highInteractive roles must be focusable; focusable elements need an interactive role.
keyboard/interactive-not-focusable2.1.1highInteractive roles must be focusable; focusable elements need an interactive role.
dialog/focusable-missing2.4.3mediumA dialog needs at least one focusable element.
patterns/accordion-controls-missing4.1.2lowAn expanded button should reference the region it controls with aria-controls.
frames/name-missing4.1.2highEvery iframe needs a name, usually a title saying what it contains.

Tier 3: Rendering

21 IDs, needs Rendering, i.e. computed styles and geometry.

IDWCAGSeverityRule hint
contrast/text-insufficient1.4.3highText needs a contrast ratio against its background of at least 4.5:1, or 3:1 for large text. Large text starts at 18 pt, or 14 pt when bold.
contrast/text-undetermined1.4.3highText needs a contrast ratio against its background of at least 4.5:1, or 3:1 for large text. Large text starts at 18 pt, or 14 pt when bold.
contrast/text-enhanced1.4.6mediumEnhanced contrast (AAA): at least 7:1, or 4.5:1 for large text.
contrast/control-insufficient1.4.11mediumA custom-drawn checkbox, radio button, switch or slider (appearance: none) needs a boundary with a contrast ratio of at least 3:1 against its background.
contrast/control-undetermined1.4.11mediumA custom-drawn checkbox, radio button, switch or slider (appearance: none) needs a boundary with a contrast ratio of at least 3:1 against its background.
order/visual-mismatch1.3.2, 2.4.3mediumVisual order and tab order should match; CSS reordering (flex-direction: *-reverse, order) over focusable content is a hint they do not.
motion/infinite-animation2.2.2mediumMovement that lasts longer than five seconds needs a way to pause, stop or hide it.
reflow/min-width1.4.10mediumContent must reflow at 320 CSS pixels wide; a min-width above that forces horizontal scrolling.
keyboard/pointer-only2.1.1, 4.1.2highWhatever reacts to a click must be a control: a <button> or <a>, or a role and tabindex with keyboard handling.
focus/obscured2.4.11mediumA focused control must not be entirely hidden by fixed or sticky content. Seen: the bits obscured and hides_focus, and, when the host ran a focus pass, Rendering::focus_cover (sample points under fixed or sticky elements after the host focused and scrolled the control); the probe replaces the static bit for that control. Sampling approximates “entirely”, so the result stays a review. Which scroll a real Tab produces is not settled; the host records how it scrolled.
targets/size2.5.8mediumTargets need at least 24 × 24 CSS pixels, or enough spacing to their neighbours.
targets/size-enhanced2.5.5lowEnhanced target size (AAA): targets of at least 44 × 44 CSS pixels.
focus/indicator-missing2.4.7highKeyboard focus must be visible on every control.
lists/role-redundant–lowrole=“list” on a <ul> or <ol> is only needed when list-style-type is none.
color/link-indistinct1.4.1mediumA link in running text needs more than colour to stand out: an underline, or a different weight, style, border or background.
keyboard/scrollable-region-not-focusable2.1.1highA scrollable region needs keyboard access: tabindex=“0” on the region or a focusable element inside it.
text-spacing/clipped1.4.12mediumNo content or function may be lost when line height is at least 1.5, paragraph spacing 2, letter spacing 0.12 and word spacing 0.16 times the font size. Seen: text that hidden overflow newly cuts off after the host applied that override (Rendering::text_spacing_clip, a before/after pair; already clipped boxes are not findings). Overlapping text and content that disappears in other ways are not detected, so the result is a review. If the host could not apply the override (for example blocked by a CSP style-src), the rule does not run.
focus/obscured-enhanced2.4.12lowEnhanced (AAA): no part of a focused control may be hidden by fixed or sticky content. Seen: Rendering::focus_cover, sample points under such an element after the host focused and scrolled the control; any covered point is reported. Sampling approximates “any part”, so the result is a review. Without a focus pass the rule does not run: static geometry is not a probe.
auth/paste-blocked3.3.8highA password or one-time-code field must accept pasted text, so that a password manager can fill it: a handler that cancels the paste event without inserting the text itself blocks it. Seen: a synthetic, cancelable paste event the host dispatched; it is not trusted (isTrusted is false), so a handler that reacts only to trusted events or to key presses is not seen. autocomplete=“off” on a password field is not a finding: browsers ignore it.
orientation/root-rotated1.3.4highA page that rotates its root (html or body) by a quarter turn to force one display orientation fails 1.3.4. Seen: the computed transform matrix and the rotate property of html and body, in the one viewport the host measured; a lock that applies only in the other orientation needs a second snapshot there (RuleRun::in_viewport). That an orientation is essential is a human judgement.
frames/cross-origin–lowA frame whose document the tool cannot read (cross-origin, or still navigating) was not tested. Not a conformance check and tied to no success criterion: a coverage note. Frames that are presentational, hidden or 1 px or smaller are skipped.

Stylesheets

5 IDs, needs the page’s parsed stylesheets and runs via run_stylesheets.

IDWCAGSeverityRule hint
focus/outline-removed2.4.7highKeep a visible focus indicator: do not remove the outline on :focus without a replacement, or limit the removal to :focus:not(:focus-visible).
motion/reduced-motion-ignored2.3.3mediumSwitch off movement under @media (prefers-reduced-motion: reduce).
orientation/content-hidden1.3.4mediumContent must work in portrait and landscape; do not hide or rotate it per orientation.
text/justified1.4.8lowRunning text: no justified alignment, line height at least 1.5.
text/line-height-tight1.4.8lowRunning text: no justified alignment, line height at least 1.5.

review instead of fail

Not every missing item is a violation. landmarks/navigation-missing, landmarks/banner-missing, landmarks/contentinfo-missing, headings/h1-multiple and keyboard/skip-link-missing return review: main must be present, but a page may do without navigation, and a skip link can only be recognized by its link text and class names. links/ambiguous-name and links/generic-name are two different rules and both return review: one says “two links have the same name but go to different places”, the other “this text says nothing about the destination on its own”.

Edit this page on GitHub