On this page
Two chairs and multiple monitors opposite. One of them bears the words: "Digital Accessibility Audit in progress...". Image by Andy from Pixabay

Accessibility automated website scans and how much can they catch

Automated accessibility testing tools have gained traction due to their ability to quickly analyze web pages for compliance with accessibility standards, such as the Web Content Accessibility Guidelines (WCAG). These tools can scan a website’s code and identify potential issues, making them an attractive option for developers and organizations looking to improve accessibility.

Introduction

Automated website scans offer a fast and efficient way to assess web accessibility, making them ideal for integration into CI/CD pipelines. These tools provide consistent results by validating against a predefined set of rules, ensuring that no accessibility cases are overlooked.

However, they may generate false positives due to the complexity of web code and content, and they struggle with nuanced judgments, such as evaluating the relevance of alt text descriptions. In practice, automated tests cannot cover every WCAG requirement because of current technological limitations, leaving some failure patterns that commonly appear in lawsuits undetected.

While automated testing is a valuable component of a comprehensive accessibility strategy, it should be complemented by manual testing and real-user testing, including input from individuals with disabilities, to ensure a truly inclusive digital experience across devices and assistive technologies.

What percentage of accessibility issues can automated tools catch?

WCAG 2.2 Level AAA defines 87 Success Criteria (SC), but only a subset can be translated into deterministic, machine-testable rules suitable for automation.

Research that maps WCAG 2.2 SC to automated rules puts the theoretical ceiling at 20%-40% of all possible SC failures. That figure is not fixed and it shrinks or grows depending on how many of the 87 Success Criteria (SC) are actually present on the page under test.

For instance, a static marketing site with no multimedia or complex forms might expose only 30 relevant SCs, while a transactional SaaS dashboard could surface 60 or more.

Because automation can only validate criteria that lend themselves to binary pass/fail logic, such as color contrast, missing alt attributes, or duplicate IDs, the real-world catch rate is always a fraction of the applicable Success Criteria, not a universal percentage. In other words, the practical catch rate depends on the scope of features present in the tested instance, not the full WCAG catalog.

What automated tools can catch

Think of an automated accessibility checker as a spell-checker for code: it scans for clear-cut mistakes it can quantify with confidence.

  • Missing alternative text on images.
  • Text that doesn’t meet the minimum color contrast ratio but only when foreground and background colors can be reliably identified. If the text sits over a background image, gradient, semi-transparent overlay, or sticky/fixed layer, the tool may report contrast can’t be determined.
  • Form fields lacking associated labels.
  • Improper heading structure (e.g., an h3 directly following an h1).
  • Duplicate element IDs, or interactive elements like buttons and links that are empty or unlabeled.

If an issue can be expressed as a binary yes/no rule, the tool can flag it instantly and across every page.

The major advantage: the automated audit never gets tired. It tests every rule, on every element, every time, so nothing that can be detected is ever skipped. This makes results predictable, repeatable, and easy to integrate into a build pipeline.

Why manual testing is non-negotiable

Automated scans end where human experience begins. Code can flag a missing <label>, but it can’t determine whether the visible text beside a control is intelligible, or whether a keyboard trap appears only when the viewport is zoomed to 200%. The following three mini-case studies illustrate the gap in action.

  1. Perfect contrast that fails in sunlight.

    A fintech dashboard scored 100% on an automated color-contrast audit. In user testing, two low-vision participants could not read error messages on a glossy tablet outdoors because the automated test only sampled the CSS colour values, not the semi-transparent red overlay that JavaScript injected on submit. A five-minute manual check caught the issue and the fix was one line of Sass.

  2. Keyboard order that logic can’t see

    A travel-booking flow passed the automated test for the tab order rule. However, manual keyboard navigation revealed a calendar widget that sent focus to a hidden close button in the DOM, stranding keyboard users three modal layers away from the main content. No rule in the engine recognized that the widget was visually hidden but still focusable.

  3. Alt text that is present and meaningless

    An e-commerce gallery included alt attributes on every product image: img-1, img-2, img-3, etc. The automated report passed, but screen reader users heard only meaningless filenames. A quick manual review rewrote the strings to describe product type, color, and key feature – cutting customer support calls significantly in the next release.

These patterns-dynamic state, intent, real-world context-recur in every audit. Until tools can ask why is this here? and does it make sense to a person?, expert and disabled person testing remains the only safety net that prevents compliance metrics from becoming a vanity score.

WCAG 2.2 quick-reference: which Success Criteria can be scripted, which can’t, and why

Below is a table outlining all WCAG Success Criteria, along with corresponding test cases, an indication of whether they can be automated (YES/NO), and a justification column explaining why certain criteria cannot be automated or the challenges involved.

Note: the data in the table will change dynamically because the cases and tests will be subject to continuous verification.

