Free heading checker
See every H1 to H6 on 50 pages at once
Paste a list of URLs. Get back every heading on every page, in document order, with its level, its position and its length. Export it as CSV and read the outline the way a crawler reads it.
- Just the headings, in order, so a missing h1 or a skipped level is easy to spot.
50 URLs per run
6 Heading levels read
10 CSV exports
Paste up to 50 URLs
Each address is fetched once, parsed in your browser, and added to the tables below as it completes.
Ready.
One row per URL. The CSV carries every column, including all Open Graph and Twitter tags.
0 rowsOne row per URL: title and meta description with their lengths and how many of each the page has, plus canonical, robots and language. Lengths are characters, not pixels.
0 rowsOne row per URL: the address you asked for, where it ended up, and the canonical it declares, both as written and as resolved, with the robots directive beside it.
0 rowsOne row per URL: Open Graph and Twitter Card tags next to the page title, with the status code of og:image. The CSV carries every og and twitter tag found.
0 rowsEvery h1-h6 in document order. Level and order together show the outline a crawler sees.
0 rowsTop 20 words per page after common stop words are removed. Share is measured against the total word count of the page.
0 rowsEvery anchor with an href, classified internal or external, with its anchor text.
0 rowsOne row per image. A missing alt attribute and an empty one mean different things, so they are separate columns.
0 rowsStructured data blocks: JSON-LD, microdata and RDFa types. A block that fails to parse is reported, not hidden.
0 rowsAnything that went wrong. An empty table here is the result you want.
0 rowsThe outline, in the order it is written
One row per heading. Not grouped, not summarized, not counted for you.
-
Every heading, in document order
h1 through h6, in the order they appear in the HTML. That's the order a crawler reads them in.
-
Level and position together
Each row carries its tag level and its place in the sequence. Read down the level column and a jump from h2 straight to h4 is easy to see.
-
Character length
The length of each heading's text. Enough to spot the two-word h2 that says nothing and the sixty-word h1 that was meant to be a paragraph.
-
Fifty pages in one table
Every page in the run shares a url column, so a whole section of a site sorts, filters and pivots in a spreadsheet.
Five patterns worth a filter
The heading table earns its keep in about five minutes if you know what to sort by.
-
More than one h1
A page with four h1s does not have a main heading, it has four competing ones. Filter the level column to h1 and count the rows per URL.
-
No h1 at all
Usually a template that styles a heading with CSS instead of marking it up. The page looks finished and reads as headless.
-
Levels that skip a step
An h4 directly under an h2 is a broken outline, and it almost always means the tag was chosen for its font size rather than its place in the structure.
-
Empty or one-word headings
Sort by length ascending. A heading with no text is a layout element wearing a heading tag, and screen readers announce it as a section that is not there.
-
The same heading on every page
Templated headings repeated across a whole section tell a crawler the pages are interchangeable. Sometimes they are. Usually that was not the intention.
What it will not tell you
Worth knowing before you rely on the results.
-
Static HTML only
Headings added by JavaScript after load are not in the HTML the server sent. If the table comes back empty on a page that clearly has headings, that is why, and it is worth knowing.
-
It reads markup, not the rendered page
A perfectly nested outline can still look wrong on screen, and a page that looks right can be a stack of styled divs. This tool only sees the first of those.
-
It does not judge the wording
Whether a heading describes the section under it is a reading task. The tool gives you the text and the structure; the sentence is yours.
-
Fifty URLs per run
It runs in a browser tab. Beyond that the tables get slow and it stops being polite to the server on the other end.
Common questions
Does a page need exactly one h1?
Google has said for years that multiple h1 tags will not break a page, and that is true. It is still worth knowing how many you have, because more than one usually means the tag was picked for its size rather than for its meaning.
Do skipped heading levels hurt rankings?
Rarely on their own. They do affect how a screen reader user navigates a page, and they are usually a symptom of a template that chooses tags by appearance, which is worth fixing at the source rather than page by page.
Why is a heading missing from the table?
Either it is added by JavaScript after the page loads, or it is not marked up as a heading at all: styled text that looks like one but is a div or a paragraph in the HTML.
Can I check headings on a site I don't own?
Yes. It reads exactly what any visitor's browser would read, one page at a time, with a pause between requests.
Headings are one tab of the checker
The same run also returns titles, meta descriptions, word counts, links, images and structured data. One run gives you all ten tables, each with its own CSV.
Open the Bulk SEO Checker See the auditsOther checks the same tool runs: Bulk SEO Checker, Meta tag check, Alt text check, Word count check, Canonical check, Open Graph check, Schema check