{"scan_id": 72, "url": "https://www.typology.com", "vertical": "beauty", "scanned_at": "2026-08-01T06:01:16.984317+00:00", "score": 57, "grade": "C", "report_url": "https://www.agentready.market/r/72", "result": {"url": "https://www.typology.com", "meta": {"notes": [], "phase": "1 (pillars 1-4, weighted matrix)", "origin": "https://www.typology.com", "investment": {"ads": [], "apps": ["Klaviyo"], "score": 1, "platform": "Shopify", "qualified": false}, "home_status": 200, "product_url": "https://www.typology.com/products/la-trousse-d-ete", "shopify_feed": false, "robots_present": true}, "error": "", "grade": "C", "score": 57, "capped": false, "pillars": [{"id": "access", "pct": 60, "icon": "\ud83d\udd13", "name": "Access & crawlability", "checks": [{"id": "access.ai_crawlers", "fix": "Remove the Disallow directives targeting GPTBot, ClaudeBot, Google-Extended in robots.txt (or add explicit User-agent blocks allowing them).", "gap": 12.0, "label": "robots.txt allows agent crawlers", "detail": "Blocked: GPTBot, ClaudeBot, Google-Extended. Allowed: PerplexityBot.", "earned": 4.0, "effort": "easy", "pillar": "access", "status": "partial", "weight": 16.0}, {"id": "access.cloaking", "fix": "", "gap": 0.0, "label": "No blocking / cloaking of AI bots", "detail": "AI bots get the same access and content as a normal visitor.", "earned": 8.0, "effort": "medium", "pillar": "access", "status": "pass", "weight": 8.0}, {"id": "access.latency", "fix": "", "gap": 0.0, "label": "Fast enough response for agents", "detail": "Fast response (1853 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": "Publish an /llms.txt listing your categories, product pages and key policies.", "gap": 4.0, "label": "llms.txt present", "detail": "No /llms.txt.", "earned": 0.0, "effort": "easy", "pillar": "access", "status": "fail", "weight": 4.0}, {"id": "access.agents_md", "fix": "Publish an /agents.md describing how agents should navigate and use your site (Shopify themes can serve one natively).", "gap": 0.0, "label": "agents.md present (preview)", "detail": "No /agents.md.", "earned": 0.0, "effort": "easy", "pillar": "access", "status": "fail", "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 (5583 visible characters).", "earned": 4.0, "effort": "hard", "pillar": "access", "status": "pass", "weight": 4.0}], "earned": 24.0, "weight": 40.0}, {"id": "structured_data", "pct": 91, "icon": "\ud83c\udff7\ufe0f", "name": "Structured data", "checks": [{"id": "sd.product", "fix": "", "gap": 0.0, "label": "Product JSON-LD present", "detail": "Schema.org Product found in JSON-LD (product page).", "earned": 12.0, "effort": "medium", "pillar": "structured_data", "status": "pass", "weight": 12.0}, {"id": "sd.price", "fix": "", "gap": 0.0, "label": "Structured price + currency", "detail": "price=38.5 EUR.", "earned": 8.0, "effort": "easy", "pillar": "structured_data", "status": "pass", "weight": 8.0}, {"id": "sd.availability", "fix": "", "gap": 0.0, "label": "Structured availability", "detail": "availability=http://schema.org/InStock.", "earned": 5.0, "effort": "easy", "pillar": "structured_data", "status": "pass", "weight": 5.0}, {"id": "sd.brand", "fix": "", "gap": 0.0, "label": "Structured brand", "detail": "brand=Typology Paris.", "earned": 3.0, "effort": "easy", "pillar": "structured_data", "status": "pass", "weight": 3.0}, {"id": "sd.identifier", "fix": "", "gap": 0.0, "label": "Product identifier (SKU / GTIN)", "detail": "SKU/GTIN/MPN present \u2014 reliable product resolution.", "earned": 4.0, "effort": "medium", "pillar": "structured_data", "status": "pass", "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": 32.0, "weight": 35.0}, {"id": "catalog", "pct": 37, "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": "Expose attributes (color, size, material, category) as structured JSON-LD fields (additionalProperty) or via the feed.", "gap": 8.0, "label": "Attributes as fields (not prose)", "detail": "No structured filterable attribute \u2014 the agent can't filter.", "earned": 0.0, "effort": "medium", "pillar": "catalog", "status": "fail", "weight": 8.0}, {"id": "cat.feed", "fix": "", "gap": 2.8, "label": "Product feed / catalog signals", "detail": "Feed signals: OpenGraph product, og:availability.", "earned": 4.2, "effort": "medium", "pillar": "catalog", "status": "partial", "weight": 7.0}], "earned": 9.2, "weight": 25.0}, {"id": "rails", "pct": 12, "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": "Offers expose machine-readable return policy and shipping details \u2014 an agent can quote the buyer the full, true cost.", "earned": 2.0, "effort": "medium", "pillar": "rails", "status": "pass", "weight": 2.0}, {"id": "act.checkout", "fix": "Expose the add-to-cart action in the raw product-page HTML (a /cart/add form or equivalent marker), not only after scripts run.", "gap": 1.0, "label": "Add-to-cart action detectable", "detail": "No add-to-cart action is visible in the raw page \u2014 if the buy button only exists after scripts run, an agent reading the page can see your product but not how to start buying it.", "earned": 0.0, "effort": "hard", "pillar": "rails", "status": "fail", "weight": 1.0}], "earned": 2.0, "weight": 16.0}], "roadmap": {"gain": 40, "steps": [{"n": 1, "how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "Blocked: GPTBot, ClaudeBot, Google-Extended. Allowed: PerplexityBot.", "title": "robots.txt allows agent crawlers", "effort": "easy", "impact": 12.0, "pillar": "Access & crawlability", "check_id": "access.ai_crawlers", "cumulative": 79}, {"n": 2, "how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "No structured filterable attribute \u2014 the agent can't filter.", "title": "Attributes as fields (not prose)", "effort": "medium", "impact": 8.0, "pillar": "Catalog & attributes", "check_id": "cat.attributes", "cumulative": 87}, {"n": 3, "how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "No /llms.txt.", "title": "llms.txt present", "effort": "easy", "impact": 4.0, "pillar": "Access & crawlability", "check_id": "access.llms_txt", "cumulative": 91}, {"n": 4, "how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "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.)", "title": "A2A Agent Card (/.well-known/agent-card.json)", "effort": "easy", "impact": 3.0, "pillar": "Transaction rails & agent access", "check_id": "proto.a2a_card", "cumulative": 94}, {"n": 5, "how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "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).", "title": "ARD AI Catalog (/.well-known/ai-catalog.json)", "effort": "easy", "impact": 3.0, "pillar": "Transaction rails & agent access", "check_id": "proto.ard_catalog", "cumulative": 97}], "capped": false, "current": 57, "grade_up": true, "projected": 97, "cap_reason": "", "target_grade": "A", "current_grade": "C"}, "headline": "Average. An agent copes but trips on concrete points.", "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": "# Typology Paris\n\n> Typology est n\u00e9e d'une mission : d\u00e9mystifier l'industrie du soin. Nous concevons et produisons en France des produits sains et efficaces, \u00e0 prix juste.\n\n## Policies\n- Shipping: <add your delivery times and zones>\n- Returns: <add your return policy>\n\n## Sitemap\n- https://www.typology.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": 37, "median": 20, "verdict": "Above the beauty & cosmetics median (+37).", "vertical": "beauty", "percentile": 100, "provisional": false, "sample_size": 10, "vertical_label": "beauty & cosmetics"}, "final_url": "https://www.typology.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 add-to-cart action is visible in the raw page \u2014 if the buy button only exists after scripts run, an agent reading the page can see your product but not how to start buying it.", "points": 0, "status": "fail"}, {"id": "access.agent_class", "label": "Shopping-agent access (Agent class)", "detail": "On-demand shopping agents (ChatGPT-User, Claude-User, Perplexity-User) load the site like a normal visitor.", "points": 0, "status": "pass"}, {"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 Google-Extended is disallowed (invisible to Gemini answers). 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": "Offers expose machine-readable return policy and shipping details \u2014 an agent can quote the buyer the full, true cost.", "points": 0, "status": "pass"}], "top_fixes": [{"how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "Blocked: GPTBot, ClaudeBot, Google-Extended. Allowed: PerplexityBot.", "title": "robots.txt allows agent crawlers", "effort": "easy", "impact": 12.0, "pillar": "Access & crawlability", "check_id": "access.ai_crawlers"}, {"how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "No structured filterable attribute \u2014 the agent can't filter.", "title": "Attributes as fields (not prose)", "effort": "medium", "impact": 8.0, "pillar": "Catalog & attributes", "check_id": "cat.attributes"}, {"how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "No /llms.txt.", "title": "llms.txt present", "effort": "easy", "impact": 4.0, "pillar": "Access & crawlability", "check_id": "access.llms_txt"}, {"how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "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.)", "title": "A2A Agent Card (/.well-known/agent-card.json)", "effort": "easy", "impact": 3.0, "pillar": "Transaction rails & agent access", "check_id": "proto.a2a_card"}, {"how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "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).", "title": "ARD AI Catalog (/.well-known/ai-catalog.json)", "effort": "easy", "impact": 3.0, "pillar": "Transaction rails & agent access", "check_id": "proto.ard_catalog"}], "cap_reason": "", "proto_bonus": 0, "scoring_version": 2}}