BlogFindings

Multiple h1 tags: 170 of 1,059 home pages declared more than one, and 259 declared none

Lantad asked the 1,419 hostnames in this repository's two committed corpus seed files for robots.txt on 21 October 2026 and read every permitted home page with no JavaScript executed. 1,059 answered HTTP 200 with HTML and carried 1,495 h1 elements between them. 630 of those pages carried exactly one, 170 carried more than one, 259 carried none, and one news home page carried 85. Google's own guidance files the number of headings under things it believes you should not focus on.

18 min read Lantad

On 21 October 2026 Lantad asked all 1,419 hostnames in this repository's two committed corpus seed files for robots.txt, computed a root verdict for LantadBot with the scanner's own parser, and then requested one page per permitted host: the home page, redirects followed, no browser involved and no JavaScript executed. 47 robots.txt requests failed in the client, 1,104 files answered 2xx and parsed, 229 answered 4xx and 39 answered 5xx. 12 of the parsed files disallowed LantadBot at the root by a rule, and the 39 that answered 5xx were treated as disallowed because that is what crawlers commonly do with a failing robots.txt, which left 1,321 home pages to request. 1,059 answered HTTP 200 with an HTML content type and 228 answered 403. Every h1 element in those 1,059 documents was counted straight from the bytes, together with the text each one carried and the elements it sat inside. The frame and the strata are the ones set out on the methodology page, and the limits of a single read of live sites are stated where they bite rather than gathered into a disclaimer at the end.

In short

  • Multiple h1 tags are permitted by the HTML standard and discouraged by MDN: the MDN heading elements reference, last modified 26 August 2026, states that using multiple h1 elements on one page is allowed by the HTML standard as long as they are not nested, that this is not considered a best practice, and that a page should generally have a single h1 element that describes the content of the page.
  • Google's SEO starter guide, last updated 2025-12-10 UTC, files the number and order of headings under a section it titles Things we believe you shouldn't focus on, and states that there is no magical, ideal amount of headings a given page should have.
  • Lantad read 1,059 home pages on 21 October 2026. 630 carried exactly one h1 element, 170 carried more than one and 259 carried none. The 170 held 865 of the 1,495 h1 elements counted across the corpus, and thejakartapost.com carried 85 of them on one page.
  • On 47 of those 170 pages at least one h1 repeated a sentence another h1 on the same page already carried, and on 28 of them every h1 held the same sentence, so the extra heading gave an extractor no words it did not already have.
  • Lantad's own structure check asks for exactly one h1 and counts only headings outside nav, header, footer and aside, so it recorded exactly one on 481 of the 1,059 pages and recorded none on 136 pages whose HTML did contain an h1, among them lu.se, where all 18 sat inside the footer or the header.
h1 elements in the HTMLHome pagesShare of the 1,059
None25924.5 percent
Exactly one63059.5 percent
Two787.4 percent
Three to five585.5 percent
Six to ten181.7 percent
More than ten161.5 percent
h1 elements per home page, counted from the raw HTML by Lantad on 21 October 2026 as LantadBot/1.0 with redirects followed and no JavaScript executed. Script, style, svg and template content was excluded before text was read. Shares are rounded to one decimal place and therefore sum to slightly over 100.

What 1,059 home pages actually declared

The distribution is the whole finding, and it is less tidy than either document implies. 630 of the 1,059 readable home pages carried exactly one h1 element, which is 59.5 percent, a majority but not a convention. 259 carried none at all. 170 carried more than one, and those 170 pages held 865 of the 1,495 h1 elements counted across the entire corpus, so a sixth of the pages accounted for well over half the top level headings.

The tail is long and it matters more than the mean. 78 pages carried two h1 elements, 58 carried between three and five, 18 carried between six and ten, and 16 carried more than ten. The largest was thejakartapost.com, a news home page carrying 85 h1 elements, where nearly every story headline on the front page is marked up as a top level heading. khiry.com, built on Webflow, carried 47. One page carried 36 and another 28, both built on Framer. At that scale the question stops being a style preference: a document with 85 top level headings has no top level heading, because the element that was supposed to say what the page is about has been spent 85 times.

Which stack a site is built on predicts this better than which industry it is in. Among the 31 readable Framer sites, 13 carried more than one h1, a rate of 41.9 percent, the highest of the eighteen strata; the Framer stack guide covers the rest of what that platform does to a crawler's view. 20 of 54 Wix and Squarespace sites carried more than one, and 13 of 36 WordPress small business sites did. At the other end, only 1 of the 31 static documentation sites carried more than one, and only 3 of 74 travel sites did. Page builders that let a designer drop a styled heading block anywhere produce multiple top level headings as a by-product; hand written templates and documentation generators do not.

