agentready
agentreadyaudited 2026-10-14
0255075100
22
grade F · 100% coverage

Report for

example.com

https://example.com/visit site ↗

  1. Find

    blocked

  2. Understand

    blocked

  3. Act

    blocked

Survival
28
Can an agent read and act at all?
Superpower
0
WebMCP tools exposed
If WebMCP added
44
Headline with WebMCP at full marks

Do this first

ranked by severity × category weight

  1. Machine-readable structurehigh

    No structured data (JSON-LD)

    Add a JSON-LD block describing the page's primary entity.

    Show the fix

    One script tag turns guesswork into facts. Start with WebSite/Organization, then the page type (Product, Article, FAQPage…).

    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "WebSite",
      "name": "example.com",
      "url": "https://example.com/",
      "potentialAction": {
        "@type": "SearchAction",
        "target": "https://example.com/search?q={query}",
        "query-input": "required name=query"
      }
    }
    </script>
    Reference ↗
  2. WebMCP capabilityhigh

    No WebMCP tools — this is the biggest single upgrade available

    Declare a site-search tool

    Show the fix

    The declarative attributes are the cheapest path: the browser synthesizes the JSON Schema from the controls you already have.

    <form action="/search" method="get" toolname="search_site" tooldescription="Search https://example.com">
      <input name="q" type="search" toolparamdescription="Search query" required>
      <button type="submit">Search</button>
    </form>
    Reference ↗
  3. Agent discoverymedium

    No sitemap found

    Publish /sitemap.xml and reference it from robots.txt.

    Show the fix

    Most frameworks generate one; Next.js supports app/sitemap.ts.

    <?xml version="1.0" encoding="UTF-8"?>
    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
      <url><loc>https://example.com/</loc></url>
    </urlset>
    Reference ↗

Category breakdown

  • Agent discovery

    Agents have little to go on beyond the HTML itself.

    15

    weight 26.1% · confidence high

  • Machine-readable structure

    Agents must infer what this page is from prose alone.

    10

    weight 26.1% · confidence high

  • Access & renderability

    Readable, with some friction for agents.

    60

    weight 26.1% · confidence low

  • Form semantics

    No forms on this page.

    n/a

    weight 0% · confidence high

  • Actionability

    Nothing to do on this page (in the HTML).

    n/a

    weight 0% · confidence medium

  • WebMCP capabilitysuperpower

    No WebMCP tools — the single biggest upgrade available here.

    0

    weight 21.7% · confidence medium

Find

blocked

Can an agent locate this page and its entry points?

Agent discovery

15/100

Agents have little to go on beyond the HTML itself.

lowNo robots.txtAbsence means allow-all, but you lose the chance to point agents at your sitemap and declare agent policy.▶

Evidence

  • robots.txt · https://example.com/robots.txt not found

Fix

Add a minimal robots.txt with a Sitemap line.

Two lines that every crawler and agent reads first.

User-agent: *
Allow: /
Sitemap: https://example.com/sitemap.xml
Reference ↗
mediumNo sitemap foundAgents that plan multi-step tasks use the sitemap to find the right page without crawling.▶

Evidence

  • sitemap.xml · https://example.com/sitemap.xml not found and no Sitemap: line in robots.txt

Fix

Publish /sitemap.xml and reference it from robots.txt.

Most frameworks generate one; Next.js supports app/sitemap.ts.

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url><loc>https://example.com/</loc></url>
</urlset>
Reference ↗
lowNo llms.txtAn optional Markdown file that tells LLM-based agents what the site is and where the important pages are. Cheap to add; adoption by agents is still emerging.▶

Evidence

  • llms.txt · https://example.com/llms.txt not found

Fix

Add /llms.txt (Markdown).

Five minutes of work; some agents and Lighthouse's agentic audit already look for it.

# example.com

> One-paragraph description of what this site is for and who it serves.

## Key pages

