Research / Explainers / 2 of 6

Three sheets that should stack

A product page states its facts on more than one surface: structured data for crawlers, visible text for people, and on Shopify a public product JSON. Fact Split reads each one and compares normalized values. This illustration stacks three invented sheets and lets you brush one field across them to see where they agree and where they do not.

  • StatusIllustration
  • Published2026-10-06
  • Example textInvented
  • Embedded onFact Split
  • State in the address?field=
  • Codelib/explainers/factsplit.ts, lib/factsplit.ts
  • Protocolv1.0

IllustrationExplainer

Three sheets that should stack

A page can tell a person one price and a crawler another.

JSON-LDwhat a crawler readsPrice64.00CurrencyUSDAvailabilityhttps://schema.org/InStockSKUHK-STLVisible textwhat a person readsPrice58.00Currency$AvailabilityIn stockSKUHK-STLShopify JSONwhat the store's own API statesPrice58.00Currencynot statedAvailabilityavailable: trueSKUHK-STL
Brush a field

PriceDisagree

JSON-LD states 6400 cents; Visible text and Shopify JSON state 5800 cents.

JSON-LD
64.00 6400 cents
Visible text
58.00 5800 cents
Shopify JSON
58.00 5800 cents5800 cents in the JSON
Illustration. The product and every string on the three sheets are invented. The verdicts are computed by the same code the Fact Split tool runs, from a page written for this figure.

The sentence it teaches

A page can tell a person one price and a crawler another.

Method

  1. Each sheet lists the raw string exactly as that surface states it. Nothing is reformatted before you see it.
  2. A verdict is formed only after normalization: a price becomes integer cents, a currency symbol becomes a set of candidate codes, a stock phrase becomes one of a few states, and a SKU is lowercased.
  3. Disagree means at least two surfaces normalize to different values. A field stated on fewer than two surfaces gets no verdict at all.
  4. Brushing a field highlights its row on every sheet and prints the normalized values beside the verdict.

What this does not show

  • It does not show how often real pages disagree. The denominator the tool will publish is stated on its page, and no run exists yet.

State in the address

The figure keeps its state in the query string, so a particular view can be linked and the page still renders completely without it.

  • ?field= the brushed field: price, currency, availability or sku

The same figure is embedded on the Fact Split tool page.

Cite this explainer

OptiVis Labs. Three sheets that should stack (explainer). 2026. https://optivisai.org/research/explainers/fact-split

@misc{optivislabs2026explainerfactsplit,
  title = {Three sheets that should stack (explainer)},
  author = {{OptiVis Labs}},
  year = {2026},
  month = oct,
  howpublished = {\url{https://optivisai.org/research/explainers/fact-split}},
  note = {A page can tell a person one price and a crawler another. Illustration with invented example text.}
}