Agent eligibility check · The decision corpus

The rubric

docs/RUBRIC.md · no id · revision ? · /

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

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.

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.

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.

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.

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.