WCAG Success Criteria coverage, test cases, and automation justification
Success CriteriaTest-case (one-line)Can be automated?JustificationPrimary Technique(s)
1.1.1 Non-text Content – Level A
1.1.1 Controls, Input<input type="image">, <button>, icon-only controls have accessible name that describes purpose (matches visible label) Yes
  • alt attribute exists and is not empty
  • alt value is not file name (no .jpg, .png, etc.)
  • alt value is not generic (image, button)
  • accessible name matches visible label (if any)
H37, ARIA6, ARIA10
1.1.1 Time-Based MediaStill-frame poster or adjacent text gives descriptive ID of media (e.g. Video: CEO welcome) No
  • human verifies transcript captures all spoken words & non-speech information
  • no reliable speech-to-text automation that guarantees equivalence
G94 (guidance only)
1.1.1 Test / ExerciseAlt text identifies the test only (Color-vision screening plate 3) without revealing the answer No
  • human verifies alt does not give away the solution
  • cannot automate semantic check of too informative
G94 (guidance only)
1.1.1 SensoryAlt text identifies the sensory asset (Abstract ambient background video) No
  • requires contextual appreciation of emotional/visual intent
  • no automated classifier for sensory experience purpose
G94 (guidance only)
1.1.1 CAPTCHAAlt text states purpose (CAPTCHA – visual verification) and a non-visual CAPTCHA alternative (audio, SMS, email) is present No
  • alt presence checkable, but functionality of audio/SMS alternative must be tested manually
  • need human verification that both modes are solvable
G94 + human-verified alternative
1.1.1 Decoration, Formatting, InvisibleDecorative/icon-span images use empty alt="", CSS background-image, or aria-hidden="true" Yes
  • alt="" present and empty
  • decorative image implemented via CSS background-image
  • image has aria-hidden="true" or role="presentation"
H37 (empty alt), C9 (CSS bg), ARIA5
1.2.1 Audio-only and Video-only (Prerecorded) – Level A
1.2.1 Prerecorded Audio-onlyEquivalent text transcript or other alternative for prerecorded audio-only content is available No
  • human verifies transcript captures all spoken words & non-speech information
  • no reliable speech-to-text automation that guarantees equivalence
G158
1.2.1 Prerecorded Video-onlyEquivalent text transcript or audio track describing visuals for prerecorded video-only content is available No
  • human checks that transcript/audio describes all essential visual events
  • automated scene-description APIs are not accurate enough for WCAG equivalence
G159
1.2.2 Captions (Prerecorded) – Level A
1.2.2 Captions (Prerecorded)<track kind="captions"> (or equivalent) exists for every prerecorded <video>/<audio> Yes
  • DOM contains <track kind="captions"> element linked to media
  • track file is loadable (200 OK) and in WebVTT format
H95
1.2.2 Captions (Prerecorded)Captions text is accurate, complete and synchronized No
  • human review needed for accuracy (words, speaker IDs, sound cues)
  • sync correctness requires listening while watching captions
G93
1.2.2 Captions (Prerecorded) – exceptionMedia labelled as media alternative for text (e.g. Audio version of article) and no captions provided Yes
  • check adjacent text or aria-label states media is alternative to on-page text
  • no captions required when label is present
G159
1.2.3 Audio Description or Media Alternative (Prerecorded) – Level A
1.2.3 Audio Description<track kind="descriptions"> or separate description audio is provided for prerecorded video Yes
  • DOM contains <track kind="descriptions"> or second audio source
  • track file is loadable (200 OK) and in WebVTT or compatible format
H96
1.2.3 Audio DescriptionDescription text accurately conveys essential visual information No
  • human review that narration describes scene changes, text, actions
  • automated scene description not accurate enough for equivalence
G78
1.2.3 Media AlternativeFull text transcript provided that includes all visual and auditory information No
  • human verifies transcript contains dialogue, scene descriptions, on-screen text
  • no automated extractor guarantees completeness
G69
1.2.4 Captions (Live) – Level AA
1.2.4 Captions (Live)Live caption track (WebVTT stream, embedded caption window, or third-party player captions) is active for every live audio/video stream Yes
  • DOM or player API reports kind="captions" track active
  • caption websocket/URL returns 200 OK and text packets
G9
1.2.4 Captions (Live)Live captions are accurate and synchronized with speech No
  • real-time accuracy requires human monitoring
  • latency & sync must be checked by listening while watching captions
G9 (guidance only)
1.2.5 Audio Description (Prerecorded) – Level AA
1.2.5 Audio Description<track kind="descriptions"> or secondary audio file provides audio description for prerecorded video Yes
  • DOM contains <track kind="descriptions"> or second audio source
  • track/file is loadable (200 OK) and in supported format (WebVTT, MP3, etc.)
H96
1.2.5 Audio DescriptionDescription track is synchronized with video and accurately conveys essential visual information No
  • human review that description fits within natural pauses and describes scenes, text, actions
  • automated scene description not sufficient for equivalence
