This is the development record, published as it was written. It is amended by revision, including where the work went wrong. Nothing here has been rewritten for the web.
The rubric
Version 1. Generated from eligibility/checks.py by make rubric; do not edit this file by hand, edit the catalogue.
Every check below states a fact about the site. None of them asserts or implies that an agent will find, trust or recommend the business. That is a different claim with different evidence, and we do not make it.
basis tells you whether the requirement is grounded in published practice or a measured result (evidence) or is our opinion (judgment). A reader is entitled to discount the second.
weight marks whether a check counts toward the headline (core) or is reported separately (recommended).
Contents
- Reach — can an agent get in and read the page — 5 checks
- Identity — does the agent know who you are — 4 checks
- Offering — does the agent know what you sell — 4 checks
- Navigation — can the agent find the rest — 4 checks
Reach — can an agent get in and read the page
reach.https — Served over HTTPS
Question. Is the home page served over HTTPS without falling back to plain HTTP?
Why an agent cares. An agent that has to downgrade to plain HTTP is reading a channel anyone can alter.
How it is decided. Deterministic check over the fetched page; no model is involved.
Basis. evidence — grounded in published practice or a measured result
Weight. core
If it fails. Serve the site over HTTPS and redirect http:// to https://.
reach.robots_present — robots.txt is present
Question. Does /robots.txt exist and contain at least one directive?
Why an agent cares. robots.txt is where a site states its crawling policy. Absent, an agent has nothing to read.
How it is decided. Deterministic check over the fetched page; no model is involved.
Basis. evidence — grounded in published practice or a measured result
Weight. core
If it fails. Publish /robots.txt, even if it only declares a sitemap and allows everything.
reach.ai_agents_allowed — Named AI agents are not blocked at the root
Question. Does robots.txt disallow the site root for any well-known AI agent token?
Why an agent cares. A site can be perfectly readable and still invisible because one line of robots.txt refused the agent.
How it is decided. Deterministic check over the fetched page; no model is involved.
Basis. evidence — grounded in published practice or a measured result
Weight. core
If it fails. Remove the root Disallow for the agent tokens you want to admit, or scope it to the paths you mean to protect.
reach.bot_wall — The page is served to an honest client
Question. Does the home page return a success status to an ordinary HTTP request with an identifying user agent?
Why an agent cares. A bot wall, challenge page or 403 does not care how good your markup is. Nothing downstream can be read.
How it is decided. Deterministic check over the fetched page; no model is involved.
Basis. evidence — grounded in published practice or a measured result
Weight. core
If it fails. Allow ordinary clients and named AI agents to fetch public pages; keep the wall for abusive traffic.
reach.content_without_js — Content is present without running scripts
Question. Does the raw HTML contain a meaningful amount of text before any script runs?
Why an agent cares. Many agents read the response body and never execute JavaScript. A client-rendered page can read as empty.
How it is decided. Deterministic check over the fetched page; no model is involved.
Basis. evidence — grounded in published practice or a measured result
Weight. core
If it fails. Render the essential content on the server so it is present in the first response.
Identity — does the agent know who you are
identity.structured — Structured identity is published
Question. Is there JSON-LD describing the organisation?
Why an agent cares. This is the difference between an agent inferring who you are from prose and being told.
How it is decided. Deterministic check over the fetched page; no model is involved.
Basis. evidence — grounded in published practice or a measured result
Weight. core
If it fails. Add a JSON-LD Organization or LocalBusiness block to the home page.
identity.name — The trading name is stated
Question. Is a business name available in structured data or the page title?
Why an agent cares. An agent assembling an answer needs a name it can attribute the rest of the facts to.
How it is decided. Deterministic check over the fetched page; no model is involved.
Basis. evidence — grounded in published practice or a measured result
Weight. recommended
If it fails. State the trading name in the JSON-LD name field and in the page title.
identity.contact — Contact and location facts are machine-readable
Question. Are address, telephone or email present in structured data?
Why an agent cares. A local answer needs a location and a way to reach it, and prose is not addressable.
How it is decided. Deterministic check over the fetched page; no model is involved.
Basis. evidence — grounded in published practice or a measured result
Weight. core
If it fails. Add PostalAddress, telephone and email to the organisation's JSON-LD.
identity.canonical — A canonical URL is declared
Question. Does the page declare a canonical link pointing at itself?
Why an agent cares. Without it, an agent may treat near-duplicate URLs as separate businesses or treat the wrong one as authoritative.
How it is decided. Deterministic check over the fetched page; no model is involved.
Basis. evidence — grounded in published practice or a measured result
Weight. recommended
If it fails. Add <link rel="canonical"> to each page.
Offering — does the agent know what you sell
offering.markup — What you sell is marked up
Question. Is there Product, Service, Offer or Menu markup?
Why an agent cares. An agent can only compare or recommend an offering it can read as an offering.
How it is decided. Deterministic check over the fetched page; no model is involved.
Basis. evidence — grounded in published practice or a measured result
Weight. core
If it fails. Describe products or services with Product/Service and Offer JSON-LD.
offering.price — Price is machine-readable
Question. Is a price present in structured data?
Why an agent cares. Agents increasingly filter and compare on price, and a price locked in an image or a PDF is invisible.
How it is decided. Deterministic check over the fetched page; no model is involved.
Basis. evidence — grounded in published practice or a measured result
Weight. recommended
If it fails. Add offers.price and priceCurrency to your product markup.
offering.availability — Availability is machine-readable
Question. Is an availability or stock state present in structured data?
Why an agent cares. A recommendation without availability is a wasted journey, and agents are starting to filter on it.
How it is decided. Deterministic check over the fetched page; no model is involved.
Basis. judgment — our opinion, offered as such
Weight. recommended
If it fails. Add offers.availability using schema.org values such as InStock or PreOrder.
offering.feed — A machine-readable catalogue or interface exists
Question. Does the site link a JSON, XML or API surface for its catalogue?
Why an agent cares. A page is a poor substitute for a feed when an agent needs the whole catalogue rather than one item.
How it is decided. Deterministic check over the fetched page; no model is involved.
Basis. judgment — our opinion, offered as such
Weight. recommended
If it fails. Publish a read-only JSON or XML feed of your catalogue and link it from the page.
Navigation — can the agent find the rest
navigation.sitemap — A valid sitemap is published
Question. Does /sitemap.xml exist and list at least one URL?
Why an agent cares. It is the cheapest way for an agent to discover pages you have not linked prominently.
How it is decided. Deterministic check over the fetched page; no model is involved.
Basis. evidence — grounded in published practice or a measured result
Weight. core
If it fails. Publish /sitemap.xml and reference it from robots.txt.
navigation.sitemap_declared — robots.txt points at the sitemap
Question. Does robots.txt declare a Sitemap directive?
Why an agent cares. It is how an agent finds the sitemap without guessing the path.
How it is decided. Deterministic check over the fetched page; no model is involved.
Basis. evidence — grounded in published practice or a measured result
Weight. recommended
If it fails. Add a Sitemap: line to robots.txt.
navigation.llms_txt — llms.txt is published
Question. Does /llms.txt exist and contain a heading and a link?
Why an agent cares. It is a young convention, but it is the only place a site can state its own machine-readable summary.
How it is decided. Deterministic check over the fetched page; no model is involved.
Basis. judgment — our opinion, offered as such
Weight. recommended
If it fails. Publish /llms.txt: a single H1, a one-line summary, and links to the pages that matter.
navigation.titles — Title and description are present
Question. Does the home page have a non-empty title and meta description?
Why an agent cares. They are still what most retrieval surfaces show when they cite a page.
How it is decided. Deterministic check over the fetched page; no model is involved.
Basis. evidence — grounded in published practice or a measured result
Weight. recommended
If it fails. Write a specific <title> and a meta description that states what you do and where.
What this rubric does not cover
It reads one page and the three well-known files beside it. It does not crawl the site, does not execute scripts, does not check whether the facts stated are true, and does not measure traffic, ranking or citations.
How this record connects
It is referenced by: Agent instructions.