bypass-blocks-present

Page must provide a way to bypass repeated blocks

manualWCAG 2.4.1 (A)confidence: mediumseverity: moderateoperable

Checks that the page has at least one recognized WCAG 2.4.1 bypass-blocks mechanism: a main landmark, a working same-page anchor link, or a heading.

Applies to. Always applicable to any HTML document with a <body> element: "bypass blocks" is a whole-page concern, matching aria-hidden-body / page-title-present's pattern of evaluating the document directly rather than a scoped root.

Expectation. At least one of the following recognized WCAG 2.4.1 techniques is present: (a) a main landmark (<main> or [role="main"]), technique ARIA11: a screen reader user can jump straight to it, bypassing everything before it (nav, header, repeated blocks) in one step; (b) a working same-page anchor link, technique G1/G123: an <a href="#id"> (or legacy <a name="id">) whose target resolves to a real element in the link's own tree (light DOM or the same shadow root). Not required to be positioned before a <nav> or be keyboard-focus-order-first (see implementation notes); (c) at least one heading (<h1>-<h6> or [role="heading"]) that is both included in the accessibility tree AND visible (not off-screen, clipped, opacity:0, or zero-size-overflow-hidden), technique H69: heading navigation is itself a standards-recognized bypass mechanism (e.g. a screen reader's "jump by heading" command), but ACT 047fe0's own Expectation requires visibility too, since a screen-reader-only heading leaves sighted keyboard users with no equivalent way to locate the start of non-repeated content.

Examples

n/a
<body>
<nav>Site nav</nav>
<main>Primary content</main>
</body>

A main landmark exists — a recognized bypass mechanism, so there's nothing to flag.

can't tell
<body>
<nav>Site nav</nav>
<div>Primary content, no landmark, no heading, no skip link.</div>
</body>

No main landmark, working same-page anchor link, or visible heading was detected — a review prompt, not a fail, since the engine can't confirm from one snapshot whether the page truly lacks a bypass mechanism.

View source