auditmysitev2.0.2

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.

meta_refresh_present.htmlHTML
<!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.

visual_meta_refresh_exempt.htmlHTML
<!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.