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.
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:
| Consequence | What happens |
|---|---|
| Cost | Customer pays 10–100× more tokens than necessary per request. |
| Latency | Context window fills with noise; useful answers come slower. |
| Hallucination | Signal-to-noise drops; LLM more likely to invent pricing, features, dates. |
Typical numbers
| Stack | Sample page | React Tax |
|---|---|---|
| Next.js + Tailwind | Stripe pricing | ~97% |
| Next.js + Tailwind | Vercel docs | ~95% |
| Svelte / SvelteKit | Various | 85–92% |
| Plain HTML | MDN article | ~30% |
| llms.txt response | Any | ~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.
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.