- Success Criterion 2.4.1
- Conformance level A
Single-Page App That Loses Its Skip Link After Navigation
2.4.1 — Bypass Blocks
Scenario
Setting
A subscription box service's account settings
What’s wrong
single-page app route changes rebuilding the page without any bypass because the "skip" only existed on first load.
Example
router.push("/settings/notifications");
// skip link markup only existed in the original server-rendered HTML Why it matters
A user navigating between settings tabs in the single-page app loses the skip link after the very first page load.
How to test
Navigate within a single-page app to a new view: check whether the skip link (present on first load) still works or was never rebuilt for the new view.
How to fix
Keep the skip link in the persistent app shell so it survives every client-side route change.
<div id="app-shell">
<a class="skip-link" href="#route-content">Skip to content</a>
<div id="route-content">...</div>
</div> Outcome
A user still finds the skip link working no matter how many settings tabs they switch between.
Who is affected
Keyboard users get a bypass mechanism only once per visit, then must tab through the full nav on every later view.
Learn more
- Understanding Understanding document (opens in a new tab)
Related scenarios
- Page With No Way to Skip Repeated Navigation
- No Skip Link, Landmarks, or Headings to Bypass Navigation
- Skip Link That’s Broken and Doesn’t Actually Move Focus
- Skip Link That’s Never Visible, Even on Keyboard Focus
- Skip Link Placed After the Navigation It’s Meant to Skip
- Landmarks Used as a Bypass but Missing Key Content