G78
1.2.6 Sign Language (Prerecorded) – Level AAA
1.2.6 Sign LanguageSign-language interpretation track or inset video is provided for prerecorded media Yes
  • DOM contains <track kind="sign"> or second video element with sign stream
  • track/inset video is loadable (200 OK) and in supported format
H97
1.2.6 Sign LanguageSign-language interpretation is accurate, complete and synchronized with spoken content No
  • qualified signer required to verify accuracy and completeness
  • sync must be checked by watching sign stream while listening to audio
H97 (guidance only)
1.2.7 Extended Audio Description (Prerecorded) – Level AAA
1.2.7 Extended Audio DescriptionExtended description track or segmented video with pauses is provided for prerecorded media Yes
  • DOM contains <track kind="descriptions"> flagged as extended OR player offers extended AD mode
  • track file is loadable (200 OK) and in WebVTT or compatible format
H96 + G8
1.2.7 Extended Audio DescriptionExtended descriptions fit into added pauses and convey all essential visual information No
  • human review that new narration slots are inserted and cover scenes, text, actions
  • automated scene description cannot guarantee completeness or timing
G8 (guidance only)
1.2.8 Media Alternative (Prerecorded) – Level AAA
1.2.8 Media AlternativeFull text document (transcript) that includes all visual and auditory information is provided and linked adjacent to media Yes
  • link or button with text like Transcript is present in DOM
  • linked document returns 200 OK and is parseable text (HTML, PDF, etc.)
G69
1.2.8 Media AlternativeTranscript contains complete dialogue, speaker IDs, scene descriptions, and on-screen text No
  • human review required to confirm completeness and accuracy
  • no automated extractor guarantees full visual & auditory equivalence
G69 (guidance only)
1.2.9 Audio-only (Live) – Level AAA
1.2.9 Audio-only (Live)Real-time text alternative (live transcript/captions) is provided for live audio-only stream Yes
  • live caption WebVTT endpoint or iframe reports 200 OK and text chunks
  • DOM or player API shows kind="captions" track active for audio element
G150
1.2.9 Audio-only (Live)Live text alternative is accurate and synchronized with speech No
  • real-time accuracy requires human monitoring
  • latency & sync must be checked by listening while reading stream
G150 (guidance only)
1.3.1 Info and Relationships – Level A
1.3.1 Info and RelationshipsHeading elements <h1>-<h6> are used and form a logical outline Yes
  • no skipped levels (e.g., h1→h3)
  • first heading in document is <h1>
  • no empty heading tags
H42
1.3.1 Info and RelationshipsLists use correct semantic markup <ul>, <ol>, <dl> Yes
  • list items wrapped in <li> (or <dt>/<dd>)
  • no role=”list” on non-list elements unless intentionally styled
H48
1.3.1 Info and RelationshipsTable cells use <th> with scope (or id/headers) for column/row headers Yes
  • header cells identified by <th scope="col"> or scope="row"
  • complex tables use id on <th> and headers attribute on <td>
H51
1.3.1 Info and RelationshipsForm fields use explicit <label> or aria-labelledby Yes
  • every input has <label for="id"> or aria-labelledby pointing to valid ID
  • no duplicate id values
H44, ARIA9
1.3.1 Info and RelationshipsARIA roles, states and properties correctly mirror native semantics when native HTML is insufficient Yes
  • role value is valid and necessary (no redundant role on native element)
  • required ARIA attributes for role are present (e.g., aria-checked for checkbox)
ARIA5, ARIA17
1.3.2 Meaningful Sequence – Level A
1.3.2 Meaningful SequenceDOM order matches visual reading order (no CSS flex/grid order or positive tabindex that breaks sequence) Yes
  • no positive tabindex values
  • computed order property equals 0 for all focusable elements inside flex/grid containers
C27
1.3.2 Meaningful SequenceContent read by screen-reader is coherent when CSS is disabled No
  • turn off CSS and confirm narrative still makes sense
  • requires human judgement of coherence
G57
1.3.3 Sensory Characteristics – Level A
1.3.3 Sensory CharacteristicsInstructions do not rely solely on sensory characteristics (shape, color, sound, location, visual orientation) No
  • human review of all instructional text
  • check for phrases like the red button, on the right, the circle icon without additional label
G96
1.3.3 Sensory CharacteristicsWhere color is used, a second visual cue (text, shape, icon) is present Yes
  • color-only CSS rules (e.g., .error { color:red; }) also add icon/text via ::before or adjacent element
  • no element conveys state exclusively through background-color or border-color
G182
1.3.4 Orientation – Level AA
1.3.4 OrientationContent does not lock orientation; works in both portrait and landscape Yes
  • no orientation: portrait/landscape in CSS @media queries
  • no screen.orientation.lock() calls in JavaScript
  • no manifest attribute that forces orientation
