Accessible web development
How to build websites that work for everyone, without exception
Web accessibility (a11y) is not an optional extra: it’s a technical, legal and ethical requirement. Over a billion people worldwide live with some form of disability, and a significant percentage interact with the web through assistive technologies such as screen readers, specialised keyboards or alternative input devices.
Building accessible sites does not mean sacrificing design or complexity. It means writing semantic code, respecting standard interaction patterns and verifying the experience works for all users. Accessible websites are also easier to maintain, better indexed by search engines and more usable for everyone.
Semantic HTML: the foundation of accessibility
Semantic HTML is the fundamental pillar of accessibility. Using the correct tags (<nav>, <main>, <article>, <button>, <label>) allows screen readers to understand the page structure and offer logical navigation to the user.
The most common mistake is using <div> and <span> for everything and compensating with ARIA. A <div onclick> will never be equivalent to a <button>: it lacks native focus, does not respond to the keyboard and screen readers do not announce it as an interactive element.
- Use <button> for actions, <a> for navigation, <input> for forms
- Structure content with <header>, <nav>, <main>, <aside>, <footer>
- Headings (<h1>–<h6>) must follow a logical hierarchy without skipping levels
- Informational images need descriptive alt text; decorative images use alt=""
ARIA: when and how to use it
WAI-ARIA (Accessible Rich Internet Applications) adds semantic attributes to elements that native HTML cannot fully describe. It’s essential for interactive components like modals, tabs, accordions, dropdown menus and autocompletes.
The first rule of ARIA is: don’t use ARIA if you can achieve the same result with native HTML. ARIA does not add behaviour, only semantics. A role="button" on a <div> announces the element as a button, but does not make it focusable or responsive to Enter or Space.
- aria-label and aria-labelledby: provide accessible names for elements without visible text
- aria-expanded, aria-selected, aria-checked: communicate the state of interactive components
- aria-live: announces dynamic content changes (notifications, search results)
- role: defines the purpose of an element when native HTML does not communicate it
Screen readers and testing
Screen readers (NVDA, JAWS, VoiceOver, TalkBack) convert page content into synthesised speech or braille. They interpret the DOM, not the visual screen, so HTML structure and ARIA attributes completely determine the experience.
Testing with a real screen reader is irreplaceable. Automated tools detect between 30% and 50% of accessibility issues. The rest requires manual testing: is the purpose of each element announced correctly? Does navigation make sense without seeing the screen?
- VoiceOver (macOS/iOS): built-in, activate with Cmd + F5
- NVDA (Windows): free and the most widely used on the market
- TalkBack (Android): built into Android devices
- Test complete navigation without a mouse at least once per sprint
Automated testing tools
Automated tools are the first filter for detecting accessibility issues. They do not replace manual testing, but they catch common errors like missing alt text, insufficient contrast, absent labels or broken heading hierarchy.
- axe DevTools: browser extension that audits the page against WCAG 2.1/2.2 rules
- Lighthouse (Accessibility tab): included in Chrome DevTools, quick audit with a score
- eslint-plugin-jsx-a11y: accessibility linting for React components during development
- Pa11y: CLI tool for integrating accessibility testing into CI/CD pipelines
- Contrast Checker: verifies colour combinations meet WCAG ratios (4.5:1 for normal text)
Legal and regulatory compliance
Web accessibility is not just good practice: it’s a legal requirement in many countries. The European Accessibility Act (EAA) requires digital services to be accessible from June 2025. In the United States, the ADA is regularly applied to websites, with over 4,000 annual lawsuits related to digital accessibility.
The technical reference standard is WCAG 2.2 (Web Content Accessibility Guidelines), with three conformance levels: A (minimum), AA (recommended standard for most sites) and AAA (maximum). Most legislation requires level AA.
- WCAG 2.2 Level AA: the standard most regulations require
- European Accessibility Act (EAA): mandatory for digital services in the EU since 2025
- ADA (US): applies to websites of businesses open to the public
- EN 301 549: European technical standard referencing WCAG 2.1 as a requirement
Key Takeaways
- Semantic HTML is the foundation: use the correct tags before resorting to ARIA
- All functionality must be keyboard-accessible with a visible focus indicator
- Automated tools detect only 30–50% of issues: manual testing is essential
- WCAG 2.2 Level AA is the recommended minimum and legally required in many jurisdictions
- Accessibility improves SEO, overall usability and reduces legal risk
Is your website accessible to all users?
We audit your site’s accessibility, identify barriers and help you meet WCAG 2.2 with a practical improvement plan.