What the checker reads
Paste HTML, or enter a public URL. Pasted HTML is checked in the browser and is not uploaded. A URL is fetched on Posting Dude's server, the h1–h6 elements are read from that HTML, and the address is not stored.
The outline follows document order. Each level is counted, including a level that is not used. A heading inside navigation, a footer, an aside, a header, main, or an article is labeled with that region. The title element is shown beside the outline when the HTML has one. It is not turned into an H1.
Script, style, textarea, template, noscript, SVG, MathML, and comments are left out. A heading that exists only inside a script, or only after JavaScript runs, is not in the outline. This checker does not run JavaScript. An img alt inside a heading is read as that heading's text. A div with role="heading" is a heading for assistive technologies and is not listed here, because it is not an h1–h6 element.
How many H1s
Zero exposed H1s, and more than one exposed H1, are notes. They are not errors. The W3C headings tutorial describes rank 1 as the most important heading, and it says headings communicate the organization of the page so browsers and assistive technologies can offer in-page navigation.
Google's SEO starter guide says there is no ideal number of headings a page should have, and that heading order does not matter for Google Search. The same guide says semantic order is useful for screen readers. Google Search Central's video "My site's template has multiple H1 tags" says having multiple H1 elements on a page is fine. The video "Multiple H1 Headings: How to Handle Them for SEO & Accessibility?" says Google's systems do not have a problem with multiple H1 headings. A hidden H1 is counted in the H1 total and left out of the exposed count.
Skipped levels
A skip is a downward jump of more than one rank in the exposed outline. An H2 followed later by an H4, with no exposed H3 between them, is the example the W3C headings tutorial uses. The tutorial says skipping ranks can be confusing and should be avoided where possible. It also says it is fine to skip ranks when closing a subsection, so an H2 after an H4 is not a skip. This checker flags only the downward jump.
The first heading can be an H2 or an H3 without a skip mark. If the page has no H1, that is the H1 note, not a second flag on the first heading. A hidden heading does not fill a gap. If the only H3 is hidden, an H2 followed by an H4 is still a skip for people who cannot perceive the hidden H3.
Google's SEO starter guide says that from Google Search's perspective it does not matter if headings are out of order. The check is for readers and screen readers. W3C technique G141 describes nested headings, and W3C says techniques are not required to meet WCAG.
Empty, long, hidden, and repeated headings
An empty heading has no text after whitespace is collapsed. An image with an empty alt does not fill it. WCAG 2.4.6 says that headings, when they are provided, describe topic or purpose. An empty heading does not. The same understanding document says headings do not need to be lengthy, and it publishes no character limit.
This checker notes a heading longer than 120 characters. 120 is this tool's reading note. It is not a WCAG limit, and Google publishes no character limit for headings.
A heading is marked hidden when it, or an ancestor, has the hidden attribute, aria-hidden="true", or an inline style of display: none. visibility: hidden is included too, unless a later inline style sets visibility: visible. role="presentation" or role="none" on the heading itself means it is not exposed as a heading. That role on a parent div is not inherited. This checker does not load stylesheets, so a heading hidden only by a class, including a screen-reader-only class, is not detected. It does not run JavaScript, so a heading a script shows or hides later is read as it stands in the HTML.
Repeated heading text is the same words on more than one heading, ignoring case. People who move from heading to heading hear that label again. The W3C tutorial says headings communicate the organization of the page. Google does not publish a rule against repeating a heading. Empty headings are not treated as repeats of each other.
What a URL check reads
The fetch stops at 1.5 MB, follows at most 3 http or https redirects, and stops after 8 seconds. Iframes are not loaded. The response is not executed. A plain-text response has no H1–H6 elements, and the checker says so instead of guessing at markdown.
Local hosts, IP addresses, and private or link-local addresses, including 127.0.0.1 and 169.254.169.254, are refused before any request. A public name that resolves to a private address is refused as well. A redirect onto one of those addresses stops the check. The refused address returns HTTP 400 and is not fetched.
What the outline does not decide
A tidy outline does not, by itself, raise a ranking, earn a snippet, or win a citation in an assistant. Google's SEO starter guide says headings help users navigate a page, and that the title link in Google Search can come from the title element or from other headings on the page. The title tag and the H1 can differ. This checker does not score that difference.
Use the outline to see whether a reader can move through the page. Then look at the title and the description, which are a different problem from the heading ranks.
The W3C headings tutorial and WCAG 2.4.6 describe headings for readers. Google's SEO starter guide says heading order is not a Google Search requirement. The readability checker scores a draft with the Flesch formulas. The keyword density checker counts words and phrases. The meta title checker previews a title and description before you publish. The free tools index lists the other tools on this site. Pricing lists Launch and Studio. The why page covers what happens when distribution stops after launch day.