{
  "url": "https://agents.bag-selection.ch",
  "rubric": {
    "version": "v2",
    "score": 18,
    "band": "emerging",
    "bandLabel": "Emerging",
    "dimensions": [
      {
        "key": "product_jsonld",
        "label": "Product JSON-LD",
        "weight": 18,
        "score": 0,
        "oneLineFix": "Emit a Product JSON-LD block on every PDP with name, sku/gtin, description and image[].",
        "evidence": {
          "message": "No PDP URL could be discovered from the sitemap.",
          "fix": "Add a Product JSON-LD block with name, sku, description and image[] to every PDP.",
          "facts": {
            "blockCount": 0,
            "productNode": false,
            "name": false,
            "skuOrGtin": false,
            "description": false,
            "imageArray": false
          }
        }
      },
      {
        "key": "offer_clarity",
        "label": "Offer clarity",
        "weight": 16,
        "score": 0,
        "oneLineFix": "Add an Offer node to every Product with price, priceCurrency, availability and priceValidUntil so agents can quote a confident price.",
        "evidence": {
          "message": "No Offer node attached to Product — agents can't quote a current price.",
          "facts": {
            "offerNode": false,
            "price": false,
            "currency": false,
            "availability": false,
            "priceValidUntil": false,
            "saleWindowValid": false
          }
        }
      },
      {
        "key": "catalog_feed_quality",
        "label": "Catalog feed quality",
        "weight": 16,
        "score": 0,
        "oneLineFix": "Publish a structured product feed with GTIN, google_product_category, brand and a 2+ level taxonomy.",
        "evidence": {
          "message": "No public structured product feed was discoverable (no /products.json on Shopify or /wp-json/wc/store/products on WooCommerce).",
          "fix": "Expose a structured catalogue feed at /products.json (Shopify) or /wp-json/wc/store/products (WooCommerce).",
          "facts": {
            "feedReachable": false,
            "products": 0,
            "gtin": false,
            "brand": false,
            "categories": false
          }
        }
      },
      {
        "key": "freshness_inventory",
        "label": "Freshness and inventory",
        "weight": 14,
        "score": 64,
        "oneLineFix": "Keep inventory and price feeds current — agents downweight stores whose stock or pricing looks stale.",
        "evidence": {
          "message": "Inventory signals look stale — agents downweight stores whose stock or pricing isn't current.",
          "fix": "Keep your catalog feed in sync with stock and price; refresh at least daily.",
          "facts": {
            "topProductsPricedFreshly": false
          }
        }
      },
      {
        "key": "rich_pdp_schema",
        "label": "Rich PDP schema",
        "weight": 12,
        "score": 0,
        "oneLineFix": "Add AggregateRating, BreadcrumbList, FAQPage and hasMerchantReturnPolicy to your PDPs — each unlocks a distinct shopping-answer surface.",
        "evidence": {
          "message": "None of the four rich PDP nodes (AggregateRating, BreadcrumbList, FAQPage, MerchantReturnPolicy) detected.",
          "fix": "Add AggregateRating schema to the PDP — each missing node closes a distinct path agents use to recommend you.",
          "facts": {
            "aggregateRating": false,
            "breadcrumbList": false,
            "faqPage": false,
            "merchantReturnPolicy": false
          }
        }
      },
      {
        "key": "image_media",
        "label": "Image and media",
        "weight": 8,
        "score": 0,
        "oneLineFix": "Use ≥3 absolute https product images at ≥800px width, with alt text and a populated schema image[] array.",
        "evidence": {
          "message": "0 <img> tags on the PDP, — absolute https URLs, — have alt text. Schema image[] array has 0 entries.",
          "fix": "Include at least 3 product images in the Product.image[] array.",
          "facts": {
            "imgTags": 0,
            "absoluteHttps": "—",
            "altCoverage": "—",
            "schemaImageArrayLen": 0
          }
        }
      },
      {
        "key": "agent_commerce_surface",
        "label": "Agent commerce surface",
        "weight": 9,
        "score": 21,
        "oneLineFix": "Serve /.well-known/ucp with rich capabilities (especially an MCP service) and signing keys — basic UCP presence is now table-stakes; depth is what separates a store agents can transact with from one they can only browse.",
        "evidence": {
          "message": "UCP profile present (0 capabilities, 0 signing keys) — no MCP service in ucp.services.",
          "fix": "Advertise an MCP-typed service inside ucp.services so agents can call tools.",
          "facts": {
            "ucpProfile": true,
            "capabilities": 0,
            "signingKeys": 0,
            "advertisesMcp": false,
            "merchantHosted": false,
            "agentCard": true,
            "oauthPR": true,
            "fictitiousWellKnowns": true
          }
        }
      },
      {
        "key": "agent_accessibility",
        "label": "Agent accessibility",
        "weight": 7,
        "score": 95,
        "oneLineFix": "Allow GPTBot, OAI-SearchBot, PerplexityBot and ClaudeBot in robots.txt — blocking these makes you invisible in agentic shopping answers.",
        "evidence": {
          "message": "robots.txt allows the four primary shopping agents (GPTBot, OAI-SearchBot, PerplexityBot, ClaudeBot).",
          "url": "/robots.txt",
          "facts": {
            "blockedTriggers": 0,
            "partials": 0,
            "GPTBot": "allowed",
            "OAI-SearchBot": "allowed",
            "PerplexityBot": "allowed",
            "ClaudeBot": "allowed"
          }
        }
      }
    ],
    "oneLineFix": "Emit a Product JSON-LD block on every PDP with name, sku/gtin, description and image[].",
    "scoredAt": "2026-06-11"
  },
  "checks": [
    {
      "id": "discovery.llms_txt",
      "name": "Has /llms.txt",
      "status": "pass",
      "severity": "fail",
      "message": "/llms.txt served with H1 present",
      "details": {
        "title": "Bag Selection",
        "bytes": 972,
        "sections": 2,
        "xpayDetected": true
      }
    },
    {
      "id": "discovery.ucp_profile",
      "name": "Has /.well-known/ucp (UCP business profile)",
      "status": "warn",
      "severity": "fail",
      "message": "Profile served but signing_keys[] is empty — agents cannot verify RFC 9421 signatures",
      "details": {
        "version": "2026-05-18",
        "capabilityCount": 7,
        "serviceCount": 2,
        "signingKeyCount": 0
      }
    },
    {
      "id": "discovery.no_fictitious_wellknowns",
      "name": "Does not emit fictitious well-known URIs",
      "status": "fail",
      "severity": "fail",
      "message": "2 fictitious well-known URI(s) served: /.well-known/mcp.json, /agents.txt",
      "details": {
        "checked": [
          {
            "path": "/.well-known/agentic-commerce.json",
            "status": 404
          },
          {
            "path": "/.well-known/ucp.json",
            "status": 404
          },
          {
            "path": "/.well-known/acp.json",
            "status": 404
          },
          {
            "path": "/.well-known/ap2.json",
            "status": 404
          },
          {
            "path": "/.well-known/mcp.json",
            "status": 200
          },
          {
            "path": "/.well-known/ai-plugin.json",
            "status": 404
          },
          {
            "path": "/agents.txt",
            "status": 200
          },
          {
            "path": "/ai.txt",
            "status": 404
          }
        ],
        "offenders": [
          {
            "path": "/.well-known/mcp.json",
            "status": 200
          },
          {
            "path": "/agents.txt",
            "status": 200
          }
        ]
      }
    },
    {
      "id": "discovery.robots_ai_allowlist",
      "name": "robots.txt does not block AI crawlers",
      "status": "pass",
      "severity": "fail",
      "message": "All 12 AI user-agents explicitly allowed",
      "details": {
        "allowed": [
          "GPTBot",
          "ChatGPT-User",
          "OAI-SearchBot",
          "ClaudeBot",
          "Claude-User",
          "Claude-SearchBot",
          "PerplexityBot",
          "Perplexity-User",
          "Google-Extended",
          "Applebot-Extended",
          "CCBot",
          "Amazonbot"
        ]
      }
    },
    {
      "id": "discovery.schema_org_product",
      "name": "PDP emits schema.org Product JSON-LD",
      "status": "skip",
      "severity": "fail",
      "message": "No product URL discovered (no sitemap or no /product/ entries); pass --product-url=<url> to audit a PDP explicitly"
    },
    {
      "id": "discovery.agent_card",
      "name": "A2A /.well-known/agent-card.json (watchlist)",
      "status": "pass",
      "severity": "info",
      "message": "Agent card present: \"Bag Selection\"",
      "details": {
        "name": "Bag Selection",
        "version": "0.1.0",
        "capabilities": [
          "shopping",
          "cart",
          "inventory"
        ],
        "skillCount": 2
      }
    },
    {
      "id": "discovery.oauth_protected_resource",
      "name": "RFC 9728 /.well-known/oauth-protected-resource (optional)",
      "status": "pass",
      "severity": "info",
      "message": "OAuth resource metadata present (resource=https://agents.bag-selection.ch/api/ucp/v1)",
      "details": {
        "resource": "https://agents.bag-selection.ch/api/ucp/v1",
        "authorizationServers": [
          "https://auth.xpay.sh"
        ],
        "scopes": [
          "catalog.read",
          "cart.write",
          "order.read"
        ]
      }
    },
    {
      "id": "cr.product_feed",
      "name": "AI can read your full catalogue",
      "status": "fail",
      "message": "AI shoppers can't read your product catalog from a public endpoint (Shopify /products.json or WC Store API)."
    },
    {
      "id": "cr.live_pricing",
      "name": "Live prices visible to AI",
      "status": "fail",
      "message": "AI assistants can't read your current prices from the homepage in a structured format."
    },
    {
      "id": "cr.ai_guide",
      "name": "Plain-text guide for AI assistants",
      "status": "pass",
      "message": "You publish a /llms.txt guide telling AI what your store sells and where to look."
    },
    {
      "id": "cr.agent_checkout_discovery",
      "name": "AI assistants know where to send a buyer",
      "status": "fail",
      "message": "AI assistants can't find a checkout endpoint — they have to fall back to a web link."
    },
    {
      "id": "cr.agents_allowed",
      "name": "AI shoppers are allowed in",
      "status": "pass",
      "message": "AI assistants are not blocked from your store in robots.txt."
    },
    {
      "id": "cr.in_chat_checkout",
      "name": "AI shoppers can buy without leaving the chat",
      "status": "fail",
      "message": "AI shoppers can't complete a purchase here — they get redirected back to your website."
    },
    {
      "id": "cr.direct_buy",
      "name": "Direct buy link signals",
      "status": "fail",
      "message": "AI assistants have to guess which link is the buy button — no schema.org BuyAction emitted."
    },
    {
      "id": "cr.fresh_inventory",
      "name": "Stock & price kept current",
      "status": "fail",
      "message": "AI shoppers can't reliably see live stock or pricing from your public catalog."
    },
    {
      "id": "v2.pdp_deep_scan",
      "name": "PDP deep-scan",
      "status": "skip",
      "message": "No PDP URL discoverable from sitemap",
      "details": {
        "pdpUrl": null
      }
    }
  ],
  "fellBackToHeadless": false,
  "runId": "6412fbda-d70a-4894-be7d-9508fbf827f4",
  "auditorVersion": "0.1.0",
  "commerceReadiness": {
    "checkout_score": 16,
    "checks": [
      {
        "id": "cr.product_feed",
        "label": "AI can read your full catalogue",
        "passed": false,
        "state": "fail",
        "weight": 20,
        "detail": "AI shoppers can't read your product catalog from a public endpoint (Shopify /products.json or WC Store API)."
      },
      {
        "id": "cr.live_pricing",
        "label": "Live prices visible to AI",
        "passed": false,
        "state": "fail",
        "weight": 14,
        "detail": "AI assistants can't read your current prices from the homepage in a structured format."
      },
      {
        "id": "cr.ai_guide",
        "label": "Plain-text guide for AI assistants",
        "passed": true,
        "state": "pass",
        "weight": 8,
        "detail": "You publish a /llms.txt guide telling AI what your store sells and where to look."
      },
      {
        "id": "cr.agent_checkout_discovery",
        "label": "AI assistants know where to send a buyer",
        "passed": false,
        "state": "fail",
        "weight": 14,
        "detail": "AI assistants can't find a checkout endpoint — they have to fall back to a web link."
      },
      {
        "id": "cr.agents_allowed",
        "label": "AI shoppers are allowed in",
        "passed": true,
        "state": "pass",
        "weight": 8,
        "detail": "AI assistants are not blocked from your store in robots.txt."
      },
      {
        "id": "cr.in_chat_checkout",
        "label": "AI shoppers can buy without leaving the chat",
        "passed": false,
        "state": "fail",
        "weight": 20,
        "detail": "AI shoppers can't complete a purchase here — they get redirected back to your website."
      },
      {
        "id": "cr.direct_buy",
        "label": "Direct buy link signals",
        "passed": false,
        "state": "fail",
        "weight": 6,
        "detail": "AI assistants have to guess which link is the buy button — no schema.org BuyAction emitted."
      },
      {
        "id": "cr.fresh_inventory",
        "label": "Stock & price kept current",
        "passed": false,
        "state": "fail",
        "weight": 10,
        "detail": "AI shoppers can't reliably see live stock or pricing from your public catalog."
      }
    ],
    "jsonld_types": [],
    "soft404_detected": false
  }
}