Read only the headings of a page and you should be able to say what it teaches. Many pages fail that test, because their headings were picked for how they look or for the keywords they carry, not for the path a reader takes through the text.
What headings do for readers, screen readers and Google
Readers use headings to decide whether the page holds their answer, then to jump to it. A page whose headings say “Introduction”, “Details” and “More” gives them nothing to decide with, so they read everything or leave. People using a screen reader can pull up the list of headings and move from one to the next, which makes the outline their table of contents. A skipped level, or a heading used only to make text bigger, breaks that map.
Google’s own documentation gives you one concrete link. When it builds the title link of a result, it draws on several sources: the title tag, the main visible title, the h1 elements, og:title, other prominent text, anchors from other pages and WebSite structured data. When Google rewrites a title link, a vague H1 such as “Welcome” or “Home” is one of the places the replacement can come from. Beyond that, we know of no Google rule about how many headings a page needs, so the rules below are ours.
- One H1 per page, stating the topic and sharing its key words with the title tag.
- H2 for the main sections, in the order a reader needs them.
- H3 only inside an H2 that really divides in two or more parts.
- No skipped level: an H3 never follows an H1 directly.
Our SEO checker applies exactly these rules as 4 checks. It fails a page with no H1 and warns on several, warns when the H1 and the title tag share no significant word, warns when a level is skipped, and expects at least 1 H2 for every full 500 words, advising a subheading roughly every 300 to 500 words. These are our thresholds, not Google’s.
The same page, outlined badly and well
Take a made-up page about fixing a flat bicycle tire. This is its outline as templates often produce it, with the level on the left:
H1 Bike tire guide
H3 Introduction
H2 Tire
H4 Tools
H1 Contact us
H2 Read more
H2 Conclusion
This outline has 5 problems. There are 2 H1s, the second most likely printed by the theme or a page builder. The first H1 says nothing about what the reader will learn. The levels jump from H1 to H3 and from H2 to H4. “Introduction”, “Tools” and “Conclusion” would fit any page ever written, so they carry no information. And “Contact us” and “Read more” are page furniture: they are widget titles that the theme coded as headings, and they now sit inside the article’s outline.
Here is the same page with an outline written for the reader:
H1 How to fix a flat bicycle tire at home
H2 What you need before you start
H2 Find the puncture before you touch the tube
H2 Patch the tube or replace it
H3 When a patch is enough
H3 When to replace the tube
H2 Refit the tire without pinching the tube
H2 Why the same tire goes flat twice
Read alone, these lines give the whole procedure and the one subtlety at the end. Every H2 is a stage the reader passes through, in order. The H3 pair exists because that H2 really splits into 2 alternatives. The H1 states the task, and the title tag can reuse it almost word for word. The strong version has no more words than the weak one: it spends them on information.
Write the headings first
A weak outline often comes from writing the text first and sticking headings on afterwards, as labels. Reverse the order.
- Write the question the page answers, in one line. That line is your H1.
- List what a reader must know or do, in the order they need it. Each item is a candidate H2. Our range for a guide of 900 to 1,800 words is 2 to 7 of them.
- Read the list aloud as if it were the whole page. If it answers the question, the structure works. If an item can be said in one sentence, it is not a section: merge it with a neighbor.
- Write the text under each heading. Add H3s only where a section divides into parts that a reader might want to jump to separately.
- Reread the headings when the text is done and rename any that no longer match what you wrote.
- Choose levels for structure and size them with CSS. If an H3 looks too big, restyle H3: do not switch to an H4.
One more rule belongs here: never hide a heading with CSS to add keywords. Google’s spam policies list hidden text, and a heading that readers cannot see is not an outline for readers anyway.
Where bad outlines come from
Few people choose a broken outline on purpose. It comes from the template, and the fix is usually in one place rather than on every page.
| Symptom | Usual cause | Fix |
|---|---|---|
| Two H1s on every inner page | The theme prints the site name or logo as an H1 on every page, and the article then adds its own | Make the site name a paragraph or div on inner pages and keep the single H1 for the article. The homepage can use its tagline as the H1 |
| No H1 at all | A page builder styles a paragraph as a big title, or the template starts at H2 | Mark the real page title as H1 in the builder or the template |
| Skipped levels | A level was chosen for the size it displays, or text was pasted from a document | Pick levels for structure, then resize with CSS |
| Empty headings | A heading wraps only an image or an icon | Give it text, or use a non-heading element |
After a fix, check two or three templates (homepage, an article, a category page) rather than every URL. If the template is right, every page that uses it is right.
Density, contents and a ten-second check
A heading above a single short paragraph dilutes the page. It promises a section and delivers a sentence, and a page full of such headings reads like a list of fragments. Our rule on this site is that every section under an H2 has at least 100 words, and if one cannot reach that, it merges into its neighbor or becomes a list item. The checker’s floor of 1 H2 per 500 words and our floor of 100 words per section are limits to stay inside, not targets to aim at.
On a long page, add a contents list at the top. Plain anchor links work without any script, and each heading needs an id to receive them.
<nav aria-label="Contents">
<ol>
<li><a href="#what-you-need">What you need before you start</a></li>
<li><a href="#find-the-puncture">Find the puncture before you touch the tube</a></li>
</ol>
</nav>
<h2 id="what-you-need">What you need before you start</h2>
To see the outline your page really has, paste this into the browser console on any page. It prints every heading, indented by level.
console.log([...document.querySelectorAll('h1,h2,h3,h4,h5,h6')]
.map((h) => ' '.repeat(h.tagName[1] - 1) + h.tagName + ' ' + h.textContent.trim().replace(/\s+/g, ' '))
.join('\n'));
Anything in that list that is not part of your article, such as “Recent posts” or “Follow us” between 2 of your H2s, is a widget title coded as a heading. Change those elements to a paragraph or a div and style them with CSS. Then compare your H1 with the title tag you plan to publish, using the snippet preview to see how that title will look, and read title tags and meta descriptions for the other half of how your page is named. When the page is for something people search, check its search intent before you settle the outline, because the headings are where a reader sees whether you answered the question they asked.