Methodology

Every number CatalogReady produces is deterministic: same store, same HTML, same score. This page documents the whole method.

How we crawl

CatalogReady identifies itself honestly with this user agent:

Mozilla/5.0 (compatible; CatalogReadyBot/1.2; +https://yourdomain/methodology)
  • We fetch raw HTML only and never execute JavaScript. This matches how GPTBot, PerplexityBot, ClaudeBot and similar AI crawlers read pages — if your product data only exists after scripts run, they don't see it, and neither do we.
  • We respect a hard budget per scan: at most 25 HTTP requests, 10 product pages, 4 concurrent connections, 10-second timeouts and a 45-second total limit. We read robots.txt and report what it allows, and we stop at 2 MB per page.
  • Product pages are discovered via Shopify's products.json, sitemaps, or links from the homepage — in that order.

The checks and their point values

The score is site (35) + average across crawled product pages (65), out of 100. If robots.txt blocks OpenAI, Perplexity and Google-Extended all at once, the total is capped at 40 — nothing else matters until crawlers can read the store. Grades: 85–100 “Agent-ready”, 65–84 “Visible, with gaps”, 40–64 “At risk”, 0–39 “Invisible”.

Site level — 35 points

AI crawler access starts at 25 points; each blocked bot group subtracts its penalty (a firewall that blocks unknown bots subtracts 8). Technical foundation adds up to 10.

access.openaiOpenAI crawlers allowed (GPTBot, OAI-SearchBot, ChatGPT-User)−6 if blocked
access.perplexityPerplexity crawlers allowed (PerplexityBot, Perplexity-User)−6 if blocked
access.google_extendedGoogle-Extended allowed (Gemini / AI Mode)−6 if blocked
access.claudeClaudeBot allowed (Anthropic)−4 if blocked
access.bingBingbot allowed (Copilot)−3 if blocked
access.wafNo firewall blocking unknown bots−8 if blocked
tech.httpsHTTPS resolves cleanly2
tech.sitemapSitemap reachable2
tech.renderingProduct content present in raw HTML4
tech.canonicalCanonical tags on crawled pages2

llms.txt presence is noted as informational only — no points either way.

Page level — 65 points per page, averaged

Product schema 25 points

schema.productJSON-LD Product markup10
schema.priceOffer with price and currency5
schema.availabilityAvailability in schema3
schema.imageImage in schema3
schema.descriptionDescription in schema4

Identifiers 10 points

ids.gtinGTIN or MPN present5
ids.skuSKU present2
ids.brandBrand present3

Descriptions & attributes 15 points

content.lengthDescription at least 300 characters5
content.attributes3+ concrete attributes (material, size, ...)5
content.title_h1Unique title and one H1 naming the product3
content.placeholderNo placeholder text2

Reviews 10 points

reviews.aggregateAggregateRating with a rating value6
reviews.countReview count of 1 or more2
reviews.reviewAt least one Review item in markup2

Images 5 points

images.presentAt least one product image1
images.altAlt text on 80%+ of images3
images.alt_qualityDescriptive, non-generic alt text1

Sources

  • OpenAI crawler documentation (GPTBot, OAI-SearchBot, ChatGPT-User) — platform.openai.com/docs/bots
  • Perplexity crawler documentation (PerplexityBot, Perplexity-User) — docs.perplexity.ai
  • Anthropic crawler documentation (ClaudeBot) — support.anthropic.com
  • Google crawler documentation (Google-Extended, Bingbot equivalents) — developers.google.com/search/docs/crawling-indexing
  • schema.org Product, Offer, AggregateRating and Review definitions — schema.org/Product
  • robots.txt evaluation follows RFC 9309 (longest-match, allow wins ties)

What the score is not

We never query ChatGPT, Perplexity or any assistant, and we don't measure rankings. Scores reflect machine readability measured against published AI crawler and schema.org standards. Assistant behavior varies; no ranking or recommendation is guaranteed.