Free SEO Tool

Free H1, H2, H3 Heading Checker

Paste any URL. We extract every H1-H6, show the outline, and flag duplicate H1s, missing levels, and skipped hierarchy — the structure issues that quietly hurt SEO.

4.6on G2
4.8on Trustpilot
Used by 75,000+ SEOs and developers

Public URLs only. Pages behind login or paywall return zero headings.

All six tags: H1 through H6 captured
Auto-flag missing H1, duplicate H1, skipped levels
Result in under 5 seconds for most pages

What the Heading Checker does

Search engines and screen readers both rely on your page's heading hierarchy to understand its structure. A well-formed outline (one H1, sequential H2-H6, no skipped levels) signals to Google what your page is about and helps it surface the right snippet for the right query. A messy outline depresses snippet wins, hurts long-tail rankings, and breaks accessibility.

This tool fetches any public URL, extracts every H1 through H6 tag, shows them as an indented outline, and flags the structural issues that quietly cost ranking: missing H1, duplicate H1s, skipped levels, and over-stuffed sections. The fixes are usually 30 seconds in your CMS — once you know which tag to change.

How to audit a page

Five steps from URL to clean outline.

1

Paste any URL

http or https. Public pages only — pages behind authentication will not load.

2

Click Check Headings

The tool fetches the page server-side and parses every H1 through H6 in the rendered HTML.

3

Read the summary

Per-tag counts at the top, full outline below. Warnings appear automatically for missing or duplicate H1s.

4

Spot the issues

Look for: zero H1, multiple H1s, skipped levels (H2 to H4), or 30+ of a single tag. Each is a fix.

5

Edit and re-run

Make the fix in your CMS, publish, paste the URL again, confirm clean outline. Done.

When SEOs and developers use it

Six workflows where the heading checker pays for itself.

Pre-publish content audit

Right before hitting publish on a long-form post, run the staging URL through this tool. You catch missing H1s, accidental duplicate H2s, and skipped levels in 10 seconds — fixes that take 60 seconds in the CMS but save weeks of debugging once the page is indexed.

Competitor outline reverse-engineering

You are writing a "best CRM for startups" post. Run the top 5 ranking competitors through the heading checker, see their H2/H3 structure, then build a deliberately better outline that covers what they cover plus a section they all miss.

SEO audit for a new client

You inherited a site with 200 pages and questionable structure. Run a sample of the top organic pages through the checker, count broken outlines, and lead your audit report with "31 of your top 50 pages have heading structure issues — here is the priority list".

Accessibility compliance check

WCAG audits flag heading hierarchy issues. This tool is the fastest way to verify each page passes the "logical heading order" rule before you sign off on a client's a11y claim.

Refreshing legacy blog posts

You are running a content refresh on 50 old posts. Run each through the checker first; the ones with broken outlines are the highest-ROI to fix. The ones with clean outlines are likely fine and can stay near the bottom of your priority list.

Theme migration QA

Switching from one WordPress theme to another? Heading tags are easy to break in a theme migration (themes wrap things differently). Run a representative sample of post types and pages through the checker after switch to spot regressions before they hurt rankings.

Platform-specific setup guides

How to fix heading issues on the CMSes most teams actually use.

WordPress

  1. In the post editor, look at the right sidebar Outline panel (Block Editor) — it shows the heading hierarchy live.
  2. For full audits, run the published URL through this tool. WordPress themes often wrap site titles in H1, conflicting with the post H1.
  3. If you find duplicate H1s, edit your theme's header.php to change the site logo to

    instead of an H1.

Webflow

  1. In Designer, every text element has a tag dropdown. Check that your page title is H1 and section headers are H2/H3 sequentially.
  2. Headings inside Collection items inherit the tag you set in the template — change there, not on each item.
  3. Run published pages through this tool to catch issues that only show up after CMS data fills in.

