Sitemap
Every page on this site
The whole site, grouped the way it is actually built, with 1,367 pages listed by name below. Each list is drawn from the same data the pages themselves are drawn from, so a new guide or a new law turns up here the day it goes live and nothing quietly goes missing.
One family stays folded up. We write an accessibility testing page for every state, province and county we cover, another 9,151 of them, and tipping that list in here would bury every other section on the page. So the countries are listed, and each country page walks you down to its own regions and counties from there. Chasing one particular thing? The search page beats scrolling this. And machines get the lot, every county included, at /sitemap.xml.
Start here (12 pages)
Audit services (176 pages)
Compliance & standards
Consulting & buying guides
Testing types
By industry
- E-commerce
- SaaS
- Hotels & travel
- Restaurants
- Healthcare
- Financial services
- Education
- Agencies & developers
- Government
- Patient portal audit
- Telehealth platform audit
- Insurance website audit
- Fintech app audit
- K-12 school district audit
- Online course & LMS audit
- Nonprofit & charity audit
- Real estate & listings audit
- Travel & airline booking audit
- Media & news site audit
- Event & ticketing audit
- Grocery & food delivery audit
- Marketplace & multi-vendor audit
By platform
By framework
By journey
Content & media
Focused audits
Second opinions & benchmarks
Formal deliverables
By situation
Design-stage reviews
Accessibility testing by country (49)
- Germany
- France
- Italy
- Spain
- Netherlands
- Ireland
- Denmark
- Norway
- Switzerland
- United Kingdom
- United States
- Canada
- Austria
- Belgium
- Bulgaria
- Croatia
- Cyprus
- Czechia
- Estonia
- Finland
- Greece
- Hungary
- Latvia
- Lithuania
- Luxembourg
- Malta
- Poland
- Portugal
- Romania
- Slovakia
- Slovenia
- Sweden
- Argentina
- Colombia
- China
- Hong Kong
- Taiwan
- Saudi Arabia
- Qatar
- United Arab Emirates
- Iceland
- Liechtenstein
- Australia
- New Zealand
- Japan
- South Korea
- India
- Israel
- Brazil
WCAG 2.2, explained (118 pages)
Where to start with WCAG
The 13 guidelines
All 86 success criteria
- 1.1.1 Non-text Content
- 1.2.1 Audio-only and Video-only (Prerecorded)
- 1.2.2 Captions (Prerecorded)
- 1.2.3 Audio Description or Media Alternative (Prerecorded)
- 1.2.4 Captions (Live)
- 1.2.5 Audio Description (Prerecorded)
- 1.2.6 Sign Language (Prerecorded)
- 1.2.7 Extended Audio Description (Prerecorded)
- 1.2.8 Media Alternative (Prerecorded)
- 1.2.9 Audio-only (Live)
- 1.3.1 Info and Relationships
- 1.3.2 Meaningful Sequence
- 1.3.3 Sensory Characteristics
- 1.3.4 Orientation
- 1.3.5 Identify Input Purpose
- 1.3.6 Identify Purpose
- 1.4.1 Use of Color
- 1.4.2 Audio Control
- 1.4.3 Contrast (Minimum)
- 1.4.4 Resize Text
- 1.4.5 Images of Text
- 1.4.6 Contrast (Enhanced)
- 1.4.7 Low or No Background Audio
- 1.4.8 Visual Presentation
- 1.4.9 Images of Text (No Exception)
- 1.4.10 Reflow
- 1.4.11 Non-text Contrast
- 1.4.12 Text Spacing
- 1.4.13 Content on Hover or Focus
- 2.1.1 Keyboard
- 2.1.2 No Keyboard Trap
- 2.1.3 Keyboard (No Exception)
- 2.1.4 Character Key Shortcuts
- 2.2.1 Timing Adjustable
- 2.2.2 Pause, Stop, Hide
- 2.2.3 No Timing
- 2.2.4 Interruptions
- 2.2.5 Re-authenticating
- 2.2.6 Timeouts
- 2.3.1 Three Flashes or Below Threshold
- 2.3.2 Three Flashes
- 2.3.3 Animation from Interactions
- 2.4.1 Bypass Blocks
- 2.4.2 Page Titled
- 2.4.3 Focus Order
- 2.4.4 Link Purpose (In Context)
- 2.4.5 Multiple Ways
- 2.4.6 Headings and Labels
- 2.4.7 Focus Visible
- 2.4.8 Location
- 2.4.9 Link Purpose (Link Only)
- 2.4.10 Section Headings
- 2.4.11 Focus Not Obscured (Minimum)
- 2.4.12 Focus Not Obscured (Enhanced)
- 2.4.13 Focus Appearance
- 2.5.1 Pointer Gestures
- 2.5.2 Pointer Cancellation
- 2.5.3 Label in Name
- 2.5.4 Motion Actuation
- 2.5.5 Target Size (Enhanced)
- 2.5.6 Concurrent Input Mechanisms
- 2.5.7 Dragging Movements
- 2.5.8 Target Size (Minimum)
- 3.1.1 Language of Page
- 3.1.2 Language of Parts
- 3.1.3 Unusual Words
- 3.1.4 Abbreviations
- 3.1.5 Reading Level
- 3.1.6 Pronunciation
- 3.2.1 On Focus
- 3.2.2 On Input
- 3.2.3 Consistent Navigation
- 3.2.4 Consistent Identification
- 3.2.5 Change on Request
- 3.2.6 Consistent Help
- 3.3.1 Error Identification
- 3.3.2 Labels or Instructions
- 3.3.3 Error Suggestion
- 3.3.4 Error Prevention (Legal, Financial, Data)
- 3.3.5 Help
- 3.3.6 Error Prevention (All)
- 3.3.7 Redundant Entry
- 3.3.8 Accessible Authentication (Minimum)
- 3.3.9 Accessible Authentication (Enhanced)
- 4.1.2 Name, Role, Value
- 4.1.3 Status Messages
Fix guides (453 pages)
Where to start with the fixes
The 14 subjects
General techniques (166)
- G1 Add a skip link as the first element on the page
- G4 Let users pause moving content and resume it
- G5 Remove time limits from activities entirely
- G8 Provide a version with extended audio descriptions
- G9 Caption live video streams in real time
- G10 Build custom components on accessibility-supported tech
- G11 Stop any blinking within five seconds
- G13 Say what a control will do before it does it
- G14 Say in text what color alone signals
- G15 Test flashing content against seizure thresholds
- G17 Meet the enhanced 7:1 contrast ratio
- G18 Meet the 4.5:1 contrast ratio for text
- G19 Keep flashes to three per second maximum
- G21 Never trap keyboard focus inside a widget
- G53 Let the sentence around a link explain it
- G54 Include a sign language interpreter in videos
- G55 Link unusual words to their definitions
- G56 Keep background audio 20 decibels below speech
- G57 Put content in a meaningful reading order
- G58 Put the media alternative link beside the media
- G59 Order interactive elements to match the content
- G60 Silence automatic audio within three seconds
- G61 Keep repeated components in the same order
- G62 Provide a glossary for specialized terms
- G63 Offer a site map as another route
- G64 Provide a table of contents for long documents
- G65 Show a breadcrumb trail on deep pages
- G68 Describe the purpose of live-only streams
- G69 Provide a full transcript of the media
- G70 Offer a dictionary search for specialized content
- G71 Put a help link on every page
- G73 Link complex images to a long description
- G74 Describe complex images in the nearby text
- G75 Let users postpone automatic content updates
- G76 Update content only when the user asks
- G78 Offer a selectable audio description track
- G79 Offer a spoken version of the text
- G80 Use a submit button, not automatic submission
- G81 Offer a synchronized sign language video track
- G82 Name the function of interactive images
- G83 Tell users which required fields they missed
- G84 Explain when input is not an allowed value
- G85 Explain format errors and show the fix
- G86 Add a plain-language summary of complex content
- G87 Add captions to every video with speech
- G88 Write page titles that describe the page
- G89 Show the expected format with an example
- G90 Pair every event handler with keyboard support
- G91 Write link text that states its purpose
- G92 Write long descriptions carrying the same information
- G93 Provide open captions burned into the video
- G94 Write alt text that serves the same purpose as the image
- G95 Give every graphic a brief text description
- G96 Identify items by more than shape or position
- G97 Expand each abbreviation at its first use
- G98 Let users review answers before final submission
- G99 Make deleted data recoverable
- G100 Use the accepted name as the alternative
- G101 Define words used in an unusual or restricted way
- G102 Explain every abbreviation where it first appears
- G103 Add illustrations that help explain complex content
- G105 Save user data across session re-authentication
- G107 Trigger context changes on activation, not focus
- G108 Expose name, role, and changes through markup
- G110 Make client-side redirects instant, not timed
- G111 Pair color coding with patterns and shapes
- G112 Define specialized terms inline where they appear
- G115 Mark up structure with semantic elements
- G117 State in text what styling alone conveys
- G120 Give the pronunciation right after ambiguous words
- G121 Link ambiguous words to their pronunciations
- G123 Add skip links past repeated content blocks
- G124 Add top-of-page links to each content area
- G125 Link related pages so content is findable
- G126 Provide a list of links to every page
- G127 Show each page's place in its collection
- G128 Show current location inside navigation bars
- G130 Write headings that describe their sections
- G131 Write labels that describe their fields
- G133 Offer longer session limits before forms begin
- G135 Expose controls through the platform accessibility API
- G136 Link nonconforming pages to a conforming version
- G138 Add semantic markup wherever color carries meaning
- G139 Let users jump straight to form errors
- G140 Keep content and structure separate from presentation
- G141 Organize every page with a heading hierarchy
- G142 Build with technologies whose browsers support zoom
- G143 Describe every CAPTCHA's purpose in text
- G144 Offer a second CAPTCHA in another modality
- G145 Give large text at least 3:1 contrast
- G146 Use liquid layouts that fit any window
- G148 Leave text colors default, or set both
- G149 Use components the browser highlights on focus
- G150 Provide live text for live audio-only content
- G151 Link live statements to their prepared script
- G152 Stop animated GIFs blinking within five seconds
- G153 Make dense text easier to read
- G155 Add a confirmation checkbox before final submission
- G156 Keep text recolorable by the user's browser
- G157 Caption live audio with a captioning service
- G158 Provide transcripts for audio-only content
- G159 Provide text alternatives for video-only content
- G160 Offer sign language versions of essential content
- G161 Add a site-wide search function
- G162 Position labels where users expect them
- G163 Use standard diacritics readers can turn off
- G164 State how long requests can be canceled
- G165 Keep the platform's default focus indicator
- G166 Add described audio for silent video
- G167 Label fields with their adjacent buttons
- G168 Ask for confirmation before completing risky actions
- G169 Align text to one side only
- G170 Put a mute control before auto-playing sound
- G171 Play sound only when the user asks
- G172 Let users switch off fully justified text
- G173 Offer a described version of every video
- G174 Offer a working switch to high-contrast view
- G175 Let readers pick their own text colors
- G176 Keep any flashing area below seizure thresholds
- G177 Suggest corrections when input fails validation
- G178 Provide working on-page text-size controls
- G179 Stop enlarged text clipping in fixed containers
- G180 Let users extend time limits tenfold
- G181 Preserve form data across session re-login
- G182 Back up color-coded text with another cue
- G183 Make color-only links contrast and respond
- G184 State form requirements before the fields
- G185 Link every site page from the home page
- G186 Add a stop control for moving content
- G188 Offer a control that opens up line spacing
- G189 Offer a switch to self-describing link text
- G190 Link inaccessible objects to accessible versions
- G191 Offer a blink-free reload of the page
- G193 Provide an accessible help assistant on the page
- G194 Spell-check text input and offer fixes
- G195 Ship a clearly visible custom focus indicator
- G196 Describe grouped images with one alternative
- G197 Label identical functions identically everywhere
- G198 Let users switch time limits off entirely
- G199 Confirm success when a submission works
- G200 Stop opening new tabs without cause
- G201 Warn users before opening a new window
- G202 Make every control work with a keyboard
- G203 Describe talking-head video with static text
- G204 Do not block the browser's natural text reflow
- G205 Add text cues to color-coded field labels
- G206 Offer a layout without horizontal scrolling
- G207 Give meaningful icons 3:1 contrast
- G208 Include the visible label in the accessible name
- G209 Separate adjoining chart colors with real contrast
- G210 Make every drag-and-drop action cancellable
- G211 Match accessible names to visible labels exactly
- G212 Use native controls that activate on release
- G213 Give motion-activated features conventional controls
- G214 Offer a control to rotate orientation-locked content
- G215 Provide simple controls for complex gestures
- G216 Let sliders work with single taps
- G217 Let users remap or disable single-key shortcuts
- G218 Sign users in with an emailed link
- G219 Give every drag action a click alternative
- G220 Keep the contact link in one consistent place
- G221 Carry entered data into later steps
- G223 Make keyboard focus impossible to miss
- G224 Preserve meaningful indentation when text reflows
- G225 Keep horizontal carousels usable at 320 pixels
- G226 Narrate visual content within the soundtrack itself
HTML techniques (52)
- H2 Combine adjacent image and text links into one
- H24 Add alt text to every image map area
- H25 Give every page a descriptive title
- H28 Explain abbreviations with the abbr element
- H30 Write link text that says where the link goes
- H32 Give every form a real submit button
- H33 Supplement vague link text with a title attribute
- H34 Keep mixed-direction text reading in the right order
- H36 Add alt text to image submit buttons
- H37 Add alt text to every meaningful image
- H39 Caption data tables so their purpose is clear
- H40 Mark up term-and-definition pairs as description lists
- H42 Use real heading tags, not styled bold text
- H43 Connect complex table cells to headers with ids
- H44 Attach a real label to every form field
- H48 Mark up lists with real list elements
- H49 Use real markup for emphasized or special text
- H51 Use real table markup for tabular data
- H53 Give object elements meaningful fallback content
- H54 Mark the defining instance of a term with dfn
- H56 Fix nested right-to-left text with the dir attribute
- H57 Declare the page language on the html element
- H58 Mark language changes with a lang attribute
- H62 Add ruby annotations to show pronunciation
- H63 Add scope to table header cells
- H64 Give every iframe a descriptive title
- H65 Label form fields when a visible label will not fit
- H67 Give decorative images an empty alt
- H69 Start every content section with a real heading
- H71 Group related form fields with fieldset and legend
- H76 Make meta refresh redirects instant, never timed
- H77 Give list links context from their list item
- H78 Give links context from their enclosing paragraph
- H79 Give table links context from cells and headers
- H80 Give links context from the heading above them
- H81 Give nested list links context from parent items
- H83 Warn users when links open new windows
- H84 Pair select menus with a real action button
- H85 Group long select lists with optgroup
- H86 Give emojis and ASCII art text alternatives
- H88 Use HTML the way the spec intends
- H89 Add context-sensitive help to form fields
- H90 Mark required fields in the label itself
- H91 Use native HTML controls instead of rebuilt ones
- H95 Add caption tracks to your videos
- H96 Add audio description tracks to video
- H97 Wrap navigation link groups in nav elements
- H98 Add autocomplete attributes to personal data fields
- H99 Let users jump between pages of content
- H100 Mark up email and password inputs properly
- H101 Identify page regions with semantic HTML elements
- H102 Build modal dialogs with the native dialog element
CSS techniques (36)
- C6 Keep source order meaningful when CSS repositions content
- C7 Add hidden text to clarify short links
- C8 Space letters with CSS, not blank characters
- C9 Put decorative images in CSS backgrounds
- C12 Size text in percent so it scales
- C13 Use named font sizes that respect user defaults
- C14 Size text in em units, not pixels
- C15 Style the focus indicator instead of removing it
- C17 Let form fields grow when text resizes
- C18 Replace spacer images with CSS margin and padding
- C19 Align text left or right, never justified
- C20 Cap line length with relative column widths
- C21 Give paragraphs breathing room with line spacing
- C22 Style real text instead of text images
- C23 Let main content follow user color settings
- C24 Size containers in percentages, not fixed pixels
- C25 Mark out page areas without hard-coding colors
- C27 Match DOM order to visual order
- C28 Size text containers in em units
- C29 Offer a style switcher as an alternate version
- C30 Let users swap images of text for text
- C31 Reflow content with flexbox at narrow widths
- C32 Stack columns with grid and media queries
- C33 Break long URLs so nothing scrolls sideways
- C34 Unstick sticky headers when space runs out
- C35 Keep buttons intact when text spacing increases
- C36 Let user text-spacing overrides work without breakage
- C37 Constrain images with max-width so pages reflow
- C38 Let labels and inputs wrap on narrow screens
- C39 Respect the reduced-motion preference in CSS
- C40 Build focus indicators that work on any background
- C41 Draw a strong focus indicator inside the control
- C42 Space small targets with min-width and min-height
- C43 Stop sticky headers hiding focused content
- C44 Make targets at least 44 by 44 pixels
- C45 Show keyboard focus with :focus-visible
ARIA techniques (26)
- ARIA1 Attach help text to inputs with aria-describedby
- ARIA2 Tell screen readers a field is required
- ARIA4 Give custom widgets a real ARIA role
- ARIA5 Expose widget state with ARIA attributes
- ARIA6 Name icon-only controls with aria-label
- ARIA7 Build clear link names from nearby headings
- ARIA8 Fix vague link text with aria-label
- ARIA9 Assemble one label from several text pieces
- ARIA10 Name images and charts with aria-labelledby
- ARIA11 Add landmarks so users can skip around
- ARIA12 Use role=heading when h1-h6 is impossible
- ARIA13 Name repeated landmarks so they are distinguishable
- ARIA14 Label icon-only controls with aria-label
- ARIA15 Link complex images to longer descriptions
- ARIA16 Name controls from visible text with aria-labelledby
- ARIA17 Group related form fields with ARIA roles
- ARIA18 Raise blocking errors in an alert dialog
- ARIA19 Announce form errors with role=alert
- ARIA20 Mark leftover page areas with role=region
- ARIA21 Flag invalid fields with aria-invalid
- ARIA22 Announce status messages with role=status
- ARIA23 Announce chat and feed updates with role=log
- ARIA24 Give meaningful font icons role=img
- ARIA25 Announce progress bar updates with a live region
- ARIA26 Mark the current page with aria-current
- ARIA27 Announce progress with the ariaNotify API
Scripting techniques (23)
- SCR1 Let users extend a script's time limit
- SCR2 Pair every mouse handler with a keyboard one
- SCR14 Let users switch nonessential alerts off
- SCR16 Warn users before a time limit runs out
- SCR18 Validate in the browser and describe the error
- SCR19 Never change context when a select changes
- SCR20 Give device-specific scripts a keyboard path
- SCR22 Stop scripted blinking within five seconds
- SCR24 Open new windows only when the user asks
- SCR26 Insert new content right after its trigger
- SCR27 Reorder sections in the DOM, not just on screen
- SCR28 Collapse repeated blocks so they can be skipped
- SCR29 Make a scripted div or span keyboard-operable
- SCR30 Let users swap in self-explanatory link text
- SCR31 Highlight the focused element with script
- SCR32 Put validation errors in the page as text
- SCR33 Give scrolling content a pause and a resume
- SCR34 Compute sizes so they scale with the text
- SCR35 Hang scripted actions on real links and buttons
- SCR36 Offer a static view of moving text
- SCR38 Keep a conforming fallback for a scripted page
- SCR39 Make hover content hoverable and dismissible
- SCR40 Check prefers-reduced-motion before animating
Plain-text techniques (3)
PDF techniques (23)
- PDF1 Add alt text to images in PDFs
- PDF2 Add bookmarks so long PDFs are navigable
- PDF3 Fix the reading and tab order in PDFs
- PDF4 Hide decorative PDF images from screen readers
- PDF5 Mark required fields in PDF forms
- PDF6 Tag PDF tables as real tables
- PDF7 Run OCR so scanned PDFs contain real text
- PDF8 Provide expansions for abbreviations in PDFs
- PDF9 Tag PDF headings with real heading tags
- PDF10 Label every field in your PDF forms
- PDF11 Tag PDF links so they are announced
- PDF12 Give PDF form fields a name, role, and value
- PDF13 Replace raw URLs in PDFs with descriptive text
- PDF14 Add running headers and footers to long PDFs
- PDF15 Give PDF forms an explicit submit button
- PDF16 Set the document language in every PDF
- PDF17 Make PDF page numbers match the printed pages
- PDF18 Give every PDF a real document title
- PDF19 Mark language changes inside PDF documents
- PDF20 Repair mistagged tables with Acrobat's Table Editor
- PDF21 Tag PDF lists so they read as lists
- PDF22 Tell users when PDF form input is invalid
- PDF23 Use fillable form fields instead of flat text
SMIL techniques (8)
- SM1 Add extended audio description in SMIL 1.0
- SM2 Add extended audio description in SMIL 2.0
- SM6 Add audio description in SMIL 1.0
- SM7 Add audio description in SMIL 2.0
- SM11 Add caption text streams in SMIL 1.0
- SM12 Add caption text streams in SMIL 2.0
- SM13 Add a sign language video stream in SMIL 1.0
- SM14 Add a sign language video stream in SMIL 2.0
Server techniques (5)
Documented failures (90)
- F1 Do not rearrange meaning with CSS positioning
- F2 Do not fake structure with styled text
- F3 Do not put information in CSS background images
- F7 Do not embed blinking content without a pause
- F8 Do not publish captions that skip dialogue
- F9 Do not change context when a field loses focus
- F10 Do not trap keyboard users inside embedded content
- F12 Do not let session timeouts destroy user input
- F13 Do not write alt text that drops color meaning
- F14 Never identify content by shape or location alone
- F15 Do not build controls outside the accessibility API
- F16 Do not auto-scroll content without a pause control
- F19 Do not hide the accessible version of a page
- F20 Do not let text alternatives fall out of date
- F22 Do not open windows the user never requested
- F23 Do not autoplay audio without a stop control
- F24 Never set text color without its background
- F25 Do not ship page titles that identify nothing
- F26 Do not let a symbol alone carry meaning
- F30 Never use filenames or placeholders as alt text
- F31 Do not label the same function differently
- F32 Never spread words apart with real spaces
- F33 Do not fake columns with white space characters
- F34 Do not format tables with white space characters
- F36 Do not auto-submit when the last field changes
- F37 Do not launch windows from a checkbox or select
- F38 Do not leave decorative images announced
- F39 Do not give decorative images junk alt text
- F40 Do not redirect with a timed meta refresh
- F41 Do not auto-reload pages with meta refresh
- F42 Do not emulate links with scripted spans
- F43 Do not use structural markup for visual effects
- F44 Do not break tab order with positive tabindex
- F46 Never put th or caption in a layout table
- F48 Do not publish data tables as preformatted text
- F49 Do not use layout tables that read as nonsense
- F50 Do not script blinking that never stops
- F52 Do not spawn new windows on page load
- F54 Do not wire functionality to pointer events only
- F55 Do not use script to throw focus away
- F58 Do not auto-redirect after a server-side timeout
- F59 Do not build interactive controls from bare divs
- F60 Do not launch new windows while users type
- F61 Do not auto-replace content users cannot stop
- F63 Do not strand link context away from the link
- F65 Never ship images without a text alternative
- F66 Do not reorder navigation links between pages
- F67 Do not write long descriptions that miss the point
- F68 Do not ship form controls without accessible names
- F69 Do not clip or truncate text at 200% zoom
- F71 Do not fake text with look-alike characters
- F72 Do not publish ASCII art without an alternative
- F73 Do not mark links by color alone
- F74 Do not leave a media alternative unlabeled
- F75 Do not skip captions when a video adds content
- F78 Never remove the keyboard focus outline with CSS
- F79 Do not simulate focus without moving real focus
- F80 Do not pin form control text to a fixed size
- F81 Do not mark required or error fields by color alone
- F82 Do not split a phone field and drop the label
- F83 Do not set text over a low-contrast background image
- F84 Stop writing "click here" and "read more" links
- F85 Do not open dialogs far from their trigger
- F86 Do not leave parts of a split field nameless
- F88 Do not justify text to both margins
- F89 Do not leave image-only links without a name
- F90 Do not mis-wire headers and id attributes in tables
- F91 Do not style table headers instead of marking them up
- F92 Do not put role="presentation" on meaningful content
- F93 Do not autoplay audio without a way to stop it
- F94 Do not size text in viewport units
- F95 Do not show hover content the pointer cannot reach
- F96 Do not let accessible names contradict visible labels
- F97 Do not lock your interface to one orientation
- F98 Do not build interactions that respond to touch alone
- F99 Do not hardwire single-character keyboard shortcuts
- F100 Never tell users to rotate their device
- F101 Do not trigger actions on the down-event
- F102 Do not let content vanish when the page reflows
- F103 Do not post status messages without a role
- F104 Do not clip text when users override text spacing
- F105 Do not require swipes without a single-tap alternative
- F106 Do not ship motion controls without an off switch
- F107 Do not invent autocomplete attribute values
- F108 Do not make dragging the only way to move things
- F109 Never block paste in password or code fields
- F110 Do not let sticky bars bury the focused element
- F111 Do not leave labeled controls without a name
- F112 Do not let content blink past five seconds
- F113 Do not leave dialogue pauses empty of description
ACT test rules (91 pages)
- All ACT rules, the hub
- Element marked as decorative is not exposed
- Image accessible name is descriptive
- Image button has non-empty accessible name
- Image has non-empty accessible name
- Link has non-empty accessible name
- Object element rendering non-text content has non-empty accessible name
- SVG element with explicit role has non-empty accessible name
- Image filename is accessible name for image
- Image not in the accessibility tree is decorative
- Audio and visuals of video element have transcript
- Audio element content has text alternative
- Audio element content has transcript
- Audio element content is media alternative for text
- Video element auditory content has captions
- Video element visual-only content has accessible alternative
- Video element visual-only content is media alternative for text
- Video element visual-only content has transcript
- Video element visual-only content has audio track alternative
- Video element auditory content has accessible alternative
- Video element content is media alternative for text
- Video element visual content has accessible alternative
- Video element visual content has audio description
- Video element visual content has strict accessible alternative
- ARIA attribute is defined in WAI-ARIA
- ARIA state or property has valid value
- Element with role attribute has required states and properties
- Form field has non-empty accessible name
- Headers attribute specified on a cell refers to cells in the same table element
- Role attribute has valid value
- ARIA global properties not used where prohibited
- ARIA required context role
- ARIA required ID references exist
- ARIA required owned elements
- ARIA state or property is permitted
- Table header cell has assigned cells
- Content has alternative for visual reference
- Orientation of the page is not restricted using CSS transforms
- Autocomplete attribute has valid value
- Audio or video element avoids automatically playing audio
- Audio or video element that plays automatically has a control mechanism
- Audio or video element that plays automatically has no audio that lasts more than 3 seconds
- Text has enhanced contrast
- Text has minimum contrast
- Meta viewport allows for zoom
- Zoomed text node is not clipped with CSS overflow
- HTML images contain no text
- Important letter spacing in style attributes is wide enough
- Important line height in style attributes is wide enough
- Important word spacing in style attributes is wide enough
- Iframe with interactive elements is not excluded from tab-order
- Scrollable content can be reached with sequential focus navigation
- Focusable element has no keyboard trap
- Focusable element has no keyboard trap via standard navigation
- Focusable element has no keyboard trap via non-standard navigation
- No keyboard shortcut uses only printable characters
- Meta element has no refresh delay
- Meta element has no refresh delay (no exception)
- Text content that changes automatically can be paused, stopped or hidden
- Bypass Blocks of Repeated Content
- Document has heading for non-repeated content
- Document has a landmark with non-repeated content
- Block of repeated content is collapsible
- Document has an instrument to move focus to non-repeated content
- HTML page has non-empty title
- HTML page title is descriptive
- Link in context is descriptive
- Links with identical accessible names and same context serve equivalent purpose
- Form field label is descriptive
- Heading is descriptive
- Element in sequential focus order has visible focus
- Link is descriptive
- Links with identical accessible names have equivalent purpose
- Visible label is part of accessible name
- Device motion based changes to the content can also be created from the user interface
- Device motion based changes to the content can be disabled
- HTML page has lang attribute
- HTML page lang attribute has valid language tag
- HTML page lang and xml:lang attributes have matching values
- HTML page language subtag matches default language
- Element with lang attribute has valid language tag
- HTML element language subtag matches language
- Error message describes invalid form field value
- Button has non-empty accessible name
- Element with aria-hidden has no content in sequential focus navigation
- Element with presentational children has no focusable content
- Menuitem has non-empty accessible name
- Summary element has non-empty accessible name
- Iframe element has non-empty accessible name
- Iframe elements with identical accessible names have equivalent purpose
- Heading has non-empty accessible name
ARIA roles, states and properties (144 pages)
The 94 roles
- All ARIA roles, the hub
- alert
- alertdialog
- application
- article
- banner
- blockquote
- button
- caption
- cell
- checkbox
- code
- columnheader
- combobox
- command
- complementary
- composite
- contentinfo
- definition
- deletion
- dialog
- directory
- document
- emphasis
- feed
- figure
- form
- generic
- grid
- gridcell
- group
- heading
- img
- input
- insertion
- landmark
- link
- list
- listbox
- listitem
- log
- main
- marquee
- math
- menu
- menubar
- menuitem
- menuitemcheckbox
- menuitemradio
- meter
- navigation
- none
- note
- option
- paragraph
- presentation
- progressbar
- radio
- radiogroup
- range
- region
- roletype
- row
- rowgroup
- rowheader
- scrollbar
- search
- searchbox
- section
- sectionhead
- select
- separator
- slider
- spinbutton
- status
- strong
- structure
- subscript
- superscript
- switch
- tab
- table
- tablist
- tabpanel
- term
- textbox
- time
- timer
- toolbar
- tooltip
- tree
- treegrid
- treeitem
- widget
- window
The 48 states and properties
- All ARIA attributes, the hub
- aria-activedescendant
- aria-atomic
- aria-autocomplete
- aria-busy
- aria-checked
- aria-colcount
- aria-colindex
- aria-colspan
- aria-controls
- aria-current
- aria-describedby
- aria-details
- aria-disabled
- aria-dropeffect
- aria-errormessage
- aria-expanded
- aria-flowto
- aria-grabbed
- aria-haspopup
- aria-hidden
- aria-invalid
- aria-keyshortcuts
- aria-label
- aria-labelledby
- aria-level
- aria-live
- aria-modal
- aria-multiline
- aria-multiselectable
- aria-orientation
- aria-owns
- aria-placeholder
- aria-posinset
- aria-pressed
- aria-readonly
- aria-relevant
- aria-required
- aria-roledescription
- aria-rowcount
- aria-rowindex
- aria-rowspan
- aria-selected
- aria-setsize
- aria-sort
- aria-valuemax
- aria-valuemin
- aria-valuenow
- aria-valuetext
Accessibility laws (41 pages)
Where to start with the laws
United States (8)
International (30)
- European Accessibility Act (EAA)
- Web Accessibility Directive (EU) 2016/2102
- The Accessibility for Manitobans Act (AMA)
- Ley 26.653 de Accesibilidad Web (Argentina)
- Law on the Protection of Persons with Disabilities (China)
- Colombia web accessibility guidelines
- Guidelines on Dissemination of Information through Government Websites (Hong Kong)
- Web Accessibility Guidelines 110.07 (Taiwan)
- Saudi Web Accessibility Standards and the Disability Rights Law
- Law No. 2 of 2004 on the Rights of Persons with Disabilities (Qatar)
- UAE accessibility requirements and the Dubai policy
- Accessibility for Ontarians with Disabilities Act (AODA)
- UK Equality Act 2010 & PSBAR
- Accessible Canada Act (ACA)
- Norway: Universal Design of ICT
- Israel: IS 5568
- Australia: Disability Discrimination Act
- Germany: BFSG (Accessibility Strengthening Act)
- France: RGAA & EAA Enforcement
- Italy: Stanca Act
- Japan: JIS X 8341-3 & Reasonable Accommodation
- Spain: Royal Decree 1112/2018 and the EAA
- Netherlands: Digital Accessibility Decree and the EAA
- Ireland: Disability Act 2005 and the EAA
- Brazil: Lei Brasileira de Inclusão and eMAG
- India: RPwD Act 2016 and GIGW
- New Zealand: Web Accessibility Standard
- South Korea: Disability Discrimination Act and KWCAG
- Switzerland: Disability Discrimination Act (BehiG)
- Denmark: Web Accessibility Act and the EAA
Free tools (18 pages)
- Every tool, the hub
- Free 10-page scan
- Find the rule from what broke
- Which laws apply to you
- ARIA validator
- Contrast checker
- Accessible palette builder
- Heading structure checker
- Link text checker
- Alt text checker
- Alt text decision helper
- PDF accessibility checker
- ADA tax credit calculator
- Statement generator
- Audit scope builder
- Audit readiness checker
- Conformance claim checker
- VPAT and ACR review checklist
Glossary A to Z (132 pages)
- All terms, the hub
- a11y
- Abmahnung
- Accessibility
- Accessibility API
- Accessibility audit
- Accessibility statement
- Accessibility supported
- Accessibility tree
- Accessible description
- Accessible name
- ACR
- ADA
- alertdialog
- Alt text
- ARIA
- ARIA Authoring Practices Guide
- Assistive technology
- Audio description
- Autocomplete
- Automated testing
- Braille display
- Browse mode
- Bypass blocks
- CAPTCHA
- Captions
- Carousel
- CART
- Change of context
- Cognitive disability
- Color blindness
- Conformance
- Conformance claim
- Conforming alternate version
- Contrast ratio
- Cookie banner
- Dark mode
- Data visualisation
- Decorative image
- Disability
- Disabled Access Credit
- DOM
- Dyslexia
- Easy read
- EN 301 549
- EPUB accessibility
- Error identification
- Essential
- European Accessibility Act
- Focus
- Focus indicator
- Focus order
- Focus trap
- Focus visible
- Forced colors
- Form label
- Guideline
- Heading structure
- High contrast mode
- Iframe
- Inclusive design
- Informative
- JAWS
- Keyboard accessibility
- Keyboard shortcut
- Landmark
- Level A, AA, AAA
- Live region
- Low vision
- Manual testing
- Mechanism
- Modal dialog
- Motor disability
- Name, Role, Value
- Narrator
- Non-interference
- Normative
- NVDA
- Operable
- Overlay
- Partial conformance
- PDF/UA
- Perceivable
- Plain language
- Pointer gesture
- POUR
- prefers-reduced-motion
- Process
- Programmatically determined
- Reading level
- Reading order
- Real-time text
- Reflow
- Relied upon
- Remediation
- Robust
- Role
- Screen magnifier
- Screen reader
- Section 508
- Semantic HTML
- Set of web pages
- Sign language interpretation
- Skip link
- Status message
- Success criterion
- Switch device
- Tab order
- Tabindex
- Tagged PDF
- Target size
- Technique
- Text alternative
- Text to speech
- Timeout
- Toast notification
- Tooltip
- Transcript
- Understandable
- Universal design
- User agent
- User testing with disabled users
- Vestibular disorder
- Voice control
- VoiceOver
- VPAT
- W3C
- WAI
- WCAG
- WCAG versions (2.0, 2.1, 2.2)
- WCAG2ICT
- Zoom
Guides (134 pages)
- All guides, the hub
- What Is Web Accessibility? The Plain-Language Answer
- What Is Digital Accessibility? Everything With a Screen
- What an Accessibility Audit Costs, and Why Quotes Vary So Much
- What Remediation Costs, and Why Nobody Can Quote You One Number
- Which WCAG Version Actually Applies to You
- Why Accessibility Matters, With the Numbers Attached
- You Have Been Told to Fix It. Now What?
- The Fixes Are Done. Now Stop It Coming Back
- How to Buy a Website That Is Actually Accessible
- What the Law Asks of Your Staff Systems
- A Change of Context Is Four Things, and Only Four
- Your Site Is Probably Several Sets of Web Pages
- How a Browser Decides What Your Button Is Called
- Why Your Scanner Still Reports a Rule That No Longer Exists
- The Audit Method W3C Publishes, and the Claim It Will Not Make
- Conformance Has a Unit, and It Is Not Your Website
- The Second Thing a Browser Works Out About Your Control
- The Standard That Says Your CMS Owes You Something
- There Is No Right Page Count, and Here Is What to Count Instead
- Four Things to Have Ready, and the One That Holds Everything Up
- Three Words for Three Depths, and Nobody Agrees Which Is Which
- Read the Header Before You Read a Single Finding
- Retest or New Audit: What Changed Decides It
- The 53 Input Purposes, and What Rule 1.3.5 Actually Asks
- Universal Design Started in Architecture and Ended Up in a Treaty
- What an Accessibility Conformance Report Cannot Tell You
- Accessibility, Usability and Inclusive Design Are Three Different Arguments
- Kiosks and Self-Service Terminals Are a Different Accessibility Problem
- Accessibility vs. Usability: Related, and Not the Same Thing
- Level AA vs. AAA: Why More Is not the Right Answer
- WCAG vs. the ADA: One Is a Standard, One Is a Law
- Free Scan vs. Full Audit: What Each One Can Tell You
- Link vs. Button: A Small Choice That Breaks a Lot
- The Decisions You Make Before Any Code Exists
- What Helps Readability, What is Folklore, and What WCAG Says
- The Contrast Numbers, and What They Do not Cover
- Fix It Once, or Break It Everywhere
- The Ten-Minute Keyboard Test That Finds the Most
- ARIA Is Powerful, Misused, and Usually Unnecessary
- Accessible Forms Are Where the Money Leaks
- Captions, Transcripts, and Audio Description
- WCAG Was Written for the Web. Your App Is Still Covered.
- How to Write Alt Text That Actually Works
- When Movement on Screen Becomes a Barrier
- The Time Limit Rule Almost Everyone Breaks
- The Thinnest Rules in the Standard, and What to Do Anyway
- Making Table Relationships Explicit
- The Six Places Online Stores Break
- How to Build a Modal That Does not Strand People
- Carousels, and Whether You Need One at All
- Cookie Banners Are the First Thing That Breaks
- Charts Are Where Alt Text Usually Gives Up
- Somebody Else's Code Is Still Your Problem
- Catching Regressions Before They Ship
- Navigation Menus, Built So Everyone Can Get Past Them
- Tabs and Accordions, and the Difference Between Them
- Autocomplete, the Hardest Common Widget to Get Right
- Date Pickers, and Why the Text Field Matters More
- Tooltips, and the Rule Written Specifically For Them
- Notifications That Reach the People Who Cannot See Them
- Video Players, Where Custom Controls Go Wrong
- Drag and Drop Needs a Way That Is Not Dragging
- Search Is a Form, a Live Region, and a List
- File Upload, and the Input Everyone Hides
- Sign-In Is Where People Give Up
- Infinite Scroll Puts the Footer Out of Reach
- Pagination, and the Link That Says Only Its Number
- The Map Is Not the Information
- Breadcrumbs, and the Separator Nobody Should Hear
- The Page Somebody Reaches by Accident
- What Actually Makes a PDF Readable
- How to Tag a PDF, in the Order That Works
- Fix It in the Document, Not in the PDF
- E-books Are Named in the Law, and Most Are Not Ready
- Who Is Exempt, and From What
- The Cost Defense, and Who Has to Prove It
- Does the ADA Reach a Website With No Shop?
- The Document Procurement Teams Ask You For
- What Goes in an Accessibility Statement, and What Backfires
- Three Documents, Three Different Readers
- The Brief That Gets You a Useful Audit
- What to Ask a Supplier For, and Why
- One Audit, Two Documents Out of It
- How Far One Audit Actually Stretches
- Somebody Wrote In and Could Not Use It
- The Demo Where Somebody Watches You Use It
- Three Requests From One Campus Office
- How to Test a Website for Accessibility, Yourself, Today
- Where Automated Testing Stops and People Start
- What Each Free Accessibility Tool Is Good For
- How to Test With a Screen Reader, and What You will Miss
- The Rules That Bite Hardest on a Phone
- What People Use, and What It Needs From You
- The Testing That Finds What Nothing Else Does
- The Eight Things Accessibility and SEO Both Need
- Training Lands When People Have Something to Fix
- What a Sampled Audit Proves, and What It Cannot Reach
- Scoping an Audit for a Product That Lives Behind a Login
- Which Browsers and Screen Readers Your Audit Should Test
- What a Design Review Can Prove Before the Build Exists
- Auditing Staging or Production, and the Build Your Findings Belong To
- Scoping One Audit Across a Portfolio of Websites
- Whether Every Language Version Needs Its Own Testing
- The Documents Are Already in Scope. The Audit Might Not Be.
- You Audit the Generator, Not the Pile of Files
- Two Audits Hide Inside One Signing Link
- Caption Quality Is a List of Moments, Not a Percentage
- A Perfect PDF Can Still Fail Inside Your Page
- The HTML Version Replaces the PDF, or It Does Not
- What to Do First When a Customer Asks for a VPAT
- The Evidence That Answers an Accessibility Questionnaire
- Writing an Accessibility Roadmap While the Product Still Fails
- The Report Tested a Configuration, Not Your Product
- Three Things Get Audited, and the Platform Report Covers One
- A Chat Audit Has Two Subjects, Not One
- Every Step of Signing In Gets Tested Separately
- Power BI Has the Features. Your Report Made the Choices.
- The Grid Is Not the Unit. The Task Inside It Is.
- Part of Your Checkout Is Drawn by Somebody's Bank
- You Cannot Prove a Regression Without a Before
- Most Booking Barriers Are After the Calendar
- The Listing Is Yours. The Application Usually Is Not.
- Proving Who You Are Is Not the Same as Signing In
- An Exam Program Is Rarely One Product
- Two Questions About a Whiteboard, Not One
- A Finding Is Developer-Ready When Nobody Has to Ask a Question
- You Think the Finding Is Wrong. Here Is How to Find Out.
- Your Report Has a Date on It, and That Date Does All the Work
- A Retest Proves One Thing, and It Is Not That Your Site Conforms
- Internal Review, Outside Audit, or Both
- Find It, Fix It, Prove It. Three Jobs, and They Are Not One Purchase.
- Testing the Six New Rules Does Not Make a 2.1 Audit a 2.2 Audit
- Turning a Findings List Into a Number You Can Defend