{"scan_id": 86, "url": "https://kravebeauty.com/", "vertical": "beauty", "scanned_at": "2026-08-02T10:57:43.740682+00:00", "score": 25, "grade": "E", "report_url": "https://www.agentready.market/r/86", "result": {"url": "https://www.kravebeauty.com", "meta": {"notes": [], "phase": "1 (pillars 1-4, weighted matrix)", "origin": "https://www.kravebeauty.com", "investment": {"ads": ["Google Ads/GA4"], "apps": ["Klaviyo", "Okendo", "Gorgias"], "score": 5, "platform": "Shopify", "qualified": true}, "home_status": 200, "product_url": "https://kravebeauty.com/products/duo-beet-the-sun-spf-40-sunscreen", "shopify_feed": true, "robots_present": true}, "error": "", "grade": "E", "score": 25, "capped": true, "pillars": [{"id": "access", "pct": 80, "icon": "\ud83d\udd13", "name": "Access & crawlability", "checks": [{"id": "access.ai_crawlers", "fix": "", "gap": 0.0, "label": "robots.txt allows agent crawlers", "detail": "robots.txt allows GPTBot, ClaudeBot, PerplexityBot and Google-Extended.", "earned": 16.0, "effort": "easy", "pillar": "access", "status": "pass", "weight": 16.0}, {"id": "access.cloaking", "fix": "Allow the GPTBot/ClaudeBot/PerplexityBot user-agents at the WAF/CDN level (Cloudflare, etc.), not just in robots.txt.", "gap": 8.0, "label": "No blocking / cloaking of AI bots", "detail": "Blocked in real-world conditions for: GPTBot (HTTP 429), ClaudeBot (HTTP 429), PerplexityBot (HTTP 429).", "earned": 0.0, "effort": "medium", "pillar": "access", "status": "fail", "weight": 8.0}, {"id": "access.latency", "fix": "", "gap": 0.0, "label": "Fast enough response for agents", "detail": "Fast response (739 ms on the homepage) \u2014 agents won't time out.", "earned": 4.0, "effort": "medium", "pillar": "access", "status": "pass", "weight": 4.0}, {"id": "access.llms_txt", "fix": "", "gap": 0.0, "label": "llms.txt present", "detail": "/llms.txt present \u2014 points agents to your key pages.", "earned": 4.0, "effort": "easy", "pillar": "access", "status": "pass", "weight": 4.0}, {"id": "access.agents_md", "fix": "", "gap": 0.0, "label": "agents.md present (preview)", "detail": "/agents.md present \u2014 a working guide agents can follow on your site.", "earned": 0.0, "effort": "easy", "pillar": "access", "status": "pass", "weight": 0.0}, {"id": "access.sitemap", "fix": "", "gap": 0.0, "label": "Sitemap available", "detail": "Sitemap found via robots.txt.", "earned": 4.0, "effort": "easy", "pillar": "access", "status": "pass", "weight": 4.0}, {"id": "access.no_js", "fix": "", "gap": 0.0, "label": "Content accessible without JS rendering", "detail": "Content present in raw HTML (10567 visible characters).", "earned": 4.0, "effort": "hard", "pillar": "access", "status": "pass", "weight": 4.0}, {"id": "access.agent_pathways", "fix": "Link shipping, returns, contact and help/FAQ pages from the homepage (nav or footer). Agents answer pre-purchase questions by following links \u2014 a page with no link-path from the homepage does not exist for them.", "gap": 0.0, "label": "Shipping/returns/contact linked from the homepage (preview)", "detail": "No homepage link-path found for: contact (found: help, returns, shipping).", "earned": 0.0, "effort": "easy", "pillar": "access", "status": "partial", "weight": 0.0}], "earned": 32.0, "weight": 40.0}, {"id": "structured_data", "pct": 0, "icon": "\ud83c\udff7\ufe0f", "name": "Structured data", "checks": [{"id": "sd.product", "fix": "Add a <script type=\"application/ld+json\"> of type Product with name, image, brand, sku/gtin13, and offers{price, priceCurrency, availability}.", "gap": 12.0, "label": "Product JSON-LD present", "detail": "Product page detected but no Product JSON-LD \u2014 invisible to an agent.", "earned": 0.0, "effort": "medium", "pillar": "structured_data", "status": "fail", "weight": 12.0}, {"id": "sd.price", "fix": "Set offers.price and offers.priceCurrency in JSON-LD.", "gap": 8.0, "label": "Structured price + currency", "detail": "No price exposed inside offers.", "earned": 0.0, "effort": "easy", "pillar": "structured_data", "status": "fail", "weight": 8.0}, {"id": "sd.availability", "fix": "Add offers.availability (e.g. https://schema.org/InStock).", "gap": 5.0, "label": "Structured availability", "detail": "No availability field \u2014 the agent can't tell if it's in stock.", "earned": 0.0, "effort": "easy", "pillar": "structured_data", "status": "fail", "weight": 5.0}, {"id": "sd.brand", "fix": "Add the brand field to the Product.", "gap": 3.0, "label": "Structured brand", "detail": "No structured brand.", "earned": 0.0, "effort": "easy", "pillar": "structured_data", "status": "fail", "weight": 3.0}, {"id": "sd.identifier", "fix": "Expose sku and, if possible, gtin13 in the Product JSON-LD.", "gap": 4.0, "label": "Product identifier (SKU / GTIN)", "detail": "No identifier (sku/gtin/mpn) \u2014 the agent can't disambiguate the product.", "earned": 0.0, "effort": "medium", "pillar": "structured_data", "status": "fail", "weight": 4.0}, {"id": "sd.rating", "fix": "Expose aggregateRating (ratingValue + reviewCount) in JSON-LD.", "gap": 3.0, "label": "Aggregated reviews (aggregateRating)", "detail": "No aggregateRating \u2014 the agent can't compare your reputation.", "earned": 0.0, "effort": "medium", "pillar": "structured_data", "status": "fail", "weight": 3.0}], "earned": 0.0, "weight": 35.0}, {"id": "catalog", "pct": 64, "icon": "\ud83d\udce6", "name": "Catalog & attributes", "checks": [{"id": "cat.variants", "fix": "Declare each variant as a distinct Offer or via hasVariant.", "gap": 5.0, "label": "Structured variants", "detail": "Structured product but variants not exposed (size/color not found as fields).", "earned": 5.0, "effort": "medium", "pillar": "catalog", "status": "partial", "weight": 10.0}, {"id": "cat.attributes", "fix": "Add color, size, material, category as structured fields.", "gap": 4.0, "label": "Attributes as fields (not prose)", "detail": "Few structured attributes: option:Title.", "earned": 4.0, "effort": "medium", "pillar": "catalog", "status": "partial", "weight": 8.0}, {"id": "cat.feed", "fix": "", "gap": 0.0, "label": "Product feed / catalog signals", "detail": "Feed signals: valid products.json (Shopify).", "earned": 7.0, "effort": "medium", "pillar": "catalog", "status": "pass", "weight": 7.0}], "earned": 16.0, "weight": 25.0}, {"id": "rails", "pct": 0, "icon": "\ud83d\udee4\ufe0f", "name": "Transaction rails & agent access", "checks": [{"id": "proto.ucp_mcp", "fix": "Enable your platform's agentic checkout (on Shopify: the UCP catalog + checkout endpoint at /api/ucp/mcp) so agents on the UCP rail can transact.", "gap": 4.0, "label": "Shopify/UCP agent endpoint (/api/ucp/mcp)", "detail": "No UCP MCP endpoint detected (HTTP 404) \u2014 agents on the UCP rail (Shopify catalog/checkout) can't transact here.", "earned": 0.0, "effort": "hard", "pillar": "rails", "status": "fail", "weight": 4.0}, {"id": "proto.a2a_card", "fix": "Publish an A2A Agent Card at /.well-known/agent-card.json describing your store's machine entry points.", "gap": 3.0, "label": "A2A Agent Card (/.well-known/agent-card.json)", "detail": "No A2A Agent Card \u2014 your store publishes no machine-readable agent for buyer-agents to discover and call. (So do ~all stores today: this is the frontier, not the baseline.)", "earned": 0.0, "effort": "easy", "pillar": "rails", "status": "fail", "weight": 3.0}, {"id": "proto.ard_catalog", "fix": "Publish an ARD AI Catalog at /.well-known/ai-catalog.json \u2014 the pre-invocation discovery layer agents check first.", "gap": 3.0, "label": "ARD AI Catalog (/.well-known/ai-catalog.json)", "detail": "No AI Catalog \u2014 under the new Google/Microsoft ARD spec (June 2026), agents look here first to learn what a site offers. Adoption is ~0% today, so publishing one puts you ahead of nearly the entire web (including the spec authors).", "earned": 0.0, "effort": "easy", "pillar": "rails", "status": "fail", "weight": 3.0}, {"id": "access.machine_entry", "fix": "Link llms.txt, your product feed and agent endpoints from the homepage <head> and echo them in an HTTP Link response header (RFC 8288).", "gap": 3.0, "label": "Machine entry points advertised at first contact", "detail": "The homepage points to no machine resources \u2014 no <head> link to llms.txt, a feed or an agent endpoint, and no HTTP Link header. An agent that fetches only the root sees no signposts and can conclude there's no machine access, even when you serve those files. Link them from the page and echo them in a Link response header.", "earned": 0.0, "effort": "easy", "pillar": "rails", "status": "fail", "weight": 3.0}, {"id": "p6.returns_shipping", "fix": "", "gap": 0.0, "label": "Returns & shipping in offers (P6 preview)", "detail": "No machine-readable product found \u2014 returns/shipping fields can't be assessed (fix the product sheet first).", "earned": 0.0, "effort": "medium", "pillar": "rails", "status": "na", "weight": 0.0}, {"id": "act.checkout", "fix": "", "gap": 0.0, "label": "Add-to-cart action detectable", "detail": "No product page reachable \u2014 the buy action can't be assessed.", "earned": 0.0, "effort": "hard", "pillar": "rails", "status": "na", "weight": 0.0}], "earned": 0.0, "weight": 13.0}], "roadmap": {"gain": 59, "steps": [{"n": 1, "how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "No price exposed inside offers.", "title": "Structured price + currency", "effort": "easy", "impact": 8.0, "pillar": "Structured data", "check_id": "sd.price", "cumulative": 56}, {"n": 2, "how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "Product page detected but no Product JSON-LD \u2014 invisible to an agent.", "title": "Product JSON-LD present", "effort": "medium", "impact": 12.0, "pillar": "Structured data", "check_id": "sd.product", "cumulative": 68}, {"n": 3, "how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "No availability field \u2014 the agent can't tell if it's in stock.", "title": "Structured availability", "effort": "easy", "impact": 5.0, "pillar": "Structured data", "check_id": "sd.availability", "cumulative": 73}, {"n": 4, "how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "Blocked in real-world conditions for: GPTBot (HTTP 429), ClaudeBot (HTTP 429), PerplexityBot (HTTP 429).", "title": "No blocking / cloaking of AI bots", "effort": "medium", "impact": 8.0, "pillar": "Access & crawlability", "check_id": "access.cloaking", "cumulative": 81}, {"n": 5, "how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "No structured brand.", "title": "Structured brand", "effort": "easy", "impact": 3.0, "pillar": "Structured data", "check_id": "sd.brand", "cumulative": 84}], "capped": true, "current": 25, "grade_up": true, "projected": 84, "cap_reason": "the store blocks AI bots in the real world (WAF/CDN)", "target_grade": "B", "current_grade": "E"}, "headline": "Critical. An AI agent can barely buy from you.", "artifacts": {"jsonld": "<script type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Product\",\n  \"name\": \"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\",\n  \"brand\": \"\u2022\u2022\u2022\u2022\u2022\u2022\",\n  \"offers\": { \"price\": \"\u2022\u2022\u2022\u2022\", \"availability\": \"\u2022\u2022\u2022\u2022\u2022\u2022\" }\n}\n</script>", "llms_txt": "# KraveBeauty\n\n> Uncomplicated, basic products for intentional, not conventional, skincare. Feed your skinsides what they're craving.\n\n## Products\n- [Summer Skin Barrier Duo](https://www.kravebeauty.com/products/summer-skin-barrier-duo)\n\n## Policies\n- Shipping: <add your delivery times and zones>\n- Returns: <add your return policy>\n\n## Sitemap\n- https://www.kravebeauty.com/sitemap.xml", "available": true, "attribute_map": [{"source": "\u2022\u2022\u2022\u2022", "schema_field": "\u2022\u2022\u2022\u2022", "example": "\u2022\u2022\u2022\u2022"}]}, "benchmark": {"delta": 5, "median": 20, "verdict": "Around the beauty & cosmetics median (+5).", "vertical": "beauty", "percentile": 78, "provisional": false, "sample_size": 18, "vertical_label": "beauty & cosmetics"}, "final_url": "https://kravebeauty.com/", "protocols": [{"id": "proto.ucp_mcp", "label": "Shopify/UCP agent endpoint (/api/ucp/mcp)", "detail": "No UCP MCP endpoint detected (HTTP 404) \u2014 agents on the UCP rail (Shopify catalog/checkout) can't transact here.", "points": 4, "status": "fail"}, {"id": "proto.a2a_card", "label": "A2A Agent Card (/.well-known/agent-card.json)", "detail": "No A2A Agent Card \u2014 your store publishes no machine-readable agent for buyer-agents to discover and call. (So do ~all stores today: this is the frontier, not the baseline.)", "points": 3, "status": "fail"}, {"id": "proto.ard_catalog", "label": "ARD AI Catalog (/.well-known/ai-catalog.json)", "detail": "No AI Catalog \u2014 under the new Google/Microsoft ARD spec (June 2026), agents look here first to learn what a site offers. Adoption is ~0% today, so publishing one puts you ahead of nearly the entire web (including the spec authors).", "points": 3, "status": "fail"}, {"id": "act.checkout", "label": "Add-to-cart action detectable", "detail": "No product page reachable \u2014 the buy action can't be assessed.", "points": 0, "status": "na"}, {"id": "access.agent_class", "label": "Shopping-agent access (Agent class)", "detail": "Shopping agents are blocked at the door: ChatGPT-User (HTTP 429), Claude-User (HTTP 429), Perplexity-User (HTTP 429). These are the on-demand agents acting for a live buyer \u2014 an agent can't buy what it can't load. The site is behind Cloudflare \u2014 check the AI-crawler settings there.", "points": 0, "status": "fail"}, {"id": "proto.x402", "label": "x402 / HTTP-402 payments", "detail": "No standard discovery path exists yet for x402 \u2014 we track the spec and will probe it the moment a convention settles.", "points": 0, "status": "na"}, {"id": "access.citation_rail", "label": "Citation-rail access (Bingbot, OAI-SearchBot, Google-Extended)", "detail": "The indexes that make this store EXIST inside AI answers are blocked at the door: Bingbot (HTTP 429), OAI-SearchBot (HTTP 429). A store can allow the shopping agent yet stay invisible to it \u2014 the assistant answers from these indexes.", "points": 0, "status": "fail"}, {"id": "access.content_signal", "label": "Content-Signal directives (robots.txt)", "detail": "No Content-Signal directives \u2014 the Cloudflare-era content switches aren't set on this store (that's the common case; nothing is being blocked by them).", "points": 0, "status": "na"}, {"id": "access.canonical", "label": "Canonical address coherence", "detail": "The declared canonical address matches where the site actually answers \u2014 no identity contradiction for machines to untangle.", "points": 0, "status": "pass"}, {"id": "access.machine_entry", "label": "Machine entry points advertised at first contact", "detail": "The homepage points to no machine resources \u2014 no <head> link to llms.txt, a feed or an agent endpoint, and no HTTP Link header. An agent that fetches only the root sees no signposts and can conclude there's no machine access, even when you serve those files. Link them from the page and echo them in a Link response header.", "points": 0, "status": "fail"}, {"id": "p6.returns_shipping", "label": "Returns & shipping in offers (P6 preview)", "detail": "No machine-readable product found \u2014 returns/shipping fields can't be assessed (fix the product sheet first).", "points": 0, "status": "na"}], "top_fixes": [{"how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "No price exposed inside offers.", "title": "Structured price + currency", "effort": "easy", "impact": 8.0, "pillar": "Structured data", "check_id": "sd.price"}, {"how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "Product page detected but no Product JSON-LD \u2014 invisible to an agent.", "title": "Product JSON-LD present", "effort": "medium", "impact": 12.0, "pillar": "Structured data", "check_id": "sd.product"}, {"how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "No availability field \u2014 the agent can't tell if it's in stock.", "title": "Structured availability", "effort": "easy", "impact": 5.0, "pillar": "Structured data", "check_id": "sd.availability"}, {"how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "Blocked in real-world conditions for: GPTBot (HTTP 429), ClaudeBot (HTTP 429), PerplexityBot (HTTP 429).", "title": "No blocking / cloaking of AI bots", "effort": "medium", "impact": 8.0, "pillar": "Access & crawlability", "check_id": "access.cloaking"}, {"how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "No structured brand.", "title": "Structured brand", "effort": "easy", "impact": 3.0, "pillar": "Structured data", "check_id": "sd.brand"}], "cap_reason": "the store blocks AI bots in the real world (WAF/CDN)", "proto_bonus": 0, "scoring_version": 2}}