Accessibility testing
When developing websites or applications, it’s crucial to regularly check for accessibility during the design and development process. This guide provides a comprehensive checklist to help you test your work. A good practice is to test using only your keyboard, zooming to 400% at 1280×1024 pixels resolution, and using a screen reader (like VoiceOver).
General Checks
The foundation of accessibility starts with proper content structure, color contrast, and semantic HTML:
- Is the language properly set (
<html lang="en">
)? - Are skip links present to the main content?
- Is all content wrapped in proper landmarks (
header
,main
,footer
,nav
,article
,section
,aside
)? - Are navigation elements properly labeled (
<nav aria-label="Main">
,<nav aria-label="Footer">
)? - Does the color contrast meet requirements (minimum 4.5:1 for normal text, 3:1 for large text)?
- Are links distinguished by more than just color (e.g., underline)?
- Do interactive elements and links have clear focus indicators (not just browser default)?
- Are links opening in new tabs properly indicated (visually and with sr-only text “opens in new tab”)?
- Is there a logical tab order?
- Is all content accessible at 400% zoom on 1280×1024 resolution without horizontal scrolling?
- Is the heading structure semantic (
h1
>h2
>h3
etc.) with one mainh1
per page? - Are appropriate HTML elements used for their intended purpose?
- Are JavaScript-driven changes properly announced to screen readers?
- Are page titles descriptive (e.g., “Page Name - Site Name”)?
- Is the logo properly labeled (e.g., “Site Name Logo”) and not linked on homepage?
- Is an accessibility statement present and easily findable?
- Are duplicate IDs avoided across the page?
Media Content
For images, videos, and animations:
- Do videos have captions and audio descriptions (or transcripts)?
- Do videos have clear titles on
iframe
elements? - Are keyboard shortcuts disabled for embedded videos where necessary (e.g., YouTube
&disablekb=1
)? - Do decorative images have empty
alt
attributes while informative images have descriptive alternatives? - Can animations longer than 5 seconds be paused?
- Is text overlaid on images also available to screen readers?
- Are SVG elements with
role="img"
properly labeled witharia-label
oralt
? - Are social media icons properly labeled (e.g., “Visit our Facebook page, opens in new tab”)?
Keyboard Navigation
Test your site without a mouse or trackpad:
- Can all interactive elements be reached and operated with keyboard?
- Can the menu be operated with arrow keys?
- Can submenus be opened with enter/space/down arrow?
- Can submenus be closed with escape?
- Is there a focus trap on open submenus?
- Do submenus have proper ARIA attributes (
aria-expanded
,aria-haspopup
)? - Are menu toggles implemented as
<button>
elements (not links)? - Is the search functionality keyboard accessible?
- Are carousels/sliders keyboard accessible?
- Does keyboard focus remain visible and not get trapped in any section?
Forms and Interactive Elements
Essential form and interactive element checks:
- Does each form control have a proper label?
- Are required fields clearly indicated?
- Are error messages clear, descriptive, and announced to screen readers?
- Are error messages linked to their corresponding inputs?
- Is the submit button clearly visible and properly labeled?
- Are appropriate
autocomplete
attributes used? - Do search fields have proper labels and submit buttons?
- Are newsletter signup forms properly labeled with clear error messages?
- Do
dialog
elements work with keyboard and close with escape? - Are sliders/carousels keyboard-accessible and properly announced?
- Are interactive elements using appropriate ARIA attributes?
Screen Reader Compatibility
Test with a screen reader and ensure the content makes sense:
- Is the correct information being read?
- Are “Read more” links contextual?
- Do interactive controls announce their state correctly?
- Are navigation menus properly structured (using
<ul>
and<li>
)? - Are landmarks properly labeled?
- Are decorative elements hidden from screen readers?
Mobile and Responsive Design
Check responsive behavior and mobile accessibility:
- Does the mobile menu work properly with touch and keyboard?
- Are submenu items accessible on mobile?
- Is the mobile menu toggle button accessible and properly labeled?
- Do all interactive elements have touch targets of at least 44×44 pixels?
- Is content still readable and functional at various zoom levels?
- Are focus indicators visible and not obscured by other elements?
Helpful Tools
Here’s a collection of tools that can help you with accessibility testing:
Browser Extensions
- WAVE Evaluation Tool: Identifies accessibility issues directly in your browser
- axe DevTools: Automated accessibility testing with detailed reports
- Lighthouse: Built into Chrome DevTools, includes accessibility audits
- HeadingsMap: Visualizes your document’s heading structure
- Color Contrast Analyzer: Helps verify color contrast ratios
Screen Readers
- VoiceOver: Built into macOS and iOS
- NVDA: Free screen reader for Windows
- JAWS: Professional screen reader for Windows
- TalkBack: Built into Android devices
Online Tools
- WAVE Web Accessibility Tool: Online version of WAVE
- WebAIM Color Contrast Checker: Quick contrast ratio verification
- HTML5 Outliner: Checks document structure and landmarks
- Who Can Use: Color contrast checker showing how different vision types perceive your colors
- A11y Project Checklist: Additional accessibility guidelines and resources
Development Tools
- eslint-plugin-jsx-a11y: Catches accessibility issues in React code
- pa11y: Command-line accessibility testing
- Storybook a11y addon: Accessibility testing for Storybook components
- axe-core: Accessibility testing engine for automated tools