# AIO score · Onto
> How the AIO score works: it starts at 100 and takes points off for named faults you can fix, from a missing Markdown version to missing JSON-LD.

**Source:** /scoring
**Extracted:** 2026-09-24T18:14:20.073Z

---
Product · AIO Score

## Every point you lose has a name.

The AIO score starts at 100 and subtracts. Each point lost traces to one named fault — no Markdown version, no JSON-LD, too few headings — so the number is a list of things you can go and fix. 509 scans so far; the average is 52.

[Score your site →](#scan)[Break a page](#try)

[How it's computed ↗](https://docs.buildonto.dev/concepts/aio-score)

raycast.com_scanned 24 Sep 2026_

**45**/ 100 · AI-hostile

100

start, then subtract

8

named checks

Free

scanner, /v1/score, score\_url

Try it

### Break a page and watch the number fall.

The real rules: blocked ends it at 0, a Markdown version switches the weight checks off, and everything else adds up.

Try it · a page you can break

**90**/ 100

Excellentlow hallucination risk

1 fault, 10 points — each one named.

Can agents get in?Blocked — robots.txt shuts out GPTBot or every crawler, or a firewall turns the scan away_→ 0_

Is there a Markdown version?

None _−25_Yes, your own _−10_Yes, via the SDK _0_

Your own Markdown costs 10 because Onto can't see or manage it; the Serve SDK's costs nothing.

Without Markdown, how heavy is the page?

Mostly code _−25_Code-heavy _−10_Mostly content _0_

Page over 200 KB_−10_

Skipped — with a Markdown version, agents never see the page's weight.

StructureNo JSON-LD schema_−20_Fewer than two headings_−10_Images without alt text_−5_

Your site

### Now score yours.

The free scan runs every check below on your page — then open the full report for each fault and its fix.

ReadBatchScorefreeRead & scoreMapExtract

https://free scan

Show:MarkdownJSON

Get codeScanfree

Trystripe.com/pricingvercel.com/pricinglinear.app/pricing

Bands

### One axis, five bands.

Every penalty is a multiple of 5, so there are only 21 possible scores. Excellent is three of them — and two of those need the Serve SDK.

_fi__lo__ra__no__li__ca__st__ve__re__pl_

025507590100

**Invisible**_5 scores_**AI-hostile**_5 scores_**Needs work**_5 scores_**Good**_3 scores_**Excellent**_3 scores_

needs the Serve SDK a benchmarked homepage, 24 Sep 2026

90–100**Excellent**

Agents can read it and check its facts: a Markdown version, JSON-LD, real headings. 90 is the top without the Serve SDK; 95 and 100 need the SDK serving the Markdown.

Hallucination risk: low

Benchmarked homepages here

*   stripe.com**90**
*   vercel.com**90**
*   resend.com**90**
*   planetscale.com**90**

The checks

### 8 checks. One number.

Run in order, each with a fixed cost. Pick a real homepage and watch them run: Access can end it, and a Markdown version skips the weight checks.

stripe.comvercel.comresend.complanetscale.comnotion.comlinear.appcal.comraycast.comfigma.comloom.com

**100**/ 100

ready

Run again

**Access**Can an agent reach the page at all?

1.  01**robots.txt lets GPTBot and \* in**_else → 0_
2.  02**No firewall or challenge page**_else → 0_

**Payload**Is there a Markdown version — and if not, how heavy is the page?

1.  03**A Markdown version**_none −25 · your own −10 · SDK 0_
2.  04**Mostly content, not code**_−25 / −10 · only without Markdown_
3.  05**Page under 200 KB**_−10 · only without Markdown_

**Structure**Can meaning be recovered from the markup?

1.  06**JSON-LD schema**_−20_
2.  07**Two or more headings**_−10_
3.  08**Alt text on every image**_−5_

stripe.com's homepage, scanned 24 Sep 2026. It serves its own Markdown, so checks 04 and 05 are skipped.

Benchmarks

### Everyone ships Markdown now. Nobody manages it.

Ten homepages, scored by the free scanner on 24 Sep 2026. Seven serve a Markdown version of their own — and none clears 90, because none of those layers is served through the SDK.

1.  01**stripe.com**_685 KB → 30.6 KB as Markdown · 95.5% smaller_**90**_−10 Markdown not via the SDK_Run its checks ↑
2.  02**vercel.com**_613.7 KB → 5.7 KB as Markdown · 99.1% smaller_**90**_−10 Markdown not via the SDK_Run its checks ↑
3.  03**resend.com**_400.7 KB → 21.2 KB as Markdown · 94.7% smaller_**90**_−10 Markdown not via the SDK_Run its checks ↑
4.  04**planetscale.com**_115.8 KB → 21.5 KB as Markdown · 81.4% smaller_**90**_−10 Markdown not via the SDK_Run its checks ↑
5.  05**notion.com**_234.8 KB → 7.8 KB as Markdown · 96.7% smaller_**70**_−10 Markdown not via the SDK__−20 no JSON-LD_Run its checks ↑
6.  06**linear.app**_1,257 KB → 15.3 KB as Markdown · 98.8% smaller_**70**_−10 Markdown not via the SDK__−20 no JSON-LD_Run its checks ↑
7.  07**cal.com**_2,264.1 KB → 63.5 KB as Markdown · 97.2% smaller_**70**_−10 Markdown not via the SDK__−20 no JSON-LD_Run its checks ↑
8.  08**raycast.com**_385.1 KB → 22.4 KB as Markdown · 94.2% smaller_**45**_−25 no Markdown version__−10 page over 200 KB__−20 no JSON-LD_Run its checks ↑
9.  09**figma.com**_robots.txt shuts agents out_**0**_→ 0 robots.txt blocks agents_Run its checks ↑
10.  10**loom.com**_robots.txt shuts agents out_**0**_→ 0 robots.txt blocks agents_Run its checks ↑

Each site's homepage, scored by the free scanner on 24 Sep 2026. Every site with a Markdown version loses the same 10 — none of them serve it through the SDK.

Where to get it

### Four places, one scorer.

The same engine everywhere, scoring one of two things: the page as your site serves it, or as Onto delivers it. For most sites they agree. Here's when they don't.

stripe.com_serves Markdown_raycast.com_no Markdown_

All four say 90: stripe.com serves its own Markdown, so there's nothing for Onto's to change.

**Free scanner**_buildonto.dev · free_

scan stripe.com
← AIO 90 · Excellent

**Saved reports**_Dashboard → Reports_

stripe.com · 24 Sep 2026
← 90 · Excellent

**Read API**_POST /v1/score · free_

{ "url": "stripe.com" }
← "aio\_score": 90, "grade": "Excellent"

**MCP**_score\_url · free_

score\_url("stripe.com")
← \*\*AIO Score:\*\* 90/100 (Excellent)

Questions

### About the number.

01Why does the API give my site a different score from the scanner?

The scanner checks whether your site serves Markdown itself. The API scores the page as Onto delivers it, so its Markdown checks count Onto's own conversion — no −25 for a missing Markdown layer, and the code-weight and page-size checks are skipped. For a site without a Markdown layer the API reads higher. Use the scanner's number to see what to fix on your site.

02Why can't a site score 100?

It can, with the Serve SDK: a Markdown version you serve yourself costs 10 points, because Onto can't see or manage it, and one served by the SDK costs nothing. Without the SDK, 90 is the ceiling.

03What is hallucination risk?

One rating for the whole page, from the same facts as the score: high if agents are blocked, the score is under 50, or there's neither JSON-LD nor a heading structure; medium if the score is under 80 or any of Markdown, JSON-LD or headings is missing; low otherwise.

04Are PDFs scored?

No. PDFs have no HTML structure to grade, so the API reads their text and marks them as not scored. The same goes for JSON, CSV and plain text.

05Where do the benchmark numbers come from?

Each site's homepage, scored by the free scanner on 24 Sep 2026. A script re-runs them, so they're dated rather than typed — sites change, and so will these.

Get started

### Find out what your score is.

Free scan, no signup. Every fault comes back named.

[Score your site →](#scan)[Get an API key](https://app.buildonto.dev/signup)

Free scanner · no card · /v1/score is free too

---
## 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
    }
  ]
}
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://buildonto.dev/#org",
      "name": "Onto",
      "url": "https://buildonto.dev",
      "logo": "https://buildonto.dev/icon.png",
      "sameAs": [
        "https://x.com/buildonto",
        "https://github.com/ravixalgorithm/ontosdk"
      ]
    },
    {
      "@type": "WebSite",
      "@id": "https://buildonto.dev/#site",
      "url": "https://buildonto.dev",
      "name": "Onto",
      "publisher": {
        "@id": "https://buildonto.dev/#org"
      }
    },
    {
      "@type": "SoftwareApplication",
      "name": "Onto",
      "applicationCategory": "DeveloperApplication",
      "operatingSystem": "Web",
      "url": "https://buildonto.dev",
      "description": "Onto serves AI agents clean Markdown from your own site, at the same URL, and shows you which agents came. Plus the AIO score, a Read API and an MCP server.",
      "publisher": {
        "@id": "https://buildonto.dev/#org"
      },
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "USD",
        "description": "Free tier: 1,000 credits / month"
      }
    }
  ]
}
```
