EqualWeb Accessibility Wiki
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.
What this wiki is
This is the reference documentation for every automated check the EqualWeb accessibility engine runs. One page per check, written from the same rule metadata the engine itself uses — so the documentation cannot drift from what the scanner actually does.
Every page answers the same four questions:
- Why it matters — what actually breaks for a disabled user when the check fails.
- How to fix it — the change to make, in plain terms.
- Example — failing markup next to passing markup.
- Standards — the WCAG success criteria the check maps to, plus Section 508, EN 301 549, Trusted Tester v5 and ACT where they apply.
What it is used for
Every issue in an EqualWeb accessibility report links to the page for the check that raised it. A finding is therefore never a dead end: whoever has to fix it gets the reasoning and working code rather than a rule id.
It is also a standalone reference. Use it to look up what a WCAG success criterion means in practice, to see which checks a standard requires before an audit, or to understand what automated testing can and cannot decide on its own — checks that need a live browser are marked, and anything the engine cannot determine is reported as incomplete rather than silently passed.
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 |