Website H1-H6 Heading Checker - SEO Structure Audit avatar

Website H1-H6 Heading Checker - SEO Structure Audit

Pricing

Pay per event

Go to Apify Store
Website H1-H6 Heading Checker - SEO Structure Audit

Website H1-H6 Heading Checker - SEO Structure Audit

Check H1-H6 headings on one page or crawl a whole site. Returns every heading by level, a 0-100 structure score per page, and the exact issues found - missing H1, duplicate H1, skipped levels, headings too short or long - each with a severity and a fix, plus a site-wide summary.

Pricing

Pay per event

Rating

0.0

(0)

Developer

My Smart Digital

My Smart Digital

Maintained by Community

Actor stats

3

Bookmarked

23

Total users

0

Monthly active users

1.3 days

Issues response

4 days ago

Last modified

Share

Website H1-H6 Heading Checker

Check the heading structure of any web page or whole site. The actor reads every H1 to H6 tag, scores each page from 0 to 100, names the exact problems it found and tells you how to fix them.

Run it on a single URL, or crawl up to 50 internal pages and get a site-wide summary on top of the per-page detail.

What you get

For every page: the full list of headings by level, their order on the page, a 0–100 structure score, the issues found and a recommendation per issue.

For the whole site: heading totals and averages, the share of pages missing an H1 or carrying several, the count of issues by severity, and every issue grouped by type with the pages concerned.

Output goes to the dataset and to the key-value store under the OUTPUT key.

What it detects

IssueSeverityMeaning
missing H1criticalThe page has no H1 at all
multiple H1 tagscriticalMore than one H1 on the same page
heading hierarchy skipped levelscriticalA level is jumped, e.g. H2 straight to H4
too many consecutive same level headingswarningA long run of same-level headings with no sub-structure
heading text too shortwarningUnder 10 characters
heading text too longwarningOver 100 characters
H1 identical to page titleinfoThe H1 repeats the <title> word for word

The 0–100 score is built from four things: whether a single H1 is present, how consistent the hierarchy is, the length and quality of the heading text, and the depth of H2/H3 use. The letter grade is given once for the site, in domain.analysis_summary.average_score_grade, and follows the site average: A from 90, B from 80, C from 70, D from 60, F below. Individual pages get a number, not a letter.

Input

FieldTypeDefaultWhat it does
startUrlstringPage to analyze, or the page the crawl starts from. Required.
crawlUrlsbooleanfalseFollow internal links instead of analyzing a single page
maxPagesinteger2Pages to analyze when crawling, up to 50. Ignored when crawlUrls is false
includeHeadingTextbooleantrueReturn the text of each heading
includeHeadingStructurebooleantrueReturn the ordered headingStructure array
includeHeadingScorebooleantrueCompute scores, issues and recommendations
userAgentstringown UAUser agent sent with each request
timeoutinteger10000Request timeout in milliseconds, 1000 to 30000
maxRedirectsinteger5Redirects followed per page, 0 to 10

Single page:

{ "startUrl": "https://example.com/" }

Whole site, 20 pages:

{ "startUrl": "https://example.com/", "crawlUrls": true, "maxPages": 20 }

Output

Trimmed extract of a real run on a 3-page crawl:

{
"domain": {
"domain_name": "https://www.smashingmagazine.com",
"total_pages_analyzed": 3,
"total_headings": 104,
"total_h1": 1,
"total_h2": 54,
"total_h3": 43,
"total_h4": 6,
"average_headings_per_page": 35,
"average_heading_score": 60,
"pages_with_h1": 1,
"pages_with_h1_percentage": 33,
"pages_with_no_h1": 2,
"pages_with_multiple_h1": 0,
"pages_with_good_structure": 1,
"total_heading_issues": 7,
"critical_issues": 4,
"warning_issues": 3,
"info_issues": 0,
"issues_by_type": {
"missing H1": [
{ "issue": "missing H1", "page": "https://www.smashingmagazine.com/", "severity": "critical" }
]
},
"analysis_summary": {
"has_heading_issues": true,
"needs_h1_improvement": true,
"has_good_structure": true,
"average_score_grade": "D"
}
},
"pages": [
{
"url": "https://www.smashingmagazine.com/",
"analyzed": true,
"pageStatusCode": 200,
"pageTitle": "Smashing Magazine — For Web Designers And Developers",
"h1": [],
"h2": ["New EU Guidelines For AI Labelling", "Accessible Front-End Components"],
"h3": ["Front-End Boilerplates & Starter Kits"],
"h1Count": 0,
"h2Count": 22,
"h3Count": 1,
"totalHeadings": 27,
"headingStructure": [
{ "tag": "h2", "level": 2, "text": "New EU Guidelines For AI Labelling", "position": 1, "length": 34, "wordCount": 6 }
],
"headingScore": 45,
"headingIssues": ["missing H1", "heading hierarchy skipped levels"],
"headingRecommendations": [
"Add a single H1 tag to each page for better SEO",
"Improve heading structure and hierarchy for better SEO"
],
"analysis_date": "2026-08-14T05:36:00.771Z",
"data_source": "msd_headings"
}
],
"failed_pages": [],
"analysis": {
"total_pages_processed": 3,
"total_pages_failed": 0,
"analysis_completed_at": "2026-08-14T05:36:01.682Z",
"headings_engine_version": "1.1.0",
"data_format_version": "1.0"
}
}

h4, h5, h6 and their counts are always present, empty when the page has none.

Pages that cannot be read

A page hit by a transient network error (DNS, reset connection, timeout) is tried up to three times, then listed in failed_pages with its reason. It is excluded from the statistics, so a network problem never shows up as "0 headings, grade F". If no page at all could be read, the run fails instead of returning an empty report.

Limits

  • Static HTML only. Headings injected client-side by JavaScript are not seen.
  • The crawl follows internal links from startUrl and stops at maxPages, capped at 50. It is not a full site crawler and does not read your sitemap.
  • Scores and grades come from the rules listed above. They are a structure check, not a ranking prediction.
  • Heading length thresholds (10 and 100 characters) are fixed and not configurable.

Typical uses

Auditing heading structure before a redesign or a migration, checking that a new template outputs one H1 and a clean hierarchy, and screening a batch of pages for missing or duplicate H1s.

Support

Open an issue on this actor's page and we will look at the run you report.