Accessibility Standard: WCAG 2.0
WCAG 2.0 was published in 2008, and covers a wide range of recommendations for making web content more accessible. It covers a wider range of disabilities than WCAG 1.0 including: blindness and low vision, deafness and hearing loss, learning disabilities, cognitive limitations, limited movement, speech disabilities, photosensitivity and combinations of these.
Rules
This section lists the 361 rules covering 37 checkpoints for WCAG 2.0 supported by the current version of the product.
1.1 Text Alternatives
1.1.1 A Non-text Content - 24 rules
- Applet with no fallback content
- Image map has no accessible name
- ARIA image has no accessible name
- Image has no accessible name
alt
is image file name- Graphic button has no accessible name
- Object with no fallback content
- ASCII art used for text alternative
- Image accessible name uses placeholder
- PDF graphic has no accessible name
button
image must havealt
- Frame
src
contains an image instead of HTML - Server-side image maps are inaccessible
- Alt text does not convey color information
- Alt text not updated
- Object has no accessible name
- Placeholder for timed media
- Decorative image missing null alt attribute
- Spacer image has descriptive
alt
- Decorative image with accessible name
- SVG has no accessible name
- Unicode lookalike characters used
alt
repeated on adjacent images- Word graphic has no accessible name
1.2 Time Based Media
1.2.1 A Audio-only and Video-only (Prerecorded) - 2 rules
1.2.2 A Captions (Prerecorded) - No rules
1.2.3 A Audio Description or Media Alternative (Prerecorded) - No rules
1.2.4 AA Captions (Live) - No rules
1.2.5 AA Audio Description (Prerecorded) - No rules
1.2.6 AAA Sign Language (Prerecorded) - No rules
1.2.7 AAA Extended Audio Description (Prerecorded) - No rules
1.2.8 AAA Media Alternative (Prerecorded) - No rules
1.2.9 AAA Audio-only (Live) - No rules
1.3 Adaptable
1.3.1 A Info and Relationships - 55 rules
- Headings should not contain headings
- HTML heading is blank
- Mark up lists and list items properly
- Data table without
th
headers - Complex header associations need
headers
attribute - Layout table contains data table markup
- Layout table contains summary or caption
fieldset
withoutlegend
label
is blank- PDF not tagged
- PDF security blocks accessibility
- Use
h1-h6
instead of heading-like styles - Use
h1-h6
instead of heading-like images - Use
strong
instead of CSSfont-weight
- ARIA table has missing cells
- HTML table has missing cells
- Spaces used to simulate table layout
- JavaScript simulated link
fieldset
with no form elements- CSS
content:
not available to all users - Broken cell
headers
ID reference - Data table hidden by
role=presentation
- Word table without row and column headers
role=cell
must be owned byrole=row
role=option
must be owned byrole=listbox
role=menuitem
must be owned byrole=menu
ormenubar
role=menuitemcheckbox
must be owned byrole=menu
ormenubar
role=menuitemradio
must be owned byrole=menu
ormenubar
orgroup
role=tab
must be owned byrole=tablist
role=treeitem
must be owned byrole=tree
orgroup
role=listitem
must be owned byrole=list
role=gridcell
must be owned byrole=row
role=columnheader
must be owned byrole=row
role=rowheader
must be owned byrole=row
role=row
must be owned byrole=grid
orrowgroup
ortreegrid
ortable
role=rowgroup
must be owned byrole=grid
ortreegrid
ortable
-
role=feed
must containrole=article
-
role=grid
must containrole=row
orrowgroup
-
role=list
must containrole=listitem
-
role=listbox
must containrole=option
-
role=menu
must containrole=menuitem
ormenuitemcheckbox
ormenuitemradio
-
role=radiogroup
must containrole=radio
-
role=row
must containrole=cell
orcolumnheader
orgridcell
orrowheader
-
role=rowgroup
must containrole=row
-
role=table
must containrole=row
orrowgroup
-
role=tablist
must containrole=tab
-
role=tree
must containrole=treeitem
-
role=treegrid
must containrole=row
orrowgroup
- Broken
aria-activedescendant
ID reference - Broken
aria-controls
ID reference - Broken
aria-describedby
ID reference - Broken
aria-flowto
ID reference - Broken
aria-labelledby
ID reference - Broken
aria-owns
ID reference - ARIA role is invalid
1.3.2 A Meaningful Sequence - 7 rules
- Right-to-left language without
dir
dir=ltr
for right-to-left language- CSS
position:
causes meaningless sequence - Word has spaces between each letter
- Spaces used to simulate table layout
- Table contains a nested table
- Word graphic not inline
1.3.3 A Sensory Characteristics - 1 rule
1.4 Distinguishable
1.4.1 A Use of Color - 2 rules
1.4.2 A Audio Control - 2 rules
1.4.3 AA Contrast (Minimum) - 2 rules
1.4.4 AA Resize Text - 2 rules
1.4.5 AA Images of Text - No rules
1.4.6 AAA Contrast (Enhanced) - 3 rules
1.4.7 AAA Low or No Background Audio - No rules
1.4.8 AAA Visual Presentation - 2 rules
1.4.9 AAA Images of Text (No Exception) - No rules
2.1 Keyboard Accessible
2.1.1 A Keyboard - 12 rules
- Scrollable element not keyboard accessible
- Server-side image maps are inaccessible
mouseup
handler without keyboard equivalentmouseover
handler without keyboard equivalentmouseout
handler without keyboard equivalentmousedown
handler without keyboard equivalentclick
handler without keyboard equivalentdblclick
handler without keyboard equivalent- Keyboard handler without
tabindex
- JavaScript simulated link
- Field blurs when focused
- Clickable control with no role
2.1.2 A No Keyboard Trap - No rules
2.1.3 AAA Keyboard (No Exception) - 11 rules
- Scrollable element not keyboard accessible
- Server-side image maps are inaccessible
mouseup
handler without keyboard equivalentmouseover
handler without keyboard equivalentmouseout
handler without keyboard equivalentmousedown
handler without keyboard equivalentclick
handler without keyboard equivalentdblclick
handler without keyboard equivalent- Keyboard handler without
tabindex
- JavaScript simulated link
- Field blurs when focused
2.2 Enough Time
2.2.1 A Timing Adjustable - 4 rules
- Timed meta tag page refresh
- Timed meta tag page redirect
- Timed HTTP page redirect
- Timed HTTP page refresh
2.2.2 A Pause, Stop, Hide - 7 rules
- CSS animation longer than 5 seconds
- Scrolling
marquee
element - Flashing
blink
element - Animated image longer than 5 seconds
- Autoplay video longer than 5 seconds
- CSS causes blinking
- JavaScript causes blinking
2.2.3 AAA No Timing - No rules
2.2.4 AAA Interruptions - 4 rules
- Timed meta tag page refresh
- Timed meta tag page redirect
- Timed HTTP page redirect
- Timed HTTP page refresh
2.2.5 AAA Re-authenticating - No rules
2.3 Seizures
2.3.1 A Three Flashes or Below Threshold - 1 rule
2.3.2 AAA Three Flashes - 1 rule
2.4 Navigable
2.4.1 A Bypass Blocks - 2 rules
2.4.2 A Page Titled - 4 rules
- Document title missing
- Document title is blank
- Document title is placeholder
- Document title used on multiple pages
2.4.3 A Focus Order - 1 rule
2.4.4 A Link Purpose (In Context) - 4 rules
- Image map has no accessible name
- HTML link has no accessible name
- Same link text in same context goes to different pages
- Ambiguous link text with no context
2.4.5 AA Multiple Ways - 1 rule
2.4.6 AA Headings and Labels - 2 rules
2.4.7 AA Focus Visible - 2 rules
2.4.8 AAA Location - No rules
2.4.9 AAA Link Purpose (Link Only) - 6 rules
- Image map has no accessible name
- HTML link has no accessible name
- Ambiguous link text
- Same link text goes to different pages
- Same link text in same context goes to different pages
- Ambiguous link text with no context
2.4.10 AAA Section Headings - 1 rule
3.1 Readable
3.1.1 A Language of Page - 3 rules
3.1.2 AA Language of Parts - 2 rules
3.1.3 AAA Unusual Words - No rules
3.1.4 AAA Abbreviations - 1 rule
3.1.5 AAA Reading Level - 1 rule
3.1.6 AAA Pronunciation - No rules
3.2 Predictable
3.2.1 A On Focus - 2 rules
3.2.2 A On Input - 3 rules
select
change event blocks keyboard navigation- Form submits on focus change
- Script opens new window without warning
3.2.3 AA Consistent Navigation - No rules
3.2.4 AA Consistent Identification - No rules
3.2.5 AAA Change on Request - 10 rules
- Timed meta tag page refresh
- Timed meta tag page redirect
- Link
target
opens new window without warning - JavaScript opens new window without warning
- Form auto-submits when tabbing
- Unexpected popup on page load
- Timed HTTP page refresh
- Popup appears when control value changes
- Timed JavaScript page refresh
- Unexpected JavaScript popup
3.3 Input Assistance
3.3.1 A Error Identification - No rules
3.3.2 A Labels or Instructions - 2 rules
3.3.3 AA Error Suggestion - No rules
3.3.4 AA Error Prevention (Legal, Financial, Data) - No rules
3.3.5 AAA Help - No rules
3.3.6 AAA Error Prevention (All) - No rules
4.1 Robust
4.1.1 A Parsing - 194 rules
- HTML nesting error
- Page has duplicate IDs
a
cannot have clickable ancestora
details
cannot have clickable ancestora
embed
cannot have clickable ancestora
iframe
cannot have clickable ancestora
label
cannot have clickable ancestora
a
cannot have clickable ancestorbutton
details
cannot have clickable ancestorbutton
embed
cannot have clickable ancestorbutton
iframe
cannot have clickable ancestorbutton
label
cannot have clickable ancestorbutton
button
cannot have clickable ancestora
textarea
cannot have clickable ancestora
select
cannot have clickable ancestora
input
cannot have clickable ancestora
button
cannot have clickable ancestorbutton
textarea
cannot have clickable ancestorbutton
select
cannot have clickable ancestorbutton
input
cannot have clickable ancestorbutton
video
withcontrols
must not appear as a descendant ofa
audio
withcontrols
must not appear as a descendant ofa
video
withcontrols
must not appear as a descendant ofbutton
audio
withcontrols
must not appear as a descendant ofbutton
form
cannot have ancestorform
progress
cannot have ancestorprogress
meter
cannot have ancestormeter
dfn
cannot have ancestordfn
noscript
cannot have ancestornoscript
label
cannot have ancestorlabel
address
cannot have ancestoraddress
section
cannot have ancestoraddress
nav
cannot have ancestoraddress
article
cannot have ancestoraddress
header
cannot have ancestorheader
header
cannot have ancestorfooter
header
cannot have ancestoraddress
footer
cannot have ancestorheader
footer
cannot have ancestorfooter
header
cannot have ancestordt
footer
cannot have ancestordt
article
cannot have ancestordt
nav
cannot have ancestordt
section
cannot have ancestordt
h1
cannot have ancestordt
h2
cannot have ancestordt
h3
cannot have ancestordt
h4
cannot have ancestordt
h5
cannot have ancestordt
h6
cannot have ancestordt
hgroup
cannot have ancestordt
header
cannot have ancestorth
footer
cannot have ancestorth
article
cannot have ancestorth
nav
cannot have ancestorth
section
cannot have ancestorth
h1
cannot have ancestorth
h2
cannot have ancestorth
h3
cannot have ancestorth
h4
cannot have ancestorth
h5
cannot have ancestorth
h6
cannot have ancestorth
hgroup
cannot have ancestorth
footer
cannot have ancestoraddress
h1
cannot have ancestoraddress
h2
cannot have ancestoraddress
h3
cannot have ancestoraddress
h4
cannot have ancestoraddress
h5
cannot have ancestoraddress
h6
cannot have ancestoraddress
table
cannot have ancestorcaption
a
cannot have ancestora
a
cannot have ancestorbutton
button
cannot have ancestora
button
cannot have ancestorbutton
details
cannot have ancestora
details
cannot have ancestorbutton
dialog
cannot have ancestora
dialog
cannot have ancestorbutton
embed
cannot have ancestora
embed
cannot have ancestorbutton
iframe
cannot have ancestora
iframe
cannot have ancestorbutton
label
cannot have ancestora
label
cannot have ancestorbutton
select
cannot have ancestora
select
cannot have ancestorbutton
textarea
cannot have ancestora
textarea
cannot have ancestorbutton
main
cannot have ancestora
main
cannot have ancestoraddress
main
cannot have ancestorarticle
main
cannot have ancestoraside
main
cannot have ancestoraudio
main
cannot have ancestorblockquote
main
cannot have ancestorcanvas
main
cannot have ancestorcaption
main
cannot have ancestordd
main
cannot have ancestordel
main
cannot have ancestordetails
main
cannot have ancestordialog
main
cannot have ancestordt
main
cannot have ancestorfieldset
main
cannot have ancestorfigure
main
cannot have ancestorfooter
main
cannot have ancestorheader
main
cannot have ancestorins
main
cannot have ancestorli
main
cannot have ancestormain
main
cannot have ancestormap
main
cannot have ancestornav
main
cannot have ancestornoscript
main
cannot have ancestorobject
main
cannot have ancestorsection
main
cannot have ancestorslot
main
cannot have ancestortd
main
cannot have ancestorth
main
cannot have ancestorvideo
a
cannot have ancestor withrole=button
a
cannot have ancestor withrole=link
button
cannot have ancestor withrole=button
button
cannot have ancestor withrole=link
details
cannot have ancestor withrole=button
details
cannot have ancestor withrole=link
dialog
cannot have ancestor withrole=button
dialog
cannot have ancestor withrole=link
embed
cannot have ancestor withrole=button
embed
cannot have ancestor withrole=link
iframe
cannot have ancestor withrole=button
iframe
cannot have ancestor withrole=link
label
cannot have ancestor withrole=button
label
cannot have ancestor withrole=link
select
cannot have ancestor withrole=button
select
cannot have ancestor withrole=link
textarea
cannot have ancestor withrole=button
textarea
cannot have ancestor withrole=link
- Element with
tabindex
cannot have ancestor withrole=button
- Element with
tabindex
cannot have ancestor withrole=link
audio
withcontrols
cannot have ancestor withrole=button
audio
withcontrols
cannot have ancestor withrole=link
img
withusemap
cannot have ancestor withrole=button
img
withusemap
cannot have ancestor withrole=link
input
cannot have ancestor withrole=button
input
cannot have ancestor withrole=link
menu
withtoolbar
cannot have ancestor withrole=button
menu
withtoolbar
cannot have ancestor withrole=link
object
withusemap
cannot have ancestor withrole=button
object
withusemap
cannot have ancestor withrole=link
video
withcontrols
cannot have ancestor withrole=button
video
withcontrols
cannot have ancestor withrole=link
role=button
cannot have ancestor withrole=button
role=button
cannot have ancestor withrole=link
role=checkbox
cannot have ancestor withrole=button
role=checkbox
cannot have ancestor withrole=link
role=combobox
cannot have ancestor withrole=button
role=combobox
cannot have ancestor withrole=link
role=grid
cannot have ancestor withrole=button
role=grid
cannot have ancestor withrole=link
role=gridcell
cannot have ancestor withrole=button
role=gridcell
cannot have ancestor withrole=link
role=listbox
cannot have ancestor withrole=button
role=listbox
cannot have ancestor withrole=link
role=menu
cannot have ancestor withrole=button
role=menu
cannot have ancestor withrole=link
role=menubar
cannot have ancestor withrole=button
role=menubar
cannot have ancestor withrole=link
role=menuitem
cannot have ancestor withrole=button
role=menuitem
cannot have ancestor withrole=link
role=menuitemcheckbox
cannot have ancestor withrole=button
role=menuitemcheckbox
cannot have ancestor withrole=link
role=menuitemradio
cannot have ancestor withrole=button
role=menuitemradio
cannot have ancestor withrole=link
role=option
cannot have ancestor withrole=button
role=option
cannot have ancestor withrole=link
role=radio
cannot have ancestor withrole=button
role=radio
cannot have ancestor withrole=link
role=scrollbar
cannot have ancestor withrole=button
role=scrollbar
cannot have ancestor withrole=link
role=searchbox
cannot have ancestor withrole=button
role=searchbox
cannot have ancestor withrole=link
role=slider
cannot have ancestor withrole=button
role=slider
cannot have ancestor withrole=link
role=spinbutton
cannot have ancestor withrole=button
role=spinbutton
cannot have ancestor withrole=link
role=switch
cannot have ancestor withrole=button
role=switch
cannot have ancestor withrole=link
role=tab
cannot have ancestor withrole=button
role=tab
cannot have ancestor withrole=link
role=textbox
cannot have ancestor withrole=button
role=textbox
cannot have ancestor withrole=link
role=treeitem
cannot have ancestor withrole=button
role=treeitem
cannot have ancestor withrole=link
- HTML parsing error
img
innoscript
beforebody
4.1.2 A Name, Role, Value - 22 rules
- Image map has no accessible name
- Graphic button has no accessible name
- Frame has no accessible name
- Frame
title
is frame file name label
is blank- HTML link has no accessible name
- Alt text not updated
- JavaScript simulated link
- JavaScript control with no ARIA role
- ARIA control has no label
- HTML form control has no accessible name
- ARIA label references empty element
input
button withoutvalue
or label- ARIA button is blank
- HTML button has no accessible name
- ARIA menuitem is blank
- Hidden element is focusable
- ARIA
role
hides focusable children - Clickable control without
tabindex
- Focusable
role=separator
must havearia-valuenow
- Missing ARIA attribute
- Invalid
aria-controls
value