Heading structure: accessibility and SEO best practice

Good heading structure means one h1 that names the page, h2 to h6 headings in order without skipped levels, and real heading elements instead of bold text. Most screen reader users WebAIM surveyed start with headings on a long page. Google says heading order does not matter to Search, so the case for getting it right is mainly accessibility.

Published . Last reviewed .

Headings are the outline of a page. Sighted visitors scan them, and assistive technology can list them and jump between them. This guide covers what a good outline looks like, which rules come from standards and which are best practice, the usual mistakes and their fixes, how screen reader users use headings, what Google's documentation says, and how to check your own pages.

What a good heading outline looks like

The heading level is the depth of a section. An h1 names the page, each h2 is a main section, and each h3 is a subsection of the h2 above it. The HTML Standard puts it this way: the h1 is for a top-level section, h2 for a subsection, h3 for a sub-subsection, and so on. Here is the outline of an invented category page:

h1  Trail running shoes
  h2  Shop by terrain
    h3  Mud and soft ground
    h3  Rock and hard pack
  h2  How to choose a pair
    h3  Cushioning
    h3  Grip
  h2  Delivery and returns

Two checks make an outline useful. First, read only the headings: do they tell the story of the page, in order? Second, look at the levels: a heading never sits more than one level deeper than the heading before it. Jumping back up is fine. Going from the last h3 under "How to choose a pair" to the h2 "Delivery and returns" is how sections close, and the HTML Standard allows it: each heading must have a level less than, equal to, or one greater than the heading before it.

What the standards require and what is best practice

Heading rules come from several places, and they do not carry the same weight. The table separates them.

Heading practices, what the sources say, and how we treat each
PracticeWhat the sources sayHow we treat it
Use real heading markupWCAG 1.3.1 Info and Relationships (Level A) needs structure shown visually to be available in code. Its sufficient techniques for HTML headings are H42 (h1 to h6) and ARIA12 (role="heading").Required
Make headings descriptiveWCAG 2.4.6 Headings and Labels (Level AA) requires headings that exist to be descriptive. It does not require headings.Required for the headings you have; a judgment call
Have a level-1 headingThe HTML Standard says that if a document has headings, at least one heading in the outline should be level 1. A page without one is conforming but not encouraged.Best practice; the heading checker, the bookmarklet and the free scan flag a missing h1
Have only one h1The HTML Standard does not prohibit more than one; its own example has three. No WCAG criterion sets a number.Best practice; our heading checker flags more than one
Start with an h1The HTML Standard calls a document whose first heading is not level 1 conforming but not encouraged.Best practice
Do not skip levelsThe HTML Standard marks a jump from h1 to h3 as non-conforming for authors. W3C's headings tutorial says skipping ranks can be confusing and should be avoided where possible, and that it is fine when closing subsections. The Understanding pages for 1.3.1 and 2.4.6 do not mention skipped levels.Best practice, mapped to 1.3.1 on our methodology page and weighted minor

We found no W3C text that makes a skipped level a failure of its own: the Understanding page for 1.3.1 lists no failure specific to heading levels. In our reading, a skipped level can still point to a real 1.3.1 problem, for example a section that looks top-level on screen but is marked up as an h4. Fix skips as a matter of course, and do not report one as a WCAG failure unless the markup misstates the structure. The criteria reference lists 1.3.1 and 2.4.6 with the tools that help, and our 1.3.1 page goes deeper.

Common heading mistakes and how to fix them

Seven common heading mistakes, why they matter and the fix
MistakeWhy it mattersFix
A skipped level, such as h2 straight to h4The outline has a hole, and someone moving by level can wonder what they missed.Use the correct level and set the size with CSS.
A level chosen for its sizeAn h4 used because it looks small, or an h2 because it looks big, turns depth into decoration.Choose the level from the structure and style it with CSS.
Bold text that only looks like a headingText that is not marked up as a heading does not appear in a list of headings.Use an h1 to h6 element.
An empty headingIt becomes a blank entry in the heading list. The WAI-ARIA 1.2 heading role requires an accessible name.Add text, or delete the element. Page builders often leave empty spacer headings.
A second h1 for each sectionThe page has several competing titles.Keep one h1 for the page and use h2 for its sections.
The site name as the h1 on every pageEvery page's outline starts with the same title. Google's title link documentation lists the h1 among the sources for a title link and suggests putting the title text in the first visible h1.Our advice: make the page's own title the h1, and treat the logo as a link.
Vague wording, such as "Overview" or "Section 4"2.4.6 asks for descriptive headings, and a list of vague ones tells a reader nothing.Write each heading so it still makes sense in a list.

These problems are common. The February 2026 WebAIM Million, an analysis of one million home pages, reports that skipped heading levels were present on 41.8% of all pages, that 18.1% of home pages had more than one h1, and that 7.5% of pages had no headings. We repeat WebAIM's wording for each figure, because it switches between "all pages", "home pages" and "pages".

The same logic applies outside web pages. PDFs carry headings as tags, and W3C lists a PDF technique (PDF9) for 1.3.1; see our guide to accessible PDFs and the PDF accessibility checker.

Headings in components and templates

Most outline errors start in a shared component, not in page copy. These cases come up often. The advice is ours, built on the HTML Standard rule quoted above that a heading's level is less than, equal to or one greater than the heading before it.

  • Card titles and repeated blocks. Give the title the level that fits where the block sits: h3 for a card grid under an h2 section, h4 for the same grid under an h3. A component with its level hard-coded breaks the outline when someone moves it, so let the template set the level.
  • Taglines and subtitles. A line under a title that is not the start of a new section does not need a heading level of its own. The HTML Standard's hgroup element is for content representing a subheading, alternative title or tagline, with the text in p elements next to the heading.
  • Styled labels that are not sections. A price, a date or a badge set in large type is not a heading. Style a paragraph or a span instead, so the heading list stays a table of contents.
  • Builder blocks. Some page builders and themes let an editor pick the tag for a heading block. Check the finished page, because the tag the block outputs is what counts, not how large it looks. Our WordPress and Shopify guides cover theme-level changes.