C31
1.3.4 OrientationLayout reflows acceptably when device is rotated No
  • manual testing in both orientations required
  • check for clipped content, unreachable controls, or horizontal scrolling
C31 (guidance only)
1.3.5 Identify Input Purpose – Level AA
1.3.5 Identify Input PurposeAll fields that collect user data use correct autocomplete token Yes
  • autocomplete attribute value is one of the valid tokens
  • token matches field purpose (e.g., email, given-name, address-line1)
  • attribute present on <input>, <select>, or <textarea>
H98
1.3.5 Identify Input PurposeAutocomplete token is appropriate to the visible label No
  • human checks that token matches label semantics (e.g., field labelled First name uses given-name)
  • cannot automate semantic mapping of arbitrary label text to token
H98 (guidance only)
1.3.6 Identify Purpose – Level AAA
1.3.6 Identify PurposeCommon UI components use ARIA roles, icons use role="img" with accessible name, and landmarks use standard ARIA landmark roles Yes
  • buttons use role="button" (or native <button>)
  • icons use role="img" with aria-label/aria-labelledby
  • landmarks use valid roles: banner, main, navigation, contentinfo, etc.
ARIA11
1.3.6 Identify PurposePurpose of common icons and controls is programmatically determinable via ARIA or schema.org Yes
  • aria-label/aria-labelledby conveys purpose (e.g., Search, Shopping cart)
  • schema.org microdata or meta tags identify purpose where applicable
ARIA13
1.3.6 Identify PurposeSame-purpose icons/controls use consistent accessible names across pages No
  • human review that identical icons (e.g., cart, print) have identical labels site-wide
  • automated string comparison possible but semantic equivalence requires human judgement
ARIA13 (guidance only)
1.4.1 Use of Color – Level A
1.4.1 Use of ColorColor is not the only visual means of conveying information Yes
  • no element uses background-color or color alone to indicate state
  • additional cues present: text, icon, border, underline, shape
G182
1.4.1 Use of ColorLinks are distinguishable by more than color (underline, icon, or focus outline) Yes
  • links have text-decoration: underline or border-bottom or icon (::before content)
  • focus outline visible on keyboard focus
G183
1.4.1 Use of ColorError states use both colour and text/icon (e.g., red border + error message) Yes
  • error class adds visible text or icon in addition to colour change
  • aria-describedby points to visible error text
G182 (guidance only)
1.4.2 Audio Control – Level A
1.4.2 Audio ControlAny audio that plays automatically for more than 3 seconds has a pause/stop control and volume control independent of system level Yes
  • <audio autoplay> or <video autoplay> elements have visible pause/stop button
  • player exposes volume slider/mute button accessible via keyboard
  • no automatic re-start after user pauses
G170
1.4.2 Audio ControlAutomatic audio duration ≤ 3 s OR user preference remembered across pages Yes
  • script measures audio duration ≤ 3 s OR stores user pause preference in localStorage/cookie
  • preference respected on subsequent pages/visits
G60
1.4.3 Contrast (Minimum) – Level AA
1.4.3 Contrast (Minimum)Text and images of text have a contrast ratio of at least 4.5:1 (3:1 for large text) Yes
  • computed color and background-color values fed into contrast algorithm (WCAG formula)
  • large text ≥ 18 pt (24 px) or ≥ 14 pt (18.66 px) bold uses 3:1 threshold
  • text on gradients/images uses sampled average colour
G18
1.4.3 Contrast (Minimum)Incidental text (inactive, decorative, invisible, logotypes) is excluded from requirement No
  • human classification needed to decide if text is decorative, part of logo, or inactive
  • automated heuristics can flag but not certify exemption
G18 (guidance only)
1.4.4 Resize Text – Level AA
1.4.4 Resize TextContent remains usable when page is zoomed to 200 % without horizontal scrolling and without loss of information or functionality Yes
  • set browser zoom to 200 %; detect viewport width ≤ 320 px (starting from 1280 px)
  • no element wider than viewport (no overflow-x: scroll)
  • all text still visible and interactive elements reachable
G179
1.4.4 Resize TextText can be resized up to 200 % via browser zoom without assistive technology Yes
  • no maximum-scale=1 or user-scalable=no in viewport meta tag
  • no fixed px font sizes that prevent scaling (use rem/em)
C28
1.4.5 Images of Text – Level AA
1.4.5 Images of TextText is implemented via real text, not raster images, unless essential (logo, screenshot, etc.) Yes
  • no <img> elements where alt text matches visible text (flagged as potential image-of-text)
  • no background-images containing text unless CSS-generated content is used
G174
1.4.5 Images of TextEssential images of text (logos, screenshots, diagrams) remain essential and unchanged No
  • human decision required to confirm image is essential (logo, brand, sample screenshot)
  • automated tools can flag but cannot certify essential status
