URL Heading Extractor
Paste a web page link and see every H1 to H6 heading of the page as an outline tree and a table, with checks for a missing or extra H1, skipped levels, and empty, long, or repeated headings. Copy the outline or download a CSV.
How to check the headings of a web page
- Copy the address of a public web page from your browser and paste it above.
- Choose "Whole page" for every heading, menus and footer included, or "Main content" for the headings of the article only. Turn off "Include hidden headings" to leave out headings the page hides.
- Press Extract headings and read the outline tree: each heading sits under the heading it belongs to, so a broken structure stands out.
- Open the Checks tab for what to fix, then copy the outline, the checks, or the Markdown, or download the table as a CSV file for a spreadsheet.
Questions and answers
What does the heading extractor show?
Every h1 to h6 heading of the page and every element marked role="heading", in page order: as an outline tree, as Markdown, and as a table with the level, the text, its length in characters, where it sits (header, navigation, content, sidebar, footer), its #anchor, and its issues.
Is more than one H1 bad for SEO?
No. Google says its systems handle several H1 headings on a page, so the tool shows this as a tip, not an error. One H1 that names the page is still the clearest choice for readers and screen readers. A page with no H1 at all gets a warning.
Why are skipped heading levels a tip?
People who use screen readers move through a page by heading level, so a jump from H2 to H4 hides a level. The W3C advises nesting headings by rank. Google says heading order does not matter for Search, so the tool never calls it an SEO error. Going back up, for example H4 then H2, is fine: that is how sections end.
What counts as a long or repeated heading?
An H1 over 70 characters or an H2 to H6 over 100 characters is marked long. The same text at the same level more than once is marked as a duplicate, which often points to a copied menu or widget.
What is a hidden heading?
A heading with the hidden attribute, aria-hidden="true", or an inline display:none (on itself or on a parent), such as the copy of a menu for phones. Hidden headings are marked and left out of the checks, so they do not count as a second H1. Headings hidden by a stylesheet class cannot be seen without running a browser, so they are listed as normal headings.
How is the heading text read?
As a reader sees it: the visible text with tidy spacing. Permalink signs (¶, #, §) and edit links are left out. A heading made of an image uses the image's alt text and is marked "Image text"; a heading with no text at all is marked "Empty".
Why are headings missing or the page refused?
The tool reads the HTML the site sends and does not run the page's JavaScript. Pages that build their content with scripts get a clear message instead of an empty list. Pages behind a login, a paywall, or a bot check cannot be read either.
Is it free? Are there limits?
It is free and needs no sign-up. Each visitor can check a limited number of pages per minute, pages are read up to a size limit, and a result shows up to 5,000 headings.
Do you store the pages or the results?
No. The page is read once, its headings are listed, and the result is sent back to your browser. Nothing is saved.
Can I use it from a script?
Yes. Open api/run?url=<page address>&format=text next to this page to get the outline tree as plain text, or leave out format=text to get JSON with the table, the checks, the Markdown, and the counts. The options work as query parameters too, for example &area=main&hidden=false.
URL Heading Extractor reads one public page per request and keeps nothing. Made with code.market URL tools.