React Tax

The ratio of framework noise to semantic content in a typical modern web page.

What it is

Modern frontend frameworks (React, Vue, Svelte, etc.) ship hundreds of kilobytes of structural markup per page — class soup, hydration JSON, animation wrappers, tracking pixels, framework runtime. Inside that, the actual semantic content (the words and numbers a human would read or quote) is usually just a few kilobytes.

formula
ReactTax = (1 − visible_text_bytes / total_html_bytes) × 100%

Why it matters for AI

When an AI agent (GPTBot, ClaudeBot, Perplexity, a Claude Code session running yours) reads a page, it consumes the whole HTML payload — every Tailwind class, every hydration script. The agent pays for those tokens. Two consequences:

ConsequenceWhat happens
CostCustomer pays 10–100× more tokens than necessary per request.
LatencyContext window fills with noise; useful answers come slower.
HallucinationSignal-to-noise drops; LLM more likely to invent pricing, features, dates.

Typical numbers

StackSample pageReact Tax
Next.js + TailwindStripe pricing~97%
Next.js + TailwindVercel docs~95%
Svelte / SvelteKitVarious85–92%
Plain HTMLMDN article~30%
llms.txt responseAny~0%

How Onto reduces it

The cleaning engine in @ontosdk/core strips everything that isn't semantic content — class attributes, script tags, style blocks, hidden divs, framework hydration data. Headings, paragraphs, links, lists, tables, and JSON-LD structured data survive. Typical result on a Next.js page: ~95% reduction, so a 600 KB page becomes a 15–25 KB Markdown payload.

Read API customers get the reduction per-request via POST /v1/read — their input shrinks 10–100×. Serve SDK users get it at the edge — every bot that visits their site consumes a clean payload instead of the bloated HTML.