G174 (guidance only)
1.4.6 Contrast (Enhanced) – Level AAA
1.4.6 Contrast (Enhanced)Text and images of text have a contrast ratio of at least 7:1 (4.5:1 for large text) Yes
  • same algorithm as 1.4.3 but with 7:1 threshold (4.5:1 for ≥18 pt / ≥14 pt bold)
  • sample colours from computed style and background
G17
1.4.6 Contrast (Enhanced)Incidental text (inactive, decorative, invisible, logotypes) is excluded No
  • human classification needed to decide if text is decorative, part of logo, or inactive
  • automated heuristics can flag but not certify exemption
G17 (guidance only)
1.4.7 Low or No Background Audio – Level AAA
1.4.7 Low or No Background AudioSpeech audio is ≥ 20 dB louder than background sound (or background can be disabled) No
  • requires audio-level metering or human listening test
  • automated browser APIs do not expose dB values
G56
1.4.8 Visual Presentation – Level AAA
1.4.8 Visual PresentationWidth ≤ 80 characters (or 40 CJK), text-align left/right, line-height ≥ 1.5, no justified text, user can select foreground/background colours No
  • character count per line requires human measurement at default font size
  • colour selection must be tested manually with browser/user-style sheet
C20
1.4.9 Images of Text (No Exception) – Level AAA
1.4.9 Images of Text (No Exception)Zero images of text used (pure decoration and logotypes only) Yes
  • flag any <img> whose alt text is readable prose
  • background-images containing text are reported unless marked decorative
G205
1.4.10 Reflow – Level AA
1.4.10 ReflowContent reflows to 320 CSS px width without horizontal scrollbar and without loss of content/function Yes
  • resize viewport to 320 px wide (or 1280 px zoom 400 %)
  • assert document.documentElement.scrollWidth ≤ window.innerWidth
  • no hidden or off-screen interactive elements
C33
1.4.11 Non-text Contrast – Level AA
1.4.11 Non-text ContrastUI components and graphical objects have ≥ 3:1 contrast against adjacent colours Yes
  • sample border/background colours of buttons, checkboxes, focus outlines, icons
  • calculate contrast against immediate background
G207
1.4.12 Text Spacing – Level AA
1.4.12 Text SpacingWith user styles: line-height 1.5, paragraph-spacing 2× font-size, letter-spacing 0.12×, word-spacing 0.16× — no loss of content/function Yes
  • inject test stylesheet and measure
  • assert no clipped text or overlapping controls
  • no horizontal scrollbar appears at 320 px width
C36
1.4.13 Content on Hover or Focus – Level AA
1.4.13 Content on Hover or FocusAdditional content shown on hover/focus is dismissible, hoverable, and persistent Yes
  • ESC key closes tooltip/pop-up
  • pointer can move from trigger to tooltip without disappearing (mouseover tunnel test)
  • content remains open until user dismisses or moves focus/hover
C42
2.1.1 Keyboard – Level A
2.1.1 KeyboardAll functionality available through keyboard interface (no mouse-only handlers) Yes
  • no onclick without onkeydown/onkeyup or role="button" + tabindex=”0″
  • all interactive elements reachable via Tab
G90
2.1.2 No Keyboard Trap – Level A
2.1.2 No Keyboard TrapFocus can be moved away from any element using standard keys (Tab, Shift+Tab, arrow keys, ESC) Yes
  • script records focus cycles; if same element receives focus ≥ N times without user leaving container → trap flagged
  • ESC or documented keystroke exits custom widgets
G21
2.1.3 Keyboard (No Exception) – Level AAA
2.1.3 Keyboard (No Exception)All content functions via keyboard without exception (no time limit, no path-dependent gestures) Yes
  • same as 2.1.1 plus no keyboard shortcuts that require path gestures (only single keys or key combinations)
  • no functionality hidden behind mouse-specific events (drag-and-drop without keyboard alternative)
G91
2.1.4 Character-Key Shortcuts – Level A
2.1.4 Character-Key ShortcutsIf a single printable-key shortcut exists, user can remap it, disable it, or it is active only on focus Yes
  • shortcut is registered only when element has focus OR settings panel allows disable/remap
  • no global single-key shortcuts without modifier (Ctrl/Alt)
C41
2.2.1 Timing Adjustable – Level A
2.2.1 Timing AdjustableUser can turn off, adjust, or extend time limits (≥ 10× default) before expiry Yes
  • control to extend/turn off limit exposed ≥ 20 s before timeout
  • extending gives ≥ 10× original limit OR no limit
G180
2.2.2 Pause, Stop, Hide – Level A
2.2.2 Pause, Stop, HideMoving/blinking/scrolling/auto-updating content can be paused, stopped, or hidden by user Yes
  • visible pause/stop button or keyboard shortcut (e.g., Space/ESC)
  • carousel, marquee, gif, CSS animation respect pause control