Ghost

  1. Ghost posts use Markdown-style heading levels (# = H1, ## = H2, etc). Convention is to skip ## the first H1 since the post title becomes H1 automatically.
  2. If you accidentally start your post body with another # heading, you get duplicate H1s — switch to ## for sections.
  3. Verify with this tool after publishing. Ghost themes are usually clean but custom themes can introduce extra H1s.

Next.js / React custom builds

  1. Use semantic <h1>, <h2>, <h3> in your JSX. Avoid wrapping styled text in <div>s when an H tag would be correct.
  2. For dynamic content (CMS-driven pages), confirm getStaticProps or getServerSideProps returns headings in the HTML, not just JSON for client hydration.
  3. Run each page route through this checker after deploy — JS-only sites are the most likely to have hidden heading issues.

Squarespace / Wix

  1. These platforms hide tag selection in style panels. Look for "Heading 1", "Heading 2" labels in text editor toolbars.
  2. Templates often hardcode the site logo or top nav as H1 — limited fix without code injection.
  3. Audit with this tool. If duplicate H1s are unfixable in your plan tier, accept it as a known limitation and focus on the rest of the outline being clean.

Grigora vs. other heading checkers

Side-by-side feature comparison with the tools SEO teams reach for.

CapabilityGrigoraScreaming FrogSEMrush AuditFree generatorsView Source
Free + unlimited URLsYesLimited free tierFree trialFree, ad-supportedManual only
All H1-H6 tagsYesYesYesH1-H3 onlyManual
Outline view (indented hierarchy)YesYesYesFlat listManual
Auto-flag missing H1YesYesYesManualManual
Auto-flag duplicate H1YesYesYesNoManual
Per-tag count summaryYesYesPartialYesManual
No signupYesAccount requiredAccount requiredYesYes
Bulk URL auditsOn requestPaid tierYesNoNo

Common errors and how to fix them

Eight issues SEOs hit when auditing heading structure, with the exact fix.

Tool returns "no headings found" but the page has them

Cause: Page is a single-page app that injects content via JavaScript after initial render. Server HTML has no headings.

Fix: For SPA pages, server-render or pre-render the headings (Next.js getStaticProps, Nuxt asyncData, etc.). If the headings are dynamically generated and cannot be SSRed, accept that this checker will miss them and use a Lighthouse audit run from a real browser instead.

Multiple H1s detected

Cause: A theme or template wraps both the site logo and the page title in H1, or you copy-pasted content with its own H1 still wrapping the title.

Fix: Pick the H1 that represents the actual topic of this page. Demote the other to H2 (if it is a section title) or wrap in a non-heading element like <p class="logo"> for a logo. Test in Search Console&apos;s URL Inspection to confirm.

No H1 detected

Cause: Designer styled the page title with custom typography in a <div>, never wrapping it in a heading tag.

Fix: Add an H1 around the page title. The visual styling can stay the same — semantic tag is what Google reads. This is a quick 1-line CMS edit that often shifts ranking on long-tail queries.

Heading skips a level (H2 -> H4)

Cause: A developer or content team picked H4 because it "looks the right size", ignoring that there should be H3s between them.

Fix: Either insert missing H3s or demote the H4 to H3. Use CSS to control visual size (font-size: 1rem on H3 is fine), and keep the tag semantically correct.

Heading text contains entity-encoded characters in output

Cause: You typed an apostrophe or ampersand in the CMS, and the renderer encoded it.

Fix: No fix needed — the encoding is fine. Search engines handle &amp; and & identically. The output preserves the raw HTML for transparency.

Page has 30+ H2s

Cause: You used H2s as visual subheadings throughout a long article, without an H3 layer.

Fix: Group related H2s under broader H2s, demoting the inner ones to H3. A 30-H2 page reads as a flat list of equal-weight topics; structure matters more than count.

Headings include navigation, footer, and sidebar items

Cause: Your theme uses H2 or H3 tags for "Recent Posts" widgets, footer column titles, etc.

Fix: Convert non-content headings to <p> with a heading-like CSS class. Reserve real heading tags for the article body. Sidebars and footers should not contribute to the page outline.

Tool times out on a large URL

Cause: The page is huge or hosted somewhere with strict rate-limiting.

Fix: Wait 30 seconds and retry. If it persistently fails, copy the page HTML manually (View Source, save) and inspect headings yourself with browser DevTools.

Original data from our 2026 audit

We sampled 2,000 random pages to see how heading structure looks across the open web.

71%
Pages we audited with exactly one H1 (sample n=2,000)
21%
Pages with multiple H1s (theme/CMS issue)
34%
Pages with at least one skipped heading level
7.4
Average H2 count per long-form blog post

Frequently asked questions

Twelve answers to what SEO teams ask us about heading audits.

Related free tools

Other utilities that pair well with the Heading Checker.

Audit a URL right now

Paste a link, see the outline, fix the structure. Free, unlimited, no signup.

Try the Heading Checker