Headings are structure, not size
The most common cause of a broken heading hierarchy is somebody choosing a level because of how it looked. A third-level heading was the right size, so it went in, and a section that belongs at the second level is now nested inside nothing.
The level is a statement about where a section sits in the document. The size is a separate decision that belongs in CSS. Once you separate the two, most hierarchy problems stop happening, because you are answering a question about meaning rather than about appearance.
The outline test
Strip a page down to its headings and read them on their own. If that list describes the page — what it covers, in what order, at what depth — the structure is sound. If it reads as Introduction, More Details, Other Things, Conclusion, the page has a problem that no amount of prose will fix, because a reader scanning it gets exactly that list and nothing else.
This is the entire value of an outline view, and it is why the [msm_tool slug="heading-analyzer"] lays headings out indented and separated from the text around them. Seen inside the page, a vague heading is carried by the paragraph beneath it. Seen alone, it has to stand up by itself, which is the same condition it faces in a table of contents, in a screen reader's heading list, and in the eye of somebody deciding in two seconds whether to keep reading.
Skipped levels, and who they actually hurt
A second-level heading followed directly by a fourth-level one claims a third-level section exists between them. Nothing visual signals the gap, so it survives for years in templates.
The cost is mostly to screen reader users. Assistive software offers a list of every heading on a page and a shortcut to jump between them, and for many people that list is how a page is navigated — not by reading it top to bottom but by scanning the structure first and diving in. A jump from second to fourth level reads as a missing branch, and the reader has to work out whether they lost their place or the document did.
For search engines the effect is negligible. There is no clear evidence that skipped levels carry a direct ranking cost, and if one exists it is far too small to chase. Fix the hierarchy for the accessibility reason, which is real and measurable, rather than for a ranking reason that probably is not there.
How many first-level headings
The HTML5 specification permits more than one per page inside sectioning elements. In practice, one per page remains the better choice, and the reasons are practical rather than doctrinal.
A first-level heading names the page. Several of them mean nothing does, and the outline becomes ambiguous at exactly the point where it should be clearest. Most tooling — content audits, accessibility checkers, reading-mode extensions, the code that builds a table of contents — was written expecting one. And a site whose template puts the logo in a first-level heading on every page has effectively given every page the same name.
Where multiple first-level headings genuinely appear, it is usually a page builder wrapping each block in its own section and defaulting the first heading inside it to level one. That is worth correcting at the template rather than page by page.
What search engines do with headings
Less than the folklore suggests. Headings help a crawler understand what a section is about, which is a modest relevance signal, and they are one of the sources Google draws on when composing a featured snippet or a jump-to link. They are not a lever. Repeating a target phrase across every heading on a page does not compound anything and reads badly to a person.
The productive version of the same instinct is to make each heading describe its section accurately. When a section genuinely covers a topic, the words for that topic appear in the heading without being forced, and you get the relevance signal as a by-product of writing clearly.
Auditing a page
Copy the rendered markup from the browser inspector rather than the source file, because headings written by a script after load are absent from the source. Paste it, read the outline, and look for four things: a jump of more than one level, more than one first-level heading, a heading that could describe any page on the site, and a section long enough to need a subheading that does not have one.
A matcher working on text rather than a parsed document will miss a heading whose opening tag is split across lines, so a heading you can see in the markup but not in the outline usually means unusual formatting rather than a missing element. Worth checking, because other things that read your markup may be just as literal.
Finally, headings are not the only structure on a page. A list marked up as paragraphs with dashes, or a table built from divs, is invisible to the same readers who depend on the heading list. Getting the hierarchy right is worth doing, and it is one part of a larger habit.