# Onto — AI is reading your website wrong.
> Onto serves clean Markdown to AI agents instead of HTML noise. Same content, right format. One line of code. No changes to your site.

**Source:** /scoring
**Extracted:** 2026-05-21T20:21:00.615Z

---
Methodology

## The AIO Score.

Agent Input Optimization. The standard for measuring how well AI agents can read, understand, and accurately represent your website. A single number returned by every Onto API call. The benchmark site owners use to track AI readability. The foundation Layer 3 will use to score agent-action quality.

01 — Score ranges

### What your score means.

Three bands. 80+ is rare today — most sites scan in the 0 to 49 range. Across **127 sites scanned organically**, the average is **51 out of 100**. The web is broken for AI. Onto's job is to move you across the line — through the SDK on your own site, or by cleaning data on the fly through the API.

05075100

90–100Excellent

Agent-ready. Clean semantics, native Markdown layer, JSON-LD present, headings sane. AI agents read you accurately and cite you confidently. Hallucination risk: low.

75–89Good

Mostly clean. One or two soft penalties — typically the Markdown layer is unmanaged or schema is partial. Agents still extract reliable facts. Hallucination risk: low.

50–74Needs work

Multiple penalties stacking. Framework bloat or missing structured data is causing partial signal loss. Some facts will be guessed. Hallucination risk: medium.

25–49AI-hostile

Heavy React Tax, no semantic structure, no Markdown surface. AI agents hallucinate or skip your content. This is where most scanned sites land. Hallucination risk: high.

0–24Invisible

Robots.txt blocks crawlers, the page is unreachable, or every signal compounded against the score. Agents can't see you at all. Hallucination risk: high.

02 — The model

### Every URL starts at 100. _Penalties subtract._

The AIO score is subtractive, not a weighted average. Each detected issue subtracts a specific number of points, every penalty is traceable to a named cause, and the final score is plain subtraction — no opaque weights, no hidden formulas. Same engine whether you call the API, install the SDK, or scan a competitor.

score = **100** − Σ penalties · // floored at 0, fatal blocks return 0

cap −100

#### Access

Can an agent even reach the page?

Access is checked first because it's fatal. If a crawler can't get to you, no other signal matters. The scorer reads robots.txt and watches for WAF blocks at fetch time.

*   Robots.txt disallows GPTBot / \*−100
*   WAF returns 403 / 401 to crawler UA−25

cap −35

#### Payload

How much of what you send is signal?

How agent-readable the payload is. Either you ship a Markdown surface, or your HTML is mostly semantic text. Both paths are accepted. What's not accepted is shipping a 600 KB framework wrapper around 2 KB of content with no Markdown alternative.

*   No Markdown layer (no Accept negotiation, no .md route)−25
*   Markdown present but not via Onto SDK (unmanaged)−10
*   React Tax > 85% (HTML is < 15% semantic text)−25
*   React Tax 70–85% OR raw page > 200 KB−10

cap −35

#### Structure

Does the HTML tell a structured story?

Semantic markup an agent can actually parse. JSON-LD makes entity facts machine-readable. A real heading hierarchy makes the page navigable. Alt text gives images meaning. None of this is fancy — it's the HTML spec from 2014.

*   No JSON-LD schema anywhere on the page−20
*   Fewer than 2 headings (h1 / h2 / h3)−10
*   Each batch of images missing alt text−5

03 — What every scan checks

### Nine checks. One number.

Each scan pulls real headers, real markup, real robots.txt. Nothing simulated. Returned via the public API in seconds — cache hits in under 100 ms — or through the AIO Score scanner UI for non-technical users.

*   Robots.txt access for AI crawlers
*   WAF behavior on bot User-Agents
*   Markdown layer (Accept negotiation or .md route)
*   Onto SDK presence on the source
*   React Tax: HTML size vs semantic text ratio
*   Raw page size
*   JSON-LD schema markup
*   Heading hierarchy (h1 / h2 / h3 count)
*   Image alt-text coverage