Word count does not separate these groups. The 630 single h1 pages served a median of 632 words of main content to a crawler, the 170 multiple h1 pages a median of 636. Whatever the extra headings are doing, they are not marking out more prose. The frame behind the strata, and what it can and cannot represent, is set out in the crawlability study, and the same corpus has been read for which schema.org types reach home pages.

StratumPages readMore than one h1No h1 at all
Framer31133
Wix and Squarespace542016
WordPress small business36135
News60728
Ecommerce61534
Travel74331
Static documentation3112
Seven of the eighteen strata in the two seed files, chosen as the extremes of the h1 count, measured by Lantad on 21 October 2026. Pages read counts only hostnames that answered HTTP 200 with HTML after their robots.txt permitted LantadBot at the root.

On 47 of the 170, the extra h1 repeats a sentence already there

The interesting part of the multiple h1 population is not that there are several headings. It is that so many of them say the same thing twice. On 47 of the 170 pages at least one h1 carried text that another h1 on the same page already carried, after lowercasing, stripping punctuation and collapsing whitespace. On 28 of those pages every single h1 held an identical sentence.

The shapes behind that number are worth naming because they have different causes. daytona.io carried three h1 elements, all reading Run AI Code on Daytona. heatbureau.com carried two, both reading a FULL-service DESIGN studio. marmitedefontes.com carried three copies of one line. This is the signature of responsive duplication: a builder emits one heading for the desktop layout and another for the mobile layout, CSS hides whichever does not apply, and a client that reads bytes rather than pixels receives both. The same mechanism has shown up here measuring pages that answer a phone and a desktop differently and in the words that sit behind a visibility marker, where 121,312 of 1,269,054 words were hidden from a reader but not from a parser.

The extreme case of partial repetition was iheald.com, with 36 h1 elements carrying just 3 distinct sentences between them, each one a health outcome claim repeated many times over. isapinheiro.com carried 28 h1 elements holding 17 distinct texts. thejakartapost.com, the largest page in the run, carried 85 h1 elements with 65 distinct texts, so even there 20 of the 85 repeated another headline on the same front page.

This is the part that bears on retrieval rather than on style. An extractor building a document from bytes does not know that two identical strings were meant to be one heading shown at two screen widths. It records a document whose top level heading appears three times, which inflates nothing useful and can distort any weighting that treats a heading as a statement about the page. Prose parity is the measure this product uses for the gap between what a browser renders and what a crawler receives, and duplicated headings sit squarely inside it. What this run did not do is test whether any named engine penalises the repetition, and no figure here should be read as evidence that one does.

Home pageh1 elementsDistinct texts among themStratum
thejakartapost.com8565News
khiry.com4735Webflow
iheald.com363Framer
isapinheiro.com2817Framer
daytona.io31Framer
marmitedefontes.com31Framer
Six home pages from this run on which the h1 elements outnumbered the distinct sentences they carried, measured by Lantad on 21 October 2026 after lowercasing, stripping punctuation and collapsing whitespace. Each page was requested once.

The 259 pages with no h1 are two different problems

A count of pages missing an element is only useful if you check what those pages were, and in this run the 259 split cleanly into two groups that deserve different responses.

110 of them served a crawler fewer than 100 words of main content, and 69 served none at all. Those are not markup decisions. A page that delivers zero words and zero headings under an HTTP 200 is a bot challenge, a script shell, a redirect stub or a consent interstitial, and its missing h1 is a symptom of the page never arriving rather than of anybody's choice about heading levels. The same population has turned up every time this corpus is read: 418 of 1,419 sites gave a crawler no words to read in an earlier run, and a 403 or a 200 tells you very little on its own. Counting these 110 as sites with a heading problem would put the number at 259 rather than 149, an overstatement of three quarters.

The remaining 149 are the real ones. They answered with 100 words or more, a median of 607, which is within a few percent of the 632 median on single h1 pages. These are ordinary home pages carrying ordinary amounts of prose and no top level heading anywhere in the document. 34 of 61 readable ecommerce sites and 31 of 74 travel sites sat in the no h1 group, two of the three highest rates in the corpus with news on 28 of 60 between them, which fits a layout where the first thing on the page is a hero image with the brand name set as styled text rather than as a heading.

Two caveats bound this, and both cut against reading the number as larger than it is. The count is of h1 elements in the HTML delivered to a client that runs no JavaScript, so a heading injected by a framework after hydration is absent here by construction; JavaScript supplied 7.6 percent of the prose on this corpus when it was measured with a browser, and two of nine crawler operators say either way on whether they run it. And a missing h1 is not a missing heading: several of the 149 carried h2 and h3 elements in quantity, so the document had structure, just no declared top.

