WCAG accessibility audit for React applications
Why React causes accessibility issues
React is the most widely used JavaScript framework for building modern web interfaces, but React applications present specific and insidious accessibility problems. Client-side routing (React Router) does not trigger screen reader announcements on page changes: the user clicks a link, the content changes, but nothing is announced. Custom components (dropdown, tabs, modals, accordions) are built with divs and spans instead of native HTML elements, without necessary ARIA attributes. State management causes re-renders that remove and re-add DOM elements, losing keyboard focus in the process. React-controlled forms manage errors in state but do not associate error messages with fields via aria-describedby. React portals (used for modals and tooltips) create elements outside the main DOM tree, breaking the natural tab order. These problems are visually invisible but make the application unusable for people depending on assistive technologies.
Common issues on React
SPA navigation without screen reader announcement
WCAG 4.1.3React Router changes page content without browser reload. Screen readers do not detect this change and announce neither the new page title nor the new content. The blind user does not know the navigation worked. An announcement system via aria-live or focus management on the new content must be implemented, which is rarely done.
Custom components without semantics or ARIA
WCAG 4.1.2React UI components (dropdown, tabs, accordion, autocomplete) are built with divs and onClick instead of native HTML elements (select, button, details). They do not carry required ARIA roles (role=tablist, role=tab, aria-selected, aria-expanded). Screen reader users cannot identify the component type or its state (open/closed, selected/unselected).
Focus loss during re-renders
WCAG 2.4.3React state changes cause re-renders that delete and recreate DOM elements. If the focused element is deleted, focus returns to the top of the document. The keyboard user loses their position on the page and must re-tab from the beginning. This problem is particularly frequent in dynamic lists, conditional forms, and components with async loading.
Dynamic content not announced (missing aria-live)
WCAG 4.1.3React applications update content dynamically (notifications, real-time search results, chat messages, counters). These updates are not wrapped in aria-live regions, so screen readers do not announce them. The blind user misses critical information that appears on screen.
Test your React site
Discover the WCAG non-conformities of your React site in 5 minutes. Free, no commitment.
Run the free auditWhat Scrutia detects on React
Scrutia runs your React application in a real browser and tests dynamic interactions. Our engine detects route changes without announcements, interactive components without ARIA roles, focus losses during re-renders, and unannounced content updates. We simulate a complete keyboard user journey including page navigation, component interaction, and form submission. Each issue is located in the HTML output with corresponding React/JSX corrective code.
Frequently Asked Questions — React
Can Scrutia analyze a React application with authentication?
Are corrections provided in React JSX?
Does Scrutia detect problems caused by UI libraries like MUI or Chakra?
Audit your React site now
106 RGAA criteria tested in 5 minutes. Free score, full report with code fixes for €49.
Test my React site