04 — Where the score lives

### One score. _Three places._

The AIO Score isn't a one-off scanner number — it's the metric embedded in every Onto product. Same formula in the scanner, the API response, and the SDK build report. Layer 3 will use it as the action-reliability predictor.

*   01Surface 01 · Free scanner
    
    ### In the free scanner
    
    Drop a URL into buildonto.dev. Get your full AIO breakdown in seconds. No signup. The fastest way for a site owner to see where they stand.
    
*   02Surface 02 · Read API
    
    ### In the Read API
    
    Every response from api.buildonto.dev/v1/read includes the AIO score and pillar breakdown for the source page. AI developers know the accuracy floor of the content their agent just received — without having to evaluate it separately.
    
*   03Surface 03 · SDK
    
    ### In the SDK
    
    Site owners installing @ontosdk/next see their AIO score as a build-time metric. CI integrations flag regressions before deploy. The score becomes a tracked quality metric, like Lighthouse but for AI readability.
    
*   04Surface 04 · Layer 3 action verificationFuture · Q3 2026
    
    ### In Layer 3 action verification
    
    When agents act on the web through Onto's Act layer, the AIO score of the target page predicts action reliability. Pages scoring high are agent-friendly to interact with. Pages scoring low signal hallucination risk before the action is attempted. Same score. Bigger surface.
    

05 — Benchmark data

### What the web _actually scores._

127 sites scanned. Average **51 / 100**. We scanned the most well-known SaaS sites publicly. The results validate that AI readability is a real, unsolved problem across the web — including at the companies that already publicly understand it.

*   Top · Agent-ready
    
    ReResend90the only site already serving native Markdown
    
*   Strong middle · Needs work
    
    PsPlanetscale65StStripe55VcVercel55NoNotion55
    
*   AI-hostile
    
    RaRaycast45CaCal.com45LnLinear202,195 KB page · 5.2% real content
    
*   Blocked entirely
    
    FiFigma0robots.txt blocks AI crawlersLoLoom0robots.txt blocks AI crawlers
    

The pattern

The companies that publicly understand this problem — Vercel publishing the _99% reduction_ blog post, Cloudflare shipping Markdown for Agents — still score in the AI-hostile or middle range on their own sites. Knowing the problem isn't the same as solving it. The infrastructure layer to actually fix it is what Onto ships.

For AI developers

#### Want the AIO score on every URL your agent reads?

One API call. Score + clean Markdown returned together.

[Read the API docs](https://docs.buildonto.dev/api/read-and-score)

For site owners

#### What's your AIO score?

Enter any URL. Full breakdown in seconds.

[Scan now](/scanner)

[How Onto fixes a low score](/how-it-works)

---
## Structured Data (JSON-LD)
```json
{
  "@context": "https://schema.org",
  "@type": "HowTo",
  "name": "AIO Score Calculation Methodology",
  "description": "AI Optimization (AIO) Score measures how well a website is optimized for AI agents and LLM crawlers. Scored out of 100 points based on three core pillars.",
  "step": [
    {
      "@type": "HowToStep",
      "name": "React Tax (Token Efficiency)",
      "text": "Measures the ratio of useful content to total page weight. Weight: 40%. Sites with high \"React Tax\" (heavy JS/HTML/CSS noise) score lower as they consume more tokens for less information.",
      "position": 1
    },
    {
      "@type": "HowToStep",
      "name": "Semantic Richness",
      "text": "Evaluates the presence of structured metadata (JSON-LD), semantic HTML tags (<main>, <article>), and proper heading hierarchy. Weight: 35%. Essential for confident AI extraction.",
      "position": 2
    },
    {
      "@type": "HowToStep",
      "name": "Content Negotiation",
      "text": "Tests whether your server can negotiate and serve optimized Markdown payloads directly to AI agents via the Accept: text/markdown header. Weight: 25%.",
      "position": 3
    }
  ]
}
```
