J2.09.1heading navigationdesignresearch

Headings exist so people can jump

Aliases: heading list · heading rotor · jump by heading

What it is

Screen-reader users jump between sections on a heading key; the rotor or heading list is a directory of places one can land. Headings exist in order to jump: a section that looks large and loud but is not marked as a heading is absent from that directory. The only way to reach it is to listen to everything from the top.

How levels nest, how many top-level headings a page should have, and how landmarks add structure are not this leaf. The lock here is narrower: to enter the jump list, a section has to actually be a heading.

Why it happens

Assistive technology collects heading nodes into an on-demand index. Picking a row in that index and landing is an order of magnitude cheaper than listening linearly through the body. Type size, weight, colour, and spacing never enter the index. “Looks like a section start” and “can be jumped to” are different channels. If authors build sections with style alone, the index is empty, or it holds only the few real headings that happened to remain; people conclude the page is short, or treat those few as the whole structure.

Jumping also needs the heading’s accessible name to be the section’s name. A node with an empty name or “click here” produces a row nobody can recognise; landing on it does not tell you where you are.

Studying it

Ask sighted people to circle “I think a section starts here” on a screenshot, then open the reader’s heading list and compare. Dependent: visual section count, list length, matched pairs; time to find a named section with heading jump allowed versus heading jump forbidden (linear listen only).

Strip the CSS and see what is still a heading: that splits real headings from painted ones. Do not, in this step, count whether levels were skipped — that is a different criterion.

Where it stops holding

A tiny single-block page (one form, one confirmation line) has almost no section to jump to; missing headings hurt little. Screens that are mostly controls rather than long prose get more from a control list than from heading jump, but each view still needs a jumpable topic name. Large type in a PDF or canvas that never entered the tag tree is likewise absent from the list. Marking every short phrase and every button label as a heading fills the list with noise — that is the opposite failure, and “mark a few extra” does not repair “the ones that should be in the list are not.”

Applying it

  • Every sentence that is meant, visually, as “a section starts here” gets a heading mark, not merely larger bold type.
  • The visible heading text is the row in the jump directory. Write a recognisable section name, not “more” and not an empty node.
  • How to check: open NVDA’s heading list or the VoiceOver rotor’s headings view and count rows. Circled section starts on the screenshot should match one-to-one; each miss is “visible, not jumpable.” Then jump to a named section by heading. Linear listening should not be the only way to arrive.

Related

  • Same group: J2.09.2 Lists and tables need matching semantics · J2.09.3 Styling that impersonates structure drops the semantics
  • Nearby: J2.14 Headings and Landmarks · J5.01 Screen readers
  • Search terms: heading navigation · heading list · rotor headings

Cards in the same group

Quick Actions

Share

Share this page

ios_share

https://hci.top/en/handbook/J2.09.1