WCAG 2.0 Accessibility Standard
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 312 rules covering 36 checkpoints for WCAG 2.0 supported by the current version of the product.
1.1 Text Alternatives
1.1.1 A Non-text Content - 22 rules
- Applet with no fallback content (HTML)
 - Image map has no accessible name (HTML)
 - ARIA image has no accessible name (HTML)
 - Image has no accessible name (HTML)
 altis image file name (PDF and HTML)- Graphic button has no accessible name (HTML)
 - Object with no fallback content (HTML)
 - ASCII art used for text alternative (HTML)
 - Image accessible name uses placeholder (HTML)
 - PDF graphic has no accessible name (PDF)
 buttonimage must havealt(HTML)- Frame 
srccontains an image instead of HTML (HTML) - Server-side image maps are inaccessible (HTML)
 - Alt text does not convey color information (HTML)
 - Object has no accessible name (HTML)
 - Placeholder for timed media (HTML)
 - Decorative image missing null alt attribute (HTML)
 - Spacer image has descriptive 
alt(HTML) - Decorative image with accessible name (HTML)
 - SVG has no accessible name (HTML)
 - Unicode lookalike characters used (HTML)
 - Word graphic has no accessible name (Office documents)
 
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 - 86 rules
- Headings should not contain headings (HTML)
 - Mark up lists and list items properly (HTML)
 - Data table without 
thheaders (HTML) - Complex header associations need 
headersattribute (HTML) - Layout table contains data table markup (HTML)
 - Layout table contains summary or caption (HTML)
 fieldsetwithoutlegend(HTML)fieldsetwith invalidlegend(HTML)labelis blank (HTML)- PDF not tagged (PDF)
 - PDF security blocks accessibility (PDF)
 - Use 
h1-h6instead of heading-like styles (HTML) - Use 
h1-h6instead of heading-like images (HTML) - ARIA table has missing cells (HTML)
 - HTML table has missing cells (HTML)
 - Spaces used to simulate table layout (HTML)
 - JavaScript simulated link (HTML)
 fieldsetwith no interactive elements (HTML)- CSS 
content:not available to all users (HTML) - Broken cell 
headersID reference (HTML) - Data table hidden by 
role=presentation(HTML) - Word table without row and column headers (Office documents)
 tablecannot have ancestorcaption(HTML)maincannot have ancestora(HTML)maincannot have ancestoraddress(HTML)maincannot have ancestorarticle(HTML)maincannot have ancestoraside(HTML)maincannot have ancestoraudio(HTML)maincannot have ancestorblockquote(HTML)maincannot have ancestorcanvas(HTML)maincannot have ancestorcaption(HTML)maincannot have ancestordd(HTML)maincannot have ancestordel(HTML)maincannot have ancestordetails(HTML)maincannot have ancestordialog(HTML)maincannot have ancestordt(HTML)maincannot have ancestorfieldset(HTML)maincannot have ancestorfigure(HTML)maincannot have ancestorfooter(HTML)maincannot have ancestorheader(HTML)maincannot have ancestorins(HTML)maincannot have ancestorli(HTML)maincannot have ancestormain(HTML)maincannot have ancestormap(HTML)maincannot have ancestornav(HTML)maincannot have ancestornoscript(HTML)maincannot have ancestorobject(HTML)maincannot have ancestorsection(HTML)maincannot have ancestorslot(HTML)maincannot have ancestortd(HTML)maincannot have ancestorth(HTML)maincannot have ancestorvideo(HTML)role=captionmust be owned byrole=figureorgridortableortreegrid(HTML)role=cellmust be owned byrole=row(HTML)role=optionmust be owned byrole=listbox(HTML)role=menuitemmust be owned byrole=menuormenubar(HTML)role=menuitemcheckboxmust be owned byrole=menuormenubar(HTML)role=menuitemradiomust be owned byrole=menuormenubarorgroup(HTML)role=tabmust be owned byrole=tablist(HTML)role=treeitemmust be owned byrole=treeorgroup(HTML)role=listitemmust be owned byrole=list(HTML)role=gridcellmust be owned byrole=row(HTML)role=columnheadermust be owned byrole=row(HTML)role=rowheadermust be owned byrole=row(HTML)role=rowmust be owned byrole=gridorrowgrouportreegridortable(HTML)role=rowgroupmust be owned byrole=gridortreegridortable(HTML)- `role=feed` must contain `role=article` (HTML)
 - `role=grid` must contain `role=row` or `rowgroup` (HTML)
 - `ul` must contain `li` or `role=listitem` (HTML)
 - `role=list` must contain `role=listitem` (HTML)
 - `role=listbox` must contain `role=option` (HTML)
 - `role=menu` must contain `role=menuitem` or `menuitemcheckbox` or `menuitemradio` (HTML)
 - `role=menubar` must contain `role=menuitem` or `menuitemcheckbox` or `menuitemradio` (HTML)
 - `role=radiogroup` must contain `role=radio` (HTML)
 - `role=row` must contain `role=cell` or `columnheader` or `gridcell` or `rowheader` (HTML)
 - `role=rowgroup` must contain `role=row` (HTML)
 - `role=table` must contain `role=row` or `rowgroup` (HTML)
 - `role=tablist` must contain `role=tab` (HTML)
 - `role=tree` must contain `role=treeitem` (HTML)
 - `role=treegrid` must contain `role=row` or `rowgroup` (HTML)
 - Broken 
