# Deleting the main element cost 1,665 of 13,615 words

> All five real pages this scanner captured on 15 July 2026 carry exactly one main element. Rewriting every one of them as a plain div and re-running the shipped extractor on 26 August 2026 cut the main content corpus from 13,615 words to 11,950. On one page the landmark was worth 43 percent of the corpus and on another it was worth 1 percent.

- Canonical page: https://lantad.co/blog/deleting-main-cost-1665-of-13615-words
- This file: https://lantad.co/blog/deleting-main-cost-1665-of-13615-words.md
- Last substantive update: 2026-08-26

## Key facts

- **Published:** 2026-08-26
- **Category:** Findings
- **Author:** Lantad
- **Length:** 3526 words
- **Takeaway 1:** Every one of the five real pages stored as golden fixtures in this repository, captured on 15 July 2026, carries exactly one main element, and not one of the five redundantly declares role=main on it.
- **Takeaway 2:** Rewriting every main element as a plain div and re-running the extractor in core/src/extract.ts on 26 August 2026 moved the main content corpus of those five pages from 13,615 words to 11,950, a loss of 1,665 words or 12.2 percent.
- **Takeaway 3:** The loss is not spread evenly: the landmark was worth 1,026 of webflow.com's 2,383 main words at 43.1 percent, and 18 of gymshark.com's 1,763 at 1.0 percent, because the extractor already counts every h1 to h6, p and li as main content wherever it sits.
- **Takeaway 4:** Deleting all 42 article elements while leaving main in place changed the main word count on all five pages by zero, since 34 of the 42 already sat inside main and the other 8 sat inside a header, where boilerplate wins.
- **Takeaway 5:** None of the four structure checks that read the word count changed under the ablation on any of the five pages, so the landmark moved the corpus that prose parity is computed on and moved no sub-score at all.

## Summary

