Checks
The 82 agent-readiness checks
A check is a single, spec-pinned test of whether an AI agent can discover, understand, or transact on a store. We run 82 of them across five AI shopping surfaces and weight each by severity and which surfaces it affects. See how the score is built in the methodology, or read the agentic commerce guide.
Discovery
Whether AI shopping agents can find and crawl the store at all — robots rules, sitemaps, and discovery files.
- Bingbot allowedHIGH
robots.txt permits Bingbot (the crawler behind Microsoft Copilot Shopping's index) at the site root.
robots.txt permits ChatGPT-User (OpenAI's user-initiated live fetcher) at the site root.
robots.txt permits Googlebot at a representative product-detail path.
An /llms.txt manifest is reachable at the site root (informational; never fails).
- OAI-SearchBot allowedCRITICAL
robots.txt permits OAI-SearchBot (OpenAI's ChatGPT discovery crawler) at the site root.
No sampled PDP returns 401 or 403 to an anonymous request.
Every sampled product page is indexable — no `noindex` in HTML meta or X-Robots-Tag.
Each sampled product page exposes a single Product JSON-LD node.
robots.txt permits PerplexityBot (Perplexity's shopping index crawler) at the site root.
robots.txt permits Perplexity-User (Perplexity's live user-initiated fetcher) at the site root.
At least one product page is discoverable from a non-JavaScript crawl of the sitemap or initial HTML.
Agents can reliably discover the store's products via a declared feed, platform catalog, typed sitemap, or content-verified crawl.
The /robots.txt response carries `Content-Type: text/plain`.
A non-empty /robots.txt is reachable at the site root, giving the merchant a control surface for every crawler.
The /robots.txt body is under 512,000 bytes (500 KiB).
The /robots.txt body decodes cleanly as UTF-8 per RFC 9309 §2.3.
robots.txt includes at least one `Sitemap:` line pointing at the XML sitemap.
Every sampled <loc> value escapes `&`, `<`, and `>` as XML entities.
Every <loc> URL across all resolved sitemap documents is shorter than 2,048 characters.
An XML sitemap is reachable and includes at least one product-shaped URL.
Every <loc> URL shares the host of its containing sitemap document.
No fetched sitemap document exceeds 50 MiB or 50,000 URLs.
Every fetched sitemap document declares the sitemaps.org 0.9 xmlns.
Every fetched sitemap document decodes cleanly as UTF-8.
- No global wildcard root disallowCRITICAL
robots.txt has no wildcard `User-agent: *` group with `Disallow: /` that locks every crawler out.
Structured data
The schema.org signals agents read to identify products without rendering JavaScript.
Each sampled PDP exposes a BreadcrumbList JSON-LD block with a populated itemListElement.
Each Offer's `availability` is a canonical Schema.org IRI (InStock / OutOfStock / PreOrder / BackOrder).
Each Offer either omits `itemCondition` (defaults to NewCondition) or sets it to a canonical Schema.org IRI.
Each Offer carries a parseable numeric `price` (≥ 0) and a 3-letter ISO 4217 `priceCurrency`.
Each Product JSON-LD node carries an AggregateRating with ratingValue in [0,5] and reviewCount/ratingCount ≥ 1.
Each Product JSON-LD node carries `brand` as either a non-empty string or an object with a non-empty `name`.
Each Product JSON-LD node carries a non-empty `description` after HTML stripping.
Each Product JSON-LD node resolves at least one image URL.
Each sampled PDP exposes a Product JSON-LD node in its initial HTML.
Each Product JSON-LD node carries a non-empty `name` string.
Each Product JSON-LD node has a resolvable Offer (or AggregateOffer) block.
- Product `sku` populatedMEDIUM
Each Product JSON-LD node carries a non-empty `sku` string or numeric value.
Product data
The product fields — price, availability, identifiers — an agent needs to compare and transact.
Each PDP carries brand attribution — either via Product JSON-LD `brand` or via visible HTML (Open Graph or Microdata).
Each PDP carries a valid GTIN (8, 12, 13, or 14 digits) on its Product JSON-LD.
Each Product title is not a known placeholder (Default Title, Untitled, Product 1, …) and not a slug-shape token (e.g. `red-hat-001`).
Each Product title is a non-empty string and contains at least one lowercase letter (rejects all-caps promotional titles).
Policy
Crawlable shipping, returns, and contact policies an agent checks before recommending a purchase.
Every `merchantReturnLink` URL on a MerchantReturnPolicy node returns a 2xx response.
When present, `applicableCountry` is a 2-letter ISO 3166-1 alpha-2 code (or an array of codes).
When present, `returnPolicyCategory` is one of MerchantReturnFiniteReturnWindow / MerchantReturnUnlimitedWindow / MerchantReturnNotPermitted (bare or schema.org URL form).
When present, `returnFees`, `returnMethod`, and `refundType` are members of their Schema.org enums.
Finite-window return policies carry `merchantReturnDays` as a positive number.
Every MerchantReturnPolicy node satisfies Option A (country + category) or Option B (returnLink URL).
Each PDP's Product JSON-LD (or its Offer) carries a `hasMerchantReturnPolicy` node.
When present, `deliveryTime` is a ShippingDeliveryTime with handlingTime and/or transitTime populated.
When present, `shippingDestination` is a DefinedRegion (or array) with ISO alpha-2 `addressCountry`.
Each PDP's Offer JSON-LD carries `shippingDetails: OfferShippingDetails`.
When present, `shippingRate` is a MonetaryAmount with numeric value/maxValue and ISO 4217 currency.
A privacy policy page is reachable from the homepage nav or at a platform-conventional URL with non-stub body content.
A returns/refund policy page is reachable from the homepage nav or at a platform-conventional URL with non-stub body content.
A shipping policy page is reachable from the homepage nav or at a platform-conventional URL with non-stub body content.
A terms-of-service page is reachable from the homepage nav or at a platform-conventional URL with non-stub body content.
Trust
The trust and reputation signals that let an agent rely on a store.
An About page is reachable at a standard URL with at least 200 characters of text content.
Contact page is reachable AND exposes at least one of: mailto link, tel link, plain email, or plausible phone number.
Homepage or sampled PDPs reference a known third-party review platform.
Homepage is served over HTTPS, http:// redirects to https://, and the HSTS max-age is ≥ 6 months.
The Strict-Transport-Security header on the homepage includes the `includeSubDomains` directive.
The Strict-Transport-Security header on the homepage includes the `preload` directive.
Homepage or sampled PDPs reference the Apple Pay JS SDK, web-component, or domain-association file.
Homepage or sampled PDPs reference the Google Pay JS SDK, Payments API namespace, or web-component.
Homepage JSON-LD includes an Organization or OnlineStore node with a contactPoint exposing email or telephone.
Protocol
Conformance with the agentic-commerce protocols (ACP, UCP) the surfaces require.
`/.well-known/ucp` Cache-Control is `public, max-age=N` with N ≥ 60 and no `no-store`/`no-cache`/`private`.
Every `capabilities[]` entry declares `version`, `spec`, and `schema`.
Every UCP service entry declaring `transport: "mcp"` carries an absolute HTTPS endpoint.
The `/.well-known/ucp` response declares `Content-Type: application/json`.
The `/.well-known/ucp` URL returns a 200 to unauthenticated requests.
Fetching `/.well-known/ucp` returns 200 with no redirect chain.
`/.well-known/ucp` is reachable and carries a top-level `version` string.
Profile carries top-level `version`, `services`, `capabilities`, and `signing_keys`.
Every `services[].spec` URL points at the canonical UCP authority or includes the service's namespace.
rest/mcp services declare `endpoint` + `schema`; a2a declares `endpoint`; embedded declares `schema`.
Each `services[].transport` is one of `rest`, `mcp`, `a2a`, `embedded`.
Each `services[].version` matches the ISO-date pattern `YYYY-MM-DD`.
UCP profile declares at least one shopping service with a recognised transport and an HTTPS endpoint.
Every `signing_keys[]` entry parses as a valid JWK with `kty` and the kty-specific required fields.
Any declarative WebMCP <form> carries a valid toolname, tooldescription, and well-formed parameters.
Images
Whether product imagery is present and legible to agents that render visual results.
At least one product image on each PDP has width × height ≥ 50,000 pixels.
At least 80% of <img> tags on each sampled PDP carry non-empty alt text.
Run all 82 on your store
Paste a URL and get the score plus a ranked, deep-linked fix list — free, no login.