3.2.5 Change on Request
What it requires
Changes of context must happen only when the user asks for them, or the user must be able to turn off such automatic changes. A “change of context” is a major shift that can disorient someone: opening a new window, moving focus to a different component, navigating to a new page, or substantially rearranging the page.
In plain terms: nothing should suddenly redirect the page, launch a pop-up, submit a form, or jump focus on its own. Either the user triggers the change deliberately (clicking a button or link), or there is an available mechanism to suppress automatic changes. This is the stricter AAA companion to 3.2.1 On Focus and 3.2.2 On Input, which only forbid changes triggered by focus or input; 3.2.5 covers automatic and unexpected changes more broadly.
- Screen reader users, who lose their place when content or focus moves without warning and may not notice a new window or page opened.
- People with cognitive or attention disabilities, for whom auto-redirects, timed pop-ups, and shifting layouts break concentration and comprehension.
- Low-vision and magnifier users, who only see part of the screen and can miss content that appears or moves elsewhere.
- Keyboard-only users, whose focus position is disrupted by unrequested context changes.
How to detect it
| Check | How | Catches |
|---|---|---|
| Auto-redirect / refresh | Load the page and wait; does it navigate or reload without action? Inspect for
<meta http-equiv="refresh"> or timed location changes. |
Manual |
| Unrequested pop-ups | Watch for dialogs, new windows, or overlays that appear on load or on a timer rather than from a user click. | Manual |
| Focus jumps | Tab through and use a screen reader; confirm focus moves only after a deliberate activation, not automatically. | Keyboard / SR |
| Opt-out mechanism | If automatic changes exist, verify a clearly available control to disable them. | Manual |
| Automated tooling | Tools like axe can flag meta refresh but cannot judge intent or timed
scripts; mostly manual. |
Partial (axe) |
How to fix it
- Remove auto-redirects and
<meta http-equiv="refresh">; offer a link or button the user activates instead. - Trigger new windows, navigation, and form submission only from explicit user actions.
- Do not move focus automatically; let the user drive focus changes.
- Where automatic updates are genuinely needed, provide a clearly available mechanism to pause or turn them off.
<!-- User requests the change with a link, not an auto-redirect -->
<p>Your session has moved.
<a href="/dashboard">Go to your dashboard</a>.</p>
Copy-paste tests
Automated coverage
The axe-core rule meta-refresh-no-exceptions flags failures of this
criterion (a timed <meta http-equiv="refresh"> redirect). Run it via the
axe DevTools browser extension or axe-core in CI. Automated tools catch only SOME
failures — timed scripts, pop-ups, and focus jumps still need manual review.
Run this in the browser console
// Read-only: surface elements that may force a change of context.
const meta = [...document.querySelectorAll('meta[http-equiv="refresh" i]')];
const targets = [...document.querySelectorAll('[target="_blank"], [onload], [onchange]')];
const suspects = [...meta, ...targets];
suspects.forEach(el => { el.style.outline = '2px solid magenta'; });
console.table(suspects.map(el => ({
tag: el.tagName.toLowerCase(),
content: el.getAttribute('content') || el.getAttribute('target') || '',
text: (el.textContent || '').trim().slice(0, 40)
})));
console.log('Review %d suspect node(s) for unrequested context changes.', suspects.length);
What to check manually: sit on the page and wait — confirm it does not redirect, reload, open a window, or move focus on its own; and if any automatic change exists, verify a clearly available control lets you turn it off.
Related
- WCAG 2.2 criteria index — all 87 success criteria.
- Learn catalog — lessons mapped to criteria.
- Keyboard & focus — managing focus and avoiding unexpected context changes.