C42
2.2.3 No Timing – Level AAA
2.2.3 No TimingNo essential time limits; any remaining limits can be turned off by user Yes
  • no server-side session timeout without user control
  • all client-side timers expose turn off switch
G5
2.2.4 Interruptions – Level AAA
2.2.4 InterruptionsInterruptions (alerts, pop-ups) can be postponed or suppressed by user Yes
  • first focusable element in interruption is Postpone or Close
  • settings/preferences allow turning off non-critical interruptions
G75
2.2.5 Re-authenticating – Level AAA
2.2.5 Re-authenticatingUser can extend/continue session without data loss; re-auth preserves user data Yes
  • form data serialized to localStorage/sessionStorage before timeout
  • after re-login data automatically restored
G105
2.2.6 Timeouts – Level AAA
2.2.6 TimeoutsUsers are warned about any inactivity timeout that could cause data loss, with option to extend Yes
  • modal or banner appears ≥ 20 s before timeout
  • message text identifies timeout duration and offers Extend button
  • data saved (localStorage or server) if timeout occurs
G181
2.3.1 Three Flashes or Below Threshold – Level A
2.3.1 Three Flashes or Below ThresholdNo element flashes >3 times in any 1-second period and flash is below red-scale thresholds Yes
  • canvas/video pixels sampled at 60 FPS; count frame-to-frame red luminance changes
  • fail if ≥ 3 flashes/sec and saturated red ≥ 20% of screen
G176
2.3.2 Three Flashes – Level AAA
2.3.2 Three FlashesNo element flashes at any frequency (zero flashes allowed) Yes
  • same sampling as 2.3.1 but threshold = 0 flashes/sec
  • pass only if no luminance transitions > 10% of screen area
G19
2.3.3 Animation from Interactions – Level AAA
2.3.3 Animation from InteractionsMotion triggered by interaction can be disabled unless essential Yes
  • prefers-reduced-motion respected: @media (prefers-reduced-motion: reduce) sets animation: none
  • UI provides toggle to disable animations
C39
2.4.1 Bypass Blocks – Level A
2.4.1 Bypass BlocksSkip to main content link or landmark is the first focusable element Yes
  • document.body.firstElementChild is visible skip link with href="#main"
  • target ID exists and is focusable
G1
2.4.2 Page Titled – Level A
2.4.2 Page Titled<title> element exists and describes page purpose Yes
  • document.title not empty, not generic (Home, Page)
  • title starts with unique identifier (site/section) and ends with purpose
H25
2.4.3 Focus Order – Level A
2.4.3 Focus OrderTab order follows logical reading sequence (no positive tabindex) Yes
  • collect tabindex values; fail if any > 0
  • focus order matches DOM order (no CSS flex/grid order that breaks sequence)
C27
2.4.4 Link Purpose (In Context) – Level A
2.4.4 Link Purpose (In Context)Link text or context describes purpose (no generic click here, read more without context) No
  • automated heuristics flag generic phrases
  • human verifies context (same sentence, list item, or table cell) clarifies destination
G91
2.4.5 Multiple Ways – Level AA
2.4.5 Multiple WaysAt least two of: site search, nav menu, sitemap, breadcrumb, table of contents, link list Yes
  • count valid landmarks: role="search", <nav>, breadcrumb aria-label, search input, etc.
  • pass if ≥ 2 different methods found
G125
2.4.6 Headings and Labels – Level AA
2.4.6 Headings and LabelsHeadings and labels describe topic or purpose (not empty, not generic) No
  • automated check for non-empty text
  • human judges whether wording describes topic (e.g., Contact details vs Section 1)
G130
2.4.7 Focus Visible – Level AA
2.4.7 Focus VisibleKeyboard focus indicator is visible (minimum 2 px outline or equivalent area) Yes
  • compute focus outline width ≥ 2 px OR area ≥ 2 px around element
  • contrast between focus indicator and unfocused state ≥ 3:1
C40
2.4.8 Location – Level AAA
2.4.8 LocationUser can determine current location within site (breadcrumb, nav highlight, sitemap) Yes
  • breadcrumb link to current page has aria-current="page" or is non-clickable with visible styles
  • nav menu marks current item with aria-current
G65
2.4.9 Link Purpose (Link Only) – Level AAA
2.4.9 Link Purpose (Link Only)Link text alone describes purpose (no reliance on context) No
  • automated heuristics flag generic phrases
  • human verifies each link text is meaningful out of context (Download annual report (PDF, 2 MB))
G91
2.4.10 Section Headings – Level AAA
2.4.10 Section HeadingsLong content organised with headings that identify logical sections Yes
  • content ≥ 500 words contains at least one h2-h6
  • heading text not empty and differs from previous