aria-activedescendantID reference (HTML) - Element 
ddrequiresdlparent (HTML) - Element 
dtrequiresdlparent (HTML) - Element 
lirequiresolorulparent (HTML) - Element 
optionrequiresselectoroptgroupparent (HTML) - Element 
summaryrequires details` parent (HTML) 
1.3.2 A Meaningful Sequence - 7 rules
- Right-to-left language without 
dir(HTML) dir=ltrfor right-to-left language (HTML)- CSS 
position:causes meaningless sequence (HTML) - Word has spaces between each letter (HTML)
 - Spaces used to simulate table layout (HTML)
 - Table contains a nested table (HTML)
 - Word graphic not inline (Office documents)
 
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
- CSS depends on default colors (HTML)
 - Text contrast below minimum (HTML)
 
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
- CSS depends on default colors (HTML)
 - Text contrast below minimum (HTML)
 - Text contrast ratio below 7:1 (HTML)
 
1.4.7 AAA Low or No Background Audio - No rules
1.4.8 AAA Visual Presentation - 2 rules
- CSS depends on default colors (HTML)
 - Justified text is hard to read (HTML)
 
1.4.9 AAA Images of Text (No Exception) - No rules
2.1 Keyboard Accessible
2.1.1 A Keyboard - 13 rules
iframewith interactive elements is excluded from tab order (HTML)- Scrollable element not keyboard accessible (HTML)
 - Server-side image maps are inaccessible (HTML)
 mouseuphandler without keyboard equivalent (HTML)mouseoverhandler without keyboard equivalent (HTML)mouseouthandler without keyboard equivalent (HTML)mousedownhandler without keyboard equivalent (HTML)clickhandler without keyboard equivalent (HTML)dblclickhandler without keyboard equivalent (HTML)- Keyboard handler without 
tabindex(HTML) - JavaScript simulated link (HTML)
 - Field blurs when focused (HTML)
 - Clickable control with no role (HTML)
 
2.1.2 A No Keyboard Trap - No rules
2.1.3 AAA Keyboard (No Exception) - 11 rules
- Scrollable element not keyboard accessible (HTML)
 - Server-side image maps are inaccessible (HTML)
 mouseuphandler without keyboard equivalent (HTML)mouseoverhandler without keyboard equivalent (HTML)mouseouthandler without keyboard equivalent (HTML)mousedownhandler without keyboard equivalent (HTML)clickhandler without keyboard equivalent (HTML)dblclickhandler without keyboard equivalent (HTML)- Keyboard handler without 
tabindex(HTML) - JavaScript simulated link (HTML)
 - Field blurs when focused (HTML)
 
2.2 Enough Time
2.2.1 A Timing Adjustable - 4 rules
- Timed meta tag page refresh (HTML)
 - Timed meta tag page redirect (HTML)
 - Timed HTTP page redirect (HTML)
 - Timed HTTP page refresh (HTML)
 
2.2.2 A Pause, Stop, Hide - 6 rules
- CSS animation longer than 5 seconds (HTML)
 - Scrolling 
marqueeelement (HTML) - Flashing 
blinkelement (HTML) - Animated image longer than 5 seconds (HTML)
 - Autoplay video longer than 5 seconds (HTML)
 - CSS causes blinking (HTML)
 
2.2.3 AAA No Timing - No rules
2.2.4 AAA Interruptions - 5 rules
- Timed meta tag page refresh (HTML)
 - Meta tag has delayed refresh (HTML)
 - Timed meta tag page redirect (HTML)
 - Timed HTTP page redirect (HTML)
 - Timed HTTP page refresh (HTML)
 
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
- Frame 
titleis frame file name (HTML) - Broken skip link (HTML)
 
2.4.2 A Page Titled - 4 rules
- Document title missing (PDF and HTML)
 - Document title is blank (PDF and HTML)
 - Document title is placeholder (PDF and HTML)
 - Document title used on multiple pages (HTML)
 
2.4.3 A Focus Order - 1 rule
- Tab order wrong (HTML)
 
2.4.4 A Link Purpose (In Context) - 4 rules
- Image map has no accessible name (HTML)
 - HTML link has no accessible name (HTML)
 - Same link text in same context goes to different pages (HTML)
 - Ambiguous link text with no context (HTML)
 
2.4.5 AA Multiple Ways - 1 rule
2.4.6 AA Headings and Labels - 2 rules
labelis blank (HTML)- Generic radio button labels need a 
fieldset(HTML) 
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)
 - HTML link has no accessible name (HTML)
 - Ambiguous link text (PDF and HTML)
 - Same link text goes to different pages (HTML)
 - Same link text in same context goes to different pages (HTML)
 - Ambiguous link text with no context (HTML)
 
2.4.10 AAA Section Headings - 1 rule
- Page with no headings (PDF and HTML)
 
3.1 Readable
3.1.1 A Language of Page - 2 rules
- Page 
langis invalid (HTML) - Missing page language (PDF and HTML)
 
3.1.2 AA Language of Parts - 2 rules
3.1.3 AAA Unusual Words - No rules
3.1.4 AAA Abbreviations - No rules
3.1.5 AAA Reading Level - 1 rule
- Page is hard to read (HTML)
 
3.1.6 AAA Pronunciation - No rules
3.2 Predictable
3.2.1 A On Focus - 2 rules
- Unexpected popup on page load (HTML)
 - Field blurs when focused (HTML)
 
3.2.2 A On Input - 3 rules
selectchange event blocks keyboard navigation (HTML)- Form submits on focus change (HTML)
 - Script opens new window without warning (HTML)
 
3.2.3 AA Consistent Navigation - No rules
3.2.4 AA Consistent Identification - No rules
3.2.5 AAA Change on Request - 11 rules
- Timed meta tag page refresh (HTML)
 - Meta tag has delayed refresh (HTML)
 - Timed meta tag page redirect (HTML)
 - Link 
targetopens new window without warning (HTML) - JavaScript opens new window without warning (HTML)
 - Form auto-submits when tabbing (HTML)
 - Unexpected popup on page load (HTML)
 - Timed HTTP page refresh (HTML)
 - Popup appears when control value changes (HTML)
 - Timed JavaScript page refresh (HTML)
 - Unexpected JavaScript popup (HTML)
 
3.3 Input Assistance
3.3.1 A Error Identification - No rules
3.3.2 A Labels or Instructions - 3 rules
fieldsetwithoutlegend(HTML)fieldsetwith invalidlegend(HTML)- Grouped fields need a label or instructions (HTML)
 
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 - 1 rule
- Parsing (obselete) (HTML)
 
4.1.2 A Name, Role, Value - 137 rules
- Image map has no accessible name (HTML)
 - Graphic button has no accessible name (HTML)
 - Frame has no accessible name (HTML)
 - Frame 
titleis frame file name (HTML) labelis blank (HTML)- HTML link has no accessible name (HTML)
 - Summary has no accessible name (HTML)
 - JavaScript simulated link (HTML)
 - JavaScript control with no ARIA role (HTML)
 - ARIA control has no label (HTML)
 - HTML form control has no accessible name (HTML)
 - ARIA label references empty element (HTML)
 inputbutton withoutvalueor label (HTML)- ARIA button is blank (HTML)
 - HTML button has no accessible name (HTML)
 - ARIA menuitem is blank (HTML)
 - Body element is hidden (HTML)
 - Hidden element is focusable (HTML)
 - ARIA 
rolehides focusable children (HTML) - Clickable control without 
tabindex(HTML) acannot have clickable ancestora(HTML)detailscannot have clickable ancestora(HTML)embedcannot have clickable ancestora(HTML)iframecannot have clickable ancestora(HTML)labelcannot have clickable ancestora(HTML)acannot have clickable ancestorbutton(HTML)detailscannot have clickable ancestorbutton(HTML)embedcannot have clickable ancestorbutton(HTML)iframecannot have clickable ancestorbutton(HTML)labelcannot have clickable ancestorbutton(HTML)buttoncannot have clickable ancestora(HTML)textareacannot have clickable ancestora(HTML)selectcannot have clickable ancestora(HTML)inputcannot have clickable ancestora(HTML)buttoncannot have clickable ancestorbutton(HTML)textareacannot have clickable ancestorbutton(HTML)selectcannot have clickable ancestorbutton(HTML)inputcannot have clickable ancestorbutton(HTML)videowithcontrolsmust not appear as a descendant ofa(HTML)audiowithcontrolsmust not appear as a descendant ofa(HTML)videowithcontrolsmust not appear as a descendant ofbutton(HTML)audiowithcontrolsmust not appear as a descendant ofbutton(HTML)acannot have ancestora(HTML)acannot have ancestorbutton(HTML)buttoncannot have ancestora(HTML)buttoncannot have ancestorbutton(HTML)detailscannot have ancestora(HTML)detailscannot have ancestorbutton(HTML)dialogcannot have ancestora(HTML)dialogcannot have ancestorbutton(HTML)embedcannot have ancestora(HTML)embedcannot have ancestorbutton(HTML)iframecannot have ancestora(HTML)iframecannot have ancestorbutton(HTML)labelcannot have ancestora(HTML)labelcannot have ancestorbutton(HTML)selectcannot have ancestora(HTML)selectcannot have ancestorbutton(HTML)textareacannot have ancestora(HTML)textareacannot have ancestorbutton(HTML)acannot have ancestor withrole=button(HTML)acannot have ancestor withrole=link(HTML)buttoncannot have ancestor withrole=button(HTML)buttoncannot have ancestor withrole=link(HTML)detailscannot have ancestor withrole=button(HTML)detailscannot have ancestor withrole=link(HTML)dialogcannot have ancestor withrole=button(HTML)dialogcannot have ancestor withrole=link(HTML)embedcannot have ancestor withrole=button(HTML)embedcannot have ancestor withrole=link(HTML)iframecannot have ancestor withrole=button(HTML)iframecannot have ancestor withrole=link(HTML)labelcannot have ancestor withrole=button(HTML)labelcannot have ancestor withrole=link(HTML)selectcannot have ancestor withrole=button(HTML)selectcannot have ancestor withrole=link(HTML)textareacannot have ancestor withrole=button(HTML)textareacannot have ancestor withrole=link(HTML)- Element with 
tabindexcannot have ancestor withrole=button(HTML) - Element with 
tabindexcannot have ancestor withrole=link(HTML) audiowithcontrolscannot have ancestor withrole=button(HTML)audiowithcontrolscannot have ancestor withrole=link(HTML)imgwithusemapcannot have ancestor withrole=button(HTML)imgwithusemapcannot have ancestor withrole=link(HTML)inputcannot have ancestor withrole=button(HTML)inputcannot have ancestor withrole=link(HTML)menuwithtoolbarcannot have ancestor withrole=button(HTML)menuwithtoolbarcannot have ancestor withrole=link(HTML)objectwithusemapcannot have ancestor withrole=button(HTML)objectwithusemapcannot have ancestor withrole=link(HTML)videowithcontrolscannot have ancestor withrole=button(HTML)videowithcontrolscannot have ancestor withrole=link(HTML)role=buttoncannot have ancestor withrole=button(HTML)role=buttoncannot have ancestor withrole=link(HTML)role=checkboxcannot have ancestor withrole=button(HTML)role=checkboxcannot have ancestor withrole=link(HTML)role=comboboxcannot have ancestor withrole=button(HTML)role=comboboxcannot have ancestor withrole=link(HTML)role=gridcannot have ancestor withrole=button(HTML)role=gridcannot have ancestor withrole=link(HTML)role=gridcellcannot have ancestor withrole=button(HTML)role=gridcellcannot have ancestor withrole=link(HTML)role=listboxcannot have ancestor withrole=button(HTML)role=listboxcannot have ancestor withrole=link(HTML)role=menucannot have ancestor withrole=button(HTML)role=menucannot have ancestor withrole=link(HTML)role=menubarcannot have ancestor withrole=button(HTML)role=menubarcannot have ancestor withrole=link(HTML)role=menuitemcannot have ancestor withrole=button(HTML)role=menuitemcannot have ancestor withrole=link(HTML)role=menuitemcheckboxcannot have ancestor withrole=button(HTML)role=menuitemcheckboxcannot have ancestor withrole=link(HTML)role=menuitemradiocannot have ancestor withrole=button(HTML)role=menuitemradiocannot have ancestor withrole=link(HTML)role=optioncannot have ancestor withrole=button(HTML)role=optioncannot have ancestor withrole=link(HTML)role=radiocannot have ancestor withrole=button(HTML)role=radiocannot have ancestor withrole=link(HTML)role=scrollbarcannot have ancestor withrole=link(HTML)role=searchboxcannot have ancestor withrole=button(HTML)role=searchboxcannot have ancestor withrole=link(HTML)role=slidercannot have ancestor withrole=button(HTML)role=slidercannot have ancestor withrole=link(HTML)role=spinbuttoncannot have ancestor withrole=button(HTML)role=spinbuttoncannot have ancestor withrole=link(HTML)role=switchcannot have ancestor withrole=button(HTML)role=switchcannot have ancestor withrole=link(HTML)role=tabcannot have ancestor withrole=button(HTML)role=tabcannot have ancestor withrole=link(HTML)role=textboxcannot have ancestor withrole=button(HTML)role=textboxcannot have ancestor withrole=link(HTML)role=treeitemcannot have ancestor withrole=button(HTML)role=treeitemcannot have ancestor withrole=link(HTML)- `aria-hidden` not allowed on elements with `hidden=until-found` (HTML)
 - Focusable 
role=separatormust havearia-valuenow(HTML) - Missing ARIA attribute (HTML)
 - Invalid 
aria-controlsvalue (HTML)