- [Home](https://example.com/): what visitors can do here
- [Docs](https://example.com/docs): how to use the product
Reference ↗
lowNo feed or API description linkedNothing on the page tells an agent where structured data or an API lives.▶

Evidence

  • raw-html · No <link rel=alternate type=application/rss+xml> or OpenAPI link

Fix

Link your API description or a feed from <head>.

A single <link> makes the machine entry point discoverable without guessing URLs.

<link rel="service-desc" type="application/vnd.oai.openapi+json" href="https://example.com/openapi.json">
<!-- or -->
<link rel="alternate" type="application/rss+xml" title="Updates" href="https://example.com/feed.xml">
Reference ↗
lowNo MCP discovery filesNothing under /.well-known tells an agent whether this site exposes an MCP server. Only relevant if you run one — but if you do, this is how agents find it.▶

Evidence

  • well-known · https://example.com/.well-known/oauth-protected-resource, mcp.json, mcp/server-card.json not found

Fix

If you host an MCP server, publish /.well-known/oauth-protected-resource.

Required by the MCP authorization spec; clients use it to locate your authorization server.

{
  "resource": "https://example.com/mcp",
  "authorization_servers": ["https://auth.example.com"],
  "scopes_supported": ["read"],
  "bearer_methods_supported": ["header"]
}
Reference ↗

Understand

blocked

Can it tell what the page is without guessing?

Machine-readable structure

10/100

Agents must infer what this page is from prose alone.

highNo structured data (JSON-LD)Without schema.org markup an agent must infer what this page is — a product, an article, an organisation — from prose. That inference is where agents make mistakes.▶

Evidence

  • raw-html · No script[type=application/ld+json] found

Fix

Add a JSON-LD block describing the page's primary entity.

One script tag turns guesswork into facts. Start with WebSite/Organization, then the page type (Product, Article, FAQPage…).

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "example.com",
  "url": "https://example.com/",
  "potentialAction": {
    "@type": "SearchAction",
    "target": "https://example.com/search?q={query}",
    "query-input": "required name=query"
  }
}
</script>
Reference ↗
lowMissing meta descriptionTitle and description are the first summary an agent reads when deciding whether this page is relevant.▶

Evidence

  • raw-html · title: "Example Domain"; description: none

Fix

Add a specific <title> and meta description.

Cheap, universal, and used by every agent and crawler.

<title>What this page is — example.com</title>
<meta name="description" content="One sentence saying what a visitor (or agent) can do here.">
lowNo OpenGraph metadataSocial metadata is a minor signal for agents, but many crawlers read og:* as a fallback summary.▶

Evidence

  • raw-html · No meta[property^=og:]

Fix

Add og:title, og:description and og:image.

Low effort; improves link previews and gives agents a second summary source.

<meta property="og:title" content="Example Domain">
<meta property="og:description" content="…">
<meta property="og:image" content="https://example.com/og.png">
mediumNo <main> landmarkLandmarks tell an agent where the content is and what is chrome. Found: none.▶

Evidence

  • raw-html · No <main> or [role=main]

Fix

Wrap the primary content in <main>; use <nav>, <header>, <footer>.

Semantic landmarks are free structure — screen readers and agents both use them to skip chrome.

<header>…site header…</header>
<nav aria-label="Primary">…</nav>
<main>
  …the content agents should read…
</main>
<footer>…</footer>
Reference ↗
mediumNo <h1> on the pageAgents build an outline from headings to decide what a page is about and where sections start.▶

Evidence

  • raw-html · h1×0, total headings 0, skipped levels 0

Fix

One <h1> per page; do not skip levels (h2 → h4).

A clean outline is the cheapest map of your page an agent can get.

Reference ↗
lowNo canonical URLLanguage and canonical URL help agents choose the right version of a page and parse its text correctly.▶

Evidence

  • raw-html · lang=en; canonical=none

Fix

Declare lang and a canonical link.

Two attributes; prevents duplicate-URL confusion and wrong-language parsing.

<html lang="en">
<head>
  <link rel="canonical" href="https://example.com/">

Access & renderability

60/100

Readable, with some friction for agents.

mediumPage likely depends on JavaScriptThe rendered DOM was not tested; this assessment is heuristic based on the raw HTML only. Overall score is capped at 60 when two JS-dependence heuristics fire.▶

Evidence

  • raw-html · 2 JS-dependence heuristics fired

Fix

Server-render the primary content so the first HTML response contains it.

Agents fetch raw HTML; SPAs that mount into empty divs hide their content.

Server-render the primary content: in Next.js use Server Components / generateStaticParams; in a client-only SPA add pre-rendering (e.g. prerender step or SSR) so the first HTML response contains the content.
2 things already working
  • ✓Response headers allow agent access — No noindex/noai directives or bot-management headers detected.
  • ✓No CAPTCHA markup detected — No reCAPTCHA, hCaptcha, or Turnstile widgets found in the raw HTML.

Act

blocked

Can it complete the task — book, buy, submit?

Form semantics — not applicable. No forms on this page.

Actionability — not applicable. Nothing to do on this page (in the HTML).

WebMCP capability

0/100

No WebMCP tools — the single biggest upgrade available here.

highNo WebMCP tools — this is the biggest single upgrade availableWebMCP lets a page hand an agent a named, typed tool instead of a form it has to reverse-engineer. Browsers in the Chrome/Edge origin trial and agent clients such as ChatGPT Desktop already call these tools. The "+N" on this report is what declaring one is worth to your score. Note that we only read the served HTML: a tool registered from a JavaScript bundle would be invisible to us.▶

Evidence

  • raw-html · No form on this page — the snippet below is a site-search starting point

Fix

Declare a site-search tool

The declarative attributes are the cheapest path: the browser synthesizes the JSON Schema from the controls you already have.

<form action="/search" method="get" toolname="search_site" tooldescription="Search https://example.com">
  <input name="q" type="search" toolparamdescription="Search query" required>
  <button type="submit">Search</button>
</form>
Reference ↗
infoSame tool, imperative APIIf the form is rendered by JavaScript or the tool needs to do more than submit, register it imperatively. execute() resolves to a plain JSON-serializable value; the browser stringifies it.▶

Evidence

  • raw-html · No form on this page — the snippet below is a site-search starting point

Fix

Register the tool with document.modelContext.registerTool.

WebMCP is not on by default in any shipping browser yet, so include the polyfill: <script src="https://unpkg.com/@mcp-b/webmcp-polyfill@5.1.0/dist/index.iife.js" integrity="sha384-ZLqD1afbu2b2LJVDDqBf95wR/DGWh5FT1bx6E2S+4uMPdMOc8QGIIfw2gBWLKIB2" crossorigin="anonymous"></script>

// Until Chrome ships WebMCP by default, include the polyfill:
// <script src="https://unpkg.com/@mcp-b/webmcp-polyfill@5.1.0/dist/index.iife.js" integrity="sha384-ZLqD1afbu2b2LJVDDqBf95wR/DGWh5FT1bx6E2S+4uMPdMOc8QGIIfw2gBWLKIB2" crossorigin="anonymous"><\/script>
document.modelContext.registerTool({
  name: "search_site",
  description: "Search https://example.com",
  inputSchema: {
    "type": "object",
    "properties": {
      "q": {
        "type": "string",
        "description": "Search query"
      }
    },
    "required": [
      "q"
    ]
  },
  async execute({ q }, { signal }) {
    const res = await fetch("/api/search?q=" + encodeURIComponent(q), { signal });
    return await res.json();  // plain JSON-serializable value — not an MCP { content } envelope
  },
  annotations: { readOnlyHint: true },
});
Reference ↗

Fetched Wed, 14 Oct 2026 19:24:29 GMT in 0.1s · HTTP 200 · 8 discovery files checked · rendered DOM: skipped

Rendered-DOM checks are not run in v1; JavaScript dependence is estimated from the raw HTML.