Non-adjustable time limit
timing/meta-refresh
- WCAG success criterion
- 2.2.1 (level A)
- Outcome class
- Automatic. An automated check that can report a confirmed violation.
- Area
- Accessibility, Navigation & Operation
- Default severity
- high
- axe-core rule
meta-refresh
Why we flag this
Users need more time to enter data and may lose data through timeouts.
Missing refresh or timeout handling in the script/markup.
What the rule checks
Scope. meta elements with http-equiv=refresh (any case) whose content starts with digits, also when inserted by script.
Expectation. Fails at the meta element when it reloads or redirects after a delay of 1 s up to just under 20 hours (71999 s fails, 72000 s is the 20-hour exception and passes): users can neither stop nor extend it. Attribute case, leading whitespace and a url part do not matter. Content without leading digits is ignored by browsers and passes. A delay of 0 is an immediate redirect, not a time limit (H76); it is not exercised in the corpus because it would navigate the fixture away.
Source. WCAG 2.2 SC 2.2.1 Timing Adjustable (20-hour exception); technique H76/F40/F41; HTML 'shared declarative refresh steps'
Detection: shared; needs dom.
Failing example
The check reports a violation here. Corpus case meta_refresh_present. The page may contain further findings for other rules.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="refresh" content="120">
<title>Meta refresh corpus case</title>
</head>
<body>
<main>
<h1>Page with a short meta-refresh</h1>
<p>This page refreshes itself after 120 seconds.</p>
</main>
</body>
</html>Passing example
The check passes here and reports nothing. Corpus case visual_meta_refresh_exempt, element meta#daily-refresh. The page may contain further findings for other rules.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 72001 s, just over 20 hours: the 20-hour exception of 2.2.1 ("longer than 20 hours"). -->
<meta id="daily-refresh" http-equiv="refresh" content="72001">
<!-- No leading digits: the browser ignores this declaration. -->
<meta id="broken-refresh" http-equiv="refresh" content="soon; url=/news">
<title>Dashboard refreshed once a day</title>
</head>
<body>
<header>
<a href="#main" style="display: inline-block; min-width: 44px; min-height: 44px; line-height: 44px; padding: 0 8px">Skip to main content</a>
<p>Status board</p>
<nav aria-label="Main"><a href="#main" aria-current="page" style="display: inline-block; min-width: 44px; min-height: 44px; line-height: 44px; padding: 0 8px">Overview</a></nav>
</header>
<main id="main">
<h1>Service status</h1>
<p>All systems operational.</p>
</main>
<footer><p>Footer text</p></footer>
</body>
</html>This page is generated from the rule catalogue and the rule contracts; see therule overview for how the outcome classes are derived.