Skip Link Audit
A skip link is an in-page anchor near the start of the tab order, usually something like “Skip to content”, that lets keyboard users jump past repeated navigation. WCAG 2.4.1 Bypass Blocks can be met with skip links, landmarks, or headings. When a skip-link-like anchor is present in the first few tab stops, this audit checks that it actually works.
Pages that rely on landmarks or headings alone, with no skip link, are not flagged. axe-core already covers whether a bypass mechanism exists.
Turning it on
This audit is experimental: it is off by default while we validate it against more real-world sites. To enable it, open a site’s Settings, and switch on Include experimental audits under Scan settings. The setting is per-site, and applies to every scheduled and manual scan of that site from the moment you save it.
How the audit works
After the page has loaded, the audit tabs through the first three focusable elements looking for in-page fragment anchors (href="#main", not a bare # or #top, and not hash-router paths like #/home). For each candidate it:
- Checks that the fragment target exists in the page.
- Focuses the link and presses Enter.
- Checks whether keyboard focus moved into the target, either immediately or on the next Tab press.
If no skip-link candidate is found, the audit stays silent.
Reading the results
Failed skip links are reported as violations. Passing skip links are reported as passes. Both include a CSS selector and a sample of the element’s HTML.
Two failure reasons appear in the result:
- Target missing: the href fragment does not match any element
idorname. - Activation had no effect: the target exists, but pressing Enter did not move keyboard focus into it. A common cause is a click handler that calls
preventDefault()without managing focus.
You can ignore individual elements you have reviewed and accepted using the same ignore feature you use for other issues.
Limitations
The audit only looks at in-page fragment anchors in the first three tab stops. Skip controls implemented as buttons, JavaScript-only focus movers, and skip links later in the tab order are not detected. Closed shadow roots are opaque to the scan.
A missing tabindex="-1" on the target is not a failure by itself. Modern browsers set a sequential focus starting point on fragment navigation, so the next Tab landing inside the target still counts as a pass.
Related documentation
- Context Change on Focus AuditHow A11y Pulse detects unexpected context changes triggered merely by focusing an element.
- Focus Not Obscured AuditHow A11y Pulse detects focused elements that are completely hidden by sticky headers, footers, banners, and other overlays.
- Focus Appearance AuditHow A11y Pulse detects interactive elements that do not show a visible focus indicator, and how to read and act on the results.
- Reflow AuditHow A11y Pulse checks that pages reflow at 320 CSS pixels without two-dimensional scrolling, and how to read the results.
- Text Spacing AuditHow A11y Pulse checks that text stays readable when spacing is increased, and how to read the results.