WCAG 2.1 AA Compliance Checklist

WCAG 2.1 AA is the international standard for web accessibility, published by the W3C. This checklist covers all 30 success criteria that ComplyKeep automatically tests your website against. Each criterion includes what it requires and how our scanner checks it.

Principle 1: Perceivable

Information and user interface components must be presentable to users in ways they can perceive.

1.1 Text Alternatives

1.1.1 Non-text Content

All non-text content (images, icons, charts) must have a text alternative that serves the equivalent purpose.

ComplyKeep checks: Scans all <img> tags for missing or empty alt attributes. Flags decorative images that should have empty alt, and informative images missing descriptions.

1.3 Adaptable

1.3.1 Info and Relationships

Information, structure, and relationships conveyed through presentation must be programmatically determined or available in text.

ComplyKeep checks: Verifies form labels are properly associated with inputs, tables have proper headers, and lists use correct HTML markup.
1.3.2 Meaningful Sequence

The reading order of content must be meaningful when navigated sequentially.

ComplyKeep checks: Tests for CSS properties that reorder content visually but not in DOM order, which can confuse screen readers.

1.4 Distinguishable

1.4.3 Contrast (Minimum)

Text must have a contrast ratio of at least 4.5:1 against its background. Large text (18pt+ or 14pt+ bold) needs 3:1.

ComplyKeep checks: Calculates contrast ratios for all text elements. Flags any text below 4.5:1 with the current ratio and recommended fix.
1.4.4 Resize Text

Text must be resizable up to 200% without loss of content or functionality.

ComplyKeep checks: Tests for fixed font sizes (px) that prevent scaling, and containers with fixed dimensions that clip text.

Principle 2: Operable

User interface components and navigation must be operable.

2.1 Keyboard Accessible

2.1.1 Keyboard

All functionality must be operable from a keyboard without requiring a mouse.

ComplyKeep checks: Identifies interactive elements without keyboard handlers, and elements that trap keyboard focus.
2.1.2 No Keyboard Trap

Focus must not be trapped in any component. Users must be able to navigate out using only keyboard.

ComplyKeep checks: Tests modal dialogs, custom widgets, and embedded content for keyboard trap patterns.

2.4 Navigable

2.4.1 Bypass Blocks

A mechanism must be available to bypass repeated blocks of content (like navigation menus).

ComplyKeep checks: Checks for skip-to-content links and proper landmark regions that allow screen readers to skip navigation.
2.4.2 Page Titled

Pages must have descriptive titles that describe their purpose or content.

ComplyKeep checks: Scans <title> tags for missing, empty, or duplicate titles across pages.
2.4.3 Focus Order

Components receive focus in an order that preserves meaning and operability.

ComplyKeep checks: Verifies tabindex usage and DOM order matches visual order for interactive elements.
2.4.4 Link Purpose (In Context)

The purpose of each link must be determinable from the link text alone or its context.

ComplyKeep checks: Flags "click here", "read more", and other ambiguous link text. Checks for links with no descriptive text.
2.4.5 Multiple Ways

More than one way must be available to locate a page within a set of pages.

ComplyKeep checks: Verifies navigation menus, sitemaps, and search functionality are present.
2.4.6 Headings and Labels

Headings and labels must be descriptive and accurately describe their content.

ComplyKeep checks: Scans heading text for vague labels like "Section 1" or empty headings. Checks form labels for clarity.
2.4.7 Focus Visible

Any keyboard-operable interface must have a visible focus indicator.

ComplyKeep checks: Detects elements with outline:none or outline:0 that remove the default focus indicator without a replacement.

Principle 3: Understandable

Information and the operation of user interface must be understandable.

3.1 Readable

3.1.1 Language of Page

The default human language of each page must be programmatically determined.

ComplyKeep checks: Verifies the <html lang="..."> attribute is present and valid.
3.1.2 Language of Parts

The human language of each passage or phrase must be programmatically determined.

ComplyKeep checks: Scans for content in foreign languages without lang attributes on the containing element.

3.2 Predictable

3.2.1 On Focus

When any component receives focus, it must not initiate a change of context without user action.

ComplyKeep checks: Detects onfocus handlers that trigger navigation, form submission, or page redirects.
3.2.2 On Input

Changing a setting must not automatically cause a change of context unless the user has been advised.

ComplyKeep checks: Flags select elements and radio buttons with onchange handlers that submit forms or navigate.
3.2.3 Consistent Navigation

Navigation mechanisms must be consistent across pages within a set of pages.

ComplyKeep checks: Compares navigation structure across scanned pages to identify inconsistencies.
3.2.4 Consistent Identification

Components with the same functionality must be identified consistently.

ComplyKeep checks: Detects identical icons or buttons with different labels across pages.

3.3 Input Assistance

3.3.1 Error Identification

Input errors must be automatically detected and described to the user in text.

ComplyKeep checks: Scans forms for error handling attributes and ARIA error messaging patterns.
3.3.2 Labels or Instructions

Content that requires user input must have labels or instructions.

ComplyKeep checks: Verifies every form input has an associated <label> element or aria-label attribute.
3.3.3 Error Suggestion

If an input error is detected, a suggestion for fixing it must be provided to the user.

ComplyKeep checks: Checks for error message elements linked to inputs via aria-describedby.

Principle 4: Robust

Content must be robust enough to be interpreted by a wide variety of user agents, including assistive technologies.

4.1 Compatible

4.1.1 Parsing

In HTML, elements must have complete start and end tags, be nested according to specifications, and not have duplicate attributes.

ComplyKeep checks: Validates HTML structure for unclosed tags, duplicate IDs, and improper nesting.
4.1.2 Name, Role, Value

For all UI components, the name and role must be programmatically determined. States, properties, and values can be set by the user.

ComplyKeep checks: Scans custom widgets for ARIA roles, names, and states. Flags interactive elements without accessible names.
4.1.3 Status Messages

Status messages must be programmatically determined through role or properties so assistive technology can present them to the user.

ComplyKeep checks: Detects status messages (success, error, loading) without appropriate ARIA live regions.

Test Your Website Against This Checklist

Enter your URL and get an instant automated report testing every WCAG 2.1 AA criterion above.

Run Free Accessibility Scan →

Frequently Asked Questions

What is the difference between WCAG 2.1 A and AA?

WCAG 2.1 Level A covers 30 basic success criteria, while Level AA adds 20 additional criteria for a total of 50. Level AA requires color contrast of 4.5:1, consistent navigation, and proper error handling, which Level A does not. Most legal frameworks (ADA, EAA, Section 508) reference Level AA.

How many WCAG 2.1 AA criteria are there?

WCAG 2.1 AA contains 30 success criteria across four principles: Perceivable, Operable, Understandable, and Robust. ComplyKeep automatically tests your website against all 30 criteria and reports any violations with fix instructions.

Is WCAG 2.1 AA legally required?

WCAG 2.1 AA is referenced by ADA Title III in the US, Section 508 for federal contractors, and the EU European Accessibility Act. While not a law itself, WCAG 2.1 AA is the technical standard courts and regulators use to determine compliance. Automated scanning with ComplyKeep helps identify gaps before they become legal issues.