What the page deliveredPagesWhat the missing h1 means
No words at all69The page never arrived: challenge, shell or stub
1 to 99 words41Too little delivered to call it a markup choice
100 words or more149A real page with no declared top level heading
Median words across all 259217Against 632 on the single h1 pages
Median words of the 149607Ordinary prose, no h1
The 259 home pages that carried no h1 element, split by how much main content a crawler actually received, measured by Lantad on 21 October 2026 with the extractor in core/src/extract.ts and no JavaScript executed.

Where the h1 sits decides whether an extractor counts it

Counting h1 elements in the HTML is one question. What a text extractor records is a different one, and the gap between them is large enough to change the answer on more than a tenth of the corpus.

The extractor in core/src/extract.ts classifies every text block as main content, neutral or boilerplate, and anything inside a nav, header, footer or aside element is boilerplate. Headings in boilerplate are dropped before the heading list is built, so they never reach the h1 count. Across these 1,059 pages, 224 h1 elements sat inside one of those four elements, spread over 149 pages, and on 120 of those pages every h1 in the document was inside boilerplate. The result is that the extractor recorded zero h1 elements on 136 pages whose HTML plainly contained at least one.

lu.se is the clearest case in the run. Its home page carries 18 h1 elements, most of them faculty names, with texts including Ekonomihögskolan, Juridiska fakulteten and Medicinska fakulteten. Not one of them is the page's subject heading: 13 sit inside a nav inside the footer, four more sit directly in the footer, and the eighteenth sits in the header and carries no text at all. The raw HTML therefore has eighteen top level headings and this scanner reports none. That behaviour was first written up here from five golden fixtures, where an h1 inside a header element counted as no h1 at all; this run is the same rule seen at corpus scale, and it is a defensible rule rather than a bug, because a heading that labels a navigation block is not a statement about the page. It is still a rule a site owner cannot see from their own markup.

The divergence runs the other way too, and that part is less defensible. On 80 pages the extractor recorded more h1 elements than the document contains, because its count increments per text block rather than per element: an h1 containing a nested block level element flushes more than one block, and each is attributed to the h1 that anchored it. marmitedefontes.com has three h1 elements and the extractor reports six. That is a counting artefact in our own code, it is logged here rather than tidied away, and it does not move any figure in this post, all of which are counted from the elements. The related reading is what deleting the main element costs, the 379 of 1,066 pages that declared no main at all and the links named only by an aria-label, all of which turn on the same question of which bytes an extractor treats as content.

One more measure belongs here because it is easy to overclaim. 411 of the 1,059 pages put at least one h1 inside a section, article, aside or nav element, and 86 put two or more there. MDN's non-conforming case is specifically multiple h1 elements in nested sectioning elements, which is narrower than what was measured: this run recorded whether an h1 had a sectioning ancestor, not whether those ancestors were nested within one another. So 86 is an upper bound on the pattern MDN names, not a count of it, and it is reported that way on purpose.

h1 elements in the delivered HTML

  • 18 h1 elements, 17 distinct texts
  • 13 in a footer nav, 4 in the footer, 1 in the header
  • Campus Helsingborg
  • Ekonomihögskolan
  • Juridiska fakulteten
  • Medicinska fakulteten
  • 340 words of main content

What the extractor recorded

  • h1 count: 0
  • Every heading classified as boilerplate
  • exactlyOneH1 check: fails
  • Defect text: Found 0 H1 elements
  • One of 136 pages in this run where
  • the HTML had an h1 and the count was zero
The home page of lu.se, requested once by Lantad on 21 October 2026 as LantadBot/1.0 with no JavaScript executed. The same document, counted two ways.

What our own check does, and why that is awkward

The uncomfortable part of this measurement is what it says about our own scoring, so it belongs in the post rather than in a footnote.

One of the seven checks behind this scanner's structure sub-score is exactlyOneH1, and it passes only when the extractor's h1 count is exactly one. In STRUCTURE_CHECK_WEIGHTS in core/src/config.ts it carries a weight of 1 against a total of 6.5, and SCORE_WEIGHTS gives structure 0.15 of the composite, so exactly one h1 is worth about 2.3 percent of a page's grade. Those are settings somebody chose, not findings, and that distinction is the whole point of stating them: no measurement in this repository established that one h1 is worth 2.3 percent of anything.