G141
2.4.11 Focus Appearance – Level AAA
2.4.11 Focus AppearanceFocus indicator ≥ 2 CSS px thick, surrounds element, contrast ≥ 3:1 against all adjacent colours, and has minimum area Yes
  • outline-width ≥ 2 px OR area ≥ 1 px × perimeter
  • contrast between focused and unfocused state ≥ 3:1 against all adjacent colours
C40
2.4.12 Focus Not Obscured – Level AA
2.4.12 Focus Not ObscuredComponent receiving focus is at least partially visible (not fully hidden by sticky/floating content) Yes
  • scroll focused element into view (if needed)
  • assert element bounding box intersects viewport and is not fully occluded by sticky header/banner
C42
2.4.13 Focus Not Obscured (Enhanced) – Level AAA
2.4.13 Focus Not Obscured (Enhanced)Component receiving focus is entirely visible (no part hidden by other content) Yes
  • entire bounding box of focused element must be within viewport and unobscured
  • no overlap from sticky headers, modals, or floating buttons
C42
2.5.1 Pointer Gestures – Level A
2.5.1 Pointer GesturesComplex gestures (multi-point, path-based) have single-pointer alternative Yes
  • no touchmove path or two-finger pinch without single-button/zoom alternative
  • slider allows click/tap on track; drag is optional
G212
2.5.2 Pointer Cancellation – Level A
2.5.2 Pointer CancellationDown-event alone does not trigger action; up-event completes action and can be aborted Yes
  • uses click or mouseup; no mousedown/touchstart-only handlers
  • drag-outside-element cancels activation
G210
2.5.3 Label in Name – Level A
2.5.3 Label in NameVisible label text matches accessible name (case-insensitive substring) Yes
  • visible label text contained in accessible name (aria-label, aria-labelledby, alt, <label>)
  • punctuation and case differences ignored
H96
2.5.4 Motion Actuation – Level A
2.5.4 Motion ActuationFunctions triggered by device motion have UI control and respect prefers-reduced-motion Yes
  • button supplied to perform same function (shake-to-refresh → refresh button)
  • motion listener disabled when prefers-reduced-motion: reduce
G213
2.5.5 Target Size – Level AAA
2.5.5 Target SizePointer targets ≥ 44 × 44 CSS px (or equivalent spacing, or inline, or user-agent size) Yes
  • computed width and height ≥ 44 px
  • OR target in line with text (link inside sentence)
  • OR spacing to adjacent target ≥ 44 px center-to-center
General
2.5.6 Concurrent Input Mechanisms – Level AAA
2.5.6 Concurrent Input MechanismsContent does not restrict input modality (touch + mouse + keyboard + speech) simultaneously Yes
  • no touch-action: none that blocks mouse events
  • no pointer-type detection that disables other modalities
G209
2.5.7 Dragging Movements – Level AA
2.5.7 Dragging MovementsFunctionality that uses dragging (e.g., slider, sortable list) provides single-pointer alternative Yes
  • slider: click/tap on track moves thumb; drag optional
  • sortable list: up/down buttons or menu to move items without drag
  • no script relies solely on dragstart/dragover/drop events
G219
2.5.8 Target Size (Minimum) – Level AA
2.5.8 Target Size (Minimum)Pointer targets ≥ 24 × 24 CSS px (or spacing offset, or inline, or user-agent size, or essential exception) Yes
  • computed width and height ≥ 24 px
  • OR spacing to adjacent target ≥ 24 px center-to-center
  • OR target inline (sentence link)
  • OR essential (map pin, drawing tool) flagged with data
C42
3.1.1 Language of Page – Level A
3.1.1 Language of Page<html lang> attribute present and valid Yes
  • document.documentElement.lang exists and matches BCP 47
  • value not empty, not undefined
H57
3.1.2 Language of Parts – Level AA
3.1.2 Language of PartsForeign-language passages use lang attribute Yes
  • elements with text that differs from page lang have lang attribute
  • value valid BCP 47 tag
H58
3.1.3 Unusual Words – Level AAA
3.1.3 Unusual WordsIdioms, jargon, abbreviations defined inline or via glossary link No
  • human review: first occurrence of jargon/idiom has definition or <dfn> or link to glossary
  • no reliable automated semantic checker for unusual words
G101
3.1.4 Abbreviations – Level AAA
3.1.4 AbbreviationsFirst occurrence of abbreviations/expansions is provided or linked to glossary No
  • human checks for <abbr> with title or parenthetical expansion
  • acronym detector can flag but not decide necessity
G102
3.1.5 Reading Level – Level AAA
3.1.5 Reading LevelText requires ≤ lower-secondary reading level (or supplemental version available) No
  • automated readability scores (Flesch, SMOG) are indicative only
  • final decision requires human educational expert review
G153
3.1.6 Pronunciation – Level AAA
3.1.6 PronunciationAmbiguous pronunciation provided inline or via link No
  • human decides if word is ambiguous (e.g., read, live)
  • phonetic text or audio link provided
