EqualWeb Accessibility Wiki
Generated from
@app/a11y-enginerule metadata — do not edit by hand. Runpnpm --filter @app/a11y-engine wikito regenerate. See also the WCAG cross-reference.
Two bodies of rules: 135 for web pages and 82 for PDF documents. Each has a page explaining why it matters, how to fix it, and the standards it maps to.
Web accessibility
Rules the scanning engine runs against web pages (WCAG 2.1 / 2.2). Open this area →
Images & non-text content
| Rule | WCAG | Impact | Mode | Standards |
|---|---|---|---|---|
| img-alt — Images must have alternative text | 1.1.1 (A) | critical | static | WCAG A EN 301 549 Section 508 Trusted Tester ACT |
| input-image-alt — Image buttons must have alternative text | 1.1.1 (A), 4.1.2 (A) | critical | static | WCAG A EN 301 549 Section 508 Trusted Tester ACT |
| area-alt — Image-map areas must have alternative text | 1.1.1 (A), 2.4.4 (A) | serious | static | WCAG A EN 301 549 Section 508 Trusted Tester ACT |
| svg-img-name — Meaningful SVGs must have an accessible name | 1.1.1 (A) | serious | static | WCAG A EN 301 549 Section 508 Trusted Tester ACT |
| object-alt — Embedded objects must have a text alternative | 1.1.1 (A) | serious | static | WCAG A EN 301 549 Section 508 |
| role-img-name — Elements with role="img" must have a name | 1.1.1 (A) | serious | static | WCAG A EN 301 549 Section 508 Trusted Tester ACT |
| img-redundant-alt — Alt text should not be a file name or duplicate adjacent text | 1.1.1 (A) | minor | static | WCAG A EN 301 549 Best practice |
Forms
| Rule | WCAG | Impact | Mode | Standards |
|---|---|---|---|---|
| label-control — Form inputs must have a label | 4.1.2 (A), 3.3.2 (A) | critical | static | WCAG A EN 301 549 Section 508 Trusted Tester ACT |
| select-name — Select elements must have a label | 4.1.2 (A) | critical | static | WCAG A EN 301 549 Section 508 Trusted Tester ACT |
| button-name — Buttons must have discernible text | 4.1.2 (A) | critical | static | WCAG A EN 301 549 Section 508 Trusted Tester ACT |
| widget-name — Custom interactive widgets must have an accessible name | 4.1.2 (A) | critical | static | WCAG A EN 301 549 |
| form-field-multiple-labels — A form field should not have multiple label elements | 3.3.2 (A) | moderate | static | WCAG A EN 301 549 Trusted Tester |
| fieldset-legend — Radio and checkbox groups need a fieldset and legend | 1.3.1 (A), 3.3.2 (A) | moderate | static | WCAG A EN 301 549 |
| autocomplete-valid — autocomplete attributes must use valid tokens | 1.3.5 (AA) | moderate | static | WCAG AA EN 301 549 ACT |
| label-content-name-mismatch — Accessible name must contain the visible label text | 2.5.3 (A) | serious | static | WCAG A EN 301 549 |
| optgroup-label — Option groups must have a label | 1.3.1 (A), 4.1.2 (A) | serious | static | WCAG A EN 301 549 |
| input-button-name — Input buttons must have discernible text | 4.1.2 (A) | critical | static | WCAG A EN 301 549 Section 508 Trusted Tester ACT |
| on-input-context-change — Changing a control must not auto-submit or navigate | 3.2.2 (A) | serious | static | WCAG A EN 301 549 Section 508 Trusted Tester |
| on-focus-context-change — Receiving focus must not trigger a change of context | 3.2.1 (A) | serious | static | WCAG A EN 301 549 Section 508 Trusted Tester |
| form-error-association — Invalid fields must expose their error message | 3.3.1 (A) | serious | static | WCAG A EN 301 549 Section 508 Trusted Tester |
| form-error-visible — Failed form validation must surface a visible or programmatic error | 3.3.1 (A) | moderate | live | WCAG A EN 301 549 |
| label-title-only — Don’t rely on title or placeholder as the only label | 3.3.2 (A) | minor | static | WCAG A EN 301 549 Best practice |
| accessible-authentication — Authentication must not depend on a cognitive-function test | 3.3.8 (AA) | serious | static | WCAG AA EN 301 549 |
Structure & semantics
| Rule | WCAG | Impact | Mode | Standards |
|---|---|---|---|---|
| heading-order — Heading levels must not skip | 1.3.1 (A) | moderate | static | WCAG A EN 301 549 Best practice |
| empty-heading — Headings must not be empty | 1.3.1 (A), 2.4.6 (AA) | serious | static | WCAG A WCAG AA EN 301 549 Best practice |
| page-has-heading-one — Page should contain a level-one heading | 1.3.1 (A) | moderate | static | WCAG A EN 301 549 Best practice |
| landmark-one-main — Page should have exactly one main landmark | 1.3.1 (A) | moderate | static | WCAG A EN 301 549 Best practice |
| landmark-unique — Landmarks of the same role must be distinguishable | 1.3.1 (A) | moderate | static | WCAG A EN 301 549 Best practice |
| landmark-toplevel — Banner and contentinfo must be top-level landmarks | 1.3.1 (A) | moderate | static | WCAG A EN 301 549 Best practice |
| list-structure — Lists must be structured correctly | 1.3.1 (A) | moderate | static | WCAG A EN 301 549 |
| dl-structure — Definition lists must be structured correctly | 1.3.1 (A) | moderate | static | WCAG A EN 301 549 |
| table-headers — Data tables must have header cells | 1.3.1 (A) | serious | static | WCAG A EN 301 549 Section 508 Trusted Tester |
| table-scope-valid — scope attributes must be valid and on header cells | 1.3.1 (A) | moderate | static | WCAG A EN 301 549 Best practice |
| section-headings — Long content should be organized with section headings | 2.4.10 (AAA) | minor | static | WCAG AAA |
ARIA
| Rule | WCAG | Impact | Mode | Standards |
|---|---|---|---|---|
| aria-valid-role — role must be a valid, non-abstract ARIA role | 4.1.2 (A) | serious | static | WCAG A EN 301 549 |
| aria-valid-attr — aria-* attributes must be valid names with valid values | 4.1.2 (A) | serious | static | WCAG A EN 301 549 |
| aria-allowed-attr — aria-* attributes must be allowed for the element’s role | 4.1.2 (A) | serious | static | WCAG A EN 301 549 |
| aria-required-attr — Roles must declare their required states | 4.1.2 (A) | serious | static | WCAG A EN 301 549 |
| aria-required-children — Container roles must own the required child roles | 1.3.1 (A) | serious | static | WCAG A EN 301 549 |
| aria-required-parent — Roles must be contained by their required context role | 1.3.1 (A) | serious | static | WCAG A EN 301 549 |
| aria-hidden-focusable — aria-hidden elements must not contain focusable content | 4.1.2 (A), 1.3.1 (A) | serious | static | WCAG A EN 301 549 Trusted Tester |
| aria-hidden-body — aria-hidden must not be on the document body | 4.1.2 (A) | critical | static | WCAG A EN 301 549 |
| presentation-role-conflict — role="presentation" must not be on focusable or labelled elements | 4.1.2 (A) | moderate | static | WCAG A EN 301 549 ACT Best practice |
| aria-idref-integrity — ARIA ID references must resolve unambiguously | 1.3.1 (A), 4.1.2 (A) | serious | static | WCAG A EN 301 549 |
| orphan-aria-reference — Named-required elements should not be left without a name | 4.1.2 (A) | minor | static | WCAG A EN 301 549 |
| status-messages — Live regions must be able to announce status messages | 4.1.3 (AA) | serious | static | WCAG AA EN 301 549 |
| nested-interactive — Interactive controls must not be nested | 4.1.2 (A) | serious | static | WCAG A EN 301 549 Trusted Tester |
Document, language & navigation
| Rule | WCAG | Impact | Mode | Standards |
|---|---|---|---|---|
| html-lang — The page must declare its language | 3.1.1 (A) | serious | static | WCAG A EN 301 549 Trusted Tester ACT |
| html-lang-valid — The page language must be a valid BCP-47 tag | 3.1.1 (A) | serious | static | WCAG A EN 301 549 Trusted Tester ACT |
| valid-lang — lang on inline content must be a valid tag | 3.1.2 (AA) | moderate | static | WCAG AA EN 301 549 Trusted Tester ACT |
| document-title — The page must have a non-empty title | 2.4.2 (A) | serious | static | WCAG A EN 301 549 Trusted Tester ACT |
| duplicate-id — id attributes must be unique | 4.1.1 (A), 1.3.1 (A) | moderate | static | WCAG A EN 301 549 |
| meta-viewport — The viewport must allow zooming | 1.4.4 (AA) | serious | static | WCAG AA EN 301 549 ACT |
| bypass-blocks — Page must offer a way to skip to content | 2.4.1 (A) | serious | static | WCAG A EN 301 549 Section 508 Trusted Tester |
| tabindex-positive — Avoid positive tabindex values | 2.4.3 (A) | moderate | static | WCAG A EN 301 549 Best practice |
| accesskeys-unique — accesskey values must be unique | 2.1.1 (A) | minor | static | WCAG A EN 301 549 Best practice |
| frame-title — Frames must have a descriptive title | 4.1.2 (A), 2.4.1 (A) | serious | static | WCAG A EN 301 549 Section 508 Trusted Tester |
| orientation-lock — Content must not lock the display orientation | 1.3.4 (AA) | moderate | static | WCAG AA EN 301 549 |
| audio-transcript — Audio-only content needs a transcript | 1.2.1 (A) | moderate | static | WCAG A EN 301 549 |
| scripted-timeout — Scripted timers must not impose an unannounced time limit | 2.2.1 (A) | serious | live | WCAG A EN 301 549 |
| meta-refresh — Don’t auto-refresh or redirect the page on a timer | 2.2.1 (A) | serious | static | WCAG A EN 301 549 Section 508 Trusted Tester |
| no-blink-marquee — Don’t use | 2.2.2 (A) | serious | static | WCAG A EN 301 549 Section 508 Trusted Tester |
| no-autoplay-audio — Don’t autoplay sound the user can’t stop | 1.4.2 (A) | serious | static | WCAG A EN 301 549 Section 508 Trusted Tester |
| media-captions — Prerecorded video should provide captions | 1.2.2 (A) | serious | static | WCAG A EN 301 549 Section 508 Trusted Tester |
| media-audio-description — Prerecorded video should provide an audio description | 1.2.5 (AA) | moderate | static | WCAG AA EN 301 549 Section 508 |
| media-alternative — Prerecorded video needs an audio description or media alternative | 1.2.3 (A) | moderate | static | WCAG A EN 301 549 Section 508 |
| visual-presentation — Blocks of text should be easy to read (spacing, line length, justification) | 1.4.8 (AAA) | minor | live | WCAG AAA |
| reading-level — Body text should not require post-secondary reading ability | 3.1.5 (AAA) | minor | static | WCAG AAA |
Links & buttons
| Rule | WCAG | Impact | Mode | Standards |
|---|---|---|---|---|
| link-name — Links must have discernible text | 2.4.4 (A), 4.1.2 (A) | serious | static | WCAG A EN 301 549 Section 508 Trusted Tester ACT |
| link-generic-text — Link text should describe its destination | 2.4.4 (A) | minor | static | WCAG A EN 301 549 |
| anchor-is-button — Anchors used as buttons need button semantics and keyboard support | 4.1.2 (A) | moderate | static | WCAG A EN 301 549 |
| button-type — Buttons in forms should declare a type | 3.2.2 (A) | minor | static | WCAG A EN 301 549 Best practice |
| identical-links-same-purpose — Links with the same name should go to the same place | 2.4.4 (A) | minor | static | WCAG A EN 301 549 |
Color & contrast
| Rule | WCAG | Impact | Mode | Standards |
|---|---|---|---|---|
| text-contrast — Text must meet minimum contrast (4.5:1) | 1.4.3 (AA) | serious | live | WCAG AA EN 301 549 Trusted Tester ACT |
| text-contrast-enhanced — Text should meet enhanced contrast (7:1) | 1.4.6 (AAA) | moderate | live | WCAG AAA ACT |
| non-text-contrast — UI components and graphics need 3:1 contrast | 1.4.11 (AA) | moderate | live | WCAG AA EN 301 549 |
| use-of-color — Don’t distinguish links by color alone | 1.4.1 (A) | serious | static | WCAG A EN 301 549 Section 508 Trusted Tester |
Deeper checks
| Rule | WCAG | Impact | Mode | Standards |
|---|---|---|---|---|
| accessible-name-quality — Interactive elements need a high-quality accessible name | 4.1.2 (A), 2.4.6 (AA), 1.1.1 (A) | moderate | static | WCAG A WCAG AA EN 301 549 |
| reading-order — Visual order should match DOM (focus) order | 1.3.2 (A), 2.4.3 (A) | serious | live | WCAG A EN 301 549 |
| target-size — Pointer targets must be large enough | 2.5.8 (AA) | serious | live | WCAG AA EN 301 549 |
| reflow — Content must reflow without horizontal scrolling | 1.4.10 (AA) | serious | live | WCAG AA EN 301 549 |
| text-spacing — Content must survive increased text spacing | 1.4.12 (AA) | moderate | live | WCAG AA EN 301 549 |
| link-opens-new-tab — Links that open a new tab or window must warn users | 3.2.5 (AAA) | minor | static | WCAG AAA |
| scrollable-region-focusable — Scrollable regions must be keyboard-accessible | 2.1.1 (A) | serious | live | WCAG A EN 301 549 |
| empty-table-header — Table header cells must not be empty | 1.3.1 (A), 4.1.2 (A) | serious | static | WCAG A EN 301 549 |
| missing-autocomplete — Personal-data inputs should declare an autocomplete token | 1.3.5 (AA) | minor | static | WCAG AA EN 301 549 |
| abbr-no-title — Abbreviations should have a title with their expanded form | 3.1.4 (AAA) | minor | static | WCAG AAA |
| infinite-animation — Auto-playing animation must be pausable | 2.2.2 (A) | moderate | live | WCAG A EN 301 549 Section 508 Trusted Tester |
| flash-rate — Content must not flash more than 3 times per second | 2.3.1 (A) | serious | live | WCAG A EN 301 549 Section 508 Trusted Tester |
| respects-reduced-motion — Motion must respect prefers-reduced-motion | 2.2.2 (A) | moderate | live | WCAG A EN 301 549 |
| link-purpose-link-only — Link text alone should describe the link’s purpose | 2.4.9 (AAA) | minor | static | WCAG AAA |
Component patterns (best practice)
| Rule | WCAG | Impact | Mode | Standards |
|---|---|---|---|---|
| tab-selected-state — A tablist must have exactly one selected tab | 4.1.2 (A) | serious | static | WCAG A EN 301 549 Best practice |
| tab-controls-panel — A tab should point to its tabpanel | 1.3.1 (A), 4.1.2 (A) | serious | static | WCAG A EN 301 549 Best practice |
| tabpanel-labelled — A tabpanel should be labelled by its tab | 1.3.1 (A) | moderate | static | WCAG A EN 301 549 Best practice |
| tablist-roving-tabindex — Tabs should use roving tabindex | 2.1.1 (A) | moderate | static | WCAG A EN 301 549 Best practice |
| menu-roving-tabindex — Menus should expose one focusable item (roving tabindex) | 2.1.1 (A) | moderate | static | WCAG A EN 301 549 Best practice |
| menuitem-haspopup-expanded — A submenu trigger must expose aria-expanded | 4.1.2 (A) | serious | static | WCAG A EN 301 549 Best practice |
| dialog-name — A dialog must have an accessible name | 4.1.2 (A) | serious | static | WCAG A EN 301 549 Best practice |
| dialog-modal — A modal dialog should declare aria-modal | 4.1.2 (A) | minor | static | WCAG A EN 301 549 Best practice |
| dialog-focusable-content — An open dialog must contain focusable content | 2.1.1 (A) | serious | static | WCAG A EN 301 549 Best practice |
| disclosure-trigger-operable — A disclosure trigger must be keyboard operable | 2.1.1 (A) | serious | static | WCAG A EN 301 549 Best practice |
| disclosure-state-match — aria-expanded must match the controlled region | 4.1.2 (A) | serious | static | WCAG A EN 301 549 Best practice |
| combobox-popup — A combobox must declare its popup | 1.3.1 (A), 4.1.2 (A) | serious | static | WCAG A EN 301 549 Best practice |
| combobox-activedescendant — aria-activedescendant must resolve when a combobox is open | 4.1.2 (A) | moderate | static | WCAG A EN 301 549 Best practice |
| listbox-single-select — A single-select listbox must not have multiple selected options | 4.1.2 (A) | serious | static | WCAG A EN 301 549 Best practice |
| tree-roving-tabindex — A tree should expose exactly one focusable item | 2.1.1 (A) | moderate | static | WCAG A EN 301 549 Best practice |
| treeitem-expanded — A parent treeitem must expose aria-expanded | 4.1.2 (A) | serious | static | WCAG A EN 301 549 Best practice |
| range-value-in-bounds — A range widget value must be within its min and max | 4.1.2 (A) | serious | static | WCAG A EN 301 549 Best practice |
| switch-state-valid — A switch must have a valid aria-checked | 4.1.2 (A) | serious | static | WCAG A EN 301 549 Best practice |
| single-current-page — Only one element should be the current page | 4.1.2 (A) | minor | static | WCAG A EN 301 549 Best practice |
| link-group-semantics — Groups of links should use list semantics | 1.3.1 (A) | minor | static | WCAG A EN 301 549 Best practice |
| breadcrumb-structure — A breadcrumb should be a list that marks the current page | 1.3.1 (A) | minor | static | WCAG A EN 301 549 Best practice |
| carousel-controls — A carousel needs controls | 2.2.2 (A), 2.1.1 (A) | moderate | static | WCAG A EN 301 549 Best practice |
| tooltip-referenced — A tooltip must be referenced by the element it describes | 4.1.2 (A) | moderate | static | WCAG A EN 301 549 Best practice |
| toolbar-roving-tabindex — A toolbar should use roving tabindex | 2.1.1 (A) | moderate | static | WCAG A EN 301 549 |
| radiogroup-single-selected — A radiogroup must have at most one checked radio | 4.1.2 (A) | serious | static | WCAG A EN 301 549 |
| grid-roving-tabindex — A grid should use roving tabindex | 2.1.1 (A) | moderate | static | WCAG A EN 301 549 |
| skip-link-target-valid — A same-page link must point at a real target | 2.4.1 (A) | serious | static | WCAG A EN 301 549 |
| interactive-role-focusable — An element with an interactive role must be keyboard focusable | 2.1.1 (A) | serious | static | WCAG A EN 301 549 |
| role-application-misuse — role="application" should wrap a widget, not browse-mode content | 4.1.2 (A), 1.3.1 (A) | serious | static | WCAG A EN 301 549 |
| data-table-caption — A data table should have an accessible name | 1.3.1 (A) | moderate | static | WCAG A EN 301 549 |
| slider-spinbutton-range-complete — A slider/spinbutton must expose a coherent value range | 4.1.2 (A), 1.3.1 (A) | serious | static | WCAG A EN 301 549 |
| combobox-aria-autocomplete — aria-autocomplete on a combobox must be a valid token | 4.1.2 (A) | moderate | static | WCAG A EN 301 549 |
| accordion-heading-structure — Accordion headers should sit inside a heading | 1.3.1 (A) | minor | static | WCAG A EN 301 549 |
| feed-structure — A feed must contain articles with position information | 1.3.1 (A) | minor | static | WCAG A EN 301 549 |
| keyboard-trap — Keyboard focus must not be trapped | 2.1.2 (A) | critical | live | WCAG A EN 301 549 Best practice |
| keyboard-reachable — Interactive elements must be reachable by keyboard | 2.1.1 (A) | serious | live | WCAG A EN 301 549 Best practice |
| focus-order — Tab order should follow the visual order | 2.4.3 (A) | moderate | live | WCAG A EN 301 549 Best practice |
| focus-visible-live — Focused elements must show a visible focus indicator | 2.4.7 (AA) | serious | live | WCAG AA EN 301 549 Best practice |
| focus-appearance — The focus indicator must be large enough (2.4.13) | 2.4.13 (AAA) | minor | live | WCAG AAA |
| on-focus-navigation — Receiving focus must not trigger a page navigation | 3.2.1 (A) | serious | live | WCAG A EN 301 549 Section 508 Trusted Tester |
| widget-keyboard-operable — A composite widget must respond to arrow-key navigation | 2.1.1 (A) | serious | live | WCAG A EN 301 549 |
| focus-not-obscured — A focused control must not be hidden by a sticky or fixed overlay | 2.4.11 (AA) | serious | live | WCAG AA EN 301 549 |
| dialog-focus-return — Closing a dialog must return focus to its opener | 2.4.3 (A) | serious | live | WCAG A EN 301 549 |
| content-on-hover — Hover-revealed content must be hoverable and dismissable | 1.4.13 (AA) | moderate | live | WCAG AA EN 301 549 |
Document accessibility
Checks the PDF accessibility checker runs against PDF files (PDF/UA — ISO 14289). Their pages are prefixed pdf-. Open this area →
Document level
| Rule | WCAG | Impact | Mode | Standards |
|---|---|---|---|---|
| pdf-doc-title — The document needs a title | 2.4.2 (A) | Low | PDF/UA | WCAG A EN 301 549 |
| pdf-doc-tags — The document must be a tagged PDF | 1.3.1 (A) | Critical | PDF/UA | WCAG A EN 301 549 |
| pdf-doc-lang — The document needs a primary language | 3.1.1 (A) | High | PDF/UA | WCAG A EN 301 549 |
| pdf-doc-pdf-standard — The file should declare PDF/UA conformance | — | Low | PDF/UA | |
| pdf-doc-bookmarks — Long documents need bookmarks | 2.4.5 (AA) | Low | PDF/UA | WCAG AA EN 301 549 |
| pdf-doc-accessibility-permissions — Security settings must not block assistive technology | 1.3.1 (A) | Critical | PDF/UA | WCAG A EN 301 549 |
| pdf-doc-logical-order — Reading order must follow the visual order | 1.3.2 (A) | Critical | PDF/UA | WCAG A EN 301 549 |
| pdf-outline-action-entry — Bookmarks must actually go somewhere | 2.4.5 (AA) | Medium | PDF/UA | WCAG AA EN 301 549 |
| pdf-intra-doc-structure-dest — Internal links should target structure, not page numbers | — | Medium | PDF/UA |
Metadata
| Rule | WCAG | Impact | Mode | Standards |
|---|---|---|---|---|
| pdf-metadata-embedded-file-specs — Attachments need a Unicode filename | — | Low | PDF/UA | |
| pdf-metadata-display-title — Viewers should show the title, not the file name | 2.4.2 (A) | Low | PDF/UA | WCAG A EN 301 549 |
| pdf-xmp-text-pua — Metadata must not contain private-use characters | 2.4.2 (A) | Medium | PDF/UA | WCAG A EN 301 549 |
Page content
| Rule | WCAG | Impact | Mode | Standards |
|---|---|---|---|---|
| pdf-content-is-tagged — All real content must be tagged, decoration marked as artifact | 1.3.1 (A) | Critical | PDF/UA | WCAG A EN 301 549 |
| pdf-color-contrast — Text needs sufficient contrast against its background | 1.4.3 (AA) | High | PDF/UA | WCAG AA EN 301 549 |
Headings
| Rule | WCAG | Impact | Mode | Standards |
|---|---|---|---|---|
| pdf-h-tag-usage — Use numbered headings, not the generic H tag | 1.3.1 (A) | High | PDF/UA | WCAG A EN 301 549 |
| pdf-header-nesting — Heading levels must not skip | 1.3.1 (A) | High | PDF/UA | WCAG A EN 301 549 |
| pdf-first-header-level — The first heading should be an H1 | 1.3.1 (A) | Low | PDF/UA | WCAG A EN 301 549 |
| pdf-multiple-h-in-parent — Only one generic H per parent | 1.3.1 (A) | Medium | PDF/UA | WCAG A EN 301 549 |
Figures & images
| Rule | WCAG | Impact | Mode | Standards |
|---|---|---|---|---|
| pdf-figure-alt-text — Images need alternative text | 1.1.1 (A) | Critical | PDF/UA | WCAG A EN 301 549 |
| pdf-image-outside-figure — Images must be tagged as figures | 1.1.1 (A) | Critical | PDF/UA | WCAG A EN 301 549 |
| pdf-figure-alt-text-exposure — Ancestor alt text is shadowing a figure | 1.1.1 (A) | Low | PDF/UA | WCAG A EN 301 549 |
| pdf-figure-bbox — Figures need a bounding box | — | Medium | PDF/UA | |
| pdf-formula-alt-text — Formulas need alternative text | 1.1.1 (A) | Critical | PDF/UA | WCAG A EN 301 549 |
Tables
| Rule | WCAG | Impact | Mode | Standards |
|---|---|---|---|---|
| pdf-table-headers-exist — Tables need header cells | 1.3.1 (A) | Critical | PDF/UA | WCAG A EN 301 549 |
| pdf-table-header-scope — Header cells need a scope | 1.3.1 (A) | Critical | PDF/UA | WCAG A EN 301 549 |
| pdf-table-data-association — Data cells need to be linked to their headers | 1.3.1 (A) | Critical | PDF/UA | WCAG A EN 301 549 |
| pdf-table-legality — Tables need valid row and cell structure | 1.3.1 (A) | Medium | PDF/UA | WCAG A EN 301 549 |
| pdf-table-regularity — Tables must have a consistent column count | 1.3.1 (A) | Medium | PDF/UA | WCAG A EN 301 549 |
| pdf-table-header-structure — TH cells must sit directly inside a row | 1.3.1 (A) | Medium | PDF/UA | WCAG A EN 301 549 |
| pdf-table-data-structure — TD cells must sit directly inside a row | 1.3.1 (A) | Medium | PDF/UA | WCAG A EN 301 549 |
| pdf-table-row-structure — Rows must sit inside the table or a row group | 1.3.1 (A) | Medium | PDF/UA | WCAG A EN 301 549 |
| pdf-table-summary — Complex tables benefit from a summary | — | Low | PDF/UA |
Lists
| Rule | WCAG | Impact | Mode | Standards |
|---|---|---|---|---|
| pdf-list-parent-element — List items must sit inside a list | 1.3.1 (A) | Medium | PDF/UA | WCAG A EN 301 549 |
| pdf-list-body-element — List item content needs an LBody | 1.3.1 (A) | Low | PDF/UA | WCAG A EN 301 549 |
Links
| Rule | WCAG | Impact | Mode | Standards |
|---|---|---|---|---|
| pdf-link-description — Links need a meaningful description | 2.4.4 (A) | Medium | PDF/UA | WCAG A EN 301 549 |
| pdf-link-parent-link — Link annotations belong inside a Link element | 1.3.1 (A) | High | PDF/UA | WCAG A EN 301 549 |
| pdf-link-alt-text-exposure — Nested link tags hide the link description | 2.4.4 (A) | Low | PDF/UA | WCAG A EN 301 549 |
Forms
| Rule | WCAG | Impact | Mode | Standards |
|---|---|---|---|---|
| pdf-form-field-description — Form fields need labels | 3.3.2 (A), 4.1.2 (A) | Critical | PDF/UA | WCAG A EN 301 549 |
| pdf-form-field-hidden — Form fields must not be hidden by ancestor alt text | 4.1.2 (A) | Medium | PDF/UA | WCAG A EN 301 549 |
| pdf-widget-parent-form — Form widgets belong inside a Form element | 4.1.2 (A) | High | PDF/UA | WCAG A EN 301 549 |
| pdf-form-lbl-structure — Visible form labels need an Lbl element | 1.3.1 (A), 3.3.2 (A) | High | PDF/UA | WCAG A EN 301 549 |
| pdf-choice-field-opt-text — Dropdown options need text | 4.1.2 (A) | Critical | PDF/UA | WCAG A EN 301 549 |
| pdf-radio-button-unique-names — Radio groups need distinct field names | 4.1.2 (A) | Medium | PDF/UA | WCAG A EN 301 549 |
| pdf-text-field-rv-requires-v — Rich-text fields need a plain-text value | 4.1.2 (A) | High | PDF/UA | WCAG A EN 301 549 |
| pdf-xfa-form-present — XFA forms are not allowed | 4.1.2 (A) | Critical | PDF/UA | WCAG A EN 301 549 |
Annotations
| Rule | WCAG | Impact | Mode | Standards |
|---|---|---|---|---|
| pdf-annot-tagged — Annotations must appear in the tag tree | 1.3.1 (A) | High | PDF/UA | WCAG A EN 301 549 |
| pdf-annot-tab-order — Pages with annotations need a tab order | 2.4.3 (A) | High | PDF/UA | WCAG A EN 301 549 |
| pdf-annot-deprecated-type — Remove deprecated annotation types | — | High | PDF/UA | |
| pdf-markup-annot-tagged — Markup annotations must be tagged | 1.3.1 (A) | Medium | PDF/UA | WCAG A EN 301 549 |
| pdf-markup-annot-description — Markup annotations need a description | 1.1.1 (A) | Medium | PDF/UA | WCAG A EN 301 549 |
| pdf-markup-annot-parent-annot — Markup annotations belong inside an Annot element | 1.3.1 (A) | High | PDF/UA | WCAG A EN 301 549 |
| pdf-annot-invalid-parent — Annotations must not hang off headings or the document root | 1.3.1 (A) | Medium | PDF/UA | WCAG A EN 301 549 |
| pdf-popup-in-structure — Popup annotations must stay out of the tag tree | — | Medium | PDF/UA | |
| pdf-printermark-artifact — Printer marks must be artifacts | — | Medium | PDF/UA | |
| pdf-screen-annot-contents — Embedded media needs a text description | 1.1.1 (A) | Critical | PDF/UA | WCAG A EN 301 549 |
| pdf-multimedia-alt-description — 3D and rich media need alternative descriptions | 1.1.1 (A) | Critical | PDF/UA | WCAG A EN 301 549 |
| pdf-media-clip-alt — Media clips need an Alt entry | 1.2.1 (A) | High | PDF/UA | WCAG A EN 301 549 |
| pdf-media-clip-ct — Media clips need a content type | — | Medium | PDF/UA | |
| pdf-fileattachment-metadata — File attachments need a description and relationship | — | High | PDF/UA |
Fonts & text encoding
| Rule | WCAG | Impact | Mode | Standards |
|---|---|---|---|---|
| pdf-content-font-embedding — All fonts must be embedded | — | Critical | PDF/UA | |
| pdf-character-unicode — Every character must map to Unicode | 1.3.1 (A) | Critical | PDF/UA | WCAG A EN 301 549 |
| pdf-pua-character-usage — Avoid Private Use Area characters for real text | 1.3.1 (A) | Medium | PDF/UA | WCAG A EN 301 549 |
| pdf-font-unicode-invalid-values — ToUnicode maps must not use reserved codepoints | 1.3.1 (A) | High | PDF/UA | WCAG A EN 301 549 |
| pdf-font-cidsysteminfo-compat — CIDSystemInfo must agree between font and CMap | — | High | PDF/UA | |
| pdf-font-cidtogidmap — Embedded CIDFontType2 fonts need a CIDToGIDMap | — | High | PDF/UA | |
| pdf-font-cmap-embedded — Custom CMaps must be embedded | — | High | PDF/UA | |
| pdf-font-wmode-consistent — CMap writing mode must be consistent | — | Medium | PDF/UA | |
| pdf-font-charset-complete — Type 1 CharSet must list every embedded glyph | — | Medium | PDF/UA | |
| pdf-font-cidset-complete — CIDSet must list every embedded CID | — | Medium | PDF/UA | |
| pdf-font-glyph-width-consistent — Declared glyph widths must match the font program | — | Medium | PDF/UA | |
| pdf-font-truetype-nonsymbolic-encoding — Non-symbolic TrueType fonts need a valid encoding | — | High | PDF/UA | |
| pdf-font-truetype-symbolic-encoding — Symbolic TrueType fonts must not declare an encoding | — | Medium | PDF/UA |
Structure & other
| Rule | WCAG | Impact | Mode | Standards |
|---|---|---|---|---|
| pdf-custom-tag-mapping — Custom tags must be role-mapped | 1.3.1 (A) | High | PDF/UA | WCAG A EN 301 549 |
| pdf-standard-type-remapped — Standard tags must not be re-mapped | 1.3.1 (A) | High | PDF/UA | WCAG A EN 301 549 |
| pdf-note-tag-usage — Use FENote instead of Note | — | High | PDF/UA | |
| pdf-fenote-notetype — FENote elements should declare their note type | — | Medium | PDF/UA | |
| pdf-code-alt-text — Code blocks need alternative text | 1.3.1 (A) | High | PDF/UA | WCAG A EN 301 549 |
| pdf-toci-ref-entry — Table-of-contents entries need a target | 1.3.1 (A) | Medium | PDF/UA | WCAG A EN 301 549 |
| pdf-reference-xobject — Reference XObjects are not allowed | — | High | PDF/UA | |
| pdf-form-xobject-mcid-multiref — Tagged Form XObjects must be referenced once | 1.3.1 (A) | High | PDF/UA | WCAG A EN 301 549 |
| pdf-occd-name — Layer configurations need a name | — | Medium | PDF/UA | |
| pdf-occd-as-key — Automatic layer state is not allowed | — | Medium | PDF/UA |