Run that check across this corpus and it passes 481 of the 1,059 pages, which is 45.4 percent. 464 of those are pages whose HTML carried exactly one h1 and whose single h1 sat outside boilerplate. So the check fails the majority of the readable web, on a signal that one of the two publishers who documents it files under things not to focus on. That is not a comfortable position and it is not resolved by this post. It is worth stating plainly: we weight a page down over a markup pattern that Google files among the things not to focus on and that MDN calls a best practice rather than a requirement, and the honest status of that weight is unverified rather than wrong.

What would settle it is not another count of markup. It would be a measurement connecting h1 count to whether a page is retrieved and cited by a named engine, holding content constant, which is a different and much harder experiment than reading 1,419 home pages once. Until somebody runs it, the defensible move is to keep the check, keep its weight small, and say what it rests on. The grade itself, and how much each dimension actually moves it, is set out on the methodology page and was measured across this same frame when 972 of 1,419 corpus sites were graded and parity took 60.7 percent of every point they lost. Anyone who wants the h1 count on their own page rather than ours can read it from what GPTBot sees, and the vocabulary behind the score sits in the AI visibility entry.

The stability check closes this out, because a one shot read of live sites earns one. The whole corpus was read a second time the same day. 1,397 of the 1,419 hostnames gave the same answer on both reads for whether a page was delivered and for which of the three buckets it fell into, and 1,406 returned an identical h1 element count. Of the 22 that moved, 21 moved on whether a page was delivered at all, which is bot defence rather than markup. Exactly one hostname was readable both times and changed bucket: karolinska.se carried one h1 on the first read and none on the second. The second read gave 1,066 readable pages, 267 with no h1, 630 with exactly one and 169 with more than one, against 1,059, 259, 630 and 170. The finding this post is named for did not move.

Structure checkWeight in the sub-scoreMeasured in this run
titlePresent1Not measured in this run
metaDescriptionPresent1Not measured in this run
exactlyOneH11481 of 1,059 passed
canonicalPresent1Not measured in this run
headingCoverage1Not measured in this run
noOversizedBlock1Not measured in this run
llmsTxtPresent0.5Not measured in this run
The seven checks behind the structure sub-score, with the weights they carry in STRUCTURE_CHECK_WEIGHTS in core/src/config.ts. The weights are settings in this repository. Only the h1 row was measured across the corpus in this run.

Written by

Lantad

Published .

Multiple h1 tags are the oldest argument in on-page markup, and the two documents a developer is most likely to reach for still do not give the same answer. MDN says prefer one. Google files the question under things not to focus on. Both statements are current, both come from the organisation that owns the surface being described, and neither is a measurement of what sites actually do. A third opinion adds nothing here. A count adds something.

Common questions

Are multiple h1 tags bad for SEO or for AI search?

Neither document that governs this says they are bad. Google's SEO starter guide, last updated 2025-12-10 UTC, files the number and order of headings under Things we believe you shouldn't focus on and states there is no magical, ideal amount of headings a given page should have. MDN, last modified 26 August 2026, says multiple h1 elements are allowed by the HTML standard but that a page should generally have a single one. Neither is a statement about AI answer engines, and this post measured markup rather than engine behaviour, so it cannot tell you that multiple h1 tags cost you a citation.

How many h1 tags does a typical home page have?

One, but by a plurality rather than a consensus. Of the 1,059 home pages Lantad read on 21 October 2026, 630 carried exactly one h1 element, 259 carried none and 170 carried more than one. The 170 held 865 of the 1,495 h1 elements in the corpus. 78 pages carried two, 16 carried more than ten, and the largest was a news home page with 85.

Why would a page have 85 h1 elements?

Because every headline on it is marked up as a top level heading. thejakartapost.com carried 85 h1 elements across 65 distinct texts, with story headlines on the front page set as h1 rather than h2 or h3. A separate and more common cause of repeated h1 elements is responsive duplication, where a builder emits one heading for desktop and another for mobile and CSS hides one: on 28 of the 170 multiple h1 pages, every h1 held the same sentence.

Does a missing h1 mean a crawler gets no heading?

No, and conflating the two overstates the problem. Of the 259 pages with no h1 element, 110 served fewer than 100 words of main content and 69 served none, so their missing heading is a symptom of the page not arriving rather than a markup choice. Several of the remaining 149 carried h2 and h3 elements in quantity, so the document had structure and no declared top. Separately, Lantad's extractor drops headings inside nav, header, footer and aside, which is why it recorded zero h1 elements on 136 pages whose HTML contained at least one.

See what AI can read on your site

Run a free scan and get a graded report of exactly what AI crawlers can and cannot read, with ranked fixes.