301→302301→302
A temporary redirect where a permanent one belongs.
Found by Redirect checker →
redirect loopredirect loop
The URL redirects back to itself and never settles.
Found by Redirect checker →
Audit

Heading structure checker

Missing or multiple H1, duplicates across URLs, skipped levels, headings before the first H1 and headings that sit in page chrome rather than content.

Heading structure checker

Outline in DOM order

Heading checks read the parsed document in order, so skips and stray headings in navigation are visible.

How it works

Three steps, one saved scan

  1. Crawl the site or parse one page

    A crawl stores each page's heading outline in DOM order. parse returns the heading levels and the outline for a single URL.

  2. Read the order, not just the counts

    Each heading keeps its level, text and page region, so a skipped level or a stray heading in the menu is visible.

  3. Fix the template once

    Headings in the header, nav, sidebar or footer are grouped by the repeated text, with a page count, so one template fix covers every page.

What it checks

Checks in this feature

CheckWhat it meansSeverityEvidence
H1_MISSINGThe page has no H1 headingImportantPage URL, with no H1 in the parsed document
H1_MULTIPLEThe page has more than one H1ImportantPage URL and the H1 texts that caused it
H1_DUPLICATEThe same H1 text appears on several URLs in one runTipThe H1 text and the URLs that share it
HEADING_BEFORE_H1One or more headings come before the first H1 in DOM orderTipCount, heading levels and the first heading texts before the H1
HEADING_SKIPA content heading jumps more than one level, for example H2 to H4TipFrom and to levels with the heading texts, in the content region only
HEADING_IN_PAGE_CHROMEA heading sits in the header, nav, sidebar or footer rather than the contentTipRegion, level and text, with the number of pages that share the same template headings
How to run it

One command

bash
seohead parse --url https://example.com/

Install first: installation guide. Every command also runs as an MCP tool for AI agents.

Related checks

From the check registry

H1_MISSINGH1_MULTIPLEH1_DUPLICATEHEADING_SKIPHEADING_BEFORE_H1HEADING_IN_PAGE_CHROME
FAQ

Questions

Heading structure checker
No. parse returns the heading levels and the outline for one page. The checks run in a crawl: seohead crawl-site stores the outline and reports HEADING_BEFORE_H1, HEADING_IN_PAGE_CHROME and HEADING_SKIP. H1_MISSING, H1_MULTIPLE and H1_DUPLICATE also run in a crawl.
An SF export has the headings as an unordered set. It carries no outline, so HEADING_BEFORE_H1, HEADING_IN_PAGE_CHROME and HEADING_SKIP are skipped by name. Those three need a native crawl.
Regions come from the page's main content landmark: a main element, role=main, an article, or a selector you configure. Without one, and with no matching position rule, the region is unmeasured. The check is then skipped for that page and the run says why. It is not reported as clean. For menus built from plain divs, add rules under link_position.rules.
No. It makes read-only requests and respects robots.txt. The crawl-site default cap is 200 URLs, so you control the scope.

Check your redirects locally