ARIA headings

Native elements come first. The WAI-ARIA 1.2 specification says it is better to use an h1 element in HTML than to put the heading role on a div. When you cannot change the element, role="heading" needs an aria-level (the heading role lists it as required) and an accessible name. W3C documents the approach as technique ARIA12.

<div role="heading" aria-level="2">Delivery and returns</div>
<h2>Delivery and returns</h2>

Both lines expose a level-2 heading. The second is simpler, needs no ARIA, and is the one to use. Tools differ in what they see: the free scan and the heading checker read h1 to h6 tags, while the bookmarklet also reads role="heading" with aria-level.

How screen reader users use headings

The WebAIM Screen Reader User Survey #11 ran in July and August 2026 and received 1,780 valid responses. WebAIM notes that the sample was not controlled and may not represent all screen reader users. It asked what people do first when looking for information on a lengthy web page:

First action when looking for information on a lengthy web page, WebAIM Screen Reader User Survey #11 (2026)
First actionRespondentsShare reported by WebAIM
Navigate through the headings on the page1,19167.8%
Use the Find feature21912.5%
Read through the page1709.7%
Navigate through the links of the page1186.7%
Navigate through the landmarks/regions of the page593.4%

The five counts add to 1,757, so WebAIM's shares for this question are of the respondents who answered it, not of all 1,780 valid responses.

Headings remain the most common first move, although the share fell from 71.6% in the 2024 survey. The same survey asked how useful heading levels are when navigating by headings: 51.9% said very useful and 36.4% somewhat useful, which is 88.3% together by our sum.

To hear it for yourself, open your screen reader's list of headings. In NVDA, WebAIM's guide lists the H key to move from heading to heading and NVDA plus F7 to open the Elements List. Read the list as a table of contents. If it does not make sense without the page around it, the headings or their levels need work. Our guide to testing website accessibility puts this in a wider routine.

Heading structure and SEO

We make no ranking promises, and the sources do not support one. What Google's own documentation says:

  • Google's SEO Starter Guide lists "Number and order of headings" under things Google believes you should not focus on. It says semantic order is fantastic for screen readers, that Google Search does not mind headings used out of order, and that there is no ideal number of headings for a page.
  • Google's title link documentation lists heading elements such as h1 among the sources Google may use to create a title link, and suggests putting the title text in the first visible h1 element as one way to make the main title clear.

That leaves two practical points. Write headings for readers, not for crawlers, and keep the h1 matched to the page's real subject. The case for a clean outline is that people use it, and a page that is easier to navigate is better whatever a search engine does with it.

How to check your headings

What each GotAlt check reads, flags and leaves to you for headings
CheckWhat it readsWhat it flagsWhat it does not do
Heading checkerA page address (the HTML the server sends) or HTML you pasteNo h1, more than one h1, skipped levels and empty headings, with the outline drawn outIt does not judge wording or see headings added by script, unless you paste the HTML from your browser's Elements panel.
BookmarkletThe rendered page in your own browser, including staging and logged-in pagesNo h1, skipped levels and empty headings, including role="heading"It does not flag a second h1 or judge wording.
Free scanThe HTML the server sends, for up to three pagesA missing h1 and skipped levels, among 16 rule-based checksIt does not flag a second h1 or an empty heading, or judge wording.
Deep auditThe heading outline of the page, up to the first 30 headingsHeadings that do not describe the content that follows (2.4.6), or an outline that would be confusing to navigate byIt does not flag a heading for its level number; the rule checks cover structure.

A five-minute review: run the heading checker, read the outline aloud, fix the levels, rewrite vague wording, and delete empty headings. Then repeat it on each template, because a skipped level in a shared template appears on every page that uses it. Our guide to making a website accessible and the WCAG 2.2 checklist show where this fits among the other fixes, and the platform guides for WordPress and Shopify cover theme-level changes.

Heading structure questions

How many h1 elements should a page have?

We recommend one, naming the page. The HTML Standard allows more than one but wants at least one level-1 heading, and no WCAG criterion sets a number. A single h1 gives the page one clear title.

Do skipped heading levels fail WCAG?

W3C's Understanding pages for 1.3.1 and 2.4.6 do not mention skipped levels. The HTML Standard calls a skipped level non-conforming for authors, and W3C's headings tutorial says to avoid skipping where possible. Treat it as best practice and fix it.

Do headings help SEO?

We cannot promise a ranking effect. Google's SEO Starter Guide says the order of headings does not matter to Search and that there is no ideal number of them, and its title link documentation says it may use headings such as the h1 when it creates a title link. Write them for readers.

Can the first heading on a page be an h2?

It is allowed, but the HTML Standard calls a document whose first heading is not level 1 conforming but not encouraged. Start with the h1 so the outline has one clear top.

Should my logo or site name be the h1?

Our advice is to prefer the page's own title as the h1 and make the logo a link to the home page. Google's title link documentation lists the h1 among the sources for a title link and suggests putting the title text in the first visible h1, and a site name repeated as the h1 gives every page the same title.

How do I check the headings on a page built with JavaScript?

The heading checker and the free scan read the HTML the server sends, so headings added later by script are missing. Run the bookmarklet on the rendered page, or paste the HTML from your browser's Elements panel into the heading checker.

Headings are two of sixteen checks

The free scan flags a missing h1 and skipped heading levels, and also checks alt text, form labels, link text, page language and more: 16 rule-based checks across up to three pages. No signup.

Scan my site for free