Rules
Every rule of the accessibility audit, and every security header check, structured-data feature and checked JavaScript library, has a page here: what it checks, how it is tested and, where the detection corpus has one, a failing and a passing example. The pages are generated from the rule catalogue and the rule contracts, so they cannot drift from what the tool does.
Coverage
| Family | Automatic | Hint only | Manual | Total |
|---|---|---|---|---|
| WCAG rules | 71 | 78 | 15 | 164 |
| Security headers | 14 | 0 | 0 | 14 |
| Structured data | 17 | 0 | 0 | 17 |
| Vulnerable libraries | 8 | 0 | 0 | 8 |
| All | 110 | 78 | 15 | 203 |
- Automatic
- An automated check that can report a confirmed violation.
- Hint only
- An automated check that by design reports review hints only: its findings are marked for manual review, never as confirmed violations.
- Manual
- A tool cannot decide this check. The audit only points a person at it; it is never counted as automatically verified.
The class is declared by the rule's contract (automation andreview_only), not by what the corpus happens to show. A security page can stand for several header checks that surface as one finding.
Addresses
A rule's page is rules/<rule_id>/ below this site, with the id unchanged:/ stays a path separator, so document/title-missing is atrules/document/title-missing/. The help_url of a finding in the JSON, SARIF and AI report points here, using the id the finding carries: security.headers.missing_header andbest_practices.vulnerable_libraries.jquery for the other families; structured-data findings (seo.schema.schema_rule_missing_<feature>_<property>) point at their feature's page, seo.schema.schema_rule_missing_<feature>. A WCAG criterion's W3C Understanding page is understanding_url.
All rules
| Family | Criterion | Level | Rule | Outcome class |
|---|---|---|---|---|
| WCAG rules | 1.1.1 | A | Visualisation text layer hidden from assistive technologydisplay/text-hidden | Automatic |
| WCAG rules | 1.1.1 | A | Visualisation text layer missing in text modedisplay/text-not-visible | Automatic |
| WCAG rules | 1.1.1 | A | Missing alternative text on imagesimage-alt | Automatic |
| WCAG rules | 1.1.1 | A | Missing alternative text on imagesimages/alt-missing | Automatic |
| WCAG rules | 1.1.1 | A | Alternative text probably not descriptiveimages/alt-suspicious | Hint only |
| WCAG rules | 1.1.1 | A | Missing alternative text on image map areasimages/area-alt-missing | Automatic |
| WCAG rules | 1.1.1 | A | Missing alternative text on image buttonsimages/input-alt-missing | Automatic |
| WCAG rules | 1.1.1 | A | Server-side image map usedimages/server-side-map | Hint only |
| WCAG rules | 1.1.1 | A | Missing text alternative on embedded objectsobjects/alt-missing | Automatic |
| WCAG rules | 1.1.1 | A | Missing alternative text on SVG graphicssvg/name-missing | Automatic |
| WCAG rules | 1.1.1 | A | Visualisation without a captionviz/caption-missing | Automatic |
| WCAG rules | 1.1.1 | A | Visualisation text layer missing in text modeviz/text-missing | Automatic |
| WCAG rules | 1.2.2 | A | Missing captions for videosvideo-caption | Hint only |
| WCAG rules | 1.2.8 | AAA | Missing media alternative (AAA)media-alt | Manual |
| WCAG rules | 1.3.1 | A | Missing grouping for related form fieldsforms/group-missing | Hint only |
| WCAG rules | 1.3.1 | A | Form field labeled only via the title attributeforms/title-only-label | Hint only |
| WCAG rules | 1.3.1 | A | Multiple main headings (h1)headings/h1-multiple | Hint only |
| WCAG rules | 1.3.1 | A | Skipped heading levelheadings/skip-level | Hint only |
| WCAG rules | 1.3.1 | A | HTML5 content model violationhtml-content-model | Automatic |
| WCAG rules | 1.3.1 | A | Multiple banner landmarkslandmarks/banner-duplicate | Hint only |
| WCAG rules | 1.3.1 | A | Missing banner landmarklandmarks/banner-missing | Hint only |
| WCAG rules | 1.3.1 | A | Content outside a landmark regionlandmarks/content-outside | Hint only |
| WCAG rules | 1.3.1 | A | Multiple contentinfo landmarkslandmarks/contentinfo-duplicate | Hint only |
| WCAG rules | 1.3.1 | A | Missing contentinfo landmarklandmarks/contentinfo-missing | Hint only |
| WCAG rules | 1.3.1 | A | Multiple main landmarkslandmarks/main-duplicate | Hint only |
| WCAG rules | 1.3.1 | A | Missing navigation landmarklandmarks/navigation-missing | Hint only |
| WCAG rules | 1.3.1 | A | Landmark is nestedlandmarks/not-top-level | Hint only |
| WCAG rules | 1.3.1 | A | Landmarks are not uniquely namedlandmarks/not-unique | Hint only |
| WCAG rules | 1.3.1 | A | Empty listlists/empty | Hint only |
| WCAG rules | 1.3.1 | A | List with invalid child elementslists/invalid-structure | Automatic |
| WCAG rules | 1.3.1 | A | List items outside a list containerlists/item-outside-list | Automatic |
| WCAG rules | 1.3.1 | A | Term without definition in a description listlists/term-without-definition | Automatic |
| WCAG rules | 1.3.1 | A | Table header without associated data cellstables/data-undetermined | Hint only |
| WCAG rules | 1.3.1 | A | Data table without header cellstables/header-missing | Hint only |
| WCAG rules | 1.3.1 | A | Table header without associated data cellstables/header-without-data | Automatic |
| WCAG rules | 1.3.1 | A | Invalid headers reference in a table celltables/headers-attr-invalid | Automatic |
| WCAG rules | 1.3.1 | A | Data table without a nametables/name-missing | Hint only |
| WCAG rules | 1.3.1 | A | Layout table with header cellstables/presentational-with-headers | Automatic |
| WCAG rules | 1.3.1 | A | Chart without a values tableviz/table-missing | Hint only |
| WCAG rules | 1.3.2 | A | Visual order diverges from the reading orderorder/visual-mismatch | Hint only |
| WCAG rules | 1.3.4 | AA | Restricted screen orientationorientation/content-hidden | Hint only |
| WCAG rules | 1.3.4 | AA | Restricted screen orientationorientation/root-rotated | Automatic |
| WCAG rules | 1.3.5 | AA | Missing input purpose identificationforms/autocomplete-invalid | Automatic |
| WCAG rules | 1.3.5 | AA | Missing input purpose identificationforms/purpose-missing | Hint only |
| WCAG rules | 1.4.1 | A | Link distinguishable by color onlycolor/link-indistinct | Automatic |
| WCAG rules | 1.4.2 | A | Check autoplaying audio for a controlmedia/audio-autoplay | Hint only |
| WCAG rules | 1.4.3 | AA | Insufficient color contrastcontrast/text-insufficient | Automatic |
| WCAG rules | 1.4.3 | AA | Insufficient color contrastcontrast/text-undetermined | Hint only |
| WCAG rules | 1.4.4 | AA | Text not sufficiently resizablezoom/viewport-locked | Automatic |
| WCAG rules | 1.4.4 | AA | Missing viewport declarationzoom/viewport-missing | Hint only |
| WCAG rules | 1.4.4 | AA | Viewport meta tag prevents zooming to 500%zoom/viewport-scale-limited | Hint only |
| WCAG rules | 1.4.6 | AAA | Enhanced color contrast not met (AAA)contrast/text-enhanced | Automatic |
| WCAG rules | 1.4.8 | AAA | Limited visual presentation of text (AAA)text/justified | Hint only |
| WCAG rules | 1.4.8 | AAA | Limited visual presentation of text (AAA)text/line-height-tight | Hint only |
| WCAG rules | 1.4.8 | AAA | Limited visual presentation of text (AAA)visual-presentation | Manual |
| WCAG rules | 1.4.10 | AA | No reflow at 320 CSS pixelscss-overflow-hidden | Automatic |
| WCAG rules | 1.4.11 | AA | Insufficient contrast for UI elementscontrast/control-insufficient | Automatic |
| WCAG rules | 1.4.11 | AA | Insufficient contrast for UI elementscontrast/control-undetermined | Hint only |
| WCAG rules | 1.4.12 | AA | Content clipped when text spacing is increasedtext-spacing/clipped | Hint only |
| WCAG rules | 1.4.13 | AA | Inaccessible hover or focus content (tooltips)patterns/tooltip-unreferenced | Hint only |
| WCAG rules | 2.1.1 | A | Click handler without keyboard equivalentkeyboard/click-handler-not-focusable | Automatic |
| WCAG rules | 2.1.1 | A | Focusable element without an interactive rolekeyboard/focusable-no-role | Hint only |
| WCAG rules | 2.1.1 | A | Content not operable by keyboardkeyboard/interactive-not-focusable | Hint only |
| WCAG rules | 2.1.1 | A | Click handler without keyboard equivalentkeyboard/pointer-only | Hint only |
| WCAG rules | 2.1.1 | A | Scrollable region not reachable by keyboardkeyboard/scrollable-region-not-focusable | Automatic |
| WCAG rules | 2.1.2 | A | Keyboard trap — focus cannot leave the elementkeyboard-trap | Manual |
| WCAG rules | 2.2.1 | A | Non-adjustable time limitmeta-refresh | Manual |
| WCAG rules | 2.2.1 | A | Non-adjustable time limittiming/meta-refresh | Automatic |
| WCAG rules | 2.2.2 | A | Display mode set too latedisplay/init-missing | Automatic |
| WCAG rules | 2.2.2 | A | Visualisations visible in text modedisplay/text-media-visible | Automatic |
| WCAG rules | 2.2.2 | A | No display-mode toggledisplay/toggle-missing | Automatic |
| WCAG rules | 2.2.2 | A | Missing pause/stop/hide controlmotion/infinite-animation | Hint only |
| WCAG rules | 2.2.2 | A | Moving visualisation without a still imageviz/static-missing | Automatic |
| WCAG rules | 2.2.3 | AAA | Timing present (AAA)manual/no-timing | Manual |
| WCAG rules | 2.2.4 | AAA | Non-suppressible interruptions (AAA)manual/interruptions | Manual |
| WCAG rules | 2.2.5 | AAA | No data preservation on re-authentication (AAA)manual/re-authenticating | Manual |
| WCAG rules | 2.2.6 | AAA | No warning before inactivity timeout (AAA)timeouts | Manual |
| WCAG rules | 2.3.3 | AAA | Animations without prefers-reduced-motionmotion/reduced-motion-ignored | Hint only |
| WCAG rules | 2.4.1 | A | Iframe without accessible nameframes/name-missing | Automatic |
| WCAG rules | 2.4.1 | A | Missing bypass navigationheadings/none | Automatic |
| WCAG rules | 2.4.1 | A | Missing skip linkkeyboard/skip-link-missing | Hint only |
| WCAG rules | 2.4.1 | A | No main-content region as a bypass targetlandmarks/main-missing | Hint only |
| WCAG rules | 2.4.2 | A | Missing or insufficient page titledocument-title | Automatic |
| WCAG rules | 2.4.2 | A | Missing or insufficient page titledocument/title-empty | Automatic |
| WCAG rules | 2.4.2 | A | Missing or insufficient page titledocument/title-missing | Automatic |
| WCAG rules | 2.4.3 | A | Illogical focus orderdialog/focusable-missing | Hint only |
| WCAG rules | 2.4.3 | A | Positive tabindex changes the focus orderkeyboard/positive-tabindex | Hint only |
| WCAG rules | 2.4.4 | A | Unclear or generic link textlinks/generic-name | Hint only |
| WCAG rules | 2.4.4 | A | Unclear or generic link textlinks/single-character-name | Hint only |
| WCAG rules | 2.4.4 | A | Unclear or generic link textlinks/url-name | Hint only |
| WCAG rules | 2.4.6 | AA | Empty headingheadings/empty | Automatic |
| WCAG rules | 2.4.7 | AA | Focus indicator not visiblefocus-visible | Manual |
| WCAG rules | 2.4.7 | AA | No visible focus indicator measuredfocus/indicator-missing | Hint only |
| WCAG rules | 2.4.7 | AA | Focus indicator removed via CSSfocus/outline-removed | Automatic |
| WCAG rules | 2.4.8 | AAA | Missing location indication (AAA)navigation/location-missing | Hint only |
| WCAG rules | 2.4.9 | AAA | Unclear link label without context (AAA)links/purpose-link-only | Hint only |
| WCAG rules | 2.4.10 | AAA | Missing section headingsheadings/section-without-heading | Hint only |
| WCAG rules | 2.4.11 | AA | Focused element entirely obscuredfocus/obscured | Hint only |
| WCAG rules | 2.4.12 | AAA | Focused element partially obscuredfocus/obscured-enhanced | Hint only |
| WCAG rules | 2.5.1 | A | Missing alternative for pointer gesturesmanual/pointer-gestures | Manual |
| WCAG rules | 2.5.2 | A | Action triggered on pointer downpointer-cancellation | Manual |
| WCAG rules | 2.5.3 | A | Visible text ≠ accessible namelabel-in-name/mismatch | Automatic |
| WCAG rules | 2.5.4 | A | Missing alternative for motion actuationmanual/motion-actuation | Manual |
| WCAG rules | 2.5.5 | AAA | Insufficient click target size (AAA)targets/size-enhanced | Hint only |
| WCAG rules | 2.5.8 | AA | Insufficient click target sizetargets/size | Hint only |
| WCAG rules | 3.1.1 | A | Invalid page languagedocument/lang-invalid | Automatic |
| WCAG rules | 3.1.1 | A | Conflicting language declarationsdocument/lang-mismatch | Automatic |
| WCAG rules | 3.1.1 | A | Missing language declarationdocument/lang-missing | Automatic |
| WCAG rules | 3.1.1 | A | Missing language declarationhtml-has-lang | Automatic |
| WCAG rules | 3.1.2 | AA | Check text in another language without langlanguage/part-undetermined | Hint only |
| WCAG rules | 3.1.2 | AA | Check text in another language without langlanguage/part-unmarked | Hint only |
| WCAG rules | 3.1.3 | AAA | Missing explanation of unusual words (AAA)manual/unusual-words | Manual |
| WCAG rules | 3.1.4 | AAA | Missing explanation of abbreviations (AAA)language/abbreviation-unexpanded | Hint only |
| WCAG rules | 3.2.1 | A | Unexpected context change on focuscontext/autofocus | Hint only |
| WCAG rules | 3.2.1 | A | Unexpected context change on focuscontext/on-focus | Hint only |
| WCAG rules | 3.2.2 | A | Unexpected context change on inputcontext/on-input | Automatic |
| WCAG rules | 3.2.2 | A | Form without submit buttonforms/no-submit | Hint only |
| WCAG rules | 3.2.5 | AAA | New window without notice (AAA)links/new-window-unannounced | Hint only |
| WCAG rules | 3.3.1 | A | Invalid field without an accessible error descriptionforms/error-unidentified | Hint only |
| WCAG rules | 3.3.2 | A | Missing form labelsforms/group-name-missing | Hint only |
| WCAG rules | 3.3.2 | A | Missing form labelsforms/instructions-missing | Hint only |
| WCAG rules | 3.3.2 | A | Missing form labelsforms/label-missing | Automatic |
| WCAG rules | 3.3.2 | A | Missing form labelsforms/placeholder-as-label | Hint only |
| WCAG rules | 3.3.2 | A | Missing form labelsforms/required-unmarked | Hint only |
| WCAG rules | 3.3.5 | AAA | Missing input help (AAA)manual/help | Manual |
| WCAG rules | 3.3.7 | A | Missing reuse of previously entered dataforms/redundant-entry | Hint only |
| WCAG rules | 3.3.8 | AA | Review CAPTCHA in authentication formauth/captcha | Hint only |
| WCAG rules | 3.3.8 | AA | Paste blocked in password or code fieldauth/paste-blocked | Automatic |
| WCAG rules | 4.1.2 | A | ARIA attribute not allowed for this rolearia/attribute-not-allowed | Automatic |
| WCAG rules | 4.1.2 | A | Prohibited ARIA attributesaria/attribute-prohibited | Automatic |
| WCAG rules | 4.1.2 | A | Invalid ARIA attribute namearia/attribute-unknown | Automatic |
| WCAG rules | 4.1.2 | A | Invalid ARIA attribute valuearia/attribute-value-invalid | Automatic |
| WCAG rules | 4.1.2 | A | Combobox without an options listaria/combobox-popup-missing | Automatic |
| WCAG rules | 4.1.2 | A | ARIA reference points to an ambiguous IDaria/owns-conflict | Automatic |
| WCAG rules | 4.1.2 | A | Empty reference in an ARIA relationship attributearia/reference-missing | Automatic |
| WCAG rules | 4.1.2 | A | Required ARIA attribute missingaria/required-attribute-missing | Automatic |
| WCAG rules | 4.1.2 | A | Required child elements of an ARIA role are missingaria/required-children-missing | Automatic |
| WCAG rules | 4.1.2 | A | Element outside its required parent contextaria/required-parent-missing | Automatic |
| WCAG rules | 4.1.2 | A | Invalid ARIA rolearia/role-abstract | Automatic |
| WCAG rules | 4.1.2 | A | Invalid ARIA rolearia/role-invalid | Automatic |
| WCAG rules | 4.1.2 | A | Redundant ARIA rolearia/role-redundant | Hint only |
| WCAG rules | 4.1.2 | A | No tab marked as selectedaria/tab-selected-missing | Hint only |
| WCAG rules | 4.1.2 | A | Tab list without an associated tab panelaria/tabpanel-missing | Hint only |
| WCAG rules | 4.1.2 | A | Form control, link, or button without an accessible namebuttons/name-missing | Automatic |
| WCAG rules | 4.1.2 | A | Description repeats the namedescription-duplicates-name | Automatic |
| WCAG rules | 4.1.2 | A | Dialog not marked as modaldialog/modal-unmarked | Hint only |
| WCAG rules | 4.1.2 | A | Dialog without an accessible namedialog/name-missing | Automatic |
| WCAG rules | 4.1.2 | A | Cross-origin iframe: review manuallyframes/cross-origin | Manual |
| WCAG rules | 4.1.2 | A | Referenced ID is assigned more than onceids/duplicate | Hint only |
| WCAG rules | 4.1.2 | A | Invalid modern interaction attributesinert/dialog-inert | Automatic |
| WCAG rules | 4.1.2 | A | Focusable element hidden from screen readerskeyboard/hidden-focusable | Automatic |
| WCAG rules | 4.1.2 | A | Form control, link, or button without an accessible namelinks/name-missing | Automatic |
| WCAG rules | 4.1.2 | A | Link used as a button substitute without a matching rolelinks/used-as-button | Hint only |
| WCAG rules | 4.1.2 | A | Redundant ARIA rolelists/role-redundant | Hint only |
| WCAG rules | 4.1.2 | A | Invalid modern interaction attributesmodern-attribute-misuse | Automatic |
| WCAG rules | 4.1.2 | A | Interactive element without a meaningful namenames/required-missing | Automatic |
| WCAG rules | 4.1.2 | A | Interactive element without a meaningful namenames/symbol-only | Hint only |
| WCAG rules | 4.1.2 | A | Native title attribute as the only descriptionnames/title-only | Hint only |
| WCAG rules | 4.1.2 | A | Expanded button without a reference to its regionpatterns/accordion-controls-missing | Hint only |
| WCAG rules | 4.1.2 | A | Invalid modern interaction attributespopover/target-invalid | Automatic |
| WCAG rules | 4.1.2 | A | Invalid modern interaction attributespopover/target-missing | Automatic |
| WCAG rules | 4.1.2 | A | Summary element without an accessible namesummary/name-missing | Automatic |
| WCAG rules | 4.1.3 | AA | Status messages not programmatically determinablestatus/live-overridden | Automatic |
| WCAG rules | Best practice | Missing main heading (h1)headings/h1-missing | Hint only | |
| Security headers | Cors wildcard credentialssecurity.headers.cors_wildcard_credentials | Automatic | ||
| Security headers | Hsts preload ineligiblesecurity.headers.hsts_preload_ineligible | Automatic | ||
| Security headers | Missing base-urisecurity.headers.missing_base-uri | Automatic | ||
| Security headers | Missing frame-ancestorssecurity.headers.missing_frame-ancestors | Automatic | ||
| Security headers | Missing headersecurity.headers.missing_header | Automatic | ||
| Security headers | Missing httpssecurity.headers.missing_https | Automatic | ||
| Security headers | Missing object-srcsecurity.headers.missing_object-src | Automatic | ||
| Security headers | Permissions policy permissivesecurity.headers.permissions_policy_permissive | Automatic | ||
| Security headers | Public source mapsecurity.headers.public_source_map | Automatic | ||
| Security headers | Unsafe eval scriptsecurity.headers.unsafe_eval_script | Automatic | ||
| Security headers | Unsafe inline scriptsecurity.headers.unsafe_inline_script | Automatic | ||
| Security headers | Unsafe inline stylesecurity.headers.unsafe_inline_style | Automatic | ||
| Security headers | Wildcard script sourcesecurity.headers.wildcard_script_source | Automatic | ||
| Security headers | Wildcard sourcesecurity.headers.wildcard_source | Automatic | ||
| Structured data | Article: missing required propertiesseo.schema.schema_rule_missing_article | Automatic | ||
| Structured data | Breadcrumb: missing required propertiesseo.schema.schema_rule_missing_breadcrumb | Automatic | ||
| Structured data | Event: missing required propertiesseo.schema.schema_rule_missing_event | Automatic | ||
| Structured data | FAQ: missing required propertiesseo.schema.schema_rule_missing_faq | Automatic | ||
| Structured data | Item List: missing required propertiesseo.schema.schema_rule_missing_item_list | Automatic | ||
| Structured data | Job Posting: missing required propertiesseo.schema.schema_rule_missing_job_posting | Automatic | ||
| Structured data | LocalBusiness: missing required propertiesseo.schema.schema_rule_missing_local_business | Automatic | ||
| Structured data | Merchant Listing: missing required propertiesseo.schema.schema_rule_missing_merchant_listing | Automatic | ||
| Structured data | Organization: missing required propertiesseo.schema.schema_rule_missing_organization | Automatic | ||
| Structured data | Person: missing required propertiesseo.schema.schema_rule_missing_person | Automatic | ||
| Structured data | Product Snippet: missing required propertiesseo.schema.schema_rule_missing_product_snippet | Automatic | ||
| Structured data | Profile Page: missing required propertiesseo.schema.schema_rule_missing_profile_page | Automatic | ||
| Structured data | Recipe: missing required propertiesseo.schema.schema_rule_missing_recipe | Automatic | ||
| Structured data | Software Application: missing required propertiesseo.schema.schema_rule_missing_software_application | Automatic | ||
| Structured data | Video: missing required propertiesseo.schema.schema_rule_missing_video | Automatic | ||
| Structured data | WebPage: missing required propertiesseo.schema.schema_rule_missing_web_page | Automatic | ||
| Structured data | WebSite: missing required propertiesseo.schema.schema_rule_missing_web_site | Automatic | ||
| Vulnerable libraries | AngularJS: version with known vulnerabilitiesbest_practices.vulnerable_libraries.angularjs | Automatic | ||
| Vulnerable libraries | Bootstrap: version with known vulnerabilitiesbest_practices.vulnerable_libraries.bootstrap | Automatic | ||
| Vulnerable libraries | Handlebars: version with known vulnerabilitiesbest_practices.vulnerable_libraries.handlebars | Automatic | ||
| Vulnerable libraries | jQuery: version with known vulnerabilitiesbest_practices.vulnerable_libraries.jquery | Automatic | ||
| Vulnerable libraries | Lodash: version with known vulnerabilitiesbest_practices.vulnerable_libraries.lodash | Automatic | ||
| Vulnerable libraries | MooTools: version with known vulnerabilitiesbest_practices.vulnerable_libraries.mootools | Automatic | ||
| Vulnerable libraries | Prototype: version with known vulnerabilitiesbest_practices.vulnerable_libraries.prototype | Automatic | ||
| Vulnerable libraries | Underscore: version with known vulnerabilitiesbest_practices.vulnerable_libraries.underscore | Automatic |