Skip to main content
WCAGrules
Quick navigation

Services · By framework

An SPA Audit for the Page That Never Reloads and Never Moves Focus

For any team running a single-page app, whatever the framework, that wants the failure class only single-page apps have found and fixed.

What We Keep Finding

On a classic site, clicking a link reloads the page and the screen reader starts fresh at the top. In a single-page app the URL changes, the view swaps, and none of that happens for free. That much is the inheritance every SPA shares. What has changed, and changed recently enough that most advice has not caught up, is that the announcement half now has framework answers and the focus half still has none.

Announcement first, because the answer depends on what you are running. Next.js ships a route announcer in both of its routers and mounts it whether you asked for it or not. Nuxt ships one too, since v3.12, but it is a component you have to add yourself, so a default Nuxt app is silent. Every announcer we have looked at reads the page title, which means the real failure has moved. Two routes sharing a title announce nothing, and a missing or duplicated title is now the bug rather than the framework being deaf. Politeness differs as well, since Next interrupts and Nuxt waits its turn.

Focus is the half nobody solved. No framework we have checked moves it. After a navigation, focus is still on the link that was clicked, in a view that no longer exists. Which is why a keyboard user can hear the new page announced and still be unable to reach it. And the two halves interact rather than stacking. Moving focus to the new view is itself a change of context. So a page that moves focus and also fires its own announcement says the same thing twice, and the second one talks over the first. Doing both is not belt and braces. It is a defect.

Then there is everything that updates without a navigation at all, which is most of what a modern app does. Filters, tabs, infinite feeds, optimistic saves. Changing content is not automatically a change of context, so those need announcing rather than focus moves, and the distinction is exactly where in-app updates get built wrong.

What We Check

  • Test every route change for what is announced, whether the title actually changed, and where focus went
  • Check that announcement and focus movement are not both firing for the same change
  • Test back and forward navigation for whether anything sensible is restored
  • Verify async views announce loading and arrival rather than appearing in silence
  • Audit in-view updates, so filters, tabs, and infinite scroll
  • Run the whole thing keyboard-only, with no mouse allowed at any point

What You Get

Every service on this site runs the same three-pass engine: an automated scan, an expert review of all 55 WCAG 2.2 A and AA rules, and a hands-on session with a professional blind screen-reader user. You get one report with every finding screenshotted, ranked by user impact, and linked to its fix. Your team fixes, we verify: the re-audit is half price within 3 months.

The format is not a mystery either. Read the sample report before you spend anything.

The Honest Limit

One honest limit, and one thing without a rule behind it. SPA fixes are behavior rather than markup, so they need a developer rather than a content editor, and the report is written for that developer, pattern by pattern. The rule-free part is browser history. No accessibility criterion covers what should happen on back and forward. So we test it, we tell you what we found, and we mark it as good practice rather than as a failure. We would rather you knew which findings a regulator could hold you to.

What It Costs

Rapid Audit: $499, up to 10 pages you pick, report in 5 business days. Standard Audit: $1,499, up to 25 pages in 10 business days. Flat rates, no discovery calls, and a real blind screen-reader user on every engagement. Pick your pages. We bring the humans.

Worth Reading Next

Related on this site

Guides, checklists, tools, and terms that go with this service.

More in By framework

Go somewhere useful

Find tools, resources and your workspace.

29 destinations