GEO-042·Issue 04·Technical Foundation·42 / 132

Help AI Extract Correctly: HTML Semantics and Paragraph Boundaries

AI extracts DOM blocks, not your layout. Fix heading hierarchy, spec tables, and paragraph boundaries so answers quote your page instead of guessing.

5 min readGEOTechnical Foundationcross-border

Issue focusAnswer Units: Writing Category and Product Pages for GEO

Thursday morning, a US-facing DTC seller of portable power stations gets a screenshot from support. A buyer asked ChatGPT which unit would run a CPAP machine and a laptop for two nights off-grid. The answer names three models; beside their unit, the spec line reads “capacity not specified.” The page does say 1,024 Wh — inside a div grid, “Capacity” in one span, “1024” in a second, “Wh” on its own line, plus a duplicate block CSS hides on mobile. Nothing was missing. Nothing was legible to the machine.

Extraction follows the blocks your DOM declares, not the layout buyers see: semantic tags decide where the cut lands, and paragraph boundaries decide what survives it.

Extraction cuts blocks, not screens

An extraction pipeline fetches HTML, strips boilerplate, segments the rest into blocks, then selects those that answer the question. The third stage never reads your stylesheet.

Segmentation uses element boundaries — h1–h6, p, li, table, main, article. A div class="spec-title" is a container, not a heading, so its text merges into the next one. Font size and weight are invisible: the label looks like a subhead and behaves like a stray phrase.

Order breaks next. CSS order, absolute positioning, and duplicate mobile/desktop DOM decouple source from visual order. On screen the price sits under the title; in source it may sit above it, or appear twice. The extractor reads the file, the buyer reads the render; both are right, unless the crawler never runs JavaScript.

Fix boundaries, not tag count

A handful of elements carry the value. Sprinkling article and section over 300-word paragraphs changes nothing.

TodayWhat extraction receivesChange to
div class="h2" used as a subheadBare text glued to the previous blockh2 / h3
Spec grid built from divsKey and value may swap order or mergetable with th scope="row"
Price in a span, currency in anotherAn amount with no unit, or two factsOne element: $1,299 USD
Claims split by <br>One long paragraphul > li, one claim each
FAQ injected on clickAbsent from source at fetch timedetails / summary

Disable CSS and read the page: if it still reads as a document, extraction has something to work with.

Two rows matter most. Keep amount and currency in one element, or the number has no denomination. An FAQ injected on click is absent at fetch time; details keeps it in the DOM while collapsed.

One answer per block, one fact per sentence

Missing tags are the visible failure. The expensive one is a paragraph carrying three answers.

Extractors cut at token windows. When one closes mid-paragraph, the conclusion may land in the dropped half. A block covering capacity, weight, and use case leaves a model two options: quote it all, too long, or abandon it.

Three rules cover most cases: open with the answer, then two sentences of evidence; one block, one question; number, unit, and condition in one sentence — “operates from 14°F to 104°F,” not “see the table.” Resolve pronouns: “it” and “this unit” lose their referent when quoted alone.

The counter-example sits on most product pages: “premium cells, high capacity, lightweight, fast charging.” Four adjectives, zero fillable values, so the answer calls the spec unavailable — accurately, at your expense.

Rewrite in five steps, source first

Sequence matters more than effort: read source, fix prose, then change tags. The reverse order yields correct markup, unchanged paragraphs, and a re-test showing nothing — after which teams blame semantic HTML.

StepActionOwnerPasses when
1 Read sourcecurl core pages with JS off; confirm title, price, specs, FAQ sit in the HTML in reading orderEngineeringKey fields readable without interaction
2 Map blocksOne H2 per question, H3 for sub-questions, three paragraphs maximumContentThe block answers alone
3 Fix sentencesAnswer first, one idea per paragraph, values with unitsContentA sentence fits one table row
4 Swap tagsSpecs to table, claims to li, collapsed content to detailsFrontendExtracted text still pairs label with value
5 RetestRe-run the same prompts; compare answer sentencesGrowthSentence-level overlap, not a mention

Step 2 is skipped most and costs most. Without a block map, step 4 is cosmetic: the table is real, the row is a run-on sentence, and the answer still says “not specified.”

Example: one spec block, before and after

Example — a fictional 1,024 Wh power station listing; figures illustrative. Before, capacity, output, and operating temperature sit in three div grids, units on separate lines, the spec sheet is a JPEG, and “can it run two devices at once” needs a click. After:

<h2>What can this 1,024 Wh unit power?</h2>
<p>Rated output is 1,800 W, enough for a 1,200 W kettle and a 60 W laptop together.</p>
<table>
  <tr><th scope="row">Battery capacity</th><td>1,024 Wh</td></tr>
  <tr><th scope="row">Rated output</th><td>1,800 W</td></tr>
  <tr><th scope="row">Operating temperature</th><td>14°F to 104°F</td></tr>
</table>

No keyword was added. Each value gained a position, a unit, and a first sentence matching a buyer’s question. The spec line moves from “not specified” to three fillable rows because of structure.

Where this breaks

Marketplace-only sales. On Amazon or TikTok Shop you do not control the PDP source. Fix listing attributes and the feed first.

Thin facts. Semantics make empty claims easier to extract, and easier to spot. Without verifiable evidence, first-party evidence outranks markup.

Extractor variance. Boilerplate rules, chunk windows, and hidden-content handling differ by system. One failed extraction is not proof; check two or three entry points before rewriting.

Lazy loading. Content requested after a scroll is not in source, and no tag fixes what is absent — rendering comes before markup, see whether AI can render your store.

A ranking lift. Semantics raises the odds of accurate extraction, not entry to the candidate set; entities and evidence decide that.

This line continues on the technical foundation hub. For the paragraph-level counterpart, read the issue lead on the answer unit; for catalog-wide proof, use entity coverage sampling.

This month, do one thing: take your highest-traffic product page, curl its source, replace the spec grid with a real table, write the buyer’s most common question as that block’s first sentence, then re-ask and look for your sentence.