The Plain Fetch viewer
In short
The viewer requests a URL the way a plain-fetch agent does: no JavaScript, one request for HTML, one for markdown, one for llms.txt and one for a path that should not exist. It shows the initial HTML on the left, the readable text on the right, and seven flags underneath.
Pre-loaded with www.wikipedia.org, read 4 November 2026. Type any public URL to run your own.
The page answers a plain fetch: 4 of 6 checks found.
Initial HTML what a plain fetch receives
<!DOCTYPE html>
<html lang="en" class="C1E5da_variable" data-selected-language="typescript">
<head>
<meta charSet="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
[... 33 more head elements folded ...]
<title>Documentation - Mistral AI | Mistral Docs
</title>
<meta name="description" content="Learn how to deploy and use Mistral AI's Large Language Models with our comprehensive documentation, guides, and tutorials."/>
[... 18 more head elements folded ...]
</head>
<body>
<div hidden=""><!--$--><!--/$-->
</div>
<script>[... 527 characters folded ...]
</script>
<div data-vaul-drawer-wrapper="true">
<header class="flex items-center sticky top-0 h-header z-100 max-w-[1920px] px-sides w-full mx-auto pointer-events-none gap-">
<div class="lg:w-[calc(var(--sidebar-width)-var(--sides))]">
<div class="flex items-center gap-2"><span class="group-focus-visible:opacity-90 transition-opacity cursor-pointer pointer-events-auto"><a href="/">
<div data-state="closed" data-slot="context-menu-trigger" style="-webkit-touch-callout:none"><span class="size-8 flex items-center justify-center bg-foreground/10 rounded-md hover:bg-foreground/20 transition-colors">
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48" fill="none" class="size-4 w-auto">[... 328 characters folded ...]
</svg></span>
</div></a></span><button class="group flex items-center gap-3 justify-start h-10 max-w-max pointer-events-auto hover:opacity-80 transition-opacity rounded-md px-1 -mx-1 outline-none ring-0" type="button" id="radix-_R_iraivb_" aria-haspopup="menu" aria-expanded="false" data-state="closed"><span class="flex items-center gap-1 group-focus-visible:translate-x-0.5 transition-transform group-focus-visible:ring-2 group-focus-visible:ring-muted-foreground/10 rounded-lg ring-offset-2"><span class="font-bold text-foreground transition-colors text-sm lg:text-base whitespace-nowrap group-focus-visible:">Docs & API</span>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down size- [... 89 characters folded ...]><path d="m6 9 6 6 6-6"></path>
</svg></span></button>
</div>
</div>
<div class="flex-1 justify-end gap-2 h-full flex items-center lg:hidden pointer-events-auto shrink">
<div class="max-w-40 w-full" type="button"><button data-slot="button" class="gap-2 whitespace-nowrap transition-base disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:sh [... 477 characters folded ...]>
<div class="flex min-w-0 items-center gap-2">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" class="h-4 w-4 shrink-0">[... 312 characters folded ...]
</svg><span class="truncate">Search docs</span>
</div>
<div class="flex shrink-0 items-center gap-1"><span class="inline-flex items-center justify-center font-mono font-medium rounded text-foreground select-none h-6 min-w-6 px-1.5 text-xs bg-background shadow-[inset_-1px_-1px_1px_0_rgba(0,0,0,0.25),0_0_0_0.5px_rgba(0,0, [... 101 characters folded ...]>⌘K</span>
</div></button>
</div><button data-slot="button" class="inline-flex items-center justify-center whitespace-nowrap text-sm font-bold transition-base disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:no [... 484 characters folded ...]>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu group-data-[state=open]:hidden size-5" aria-hidden="true"><path d="M4 12h16"></path><path d="M4 18h16"></path><path d="M4 6h16"></path>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-x group-data-[state=closed]:hidden size-5" aria-hidden="true"><path d="M18 6 6 18"></path><path d="m6 6 12 12"></path>
</svg></button>
</div>
<div class="hidden flex-1 px-2 lg:flex items-center justify-between">
<nav class="flex items-center gap-1 pointer-events-auto flex-nowrap"><a class="inline-flex gap-2 items-center px-2.5 py-1.5 text-sm rounded-md transition-colors duration-150 whitespace-nowrap font-medium text-foreground/70 hover:text-foreground" href="/vibe"><span class="inline-block size-2 bg-foreground/20 transition-colors"></span><span class="inline-flex flex-col items-start after:content-[attr(data-label)] after:font-bold after:h-0 after:invisible after:overflow-hidden" data-label="Vibe">Vibe</span></a><a class="inline-flex gap-2 items-center px-2.5 py-1.5 text-sm rounded-md transition-colors duration-150 whitespace-nowrap font-medium text-foreground/70 hover:text-foreground" href="/studio"><span class="inline-block size-2 bg-foreground/20 transition-colors"></span><span class="inline-flex flex-col items-start after:content-[attr(data-label)] after:font-bold after:h-0 after:invisible after:overflow-hidden" data-label="Studio">Studio</span></a><a class="inline-flex gap-2 items-center px-2.5 py-1.5 text-sm rounded-md transition-colors duration-150 whitespace-nowrap font-medium text-foreground/70 hover:text-foreground" href="/inference"><span class="inline-block size-2 bg-foreground/20 transition-colors"></span><span class="inline-flex flex-col items-start after:content-[attr(data-label)] after:font-bold after:h-0 after:invisible after:overflow-hidden" data-label="Inference & Models">Inference & Models</span></a><a class="inline-flex gap-2 items-center px-2.5 py-1.5 text-sm rounded-md transition-colors duration-150 whitespace-nowrap font-medium text-foreground/70 hover:text-foreground" href="/admin"><span class="inline-block size-2 bg-foreground/20 transition-colors"></span><span class="inline-flex flex-col items-start after:content-[attr(data-label)] after:font-bold after:h-0 after:invisible after:overflow-hidden" data-label="Admin">Admin</span></a><a class="inline-flex gap-2 items-center px-2.5 py-1.5 text-sm rounded-md transition-colors duration-150 whitespace-nowrap font-medium text-foreground/70 hover:text-foreground" href="/resources"><span class="inline-block size-2 bg-foreground/20 transition-colors"></span><span class="inline-flex flex-col items-start after:content-[attr(data-label)] after:font-bold after:h-0 after:invisible after:overflow-hidden" data-label="Resources">Resources</span></a><a class="inline-flex gap-2 items-center px-2.5 py-1.5 text-sm rounded-md transition-colors duration-150 whitespace-nowrap font-medium text-foreground/70 hover:text-foreground" href="/api"><span class="inline-block size-2 bg-foreground/20 transition-colors"></span><span class="inline-flex flex-col items-start after:content-[attr(data-label)] after:font-bold after:h-0 after:invisible after:overflow-hidden" data-label="API Reference">API Reference</span></a>
</nav>
<div class="flex items-center justify-end gap-3">
<div class="w-64 pointer-events-auto"><button data-slot="button" class="gap-2 whitespace-nowrap transition-base disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:sh [... 477 characters folded ...]>
<div class="flex min-w-0 items-center gap-2">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" class="h-4 w-4 shrink-0">[... 312 characters folded ...]
</svg><span class="truncate">Search docs</span>
</div>
<div class="flex shrink-0 items-center gap-1"><span class="inline-flex items-center justify-center font-mono font-medium rounded text-foreground select-none h-6 min-w-6 px-1.5 text-xs bg-background shadow-[inset_-1px_-1px_1px_0_rgba(0,0,0,0.25),0_0_0_0.5px_rgba(0,0, [... 101 characters folded ...]>⌘K</span>
</div></button>
</div><button data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-bold transition-base disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-n [... 500 characters folded ...]>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-globe size-5" aria-hidden="true">[... 131 characters folded ...]
</svg></button><button data-slot="button" class="inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-bold transition-base disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [& [... 482 characters folded ...]><span class="inline-flex items-center justify-center font-mono font-medium rounded text-foreground select-none min-w-8 px-2.5 text-sm bg-background shadow-[inset_-1px_-1px_1px_0_rgba(0,0,0,0.25),0_0_0_0.5px_rgba(0,0,0,0. [... 214 characters folded ...]></span>
<div class="size-8 z-10 flex items-center justify-center transition-opacity duration-300 dark:opacity-50 pointer-events-auto">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sun size-4" aria-hidden="true">[... 297 characters folded ...]
</svg>
</div>
<div class="size-8 z-10 flex items-center justify-center transition-opacity duration-300 opacity-50 dark:opacity-100 pointer-events-auto">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon size-4" aria-hidden="true">[... 128 characters folded ...]
</svg>
</div><span class="sr-only">Toggle theme</span></button><a target="_blank" data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-bold transition-base disabled:pointer-events-none disabled:opacity-50 [&_svg]:point [... 511 characters folded ...]>Reach out</a><a target="_blank" rel="noopener" data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-bold transition-base disabled:pointer-events-none disabled:opacity-50 [& [... 520 characters folded ...]>Try Studio<!-- -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" class="size-5">[... 236 characters folded ...]
</svg></a>
</div>
</div>
</header>
<div class="relative bg-background rounded-lg border border-border/50 flex flex-col items-center flex-1 min-w-0 lg:contents border-b-0 overflow-hidden max-lg:overflow-y-auto h-[calc(100dvh-var(--header))] rounded-b-none">
<div class="max-w-[1920px] w-full mx-auto">
<div data-slot="sidebar-wrapper" style="--sidebar-width:16rem;--sidebar-width-icon:3rem" class="group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full max-lg:px-inner-sides">
<div data-slot="sidebar" class="text-sidebar-foreground flex w-(--sidebar-width) flex-col px-sides max-lg:hidden h-fold sticky top-header overflow-y-auto scrollbar-none shrink-0">
<div data-slot="sidebar-header" data-sidebar="header" class="flex flex-col gap-2 pt-2 pb-6 sticky top-0 z-10 bg-gradient-to-b from-muted via-muted/80 via-85% to-muted/0 max-lg:hidden">
</div>
<div data-slot="sidebar-content" data-sidebar="content" class="space-y-2 group-data-[collapsible=icon]:overflow-hidden">
<div data-slot="sidebar-group" data-sidebar="group" class="relative flex w-full min-w-0 flex-col py-2">
<div data-slot="sidebar-group-label" data-sidebar="group-label" class="font-mono uppercase font-semibold text-sidebar-foreground ring-sidebar-ring h-8 shrink-0 rounded-md text-xs outline-hidden transition-[margin,opacity [... 229 characters folded ...]><a class="flex items-center gap-1.5 transition-colors text-foreground font-bold" href="/">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" class="size-3.5" aria-hidden="true">[... 414 characters folded ...]
</svg>Home</a><span class="block flex-1 h-px ml-2 bg-foreground/20"></span>
</div>
</div>
<div data-slot="sidebar-group" data-sidebar="group" class="relative flex w-full min-w-0 flex-col py-2" id="getting-started">
<div data-slot="sidebar-group-label" data-sidebar="group-label" class="font-mono uppercase font-semibold text-sidebar-foreground ring-sidebar-ring h-8 shrink-0 rounded-md text-xs outline-hidden transition-[margin,opacity [... 229 characters folded ...]><a class="flex items-center gap-1.5 transition-colors text-foreground font-bold" href="/">Getting started</a><span class="block flex-1 h-px ml-2 bg-foreground/20"></span>
</div>
<div data-slot="sidebar-group-content" data-sidebar="group-content" class="w-full text-sm pt-4">
<ul data-slot="sidebar-menu" data-sidebar="menu" class="flex w-full min-w-0 flex-col">
<li data-slot="sidebar-menu-item" data-sidebar="menu-item" class="group/menu-item relative"><a data-slot="sidebar-menu-button" data-sidebar="menu-button" data-size="default" data-active="false" data-state="off" class="peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md py-1.5 px-2 text-le [... 934 characters folded ...]><span class="truncate">Platform overview</span>
<div class="group-data-[state=on]:block hidden ml-auto pr-1">
<div class="size-[7px] bg-primary">
</div>
</div></a>
</li>
<div data-state="open" class="group/collapsible">
<li data-slot="sidebar-menu-item" data-sidebar="menu-item" class="group/menu-item relative">
<div class="flex items-center">
<div class="relative w-full h-full flex items-center"><button data-slot="sidebar-menu-button" data-sidebar="menu-button" data-size="default" data-active="false" data-state="off" class="peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md py-1.5 px-2 te [... 903 characters folded ...]>Quickstarts</button><button class="py-0.5 pl-1 pr-2 hover:text-foreground text-foreground/50 rounded-md ml-1 absolute right-0 top-1/2 -translate-y-1/2 h-full flex items-center justify-center cursor-pointer touch-manipulation z-10" type="button" aria-controls="radix-_R_2nj5tdaivb_" aria-expanded="true" data-state="open">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" class="h-4 w-4 transition-transform rotate-90">[... 333 characters folded ...]
</svg></button>
</div>
</div>
<div data-state="open" id="radix-_R_2nj5tdaivb_">
<ul data-slot="sidebar-menu-sub" data-sidebar="menu-sub" class="border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l my-0.5 [&_[data-slot="sidebar-menu-button"][data-active=" [... 136 characters folded ...]>
<div data-state="closed" class="group/collapsible">
<li data-slot="sidebar-menu-item" data-sidebar="menu-item" class="group/menu-item relative">
<div class="flex items-center">
<div class="relative w-full h-full flex items-center"><button data-slot="sidebar-menu-button" data-sidebar="menu-button" data-size="default" data-active="false" data-state="off" class="peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md py-1.5 px-2 te [... 903 characters folded ...]>Vibe Work</button><button class="py-0.5 pl-1 pr-2 hover:text-foreground text-foreground/50 rounded-md ml-1 absolute right-0 top-1/2 -translate-y-1/2 h-full flex items-center justify-center cursor-pointer touch-manipulation z-10" type="but [... 85 characters folded ...]>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" class="h-4 w-4 transition-transform">[... 333 characters folded ...]
</svg></button>
</div>
</div>
<div data-state="closed" id="radix-_R_3anj5tdaivb_" hidden="">
</div>
</li>
</div>
<div data-state="closed" class="group/collapsible">
<li data-slot="sidebar-menu-item" data-sidebar="menu-item" class="group/menu-item relative">
<div class="flex items-center">
<div class="relative w-full h-full flex items-center"><button data-slot="sidebar-menu-button" data-sidebar="menu-button" data-size="default" data-active="false" data-state="off" class="peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md py-1.5 px-2 te [... 903 characters folded ...]>Vibe Code</button><button class="py-0.5 pl-1 pr-2 hover:text-foreground text-foreground/50 rounded-md ml-1 absolute right-0 top-1/2 -translate-y-1/2 h-full flex items-center justify-center cursor-pointer touch-manipulation z-10" type="but [... 85 characters folded ...]>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" class="h-4 w-4 transition-transform">[... 333 characters folded ...]
</svg></button>
</div>
</div>
<div data-state="closed" id="radix-_R_5anj5tdaivb_" hidden="">
</div>
</li>
</div>
<div data-state="closed" class="group/collapsible">
<li data-slot="sidebar-menu-item" data-sidebar="menu-item" class="group/menu-item relative">
<div class="flex items-center">
<div class="relative w-full h-full flex items-center"><button data-slot="sidebar-menu-button" data-sidebar="menu-button" data-size="default" data-active="false" data-state="off" class="peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md py-1.5 px-2 te [... 903 characters folded ...]>Studio</button><button class="py-0.5 pl-1 pr-2 hover:text-foreground text-foreground/50 rounded-md ml-1 absolute right-0 top-1/2 -translate-y-1/2 h-full flex items-center justify-center cursor-pointer touch-manipulation z-10" type="but [... 85 characters folded ...]>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" class="h-4 w-4 transition-transform">[... 333 characters folded ...]
</svg></button>
</div>
</div>
<div data-state="closed" id="radix-_R_7anj5tdaivb_" hidden="">
</div>
</li>
</div>
<div data-state="closed" class="group/collapsible">
Shown with 188 long blocks (scripts, styles, long tags) folded into a marker that says how many characters they hide; line breaks added before block tags because the source is minified; the pane stops after the first 200 words; the page is 747 KB.
Reading view the text a plain-fetch client can extract
title: Documentation - Mistral AI | Mistral Docs
Mistral AI Documentation
Docs & API Search docs ⌘K Vibe Studio Inference & Models Admin Resources API Reference Search docs ⌘K Toggle theme Reach out Try Studio Home Getting started Platform overview Quickstarts Vibe Work Vibe Code Studio Inference Admin Glossary ↗ SDK Clients ↗ API Reference ↗ Getting started Mistral AI Documentation All our documentation in your hands: build, customize, and deploy AI, your way. Vibe Studio Models Admin Discover our platform Copy section link Discover our platform Three products, one platform. Pick where you want to start. Vibe The unified agent for productivity and coding. Chat with it on the web or mobile, or run it in your terminal and editor. Studio The developer console and the Mistral API. Keys, the Playground, evaluations, agents, and SDKs to ship applications. Admin The control plane for organization setup, billing, SSO, Workspaces, and access policies. Compare our products Latest models Copy section link Latest models Mistral Large 4 Mistral Ecosystem Open Weight License A state-of-the-art, open-weight, general-purpose multimodal model. v 26.10 Z.ai GLM 5.3 MIT A third-party open weight text model from Z.ai with a 1M-token context window. v 5.3 Z.ai GLM 5.3 Flash MIT A third-party multimodal model from Z.ai with a 1M-token
913 more words follow in the initial HTML.
| Check | Result | Detail |
|---|---|---|
| H1 in the initial HTML | Found one H1 | First H1: Mistral AI Documentation |
| First 200 words in the initial HTML | Found 200 of 200 words | The initial HTML carries 1113 words of visible text; the first 200 are marked in the left pane. |
| llms.txt present and linked | Found present and linked | 102192 bytes, 547 links. Structure grade A (6 of 6). The home page links it, which is how agents reached it in Ora's lab. |
| Markdown on request | Missing 200 text/html | Accept: text/markdown returned 200 with text/html; charset=utf-8. The server ignores the header. |
| Status of a made-up path | Found 404 | /agent-ready-html-missing-path-check returned 404: a real status code for a missing page. |
| JSON-LD types | Missing none | No JSON-LD block on the home page. Ora's lab found it made no difference when the answer was already in the HTML; Google says it is not needed for AI features. |
| OpenAPI link | Note none on the home page | No OpenAPI link on the home page. It matters only for a site that ships an API. |
Run the full check
The viewer read one page with four requests. The full check we recommend next is Ora's scan. Its Access layer runs 42 checks worth 30 of its 100 points, among them content without JavaScript, bot detection, llms.txt, markdown on request, JSON-LD and the sitemap (Ora's check catalogue, contract 1.38.0, read 5 November 2026). Open Ora's report for docs.mistral.ai.
Limits: Ora reads public URLs only, says two runs of one scan land within a couple of points without publishing repeat-scan data, and keeps the product that fixes what it finds behind a waitlist. Cloudflare's scanner at isitagentready.com is a quick free alternative, and Mintlify's score covers documentation.
What the viewer does
It sends four plain GET requests with the user agent Mozilla/5.0 (compatible; agent-readiness-crawl/1.0): the URL itself, the same URL with Accept: text/markdown, /llms.txt on the same host, and a made-up path at the root. It runs no JavaScript. The left pane is the first bytes of the HTML as text, with long scripts and styles folded into a marker that says how many characters they hide. The H1 and the first 200 words of visible text are marked in both panes. The flags under the panes say what the four responses added up to.
Limits
- Ten seconds for all four requests together, 1.5 MB read from the home page, at most five redirects, each one checked again.
- http and https only, default ports only. Private, local and internal addresses and names are refused.
- Ten runs per address per minute. The counter lives in memory on the edge function, so it is per instance rather than global. Past ten you get a 429 with a Retry-After header.
- Results are cached for 24 hours by the response headers. Nothing is written to a database: the viewer keeps the first 200 words and the extracted fields for the length of the request and keeps no page body beyond that.
What it does not tell you
A plain fetch from this server is not a real agent. Bot protection weighs the source address more than the user agent, so a page that answers 200 here can still refuse an agent, and the reverse. Ora's lab found (2026-10-19) that returning 403 to agent user agents and hiding the answer in JavaScript were the only two of 19 configurations that stopped retrieval; the viewer can see the second, and can only hint at the first. The initial HTML reference covers both. The server logs and the published crawler address ranges settle the first.
The seven flags
- H1 in the initial HTML
- Whether the HTML the server sends already contains an H1. It is the cheapest sign that the page does not depend on scripts to say what it is.
- First 200 words in the initial HTML
- Whether at least 200 words of visible text arrive in the initial HTML. Under 40 words with an app root element is flagged as a JavaScript shell.
- llms.txt present and linked
- Whether /llms.txt answers with a plain-text file, whether the home page links it (an anchor, a link element or a Link header), and the structure grade the index uses.
- Markdown on request
- Whether a request with Accept: text/markdown comes back as text/markdown. Cloudflare Radar found 3.9 percent of scanned top sites passing this at its April 2026 launch.
- Status of a made-up path
- Whether a path that should not exist returns 404 or 410. A 200 is a soft 404 and reads as a live page.
- JSON-LD types
- The schema.org types found in JSON-LD blocks on the page. Ora's lab found JSON-LD made no difference when the answer was already in the HTML.
- OpenAPI link
- Whether the page links an OpenAPI file, by an anchor or a service-desc link relation. It matters only for a site that ships an API.
Sources
- Ora: AgentReady launch post (Ora's lab findings) https://ora.ai/blog/agentready-launch, read 4 November 2026
- Ora check catalogue, contract 1.38.0 (132 checks, 42 in the Access layer) https://ora.ai/api/checks, read 5 November 2026
- Ora home page (the fixing product is behind a waitlist) https://ora.ai/, read 5 November 2026
- Ora: Introducing Deep Scan (repeat scans) https://ora.ai/blog/introducing-deep-scan, read 5 November 2026
- Ora llms.txt (public URLs only) https://ora.ai/llms.txt, read 5 November 2026
- Vercel: Make your site readable by AI agents https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents, read 4 November 2026
- llms.txt proposal (llmstxt.org) https://llmstxt.org/, read 4 November 2026
Last reviewed 5 November 2026