SPA Accessibility Checklist
Single page applications introduce unique accessibility challenges around routing, focus management, and dynamic content updates. This checklist helps you ensure your SPA works for everyone, including screen reader and keyboard-only users. Your progress is saved automatically.
Frequently asked questions
Why do SPAs need a special accessibility checklist?
SPAs break a lot of default browser behavior — focus state on route changes, page-title updates, screen reader announcements of new content, the back button. Most accessibility failures in modern web apps come from these SPA-specific issues. The SPA Accessibility guide covers each.
How do I handle focus on route change?
After the new view renders, move focus to either: (a) the new page's <h1> (using tabindex="-1" + focus()), or (b) a hidden "You're now on the X page" announcement in a role="status" region. Either resets the user's place in the document. See the Focus Management guide.
Does my SPA's title need to update on navigation?
Yes — document.title must reflect the current page, just like in a multi-page app. Screen readers announce the title on page change. Update it as part of your route change handler. (React Router, Next.js, Vue Router all have helpers; if not, just document.title = '...'.)
What about the back button?
Use history.pushState for in-app navigation so the back button works. Don't hijack it. If you use a state-based pseudo-navigation (like opening a modal), pushing a new history entry lets users back out of the modal naturally.
How do I announce async content updates to screen readers?
Wrap a dedicated container in aria-live="polite" (or role="status"). When async content loads, update the container's text. Screen readers will announce the change. For urgent errors, use role="alert" instead. See the Live Regions guide.
Do React/Vue/Svelte affect any of this?
The semantic HTML, ARIA, and focus management requirements are framework-agnostic. The integration patterns differ — useEffect cleanup for focus traps, framework router APIs for navigation hooks, refs/forwardRef for DOM access. The items in this checklist apply regardless of framework; per-framework guides cover the integration specifics.