HTML has exactly one element whose stated job is to say where the content of a document is, and it is worth asking what that element is actually worth to a machine reading the page. The question is not rhetorical for anyone selling measurement. This scanner classifies text by position: a block inherits its status from the elements it sits inside, and the main element is one of the two containers that confer main content status. Advice to add the landmark for the benefit of [an AI crawler](https://lantad.co/glossary/ai-crawler) is common, cheap to follow and rarely tested, which is a combination worth being suspicious of.

The test available here is an ablation. This repository stores five real pages as golden fixtures, captured on 15 July 2026, and it also ships the extractor that reads them. So the landmark can be removed from the stored HTML and the same extractor re-run over the result, and the difference between the two runs is what the element was worth to this instrument on these documents. That is a narrow claim and it is the only one this post makes. It says nothing about what any answer engine does, and it is a different question from the one answered when the same extractor found [1,395 of 2,729 text blocks were navigation](https://lantad.co/blog/half-the-text-blocks-were-navigation): that count asked how much of a page is chrome, and this one asks what happens when you take away the element that is supposed to separate the two.

## Every page named its main content region, exactly once

The first result is the least interesting and has to be said anyway, because a finding about what the landmark is worth would mean nothing if the landmark were missing. All five pages carry a main element, all five carry exactly one, and all five put it in the body rather than nesting it somewhere strange. The identifiers differ and the pattern behind them does not: astro.build uses id main, webflow.com uses id main, both the developer.mozilla.org HTML reference and the en.wikipedia.org Web crawler article use id content, and gymshark.com uses id MainContent with tabindex set to minus one, which is the ordinary way to make a skip link land somewhere focusable.

That unanimity is itself worth recording, because the corpus is not a set of pages chosen for their markup. It holds two documentation pages, two marketing homepages and one commerce storefront, built on entirely different stacks, and the one structural decision they all made the same way was this one. Nor is any of them doing the thing the specifications advise against. [ARIA in HTML](https://www.w3.org/TR/html-aria/), a W3C Recommendation dated 11 August 2026, gives the main element an implicit ARIA role of main and marks writing that role out explicitly as not recommended. Zero of the five write it out. Every one of them is conformant on that point without anybody having to be told.

Reported rather than measured, [MDN's reference for the main element](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/main), last modified 24 April 2026, states that the element represents the dominant content of the body of a document, and that a document must not have more than one main element without the hidden attribute. Five of five comply with both halves. Where [this scanner's methodology](https://lantad.co/methodology) reads a page positionally, then, it is reading a signal that these five authors all chose to send. The question this post exists to answer is what the signal was worth once it arrived.

## What happens when the landmark is deleted

The method is deliberately crude, because a crude method is one a reader can repeat. Every main start tag in the stored raw HTML was replaced with a plain div start tag and every main end tag with a div end tag, which preserves the document structure exactly, since div is already a block boundary for this extractor and confers no status of its own. Then the same extractor was run over the modified document. Nothing else changed, no page was refetched, and the rendered captures were left alone.

Across the five pages the main content corpus fell from 13,615 words to 11,950. That is 1,665 words, or 12.2 percent of the corpus, attributable to five HTML tags. Put the other way round, 87.8 percent of what this scanner calls main content on these pages would still be called main content if the landmark had never been written.

The average conceals the finding. On webflow.com the ablation cost 1,026 words of 2,383, which is 43.1 percent of that page's corpus, and on gymshark.com it cost 18 words of 1,763, which is 1.0 percent. The two pages are both marketing or commerce front doors built with commercial tooling, captured within seventy seconds of each other, and the element was worth forty three times more on one than the other as a share. astro.build lost 21.8 percent, the MDN HTML reference 12.1 percent, and the Wikipedia article 4.2 percent, so the spread runs across the whole set rather than resting on one outlier.

This matters for the sub-score it feeds. [Prose parity](https://lantad.co/glossary/prose-parity) is computed as the containment of the rendered main text inside the visible text of the crawler view, so both the thing being searched for and the thing being searched are affected by where that boundary falls. It is also the corpus behind what [a fetch-only view of a page](https://lantad.co/tools/what-gptbot-sees) reports as its content. A boundary that moves by 43 percent on one page and 1 percent on the next is not a stable instrument in the way a single headline number suggests, which is the same lesson that arrived when [an h1 inside a header counted as none](https://lantad.co/blog/an-h1-inside-a-header-counted-as-none). Everything this scanner publishes about its own crawler, including [the user agent it identifies as](https://lantad.co/bot), rests on positional rules of exactly this kind.

## Why a paragraph makes the landmark redundant

The reason for the spread is in the ruleset, and it is one rule. Read out of core/src/extract.ts on 26 August 2026, a text block is classified main content when it sits inside a main or article element, and also when it sits inside any h1 to h6, p or li anywhere in the document. Boilerplate, meaning anything inside nav, header, footer or aside, wins over both. So the landmark is a fallback rather than the primary signal. A page that writes its prose into paragraphs and its lists into list items has already told the extractor everything the landmark would have told it, and deleting the landmark costs that page nothing.

A page that writes its prose into bare divs has not, and for that page the landmark is carrying the whole classification. That is what separates webflow.com from gymshark.com here. Both are commercially built pages of similar scale, and the difference is whether the generated markup reaches for a paragraph element or a styled div.

The precise figure is available because the ablation preserves block boundaries one for one, so the two runs can be compared block by block. Rewriting both main and article as divs moved 471 of the 1,313 main classified blocks to neutral, carrying 1,677 words between them. Every one of those 471 blocks was anchored on a generic container rather than on a heading, a paragraph or a list item. The remaining 842 main blocks were unaffected, because each of them was already one of those three.

There is a second-order effect in the same rule that the ablation does not touch. Fifteen nav, header, footer or aside elements across the five pages sit inside the main element, seven of them on the Wikipedia article alone, and their contents are boilerplate regardless. Declaring a main region does not stop navigation being navigation. This is the same positional logic that produced the finding that [every table element on these pages](https://lantad.co/blog/three-tables-on-five-pages-all-navigation) turned out to be layout rather than data, and it is why advice to add semantic containers for [generative engine optimisation](https://lantad.co/glossary/geo) needs testing rather than repeating. [The crawler reference on this site](https://lantad.co/tools/ai-crawlers) lists what the named agents publish about themselves, and none of them publishes anything about this.

## The article element moved nothing at all

The extractor treats article as the equal of main, so the same ablation was run against it, and the result is the cleanest number in this post. The five pages carry 42 article elements between them, 14 on astro.build and 28 on gymshark.com, with none at all on the other three. Rewriting every one of those 42 as a plain div, while leaving the main elements in place, changed the main content word count on all five pages by exactly zero.

Two facts explain it. Thirty four of the 42 already sit inside the main element, so they were conferring a status their parent had already conferred. The other 8 all sit on gymshark.com, and all 8 sit inside a header element, where the boilerplate rule wins unconditionally and the article element is overruled. There is no configuration of these five pages in which article does any work while main is present.

It does one thing when main is absent. Running both ablations together cost 1,677 words rather than the 1,665 that main alone cost, and all 12 of the difference are on astro.build, where a handful of blocks sit inside an article that is inside main. That is the entire measured contribution of the article element to this corpus: twelve words, and only as a backstop for a landmark that was not missing.

Reported rather than measured, [MDN's reference for the article element](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/article), last modified 24 April 2026, describes it as a self contained composition intended to be independently distributable or reusable, and names a product card and an interactive widget among its examples alongside a blog entry. That breadth is the point. The element is used for cards and widgets far more often than for documents, which is exactly what the gymshark.com header shows, and treating it as a synonym for main content is a modelling decision this scanner made rather than something the specification supports. It is a decision worth revisiting, and it is not the same kind of claim as anything in [structured data](https://lantad.co/glossary/structured-data), where the vocabulary states what a type means. Advice framed as [answer engine optimisation](https://lantad.co/glossary/aeo) tends to blur those two together.

## The corpus moved and the sub-scores did not

A 12.2 percent change in the main content corpus sounds like it ought to change a grade, and on these five pages it changed no structure check at all. That is worth stating plainly, because it is the part of this finding that is least convenient for the product.

Four structure checks read the extracted text. The heading count was identical before and after on every page, at 28 for astro.build, 96 for gymshark.com, 9 for the MDN reference, 7 for webflow.com and 26 for the Wikipedia article, because headings are one of the three tags that confer main status on their own and therefore survive the ablation untouched. The h1 count was likewise unchanged, at one each for astro.build, gymshark.com and the MDN reference and zero for the other two. Heading coverage, which requires roughly one heading per 300 words of main content under the wordsPerHeading setting in core/src/config.ts, passed on all five pages in both runs, although the requirement it had to clear fell from 7 headings to 4 on webflow.com and from 25 to 24 on the Wikipedia article. No text block exceeded the 1,200 token ceiling in either run.

The parity fallback did not fire either. When a main corpus falls below NEAR_EMPTY_TOKENS, set to 30 in core/src/config.ts, parity is recomputed against all non boilerplate text and the report says so. The smallest corpus after the ablation was 613 words on astro.build, twenty times the threshold, so no page came close. Those three numbers are settings someone chose, not measurements, and quoting them as findings would be a category error.

What this leaves is an instrument whose most expensive input can move by 12 percent while every check reading it reports the same result. That is a gap between what is measured and what is scored, and it belongs in the open alongside [the crawlability study](https://lantad.co/research/crawlability-study) and the reasoning behind [why we withhold a grade](https://lantad.co/blog/why-we-withhold-a-grade) when the evidence is not there. An honest account of [AI visibility](https://lantad.co/glossary/ai-visibility) has to include the places where the number and the reality are only loosely coupled, which is also the caution to carry into any checklist for [getting cited in ChatGPT](https://lantad.co/how-to-get-cited/chatgpt).

## What to check on your own page

The practical reading of this is not that the main element is pointless. It is that its value to a text extractor depends entirely on what else the page is made of, and that is something a person can check in a minute without any tooling.

Open the page source and find a paragraph of your real content. If it is wrapped in a p element, and your lists are li elements, and your headings are h1 through h6, then the main landmark is redundant to this scanner and probably to anything else reading positionally, and adding it buys accessibility and skip link behaviour rather than retrieval. If your content sits in a stack of divs with classes on them, the landmark is load bearing, and on the evidence here it can be carrying two fifths of what a reader would call the article.

The second check follows from the fifteen boilerplate elements found inside main across this corpus. A main element wrapped around the entire page body, navigation included, tells a positional reader nothing, because the rule that separates chrome from content is applied inside it and not suspended by it. The landmark earns its keep when it excludes something.

Which of the two situations you are in is largely decided by tooling rather than intention, which is why the per stack notes on this site are written the way they are. A component that renders a paragraph is doing the work already, and the guidance for [Next.js](https://lantad.co/fix/nextjs) and for [React](https://lantad.co/fix/react) turns on rendering rather than on markup vocabulary. A visual builder is likelier to emit generic containers, which is the situation the [Framer notes](https://lantad.co/fix/framer) address, and a themed storefront depends on which parts of the theme a merchant has edited, which is what the [Shopify notes](https://lantad.co/fix/shopify) cover.

The limits here are the usual ones and they are real. Five pages captured on one day are not a sample of the web. Two are documentation, two are marketing homepages and one is a storefront. The gymshark.com capture is exactly 3,145,728 bytes, the 3 MiB cap set in core/src/config.ts, so its raw HTML was truncated and its figures are floors rather than totals, which matters most for the page that showed the smallest effect. The ablation is a text substitution over stored HTML rather than a refetch. And nothing here observed a crawler or queried an engine, so none of it is evidence about how GPTBot, ClaudeBot, PerplexityBot or any other agent treats a main element.

## Questions and answers

**Does adding a main element improve AI visibility?**

Nothing here measured any answer engine, so this post cannot say. What it can say is what the element was worth to this scanner on five real pages: 1,665 words of a 13,615 word main content corpus, or 12.2 percent, and that figure ranged from 43.1 percent on one page to 1.0 percent on another. The deciding factor was whether the page already wrote its prose into paragraphs and list items, which the extractor counts as main content wherever they sit.

**How many main elements should a page have?**

One. MDN's reference for the main element, last modified 24 April 2026, states that a document must not have more than one main element that does not carry the hidden attribute, and all five pages in this corpus carry exactly one. ARIA in HTML, a W3C Recommendation dated 11 August 2026, adds that the implicit ARIA role is main and that writing role=main out explicitly is not recommended. None of the five writes it out.

**Does Lantad treat article the same as main?**

Yes, and this post argues that is worth revisiting. MAIN_CONTAINER_TAGS in core/src/extract.ts holds main and article, read on 26 August 2026. On these five pages that equivalence was worth nothing: rewriting all 42 article elements as plain divs while leaving main in place changed the main word count by zero, because 34 of them already sat inside main and the remaining 8 sat inside a header, where the boilerplate rule wins.

**Will a main element change my Lantad score?**

On these five pages it changed no structure check at all. The heading count, the h1 count, heading coverage and the oversized block check returned identical results before and after the ablation on every page, and the near empty parity fallback never fired. The landmark moved the corpus that prose parity is computed on without moving any check that reads the word count, which is recorded here as a gap between what is measured and what is scored.

---

Lantad measures whether AI crawlers can actually read a page: it fetches as a non-rendering
crawler, renders as a browser, and reports the gap. Free scan, one URL, no signup.

Method and weights: https://lantad.co/methodology | All pages as markdown: https://lantad.co/md | Crawler policy: https://lantad.co/bot
