A page outline showing one H1 with H2 and H3 headings nested beneath it in order.
← All Quick Wins
AEO & GEOSEO & Search

How to fix your heading structure

One H1, clear H2 and H3 levels, no skipped steps, and how to find the extra H1 that most pages have.

Where this came from:

ā˜† Save

The quick answer

Use one H1 per page for the main title, then H2s for the main sections, and H3s only inside an H2. Do not skip levels, such as jumping from H1 to H3. A clear outline helps readers, screen readers and machines, but it does not guarantee ranking or citation.

Bottom lineOne H1, then H2s, then H3s inside them, with no skipped levels.
On this page

Use one H1 per page for the main title, then H2s for the main sections, and H3s only inside an H2. Don't skip levels, such as jumping from H1 to H3. That is the fix for every heading result the AEO checker can give.

What the headings are for

Headings are the outline of your page. Readers scan them to find what they need, screen readers let people jump between them, and search engines and AI tools use them as a clue to how the content is organized. A clear outline makes a page easier to read and easier to parse. It does not guarantee ranking or being cited.

If you are not sure how AEO fits next to regular SEO, see SEO, AEO and GEO: what is the difference.

The rules

  1. One H1. It is the page title. Make it describe the page.
  2. H2 for main sections. Each one covers one part of the topic.
  3. H3 for subsections inside an H2. Use H4 and below rarely.
  4. Don't skip levels. Go H1, H2, H3, not H1, H3.
  5. Choose by meaning, not size. If you want smaller text, change the styling. Don't swap the heading level.
  6. Write headings that say something. "Why robots.txt matters for AI crawlers" beats "More info".
  7. Don't use headings for decoration. Bold text is fine for emphasis that isn't a section title.

A good outline

<h1>How to check canonical tags</h1>
  <h2>What a canonical tag does</h2>
  <h2>How to find it on a page</h2>
    <h3>In the page source</h3>
    <h3>In browser developer tools</h3>
  <h2>Common mistakes</h2>

Every level follows from the one above it. A reader, a screen reader and a crawler can all follow the structure without seeing the design.

A broken outline and its fix

Here is a page that triggers both warnings the checker can give for headings: two H1s and a skipped level.

<h1>Acme Blog</h1>
<h1>How to check canonical tags</h1>
  <h2>What a canonical tag does</h2>
    <h4>In the page source</h4>
  <h2>Common mistakes</h2>

Two things are wrong. The site name is an H1 on top of the real title, and the H4 jumps over the H3 level. The fix changes two lines:

<p class="site-name">Acme Blog</p>
<h1>How to check canonical tags</h1>
  <h2>What a canonical tag does</h2>
    <h3>In the page source</h3>
  <h2>Common mistakes</h2>

The site name becomes a normal element styled to look the same, and the H4 becomes an H3. The page looks identical. The outline is now correct.

H1 versus the title tag

The H1 is the heading readers see at the top of the page. The title tag is a separate piece of metadata. It shows in the browser tab and is what search results usually display as the clickable title. They should describe the same page, and they are often close or identical, but they do not have to match word for word. The title tag has length limits that the H1 does not, which is covered in what is the ideal title tag length for SEO.

Write headings that match real questions

A heading that mirrors a question a reader would ask tells people and tools exactly what the section answers. "How do I find the extra H1?" is clearer than "H1 issues". Follow the heading with a short, direct answer before any detail. This is the same approach covered in how to write answers AI tools can quote. It makes a section easier to understand and reuse. It does not guarantee anyone will quote it.

What the checker looks for

The AEO checker reports one of these:

  • Pass: one H1 and no skipped levels. Nothing to do.
  • Warning, skipped levels: for example an H2 followed by an H4. Add the missing level, or change the heading to the right level.
  • Warning, more than one H1: two or more H1 tags on the page. Keep one, change the others to H2.
  • Fail, no H1: the page has headings but no H1. Make the main title an H1.
  • Fail, no headings: the page has no headings at all. Add an H1 and H2s that break up the content.

HTML allows more than one H1 in some situations, but one is the simplest and clearest, and it is what the checker expects.

Where the extra H1 usually comes from

The page content is rarely the cause. Look for:

  • A logo or site name in the header coded as an H1 on every page.
  • A page template that renders a title, plus a component that renders it again.
  • A page builder that defaults every big text block to H1.
  • A "hero" banner heading placed above the real title.

In a component-based site, check the layout, header and page components. Only one of them should output an H1. A typical case looks like this:

// Layout renders an H1 on every page
<header><h1>Acme Blog</h1></header>

// And the page renders its own
<main><h1>{post.title}</h1></main>

The fix is to change the layout's element to a paragraph or a link and leave the H1 to the page:

<header><p className="site-name">Acme Blog</p></header>
<main><h1>{post.title}</h1></main>

How to check

Count the H1s. Open your browser's developer tools, go to the Console, and run:

document.querySelectorAll('h1').length

The answer should be 1.

See the whole outline. Run this in the same Console to list every heading in order with its level:

console.table([...document.querySelectorAll('h1,h2,h3,h4,h5,h6')].map(h => ({ level: h.tagName, text: h.textContent.trim() })))

Read down the level column. If a level jumps by more than one, such as H2 followed by H4, you have a skipped level.

Or run the checker. The AEO checker reports the H1 count and skipped levels for any page you give it.

Common mistakes

  • Using headings only to make text bigger.
  • Starting a page with an H2 because the H1 style looked too large.
  • Writing headings that are just keywords in a list.
  • Making every section a different level for no reason.
  • Leaving the page without any headings because the content is "short". Even a short page benefits from a clear H1.

Headings are one part of making a page clear to machines. Another is describing it with markup, which is covered in structured data for beginners: what to add first. If you want to check headings alongside everything else, work through the SEO audit checklist for a new site.

The short version

One H1 that names the page. H2s for the main sections. H3s only inside an H2. No skipped levels. Choose levels by meaning, not size, and write headings that say what the section covers. Count your H1s in the Console, then run the AEO checker to confirm.

FAQ

One. HTML allows more in some situations, but a single H1 that names the page is the simplest and clearest, and it is what the AEO checker expects.

Usually a layout, header or page builder adds one. A site name in the header is the most common cause. Change that element to a paragraph or link and leave the H1 to the page.

No. They should describe the same page and are often close, but they do not have to match word for word. The title tag has length limits that the H1 does not.

Open the browser Console and run document.querySelectorAll('h1').length. The answer should be 1.

No. Choose the level by meaning and change the styling for size. Using headings for looks breaks the outline for screen readers and crawlers.

See how your own site scores

Run the same AEO, SEO, and GEO checks this explainer is about — free, rule-based, no signup.

Run the free scan

Comments

No comments yet — be the first.