The rule catalogue of the accessibility scanner
The catalogue lists every rule Validiscan’s scanner knows, the rules of axe-core and Validiscan’s own checks, with the WCAG criteria each one tests, its impact, its fix tier and whether it runs in a scan.
What the catalogue holds
- entries in the catalogue
- 128
- rules of axe-core
- 105
- checks Validiscan wrote
- 23
- run in a scan
- 102
The catalogue has 128 entries: 105 rules of axe-core, the open-source rule engine by Deque Systems, and 23 checks Validiscan wrote for what axe-core does not test, such as keyboard traps, focus order, target size and cookie banners. Of all entries, 102 run in a scan.
A rule that runs can still miss a failure, and many WCAG success criteria cannot be decided by a rule at all. The criteria matrix shows, for each success criterion, which rules test it and the manual check for it where the checklist has one.
How to read an entry
What the status says
- runs: the scanner runs the rule on the pages it scans.
- superseded: one of Validiscan’s own checks covers what the axe-core rule tests, so the scanner switches the axe-core rule off and one element never gives two findings. 11 rules are superseded.
- not run: axe-core marks the rule experimental or deprecated, or the rule only tests level AAA, which is not part of the WCAG 2.2 AA target. 15 rules are not run.
Impact and fix tier
The impact is the rule’s default severity: critical, serious, moderate or minor. The fix tier says how a failure of the rule is fixed on Shopify, Shopware, WooCommerce and Magento, in the application’s own words:
- AUTO
- A deterministic recipe changes the theme source.
- ASSISTED
- An AI-drafted change that the operator reviews before delivery.
- MANUAL
- Guidance only: a content or design decision someone has to make.
The operator in these words is Validiscan, which reviews every change before it is delivered. AI drafting is off by default and is switched on for a shop only once the merchant has agreed.
The entries
A rule that runs, and that is one of Validiscan’s own checks or is fixed by a recipe of the fix engine, has a page of its own when there is enough to say about it. Its id in the catalogue links to that page.
Go to a rule: all 128 rule ids
| Rule | What it checks | WCAG | Impact | Tier | Status |
|---|---|---|---|---|---|
| vs-accessible-auth Validiscan check | Login must not depend on a cognitive test without an alternative | 3.3.8 | Serious | ASSISTED | runs |
| vs-carousel Validiscan check | Auto-advancing carousels need a pause control and keyboard access | 2.2.2, 2.1.1, 4.1.2 | Serious | AUTO | runs |
| vs-consistent-help Validiscan check | Help and contact options must appear in the same place on every page | 3.2.6 | Moderate | ASSISTED | runs |
| vs-cookie-banner Validiscan check | Cookie banner must be keyboard operable and manage focus correctly | 2.1.1, 2.1.2, 2.4.3, 4.1.2 | Critical | ASSISTED | runs |
| vs-documents Validiscan check | Linked documents need a manual accessibility review | none | Minor | MANUAL | runs |
| vs-dragging Validiscan check | Drag-only controls need a single-pointer alternative | 2.5.7 | Serious | MANUAL | runs |
| vs-focus-obscured Validiscan check | Focused elements must not be hidden by sticky headers or overlays | 2.4.11 | Serious | ASSISTED | runs |
| vs-focus-order Validiscan check | Focus order must follow the visual order | 2.4.3 | Moderate | MANUAL | runs |
| vs-focus-visible Validiscan check | Keyboard focus must be visible | 2.4.7 | Serious | AUTO | runs |
| vs-forms-ecommerce Validiscan check | Checkout, address and login fields need labels, autocomplete and linked errors | 1.3.5, 3.3.1, 3.3.2 | Critical | AUTO | runs |
| vs-headings-landmarks Validiscan check | Pages need a heading structure, landmarks and a skip link | 1.3.1, 2.4.1 | Moderate | AUTO | runs |
| vs-hover-focus-contrast Validiscan check | Buttons and links must keep enough contrast on hover and focus | 1.4.3, 1.4.11 | Serious | ASSISTED | runs |
| vs-keyboard-trap Validiscan check | Keyboard focus must never get trapped | 2.1.2 | Critical | MANUAL | runs |
| vs-lang Validiscan check | Page language must be declared and match the content | 3.1.1 | Moderate | AUTO | runs |
| vs-link-purpose Validiscan check | Link text must describe where the link goes | 2.4.4 | Moderate | ASSISTED | runs |
| vs-live-updates Validiscan check | Price, variant, stock and cart updates must be announced | 4.1.3 | Serious | AUTO | runs |
| vs-media Validiscan check | Video needs captions, audio needs a transcript, and nothing may autoplay with sound | 1.2.1, 1.2.2, 1.4.2 | Moderate | MANUAL | runs |
| vs-motion Validiscan check | Animations should respect the reduced-motion setting | best practice | Minor | AUTO | runs |
| vs-product-images Validiscan check | Product images need meaningful alternative text | 1.1.1 | Serious | ASSISTED | runs |
| vs-redundant-entry Validiscan check | Customers must not have to re-enter information they already provided | 3.3.7 | Moderate | ASSISTED | runs |
| vs-reflow Validiscan check | Content must reflow at 320 CSS pixels without horizontal scrolling | 1.4.10 | Serious | ASSISTED | runs |
| vs-target-size Validiscan check | Interactive targets must be at least 24 by 24 CSS pixels | 2.5.8 | Serious | AUTO | runs |
| vs-text-spacing Validiscan check | Text must stay readable with increased text spacing | 1.4.12 | Moderate | ASSISTED | runs |
accesskeys axe-core 4.13.0 | accesskey attribute value should be unique | best practice | Serious | ASSISTED | runs |
area-alt axe-core 4.13.0 | Active <area> elements must have alternative text | 2.4.4, 4.1.2 | Critical | ASSISTED | runs |
aria-allowed-attr axe-core 4.13.0 | Elements must only use supported ARIA attributes | 4.1.2 | Critical | ASSISTED | runs |
aria-allowed-role axe-core 4.13.0 | ARIA role should be appropriate for the element | best practice | Minor | ASSISTED | runs |
aria-braille-equivalent axe-core 4.13.0 | aria-braille attributes must have a non-braille equivalent | 4.1.2 | Serious | ASSISTED | runs |
aria-command-name axe-core 4.13.0 | ARIA commands must have an accessible name | 4.1.2 | Serious | ASSISTED | runs |
aria-conditional-attr axe-core 4.13.0 | ARIA attributes must be used as specified for the element's role | 4.1.2 | Serious | ASSISTED | runs |
aria-deprecated-role axe-core 4.13.0 | Deprecated ARIA roles must not be used | 4.1.2 | Minor | ASSISTED | runs |
aria-dialog-name axe-core 4.13.0 | ARIA dialog and alertdialog nodes should have an accessible name | best practice | Serious | ASSISTED | runs |
aria-input-field-name axe-core 4.13.0 | ARIA input fields must have an accessible name | 4.1.2 | Serious | ASSISTED | runs |
aria-meter-name axe-core 4.13.0 | ARIA meter nodes must have an accessible name | 1.1.1 | Serious | ASSISTED | runs |
aria-progressbar-name axe-core 4.13.0 | ARIA progressbar nodes must have an accessible name | 1.1.1 | Serious | ASSISTED | runs |
aria-prohibited-attr axe-core 4.13.0 | Elements must only use permitted ARIA attributes | 4.1.2 | Serious | ASSISTED | runs |
aria-required-attr axe-core 4.13.0 | Required ARIA attributes must be provided | 4.1.2 | Critical | ASSISTED | runs |
aria-required-children axe-core 4.13.0 | Certain ARIA roles must contain particular children | 1.3.1 | Critical | ASSISTED | runs |
aria-required-parent axe-core 4.13.0 | Certain ARIA roles must be contained by particular parents | 1.3.1 | Critical | ASSISTED | runs |
aria-roledescription axe-core 4.13.0 | aria-roledescription must be on elements with a semantic role | 4.1.2 | Serious | ASSISTED | not run: deprecated in axe-core |
aria-roles axe-core 4.13.0 | ARIA roles used must conform to valid values | 4.1.2 | Critical | ASSISTED | runs |
aria-tab-name axe-core 4.13.0 | ARIA tab nodes must have an accessible name | 4.1.2 | Serious | ASSISTED | runs |
aria-text axe-core 4.13.0 | "role=text" should have no focusable descendants | best practice | Serious | ASSISTED | runs |
aria-toggle-field-name axe-core 4.13.0 | ARIA toggle fields must have an accessible name | 4.1.2 | Serious | ASSISTED | runs |
aria-tooltip-name axe-core 4.13.0 | ARIA tooltip nodes must have an accessible name | 4.1.2 | Serious | ASSISTED | runs |
aria-treeitem-name axe-core 4.13.0 | ARIA treeitem nodes should have an accessible name | best practice | Serious | ASSISTED | runs |
aria-valid-attr axe-core 4.13.0 | ARIA attributes must conform to valid names | 4.1.2 | Critical | ASSISTED | runs |
aria-valid-attr-value axe-core 4.13.0 | ARIA attributes must conform to valid values | 4.1.2 | Critical | ASSISTED | runs |
audio-caption axe-core 4.13.0 | <audio> elements must have a captions track | 1.2.1 | Critical | MANUAL | not run: deprecated in axe-core |
autocomplete-valid axe-core 4.13.0 | autocomplete attribute must be used correctly | 1.3.5 | Serious | AUTO | superseded by vs-forms-ecommerce |
avoid-inline-spacing axe-core 4.13.0 | Inline text spacing must be adjustable with custom stylesheets | 1.4.12 | Serious | ASSISTED | runs |
| blink axe-core 4.13.0 | <blink> elements are deprecated and must not be used | 2.2.2 | Serious | AUTO | runs |
| button-name axe-core 4.13.0 | Buttons must have discernible text | 4.1.2 | Critical | ASSISTED | runs |
bypass axe-core 4.13.0 | Page must have means to bypass repeated blocks | 2.4.1 | Serious | AUTO | superseded by vs-headings-landmarks |
| color-contrast axe-core 4.13.0 | Elements must meet minimum color contrast ratio thresholds | 1.4.3 | Serious | ASSISTED | runs |
color-contrast-enhanced axe-core 4.13.0 | Elements must meet enhanced color contrast ratio thresholds | 1.4.6 | Serious | ASSISTED | not run: tests level AAA only |
css-orientation-lock axe-core 4.13.0 | CSS Media queries must not lock display orientation | 1.3.4 | Serious | ASSISTED | not run: experimental in axe-core |
definition-list axe-core 4.13.0 | <dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements | 1.3.1 | Serious | ASSISTED | runs |
dlitem axe-core 4.13.0 | <dt> and <dd> elements must be contained by a <dl> | 1.3.1 | Serious | ASSISTED | runs |
| document-title axe-core 4.13.0 | Documents must have <title> element to aid in navigation | 2.4.2 | Serious | AUTO | runs |
duplicate-id axe-core 4.13.0 | id attribute value must be unique | 4.1.1 | Minor | ASSISTED | not run: deprecated in axe-core |
duplicate-id-active axe-core 4.13.0 | IDs of active elements must be unique | 4.1.1 | Serious | ASSISTED | not run: deprecated in axe-core |
duplicate-id-aria axe-core 4.13.0 | IDs used in ARIA and labels must be unique | 4.1.2 | Critical | ASSISTED | runs |
empty-heading axe-core 4.13.0 | Headings should not be empty | best practice | Minor | ASSISTED | runs |
empty-table-header axe-core 4.13.0 | Table header text should not be empty | best practice | Minor | ASSISTED | runs |
focus-order-semantics axe-core 4.13.0 | Elements in the focus order should have an appropriate role | best practice | Minor | ASSISTED | not run: experimental in axe-core |
form-field-multiple-labels axe-core 4.13.0 | Form field must not have multiple label elements | 3.3.2 | Moderate | ASSISTED | runs |
frame-focusable-content axe-core 4.13.0 | Frames with focusable content must not have tabindex=-1 | 2.1.1 | Serious | ASSISTED | runs |
frame-tested axe-core 4.13.0 | Frames should be tested with axe-core | best practice | Critical | MANUAL | runs |
| frame-title axe-core 4.13.0 | Frames must have an accessible name | 4.1.2 | Serious | AUTO | runs |
frame-title-unique axe-core 4.13.0 | Frames must have a unique title attribute | 4.1.2 | Serious | ASSISTED | runs |
heading-order axe-core 4.13.0 | Heading levels should only increase by one | best practice | Moderate | AUTO | superseded by vs-headings-landmarks |
html-has-lang axe-core 4.13.0 | <html> element must have a lang attribute | 3.1.1 | Serious | AUTO | superseded by vs-lang |
html-lang-valid axe-core 4.13.0 | <html> element must have a valid value for the lang attribute | 3.1.1 | Serious | AUTO | superseded by vs-lang |
html-xml-lang-mismatch axe-core 4.13.0 | HTML elements with lang and xml:lang must have the same base language | 3.1.1 | Moderate | ASSISTED | runs |
identical-links-same-purpose axe-core 4.13.0 | Links with the same name must have a similar purpose | 2.4.9 | Minor | MANUAL | not run: tests level AAA only |
| image-alt axe-core 4.13.0 | Images must have alternative text | 1.1.1 | Critical | ASSISTED | runs |
image-redundant-alt axe-core 4.13.0 | Alternative text of images should not be repeated as text | best practice | Minor | ASSISTED | runs |
input-button-name axe-core 4.13.0 | Input buttons must have discernible text | 4.1.2 | Critical | ASSISTED | runs |
input-image-alt axe-core 4.13.0 | Image buttons must have alternative text | 1.1.1, 4.1.2 | Critical | ASSISTED | runs |
label axe-core 4.13.0 | Form elements must have labels | 4.1.2 | Critical | AUTO | superseded by vs-forms-ecommerce |
label-content-name-mismatch axe-core 4.13.0 | Elements must have their visible text as part of their accessible name | 2.5.3 | Serious | ASSISTED | not run: experimental in axe-core |
label-title-only axe-core 4.13.0 | Form elements should have a visible label | best practice | Serious | ASSISTED | runs |
landmark-banner-is-top-level axe-core 4.13.0 | Banner landmark should not be contained in another landmark | best practice | Moderate | ASSISTED | runs |
landmark-complementary-is-top-level axe-core 4.13.0 | Aside should not be contained in another landmark | best practice | Moderate | ASSISTED | not run: deprecated in axe-core |
landmark-contentinfo-is-top-level axe-core 4.13.0 | Contentinfo landmark should not be contained in another landmark | best practice | Moderate | ASSISTED | runs |
landmark-main-is-top-level axe-core 4.13.0 | Main landmark should not be contained in another landmark | best practice | Moderate | ASSISTED | runs |
landmark-no-duplicate-banner axe-core 4.13.0 | Document should not have more than one banner landmark | best practice | Moderate | ASSISTED | runs |
landmark-no-duplicate-contentinfo axe-core 4.13.0 | Document should not have more than one contentinfo landmark | best practice | Moderate | ASSISTED | runs |
landmark-no-duplicate-main axe-core 4.13.0 | Document should not have more than one main landmark | best practice | Moderate | ASSISTED | runs |
landmark-one-main axe-core 4.13.0 | Document should have one main landmark | best practice | Moderate | AUTO | superseded by vs-headings-landmarks |
| landmark-unique axe-core 4.13.0 | Landmarks should have a unique role or role/label/title (i.e. accessible name) combination | best practice | Moderate | ASSISTED | runs |
link-in-text-block axe-core 4.13.0 | Links must be distinguishable without relying on color | 1.4.1 | Serious | ASSISTED | runs |
| link-name axe-core 4.13.0 | Links must have discernible text | 2.4.4, 4.1.2 | Serious | ASSISTED | runs |
list axe-core 4.13.0 | <ul> and <ol> must only directly contain <li>, <script> or <template> elements | 1.3.1 | Serious | ASSISTED | runs |
listitem axe-core 4.13.0 | <li> elements must be contained in a <ul> or <ol> | 1.3.1 | Serious | ASSISTED | runs |
| marquee axe-core 4.13.0 | <marquee> elements are deprecated and must not be used | 2.2.2 | Serious | AUTO | runs |
meta-refresh axe-core 4.13.0 | Delayed refresh under 20 hours must not be used | 2.2.1 | Critical | MANUAL | runs |
meta-refresh-no-exceptions axe-core 4.13.0 | Delayed refresh must not be used | 2.2.4, 3.2.5 | Minor | MANUAL | not run: tests level AAA only |
| meta-viewport axe-core 4.13.0 | Zooming and scaling must not be disabled | 1.4.4 | Moderate | AUTO | runs |
| meta-viewport-large axe-core 4.13.0 | Users should be able to zoom and scale the text up to 500% | best practice | Minor | AUTO | runs |
nested-interactive axe-core 4.13.0 | Interactive controls must not be nested | 4.1.2 | Serious | MANUAL | runs |
no-autoplay-audio axe-core 4.13.0 | <video> or <audio> elements must not play automatically | 1.4.2 | Moderate | AUTO | superseded by vs-media |
object-alt axe-core 4.13.0 | <object> elements must have alternative text | 1.1.1 | Serious | ASSISTED | runs |
p-as-heading axe-core 4.13.0 | Styled <p> elements must not be used as headings | 1.3.1 | Serious | ASSISTED | not run: experimental in axe-core |
page-has-heading-one axe-core 4.13.0 | Page should contain a level-one heading | best practice | Moderate | AUTO | superseded by vs-headings-landmarks |
presentation-role-conflict axe-core 4.13.0 | Elements marked as presentational should be consistently ignored | best practice | Minor | MANUAL | runs |
| region axe-core 4.13.0 | All page content should be contained by landmarks | best practice | Moderate | AUTO | runs |
| role-img-alt axe-core 4.13.0 | [role="img"] and [role="image"] elements must have alternative text | 1.1.1 | Serious | ASSISTED | runs |
scope-attr-valid axe-core 4.13.0 | scope attribute should be used correctly | best practice | Moderate | ASSISTED | runs |
scrollable-region-focusable axe-core 4.13.0 | Scrollable region must have keyboard access | 2.1.1, 2.1.3 | Serious | MANUAL | runs |
| select-name axe-core 4.13.0 | Select element must have an accessible name | 4.1.2 | Critical | ASSISTED | runs |
server-side-image-map axe-core 4.13.0 | Server-side image maps must not be used | 2.1.1 | Minor | MANUAL | runs |
| skip-link axe-core 4.13.0 | The skip-link target should exist and be focusable | best practice | Moderate | AUTO | runs |
summary-name axe-core 4.13.0 | Summary elements must have discernible text | 4.1.2 | Serious | ASSISTED | runs |
| svg-img-alt axe-core 4.13.0 | <svg> elements with an img or image role must have alternative text | 1.1.1 | Serious | ASSISTED | runs |
| tabindex axe-core 4.13.0 | Elements should not have tabindex greater than zero | best practice | Serious | AUTO | runs |
table-duplicate-name axe-core 4.13.0 | Tables should not have the same summary and caption | best practice | Minor | ASSISTED | runs |
table-fake-caption axe-core 4.13.0 | Data or header cells must not be used to give caption to a data table. | 1.3.1 | Serious | ASSISTED | not run: experimental in axe-core |
target-size axe-core 4.13.0 | All touch targets must be 24px large, or leave sufficient space | 2.5.8 | Serious | ASSISTED | superseded by vs-target-size |
td-has-header axe-core 4.13.0 | Non-empty <td> elements in larger <table> must have an associated table header | 1.3.1 | Critical | ASSISTED | not run: experimental in axe-core |
td-headers-attr axe-core 4.13.0 | Table cell headers attributes must refer to other <th> elements in the same table | 1.3.1 | Serious | ASSISTED | runs |
th-has-data-cells axe-core 4.13.0 | Table headers in a data table must refer to data cells | 1.3.1 | Serious | ASSISTED | runs |
valid-lang axe-core 4.13.0 | lang attribute must have a valid value | 3.1.2 | Serious | ASSISTED | runs |
video-caption axe-core 4.13.0 | <video> elements must have captions | 1.2.2 | Critical | MANUAL | superseded by vs-media |
Start with a free check of your shop.
Send your shop’s address. Validiscan scans it and replies with every failure the scan can prove, with the page and the code.
Request a free checkOr write to info@validiscan.com.
What the free check covers, and what it leaves out- You send
- your shop’s address
- Pages scanned
- up to 15
- You get
- every failure the scan can prove, with the page and the code
- On your shop
- public pages only; no login, nothing bought, no forms sent
- What it is not
- a full audit