G120
3.2.1 On Focus – Level A
3.2.1 On FocusReceiving focus does not trigger context change (new window, submission, focus jump) Yes
  • no onfocus handlers that open pop-ups, submit forms, or move focus
  • no change of URL or new windows on focus
G107
3.2.2 On Input – Level A
3.2.2 On InputChanging value of form field does not cause context change without warning Yes
  • select, radio, checkbox have explicit submit button or confirmation dialog
  • no onchange that submits form or jumps page
G80
3.2.3 Consistent Navigation – Level AA
3.2.3 Consistent NavigationNavigation order and labels remain same across pages Yes
  • collect nav links text and order; compare across pages
  • allow insertion/removal but not reordering or renaming
G61
3.2.4 Consistent Identification – Level AA
3.2.4 Consistent IdentificationIcons/buttons with same function have identical accessible names and icons Yes
  • build function-to-label map across pages; flag mismatches
  • icons use same class/Unicode and same aria-label
G197
3.2.5 Change on Request – Level AAA
3.2.5 Change on RequestAll major context changes require explicit user request (button, submit) Yes
  • no automatic redirect after timeout without user control
  • no automatic form submission; uses explicit button
G76
3.2.6 Consistent Help – Level A
3.2.6 Consistent HelpHelp mechanism (human contact details, self-help link, FAQ, fully-automated chat) appears in same relative order across pages Yes
  • collect DOM order of help-related elements (tel, mailto, FAQ link, chat button)
  • relative order (position index) must stay consistent ±1 node across pages
G220
3.3.1 Error Identification – Level A
3.3.1 Error IdentificationErrors identified in text and exposed to assistive technology (aria-live, role=alert) Yes
  • error message container has aria-live="polite" or role="alert"
  • message text is not empty and references field label
ARIA21
3.3.2 Labels or Instructions – Level A
3.3.2 Labels or InstructionsEach input has visible label or instruction Yes
  • <label> or aria-labelledby points to visible text
  • placeholder alone is insufficient
H90
3.3.3 Error Suggestion – Level AA
3.3.3 Error SuggestionError message offers corrective hint (format, allowed values, example) No
  • human review that message is actionable (Date must be dd/mm/yyyy)
  • automated check for empty messages only
G84
3.3.4 Error Prevention (Legal, Financial, Data) – Level AA
3.3.4 Error PreventionUser can review, correct, and confirm final submission Yes
  • summary page with editable fields presented before irreversible action
  • explicit Submit button after review
G98
3.3.5 Help – Level AAA
3.3.5 HelpContext-sensitive help (tooltip, link, inline text) provided for all form fields No
  • human verifies help text explains purpose/format/example
  • automated check only for presence of help container
G103
3.3.6 Error Prevention (All) – Level AAA
3.3.6 Error Prevention (All)All forms allow review, correction, confirmation, and data is saved if re-authentication required Yes
  • same mechanism as 3.3.4 applied to all forms
  • data persisted (localStorage/server) across re-auth
G99
3.3.7 Redundant Entry – Level A (Added in 2.2)
3.3.7 Redundant EntryPreviously entered data is auto-populated or selectable (unless re-entry essential) Yes
  • fields with same purpose reuse autocomplete token
  • or summary page offers Use same as billing checkbox
  • or localStorage restores previous answers
G225
3.3.8 Accessible Authentication (Minimum) – Level AA (Added in 2.2)
3.3.8 Accessible Authentication (Minimum)No cognitive test (object recognition, username+password) required; offers magic link, WebAuthn, etc. Yes
  • login UI provides WebAuthn, magic link, or OAuth button
  • no CAPTCHA requiring object/character recognition
  • paste not blocked on password field
G218
3.3.9 Accessible Authentication (Enhanced) – Level AAA (Added in 2.2)
3.3.9 Accessible Authentication (Enhanced)Authentication requires no cognitive test and no username+password combo Yes
  • only WebAuthn, magic link, or federated identity offered
  • no username/password fields present
  • no CAPTCHA of any kind
G219
4.1.2 Name, Role, Value – Level A
4.1.2 Name, Role, ValueAll interactive components expose accessible name, role, state, value programmatically Yes
  • element.accessibleNode.name or computedLabel not empty
  • role valid ARIA or native (button, checkbox, etc.)
  • state properties present (checked, expanded, disabled)
G108
4.1.3 Status Messages – Level AA
4.1.3 Status MessagesImportant status messages (save success, errors, progress) announced to AT without receiving focus Yes
  • message container uses role="status", role="alert", or aria-live="polite/assertive"
  • message added to DOM, not hidden visually
ARIA22

Need help with digital accessibility?

Schedule a 30-minute session now!

Related posts

Comments

Leave a Reply

Search in sitelint.com

Looking for automated testing for technical SEO?

With SiteLint, you can help search engine spiders crawl and index your site more effectively.