Just announced: Level Access and eSSENTIAL Accessibility agree to merge! Read more.
Browser showing search bar and page HTML page structure

The other day a customer was evaluating AMP and asked a question about how we were testing for skip links. The question went something like the following:

We were evaluating AMP and performed an automatic scan of a test site. We noticed that the scan did not flag the issue “Provide a mechanism for skipping past repetitive navigation links” even though this clearly is a violation. This seems like a pretty glaring omission in the tool and something we would have expected AMP would have caught. Can you explain the testing method AMP uses, and why this might not have been reported?

Here was our answer:

Actually, SSB does provide an automatic test for link group detection and skip links in InFocus – the automatic testing engine provided in AMP. This link detection algorithm is quite advanced and is currently in patent pending status with the US Patent Trademark Office. By default, however, this test is disabled and AMP instead requires that users test conformance for this best practice as part of global system tests.

This raises a particularly interesting question – If your test is so great, why do you turn it off by default? As noted above, that would seem to be a glaring omission. The short answer to this question is that automatic tests for skips links – and this include our tests and those of our competitors – are unsafe and yield an exceptionally high number of false negatives. In practice this means that they falsely indicate a non-compliant page is compliant which is very dangerous. Given this, since 2006 SSB has opted to deactivate this automatic test and, by default, require a global test to be executed to validate the accessibility of a given page.

The long answer requires a brief detour into the requirements of the regulations themselves. The core accessibility requirement relating to skip links are defined in 1194.22 (o) “A method shall be provided that permits users to skip repetitive navigation links.” Repetitive groups of links are groups of links that occur at the beginning or top of a page prior to the main page content in the reading order of the page. These groups of links are generally site wide navigation links or contextual navigation links for the current site area. These link groups require a mechanism to allow a user to skip past them so that they can get to the page’s main or unique content as efficiently as possible. This mechanism is generally an inner-document link but also can be provided via the use of frames. The 508 refresh will likely extend this to allow the use of headers to skip these links in line with WCAG 2.0.

The user requirements for skip links generally are driven by users that are blind. For example, consider a user who is blind using a screen reader to visit a web site which uses a top navigation bar on all of its pages. Each time the user accesses a new page within the site, the user would be forced to listen to or tab through all of these navigation links (and other content) before getting to the main content area of the page. This makes it difficult to access the page’s unique information efficiently. Similarly, if the page also has a set of section navigation links – “contextual links,” typically to the left of the main content area – the skip link’s target must be past those as well. It is also worth noting that skip links are not used only by individuals that are blind – they are also used by other users of screen readers including low vision users and users with limited dexterity.

There are a variety of best practices for formatting skip links that relate to the structure, display and wording of the link. A few interesting items include:

  • The skip link should be the first active element – displayed or not – in the page
  • The skip link target should be the beginning of the main content area
  • A website’s homepage should not have a skip link since, on this page, the links are not yet repetitive and the user is exploring the overall site content and navigation
  • If web developers attempt to hide a skip link via CSS, it must be done by placing the link off-screen and not by using the style {display:none} or {visibility:hidden}. Screen readers do not render content that is set with display:none or visibility:hidden.
  • If a hidden skip navigation link is used it should surface visually when the link gains keyboard focus. This can be done by changing the z-index of the link and placing it on a blank area before the group of links such as at the top of the page when the onFocus event fires for that link.

As noted above, frames can also be used to support skip links, the presence of the frames can be considered to be a valid skip navigation mechanism if (a) moving from one frame to the next allows the user to skip past the repetitive links but does not move the user past other needed content, and (b) the frames have meaningful title attributes.

If we review these requirements in whole we can boil them down to a few key rules:

  • If the site uses frames to group all navigation structures and the main frame solely contains content skip links are not required
  • If the site does not use frames skip links are required
  • If the page is a home page no skip links should be present as no content is yet repetitive
  • If the page is a sub-site home page skip links are not required around contextual navigation features
  • Skip links should be the first actionable element on a page
  • Skip links should work for both visual and non-visual users
  • Skip links should accurately move reading focus to the main content area of the page
  • Skip links should function in a standard fashion across multiple pages
  • Skip links should have similar skip link text across multiple pages
  • Skip links should skip the same conceptual set of links across multiple pages

While some of these items can be tested for a reasonable degree of accuracy automatically virtually all automatic tests validate something else – the presence of a group of links surrounded by in inner-document link. Put concisely, automatic tests ignore the above requirements and simply flag any group of links on a page that are no surrounded by an inner-document link. This leads to a variety of common false diagnoses:

  • Skip links are provided around any group of links – not groups of links that are repetitive
  • Skip links are provided around groups of links located at the end of the reading order of the page – causing the link to jump to the end of the document
  • Skip links are provided with varying text
  • Skip links are provided that target the end of the link group – not the beginning of useful content on the page

Most developers on receiving reports from automatic testing tools quickly intuit that the test is looking for inner-document links around groups of links. To address this, they put links around all groups of links on a page and do so on a per page basis with little to no consistent implementation across a site or sub-pages on the site. This causes the page to be marked as compliant in an automated testing tool but provide a page that neither conforms to the requirements of Section 508 nor functions properly for AT users.

Upon seeing these issues arise repeatedly SSB felt it was safer to deactivate this issue as a page level, automatic test and require that it be validated at a global level across all site pages. This ensures that (i) the skip link is properly implemented to specification and (ii) is implemented in a consistent fashion across the entire site.