Methodology
Rubric v1.0.0. Every score is the sum of 21 independently measured signals, each worth a fixed number of points. Nothing is estimated, inferred from a third-party dataset, or generated by a language model.
What the crawler does and does not do
- Identifies itself as
QomviaBot/1.0with a link to this page. - Issues only GET requests: roughly 20 for a public scan, up to 500 for a paid deep audit.
- Never submits a form, never adds to a cart, never attempts a purchase.
- Never tries to defeat a CAPTCHA or bot challenge — a challenge is recorded as a finding and nothing more.
- Respects
robots.txtfor every request beyond the homepage and robots file itself. - Rate-limits to one request per host at a time and caps each response at 2 MB.
The rubric
100 pointsMachine access 25 pts
- robots.txt allows AI crawlers10 pts
If GPTBot, ClaudeBot or PerplexityBot are disallowed, agents cannot read your catalogue at all.
Fix: Allow the shopping-relevant AI user agents on your public catalogue paths in robots.txt.
signal id: robots_ai_crawlers
- Product paths are crawlable5 pts
Many sites allow the homepage but disallow /products or /cart-adjacent paths agents need to read prices.
Fix: Remove disallow rules covering product detail and category paths.
signal id: robots_product_paths
- Serves content to a non-browser user agent6 pts
Bot management often returns a challenge page to anything without a browser fingerprint.
Fix: Allowlist declared AI agents in your WAF/bot manager instead of serving them an interstitial.
signal id: bot_ua_response
- Content is server-rendered4 pts
Agents that fetch HTML without executing JavaScript see nothing on a client-rendered storefront.
Fix: Server-render product name, price and availability, or expose them in JSON-LD.
signal id: server_rendered
Product data legibility 25 pts
- Valid Product structured data8 pts
Product JSON-LD is how agents identify what is being sold without guessing from markup.
Fix: Emit schema.org Product JSON-LD with name, image, description and sku on every product page.
signal id: jsonld_product
- Offer with price, currency and availability7 pts
Without a machine-readable price and availability an agent cannot compare or commit to a purchase.
Fix: Add an Offer with price, priceCurrency and availability to your Product JSON-LD.
signal id: jsonld_offer
- Stable product identifiers3 pts
GTIN/MPN/SKU lets an agent match your product to the one the user actually asked for.
Fix: Publish gtin13, mpn or sku in your Product JSON-LD.
signal id: stable_identifiers
- Category pages expose an ItemList3 pts
Agents browse categories to build a shortlist; an ItemList removes the need to scrape cards.
Fix: Add ItemList JSON-LD with product URLs to category and search pages.
signal id: category_itemlist
- Machine-readable product feed4 pts
A feed is the cheapest way for an agent platform to ingest your whole catalogue.
Fix: Publish a products.json / Google Merchant feed and link it from robots.txt or /.well-known.
signal id: product_feed
Agent-commerce protocols 20 pts
- Agentic Commerce Protocol support7 pts
ACP is what lets ChatGPT complete a checkout against your store instead of linking out.
Fix: Expose an ACP feed/checkout endpoint or enable your platform's agentic-checkout integration.
signal id: acp_signals
- llms.txt guidance file5 pts
llms.txt is the emerging convention for telling an agent where the useful, canonical content is.
Fix: Publish /llms.txt listing catalogue entry points, feeds, policies and contact.
signal id: llms_txt
- MCP or A2A discovery document5 pts
A discoverable MCP server or agent card lets agents call your commerce functions directly.
Fix: Publish /.well-known/mcp.json or /.well-known/agent.json describing your endpoints.
signal id: mcp_discovery
- Machine-payable endpoint signals (x402 / AP2)3 pts
x402 and AP2 are how an agent can pay without a human-driven card form.
Fix: If you sell digital access, return 402 with x402 headers; otherwise adopt AP2 mandates via your PSP.
signal id: x402_ap2
Checkout traversability 15 pts
- Cart or checkout entry point is reachable5 pts
Agents need a linkable, crawlable cart URL to hand a basket back to the user.
Fix: Expose a stable /cart URL that renders without JavaScript and is not disallowed in robots.txt.
signal id: cart_reachable
- No forced login before checkout6 pts
A mandatory account or OTP is where most agent purchases die.
Fix: Offer guest checkout and defer account creation until after the order.
signal id: guest_checkout
- Checkout forms are semantically labelled4 pts
autocomplete tokens and input names are what let an agent fill an address without guessing.
Fix: Add standard autocomplete attributes (given-name, postal-code, email …) to checkout inputs.
signal id: form_semantics
Agent-facing performance 10 pts
- Time to first byte4 pts
Agent orchestrators time out aggressively; slow origins get dropped from consideration.
Fix: Cache HTML at the edge for anonymous requests, including declared crawlers.
signal id: ttfb
- HTML payload size2 pts
Multi-megabyte HTML blows up agent context windows and parsing cost.
Fix: Trim inline state blobs and duplicated markup from server-rendered HTML.
signal id: page_weight
- Sitemap is discoverable and structured4 pts
A sitemap is the fastest way for an agent platform to enumerate your catalogue.
Fix: Reference an XML sitemap index from robots.txt and keep each file under 50k URLs.
signal id: sitemap
Policy clarity 5 pts
- Stated automated-access policy3 pts
Agent platforms need an explicit permission signal before transacting on a user's behalf.
Fix: Publish an AI/automated-access policy page and reference it from llms.txt and robots.txt.
signal id: ai_policy
- Machine-readable contact / API surface2 pts
Agents and their operators need a programmatic way to resolve problems and request access.
Fix: Publish /.well-known/security.txt and an openapi.json or documented API endpoint.
signal id: machine_contact
Grades
- A — 90 to 100: an agent can find, read and reach checkout without special handling.
- B — 75 to 89: usable, with gaps that cost you in comparisons.
- C — 60 to 74: an agent can read you but will struggle to transact.
- D — 40 to 59: significant blockers; most agent journeys fail.
- F — below 40: effectively invisible or closed to agents.
Corrections and re-scans
Scores are a snapshot of what our crawler received at a point in time. Anyone can trigger a free re-scan from the homepage once per hour, and every signal shows the measurement behind it so a result can be reproduced with curl. If you believe a measurement is wrong, email [email protected] with the signal id and we will re-run and publish the result. Store owners can remove their public page entirely on the opt-out page.
Open rubric
The rubric and the scoring code are the product of Qomvia, published so results can be challenged. If a signal is unfair or a weight is wrong, we would rather change it than defend it.