{
  "version": "0.1.0",
  "rubricVersion": "0.7",
  "target": "https://shopify.com",
  "host": "shopify.com",
  "https": true,
  "scannedAt": "2026-10-12T23:03:25.128Z",
  "durationMs": 1500,
  "requests": 218,
  "score": 33.4,
  "grade": "BB",
  "gradeLabel": "thin",
  "previous": {
    "score": 33.4,
    "grade": "BB",
    "level": 0,
    "fingerprint": "5d805e1c45c6dc2de4e883fa1b0150419771ce5af1e2a23606edd9c8e0b820b5",
    "scannedAt": "2026-10-12T23:03:19.591Z",
    "counts": {
      "pass": 9,
      "warn": 13,
      "fail": 29,
      "na": 10,
      "total": 61
    },
    "rubricVersion": "0.7"
  },
  "level": 0,
  "levelName": "Not Ready",
  "levelBlurb": "Agents cannot read, verify or use this site.",
  "verdict": "Not Ready",
  "tiers": {
    "essential": {
      "score": 29.21244444444445,
      "pool": 80,
      "counted": 16,
      "total": 16
    },
    "recommended": {
      "score": 5.071031746031746,
      "pool": 20,
      "counted": 20,
      "total": 28
    },
    "emerging": {
      "score": 0.8312500000000002,
      "pool": 5,
      "counted": 15,
      "total": 17
    }
  },
  "confidence": 99,
  "confidenceLabel": "high",
  "fingerprint": "5d805e1c45c6dc2de4e883fa1b0150419771ce5af1e2a23606edd9c8e0b820b5",
  "isCommerce": true,
  "commerceSignals": [
    "purchase-intent copy (\"buy now\")",
    "commerce path (/shop)"
  ],
  "blocked": null,
  "blockedNote": null,
  "deadline": {
    "ms": 60000,
    "reached": false
  },
  "profile": {
    "id": "general",
    "identified": false,
    "declared": false,
    "ambiguous": [
      "marketplace",
      "api"
    ],
    "evidence": [
      "Two profiles are too close to separate: marketplace (3) and api (2), margin 1 < 2.",
      "Profile-scoped checks were not scored rather than guessed at."
    ],
    "scores": [
      {
        "id": "marketplace",
        "score": 3,
        "signals": [
          "Describes itself as a marketplace"
        ]
      },
      {
        "id": "api",
        "score": 2,
        "signals": [
          "A developer portal responds"
        ]
      },
      {
        "id": "ecommerce",
        "score": 2,
        "signals": [
          "A product listing path responds",
          "A shop path responds"
        ]
      },
      {
        "id": "saas",
        "score": 2,
        "signals": [
          "A pricing page responds"
        ]
      },
      {
        "id": "services",
        "score": 2,
        "signals": [
          "A contact path responds",
          "A pricing path responds"
        ]
      }
    ]
  },
  "categories": [
    {
      "id": "protocol",
      "label": "Protocol Discovery",
      "weight": 0.25,
      "score": 12.5,
      "counted": true,
      "pass": 1,
      "warn": 3,
      "fail": 10,
      "na": 3,
      "total": 17
    },
    {
      "id": "content",
      "label": "Content Accessibility",
      "weight": 0.22,
      "score": 45.5,
      "counted": true,
      "pass": 5,
      "warn": 1,
      "fail": 6,
      "na": 3,
      "total": 15
    },
    {
      "id": "discoverability",
      "label": "Discoverability",
      "weight": 0.2,
      "score": 40.9,
      "counted": true,
      "pass": 2,
      "warn": 4,
      "fail": 5,
      "na": 0,
      "total": 11
    },
    {
      "id": "botaccess",
      "label": "Bot Access Control",
      "weight": 0.18,
      "score": 19.3,
      "counted": true,
      "pass": 0,
      "warn": 3,
      "fail": 5,
      "na": 0,
      "total": 8
    },
    {
      "id": "commerce",
      "label": "Commerce Protocols",
      "weight": 0.15,
      "score": 37.1,
      "counted": true,
      "pass": 1,
      "warn": 2,
      "fail": 3,
      "na": 4,
      "total": 10
    }
  ],
  "checks": [
    {
      "id": "reachable",
      "category": "discoverability",
      "tier": "essential",
      "weight": 3,
      "impact": "critical",
      "conditional": false,
      "label": "Homepage open to agent access",
      "why": "If an agent cannot read your site, every other check is moot. Cloudflare began blocking AI crawlers by default in 2025, with signed agents routed separately.",
      "skill": "agent-access",
      "standards": [],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "Homepage redirected off shopify.com to www.shopify.com (HTTP 200, 668424 bytes).",
      "evidence": "HTTP 200 · text/html; charset=utf-8 · 668424 bytes · 74 ms · final https://www.shopify.com/",
      "fix": null
    },
    {
      "id": "robots-txt",
      "category": "discoverability",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "robots.txt with agent directives",
      "why": "The front door for agent traffic (RFC 9309).",
      "skill": "robots-txt",
      "standards": [
        "RFC 9309"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "robots.txt answered HTTP 429 with 9358 bytes.",
      "evidence": "HTTP 429 · text/html; charset=utf-8 · 9358 bytes · 29 ms",
      "fix": "# https://example.com/robots.txt  (RFC 9309)\nUser-agent: *\nAllow: /\nDisallow: /admin/\n\nUser-agent: GPTBot\nAllow: /\n\nUser-agent: ClaudeBot\nAllow: /\n\nSitemap: https://example.com/sitemap.xml"
    },
    {
      "id": "sitemap-xml",
      "category": "discoverability",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "sitemap.xml valid and current",
      "why": "The primary URL discovery source for agent crawlers.",
      "skill": "sitemap",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "555 absolute URLs, 555 with <lastmod>.",
      "evidence": "HTTP 200 · application/xml · 69899 bytes · 77 ms · final https://www.shopify.com/sitemap.xml · root <urlset>",
      "fix": null
    },
    {
      "id": "llms-txt",
      "category": "discoverability",
      "tier": "essential",
      "weight": 3,
      "impact": "critical",
      "conditional": false,
      "label": "/llms.txt published and well-structured",
      "why": "The most widely adopted contract for making a site legible to agents. In the curated corpus we measured, 46% of sites published one and the average quality score was 37 out of 100 — adoption is not the same as usefulness.",
      "skill": "llms-txt",
      "standards": [
        "llmstxt.org"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "H1 \"Shopify\", blockquote summary, 12 H2 sections with 74 markdown links, 12520 bytes. The scan requested none of its links. Not requested: 74 links on another origin.",
      "evidence": "HTTP 200 · text/plain; charset=utf-8 · 12520 bytes · 77 ms · final https://www.shopify.com/llms.txt · headings: Shopify | Start a Business | Build with AI | Sell Online | Payments and Money | Manage your Store | Grow your Business …",
      "fix": null
    },
    {
      "id": "link-headers",
      "category": "discoverability",
      "tier": "emerging",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Discovery via Link response headers",
      "why": "RFC 8288 Link headers let an agent find your discovery resources without parsing HTML.",
      "skill": "link-headers",
      "standards": [
        "RFC 8288"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No Link header on the homepage response (HTTP 200, 668424 bytes).",
      "evidence": "HTTP 200 · text/html; charset=utf-8 · 668424 bytes · 74 ms · final https://www.shopify.com/",
      "fix": "# nginx: advertise discovery resources on the homepage response.\nadd_header Link '</llms.txt>; rel=\"describedby\"; type=\"text/plain\", </sitemap.xml>; rel=\"alternate\"; type=\"application/xml\"' always;\n\n# Raw header, one comma-separated field:\nLink: </llms.txt>; rel=\"describedby\"; type=\"text/plain\", </sitemap.xml>; rel=\"alternate\"; type=\"application/xml\""
    },
    {
      "id": "dns-aid",
      "category": "discoverability",
      "tier": "emerging",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "DNS-AID discovery record",
      "why": "Lets agents read discovery information over DNS without an HTTP round trip. Cloudflare added it to its readiness checklist.",
      "skill": "dns-aid",
      "standards": [],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "Only the TXT fallback form is published (3 records, 4 key=value pairs).",
      "evidence": "v=BIMI1; l=; a=;",
      "fix": "; DNS-AID (draft-mozleywilliams-dnsop-dnsaid)\n_index._agents.example.com. 3600 IN SVCB 1 agent-index.example.com (\n    alpn=\"h2\"\n    port=443\n    well-known=agent-card.json\n)\n\nassistant.example.com. 3600 IN SVCB 1 . (\n    alpn=\"mcp,h2\"\n    port=443\n    well-known=agent-card.json\n    cap=https://example.com/.well-known/agent-card.json\n)"
    },
    {
      "id": "canonical",
      "category": "discoverability",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Canonical and hreflang discipline",
      "why": "An agent needs one consistent URL per important page.",
      "skill": "canonical",
      "standards": [],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "Canonical points at www.shopify.com, not the scanned host shopify.com.",
      "evidence": "https://www.shopify.com/",
      "fix": "<link rel=\"canonical\" href=\"https://example.com/\">\n<link rel=\"alternate\" hreflang=\"en\" href=\"https://example.com/\">\n<link rel=\"alternate\" hreflang=\"de\" href=\"https://example.com/de/\">\n<link rel=\"alternate\" hreflang=\"x-default\" href=\"https://example.com/\">"
    },
    {
      "id": "llms-full",
      "category": "discoverability",
      "tier": "recommended",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "/llms-full.txt expanded context",
      "why": "Lets an agent take in the full context in a single request instead of walking the site step by step.",
      "skill": "llms-full-txt",
      "standards": [],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "2089 words of text and 107 link lines in 18863 bytes, which is a list of links rather than expanded page content.",
      "evidence": "HTTP 200 · text/plain; charset=utf-8 · 18863 bytes · 77 ms · final https://www.shopify.com/llms-full.txt · # Shopify > [Shopify](https://www.shopify.com/about) is the leading commerce platform for starting, running, and growin…",
      "fix": "# In /llms.txt, under Docs:\n- [Full context](https://example.com/llms-full.txt): Every key page as one document\n\n# /llms-full.txt\n# Example Inc - full context\n\n> Complete text of the pages an agent needs, in a single request. Regenerated on deploy.\n\n## https://example.com/ (Home)\n\nExample Inc runs a payments API for marketplaces. Production traffic is served from three regions.\n\n## https://example.com/pricing (Pricing)\n\nStarter is $0 for 1,000 calls per month. Growth is $99 for 100,000 calls."
    },
    {
      "id": "agents-md",
      "category": "discoverability",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "AGENTS.md with the required sections",
      "why": "The instruction file for coding and operations agents. It fails more often than any other check in the curated corpus we measured, and the usual reason is not a missing file but a file without the sections an agent needs.",
      "skill": "agents-md",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "Not found (HTTP 404, 11026 bytes).",
      "evidence": "HTTP 404 · text/html · 11026 bytes · 48 ms · final https://www.shopify.com/AGENTS.md",
      "fix": "# AGENTS.md\n\n## Project overview\nExample Inc is a payments API for marketplaces. Docs: https://example.com/docs\n\n## Setup and build\n- `pnpm install`\n- `pnpm dev` -> http://localhost:3000\n- `pnpm build`\n\n## Testing\n- `pnpm test`; lint and types: `pnpm lint && pnpm typecheck`\n\n## Conventions\n- TypeScript strict mode; no `any` in exported signatures.\n- Public API routes live in `src/routes/api/`.\n\n## Security and contact\n- Never commit secrets; use `.env.local`.\n- Report vulnerabilities to security@example.com."
    },
    {
      "id": "sitemap-md",
      "category": "discoverability",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "/sitemap.md markdown site map",
      "why": "Lets an agent read your site structure as markdown in a single file. Adoption is still very low, so this is an early-mover advantage.",
      "skill": "sitemap-md",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "Not found (HTTP 404, 11029 bytes).",
      "evidence": "HTTP 404 · text/html · 11029 bytes · 59 ms · final https://www.shopify.com/sitemap.md",
      "fix": "# Sitemap\n\n- [Home](https://example.com/): What Example Inc does and who it is for\n- [Quickstart](https://example.com/docs/quickstart): First API call in five minutes\n- [API reference](https://example.com/docs/api): Every endpoint and response field\n- [Pricing](https://example.com/pricing): Plans, limits and overage rates\n- [Status](https://example.com/status): Live service status and incident history\n- [Contact](https://example.com/contact): Sales and support routes"
    },
    {
      "id": "markdown-negotiation",
      "category": "content",
      "tier": "recommended",
      "weight": 3,
      "impact": "critical",
      "conditional": false,
      "label": "Markdown content negotiation",
      "why": "Agents can request a markup-free version with \"Accept: text/markdown\", which cuts token cost.",
      "skill": "markdown-negotiation",
      "standards": [
        "RFC 9110"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "The homepage answered Accept: text/markdown with Content-Type text/html; charset=utf-8 (HTTP 200), so the HTML document is served to every client.",
      "evidence": "status: 200; content-type: text/html; charset=utf-8; vary: (none); markdown body: no",
      "fix": "// server.js - one URL, two representations (RFC 9110).\nimport express from 'express';\nimport { readFile } from 'node:fs/promises';\n\nconst app = express();\napp.use(async (req, res, next) => {\n  if (req.method !== 'GET') return next();\n  res.vary('Accept'); // the HTML response must carry this too\n  if (req.accepts(['text/html', 'text/markdown']) !== 'text/markdown') return next();\n  try {\n    const file = `public${req.path.replace(/\\/$/, '/index')}.md`;\n    res.type('text/markdown').send(await readFile(file, 'utf8'));\n  } catch {\n    next(); // no markdown twin for this path: fall back to HTML\n  }\n});\napp.use(express.static('public'));\napp.listen(3000);"
    },
    {
      "id": "headings",
      "category": "content",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Semantic heading structure",
      "why": "A single H1 and a consistent H2 structure let the content be split correctly.",
      "skill": "semantic-headings",
      "standards": [
        "WCAG 2.2"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "1 H1 with 6 H2s and 14 H3s, and no level in the outline is skipped.",
      "evidence": "outline: H1 H2 H2 H3 H4 H4 H4 H3 H4 H3 H4 H4 H4 H2 H3 H3 H3 H3 H2 H3 H3 H3 H2 H3 H3 H3 H3 H2",
      "fix": null
    },
    {
      "id": "meta",
      "category": "content",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Title and summary metadata",
      "why": "This is how an agent learns what a page is about without opening it.",
      "skill": "page-metadata",
      "standards": [],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "Both carriers are present but outside the band: title 66 characters (band 50-60).",
      "evidence": "title(66): Shopify: The All-in-One Commerce Platform for Businesses - Shopify | description(142): Try Shopify free. Build or grow your business fast with AI. Get more than ecommerce software with tools to manage every part of your business.",
      "fix": "<head>\n  <meta charset=\"utf-8\" />\n  <title>Agent readiness audit for e-commerce teams | Acme Inc</title>\n  <meta\n    name=\"description\"\n    content=\"Acme audits how well your store serves AI agents: 52 checks across discovery, content, bot access and commerce, each paired with a paste-ready fix.\"\n  />\n</head>"
    },
    {
      "id": "jsonld",
      "category": "content",
      "tier": "essential",
      "weight": 3,
      "impact": "critical",
      "conditional": false,
      "label": "JSON-LD structured data",
      "why": "The entity type becomes unambiguous to a machine. Without authoritative data, an agent answers from whatever it can scrape.",
      "skill": "structured-data",
      "standards": [
        "schema.org"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "1 JSON-LD block parsed with a schema.org @context declaring Corporation (2 @types in total).",
      "evidence": "blocks: 1 total, 1 non-empty, 1 parsed; schema.org @context: yes; @types: Corporation, ContactPoint",
      "fix": null
    },
    {
      "id": "faq-schema",
      "category": "content",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "FAQ / question-answer schema",
      "why": "Question-and-answer content is the type agents quote most.",
      "skill": "faq-schema",
      "standards": [
        "schema.org/FAQPage"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No FAQPage entity among 1 parsed JSON-LD block on the homepage.",
      "evidence": "@types: Corporation, ContactPoint",
      "fix": "<script type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What does an agent readiness audit measure?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Fifty-two checks across discovery, content, bot access, protocol and commerce, each scored and paired with a fix.\"\n      }\n    }\n  ]\n}\n</script>"
    },
    {
      "id": "breadcrumb",
      "category": "content",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "Breadcrumb / navigation schema",
      "why": "Helps an agent make sense of where a page sits in your site.",
      "skill": "breadcrumb-schema",
      "standards": [
        "schema.org/BreadcrumbList"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No BreadcrumbList entity among 1 parsed JSON-LD block on the homepage.",
      "evidence": "@types: Corporation, ContactPoint",
      "fix": "<script type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"BreadcrumbList\",\n  \"itemListElement\": [\n    { \"@type\": \"ListItem\", \"position\": 1, \"name\": \"Home\", \"item\": \"https://www.example.com/\" },\n    { \"@type\": \"ListItem\", \"position\": 2, \"name\": \"Checks\", \"item\": \"https://www.example.com/checks\" },\n    { \"@type\": \"ListItem\", \"position\": 3, \"name\": \"Structured data\", \"item\": \"https://www.example.com/checks/jsonld\" }\n  ]\n}\n</script>"
    },
    {
      "id": "summary",
      "category": "content",
      "tier": "recommended",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Prominent summary block",
      "why": "The llms.txt contract recommends a short summary at the top of every page; agents quote it directly.",
      "skill": "page-summary",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "The first 1000 characters of main content hold no paragraph or summary block (3408 characters of main text).",
      "evidence": "Be the next AI all-star Be the next store they line up for AI all-star household name solo-preneur category creator global empire store they line up for big thing Dream big and build fast on Shopify.",
      "fix": "<main>\n  <h1>Token efficiency for agent-readable pages</h1>\n  <p class=\"summary\">\n    Content-to-markup ratio is the share of a page's bytes an agent can read: below 15% most of the\n    HTML is scaffolding, and every wrapper div is billed to someone's context window.\n  </p>\n  <h2>How the ratio is measured</h2>\n  <p>Script, style and template blocks are removed, the remaining tags are stripped, and the visible\n  characters are divided by the raw HTML size.</p>\n</main>"
    },
    {
      "id": "lang",
      "category": "content",
      "tier": "recommended",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Language declaration and multilingual access",
      "why": "A wrong language tag makes an agent misread the content.",
      "skill": "language-declaration",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "html lang=\"en\" with 85 hreflang alternates, all with absolute hrefs plus a self-reference and x-default.",
      "evidence": "html lang=\"en\"; alternates: x-default -> https://www.shopify.com, en-us -> https://www.shopify.com, es-ar -> https://www.shopify.com/ar, en-au -> https://www.shopify.com/au, de-at -> https://www.shopify.com/at, bn-bd -> https://www.shopify.com/bd, ru -> https://www.shopify.com/by, nl-be -> https://www.shopify.com/be, de-be -> https://www.shopify.com/be-de, fr-be -> https://www…",
      "fix": null
    },
    {
      "id": "no-js-fallback",
      "category": "content",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Content that needs no JavaScript",
      "why": "If content is only produced client-side, the page is empty for agents that do not run JavaScript.",
      "skill": "server-rendering",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "7103 characters of static text and 1 H1 is in the HTML before any JavaScript runs.",
      "evidence": "static characters: 7103; H1 in static HTML: 1; characters inside noscript: 13; markup characters: 667899",
      "fix": null
    },
    {
      "id": "spa-fallback",
      "category": "content",
      "tier": "emerging",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Per-page content separation (no SPA fallback)",
      "why": "A catch-all route returning the same skeleton for every URL makes pages indistinguishable to an agent.",
      "skill": "server-rendering",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "Shell duplicate: /book, /reports match the homepage title \"Shopify: The All-in-One Commerce Platform for Businesses - …\" with 100% identical markup (2 of 15 probed pages).",
      "evidence": "/about: title \"About Shopify\", skeleton 39%; /pricing: title \"Shopify Pricing: Find the Right Plan fo…\", skeleton 41%; /contact: title \"Contact Us — Shopify\", skeleton 39%; /terms: title \"Shopify Terms of Service - Shopify\", skeleton 40%; /faq: title \"Shopify FAQ - Shopify\", skeleton 37%; /help: title \"Shopify Help Center\", skeleton 1%; /products: title \"Browse all of Shopify’…",
      "fix": "// Serve dist/<route>/index.html per URL; never rewrite every path to one shell.\nimport express from 'express';\nimport { existsSync } from 'node:fs';\n\nconst app = express();\napp.use((req, res) => {\n  if (req.method !== 'GET') return res.status(405).end();\n  const file = new URL(`dist${req.path.replace(/\\/$/, '/index')}.html`, import.meta.url).pathname;\n  if (existsSync(file)) return res.sendFile(file);\n  res.status(404).type('html')\n    .send('<!doctype html><html lang=\"en\"><title>404</title><h1>Not found</h1></html>');\n});\napp.listen(3000);"
    },
    {
      "id": "token-efficiency",
      "category": "content",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Token efficiency (content-to-markup ratio)",
      "why": "A bloated DOM wastes an agent's context window.",
      "skill": "token-efficiency",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "Content-to-markup ratio 1.0% (7103 visible of 667899 markup characters, ~1382 tokens), below the 8% floor where markup outweighs the content.",
      "evidence": "visible characters: 7103; markup characters: 667899; words: 1024; estimated tokens: 1382",
      "fix": "// scripts/tighten-html.mjs - run after the build over every emitted page.\nimport { readdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { minify } from 'html-minifier-terser';\n\nconst pages = readdirSync('dist', { recursive: true, encoding: 'utf8' }).filter((p) => p.endsWith('.html'));\n\nfor (const page of pages) {\n  const file = `dist/${page}`;\n  const before = readFileSync(file, 'utf8');\n  const after = await minify(before, {\n    collapseWhitespace: true,\n    removeComments: true,\n    removeRedundantAttributes: true,\n    minifyCSS: true,\n    minifyJS: true,\n  });\n  writeFileSync(file, after);\n}"
    },
    {
      "id": "viewport",
      "category": "content",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "Responsive markup",
      "why": "Agent browsers mostly run at mobile scale.",
      "skill": "responsive-markup",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "viewport content \"width=device-width,initial-scale=1\" sets width=device-width and leaves zoom unrestricted.",
      "evidence": "viewport meta: width=device-width,initial-scale=1; media queries on the page: 0",
      "fix": null
    },
    {
      "id": "webbotauth",
      "category": "botaccess",
      "tier": "essential",
      "weight": 3,
      "impact": "critical",
      "conditional": false,
      "label": "Web Bot Auth key directory",
      "why": "RFC 9421 with Ed25519: the mechanism that lets a site verify which agent is calling rather than guessing from a user-agent string. Adoption in the curated corpus we measured is around one site in a hundred.",
      "skill": "web-bot-auth",
      "standards": [
        "RFC 9421"
      ],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "The document parsed as JSON but holds 0 keys and 0 usable Ed25519 verification keys (no top-level keys array).",
      "evidence": "{ \"crv\": \"Ed25519\", \"kty\": \"OKP\", \"x\": \"Mt6otbtH_mqWe1Qsm0cW9GVfknDvrGXXMpyXhiW0Dr4\", \"use\": \"sig\", \"alg\": \"EdDSA\", \"kid\": \"SjjyXvQ2cGhsRXs9DXEaV6ClyCun0Pj5yxjV67dLGOk\", \"nbf\": 1773401952, \"exp\": 1804937952 }",
      "fix": "{\n  \"keys\": [\n    {\n      \"kty\": \"OKP\",\n      \"crv\": \"Ed25519\",\n      \"x\": \"K6zqFKAe5fHfdzecJiq7nnGe0teq-_bhC1eP_fGo5bc\",\n      \"kid\": \"2026-10-primary\",\n      \"use\": \"sig\",\n      \"alg\": \"Ed25519\"\n    }\n  ]\n}"
    },
    {
      "id": "agent-permissions",
      "category": "botaccess",
      "tier": "essential",
      "weight": 3,
      "impact": "critical",
      "conditional": false,
      "label": "Agent permission model (agent-permissions.json)",
      "why": "Declares which actions an agent may take, which are refused, and which need a person. It is the difference between a policy and a wish: in the curated corpus we measured, roughly one site in a hundred publishes one.",
      "skill": "agent-permissions",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "Neither path served a permission document (/.well-known/agent-permissions.json HTTP 404, /agent-permissions.json HTTP 404).",
      "evidence": null,
      "fix": null
    },
    {
      "id": "ai-rules",
      "category": "botaccess",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Named AI bot rules in robots.txt",
      "why": "Naming agent crawlers explicitly is the first step to being visible in agent traffic.",
      "skill": "ai-rules",
      "standards": [
        "RFC 9309"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "/robots.txt answered HTTP 429, so 0 of 18 named AI bots are addressed.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "content-signal",
      "category": "discoverability",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Content-Signal usage signals",
      "why": "Declares how your content may be used, inside robots.txt. Cloudflare included this in its readiness checks.",
      "skill": "content-signals",
      "standards": [
        "contentsignals.org"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "robots.txt answered HTTP 429 and the homepage response carries no Content-Signal header.",
      "evidence": "HTTP 429 · text/html; charset=utf-8 · 9358 bytes · 29 ms",
      "fix": "# https://example.com/robots.txt - Content Signals Policy (contentsignals.org)\n# search   = index the content and return links and short excerpts\n# ai-input = use the content in a model at answer time (grounding)\n# ai-train = use the content to train or fine-tune a model\n\nUser-agent: *\nContent-Signal: search=yes, ai-input=yes, ai-train=no\nAllow: /\n\nUser-agent: GPTBot\nContent-Signal: search=yes, ai-input=yes, ai-train=no\nAllow: /"
    },
    {
      "id": "ai-policy",
      "category": "botaccess",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "AI usage policy page",
      "why": "States the rules agents must follow and reduces licensing ambiguity.",
      "skill": "ai-policy",
      "standards": [],
      "status": "warn",
      "points": 0.35,
      "counted": true,
      "excluded": null,
      "detail": "AI policy at /ai covers 1 of 3 expected topics (permitted uses stated; prohibited uses and a contact route missing) and is not linked from the home page.",
      "evidence": "ai-enabled commerce assistant, sidekick, designed to make it easier for you to start, run, and grow your business on shopify. - shopify skip to content why shopify back get started fast you could be selling by tomorrow. switch to shopify get more customers. m…",
      "fix": "<!doctype html>\n<html lang=\"en\">\n<head><meta charset=\"utf-8\"><title>AI usage policy</title></head>\n<body>\n  <h1>AI usage policy</h1>\n  <h2>Permitted</h2>\n  <p>Indexing, retrieval and citation by identified search and answer engines.</p>\n  <h2>Not permitted</h2>\n  <p>Do not train, fine-tune or distil a model on this content; no bulk scraping or resale.</p>\n  <h2>Contact</h2>\n  <p><a href=\"mailto:agents@example.com\">agents@example.com</a></p>\n</body>\n</html>"
    },
    {
      "id": "bot-page",
      "category": "botaccess",
      "tier": "recommended",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Crawler and agent policy page",
      "why": "Explains which agents are permitted and how they are verified.",
      "skill": "bot-policy",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No bot or agent policy page found: 0 of 8 candidate paths served one and the home page links to none.",
      "evidence": null,
      "fix": "<!doctype html>\n<html lang=\"en\">\n<head><meta charset=\"utf-8\"><title>Bot policy</title></head>\n<body>\n<h1>Bot and agent policy</h1>\n<h2>Welcome</h2>\n<p>Identified search and answer engines that cite the source.</p>\n<h2>Refused</h2>\n<p>Training crawlers, spoofed User-Agents, clients that ignore robots.txt.</p>\n<h2>How we verify identity</h2>\n<p>Signed requests are checked against our key directory at /.well-known/http-message-signatures-directory; unsigned clients by published IP ranges.</p>\n<h2>Contact</h2>\n<p><a href=\"mailto:agents@example.com\">agents@example.com</a></p>\n</body>\n</html>"
    },
    {
      "id": "security-txt",
      "category": "botaccess",
      "tier": "recommended",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "security.txt (RFC 9116)",
      "why": "Provides a responsible disclosure channel for agent-related security incidents.",
      "skill": "security-txt",
      "standards": [
        "RFC 9116"
      ],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "security.txt at /.well-known/security.txt holds 1 of 2 required fields (Expires is missing). Not scored: its Policy URL is on hackerone.com, which this scan does not request.",
      "evidence": "Contact: https://www.shopify.com/security-response Contact: mailto:security@shopify.com Encryption: https://www.shopify.com/shopify-security.pub Policy: https://hackerone.com/shopify Acknowledgments: https://hackerone.com/shopify/thanks Hiring: https://www.sh…",
      "fix": "# security.txt - RFC 9116\nContact: mailto:security@example.com\nExpires: 2027-09-30T18:37:07Z\nCanonical: https://example.com/.well-known/security.txt\nPreferred-Languages: en\nPolicy: https://example.com/security-policy"
    },
    {
      "id": "crawl-delay",
      "category": "botaccess",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "Crawl rate declaration",
      "why": "Cloudflare's Verified Bots policy drops AI crawlers that ignore crawl-delay.",
      "skill": "crawl-delay",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "/robots.txt answered HTTP 429, so no crawl rate is declared.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "ai-txt",
      "category": "botaccess",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "/ai.txt access declaration",
      "why": "Some agent ecosystems read an /ai.txt contract alongside robots.txt.",
      "skill": "ai-txt",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "/ai.txt answered HTTP 404, not an access declaration.",
      "evidence": "<html class=\"bg-black h-full\" lang=\"en\" dir=\"ltr\"><head><title>404: Page not found</title><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"/><meta name=\"robots\" content=\"noindex, …",
      "fix": null
    },
    {
      "id": "mcp-card",
      "category": "protocol",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "MCP server card",
      "why": "Since MCP 2026-07-28, agents discover tool servers through a published declaration.",
      "skill": "mcp-server-card",
      "standards": [
        "MCP 2026-07-28"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No MCP server card was served as JSON at the 3 declared paths (/.well-known/mcp/server-card.json 404 text/plain; /.well-known/mcp.json 404 text/plain; /mcp.json 404 text/html).",
      "evidence": null,
      "fix": "{\n  \"$schema\": \"https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json\",\n  \"name\": \"com.example/weather\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Live weather and forecast data for partner agents.\",\n  \"title\": \"Example Weather\",\n  \"websiteUrl\": \"https://your-domain.example/developers\",\n  \"remotes\": [\n    {\n      \"type\": \"streamable-http\",\n      \"url\": \"https://your-domain.example/mcp\",\n      \"supportedProtocolVersions\": [\"2026-07-28\"]\n    }\n  ]\n}"
    },
    {
      "id": "openapi",
      "category": "protocol",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "OpenAPI definition",
      "why": "A machine-readable contract so an agent can discover your API and generate correct calls.",
      "skill": "openapi",
      "standards": [
        "OpenAPI 3.x"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No OpenAPI document was found: 5 candidate paths (0 advertised, 5 standard) returned no JSON OpenAPI 3.x document.",
      "evidence": "tried: /openapi.json 404 | /openapi.yaml 404 | /.well-known/openapi.json 404 | /api/openapi.json 404 | /swagger.json 404",
      "fix": "{\n  \"openapi\": \"3.1.0\",\n  \"info\": { \"title\": \"Example Public API\", \"version\": \"1.4.0\" },\n  \"servers\": [{ \"url\": \"https://api.your-domain.example/v1\" }],\n  \"paths\": {\n    \"/orders/{orderId}\": {\n      \"get\": {\n        \"operationId\": \"getOrder\",\n        \"summary\": \"Get the status of one order\",\n        \"parameters\": [{ \"name\": \"orderId\", \"in\": \"path\", \"required\": true, \"schema\": { \"type\": \"string\" } }],\n        \"responses\": { \"200\": { \"description\": \"The order\" } }\n      }\n    }\n  }\n}"
    },
    {
      "id": "oauth-discovery",
      "category": "protocol",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "OAuth discovery documents",
      "why": "Required for agents to connect to your authenticated API on their own (RFC 8414 / RFC 9728).",
      "skill": "oauth-discovery",
      "standards": [
        "RFC 8414",
        "RFC 9728"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "None of the 3 OAuth discovery paths returned a JSON document (/.well-known/oauth-authorization-server 404 text/plain; /.well-known/openid-configuration 404 text/plain; /.well-known/oauth-protected-resource 404 text/plain).",
      "evidence": null,
      "fix": "{\n  \"resource\": \"https://api.your-domain.example/\",\n  \"resource_name\": \"Example API\",\n  \"resource_logo_uri\": \"https://your-domain.example/logo.png\",\n  \"authorization_servers\": [\"https://auth.your-domain.example/\"],\n  \"scopes_supported\": [\"api.read\", \"api.write\"],\n  \"bearer_methods_supported\": [\"header\"]\n}"
    },
    {
      "id": "api-catalog",
      "category": "protocol",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "API catalog",
      "why": "Lets an agent see which capabilities are callable in a single document (RFC 9727).",
      "skill": "api-catalog",
      "standards": [
        "RFC 9727"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No API catalog linkset was served at the 3 declared paths (/.well-known/api-catalog 404 text/plain; /api-catalog.json 404 text/html; /.well-known/ai-plugin.json 404 text/plain).",
      "evidence": null,
      "fix": "{\n  \"linkset\": [\n    {\n      \"anchor\": \"https://your-domain.example/apis/public_api\",\n      \"service-desc\": [\n        { \"href\": \"https://your-domain.example/openapi.json\", \"type\": \"application/json\" }\n      ],\n      \"service-doc\": [\n        { \"href\": \"https://your-domain.example/docs/\", \"type\": \"text/html\" }\n      ],\n      \"status\": [\n        { \"href\": \"https://your-domain.example/status.json\", \"type\": \"application/json\" }\n      ]\n    }\n  ]\n}"
    },
    {
      "id": "agent-skills",
      "category": "protocol",
      "tier": "recommended",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Agent Skills declaration",
      "why": "Offers ready-made capability packages to agent runtimes.",
      "skill": "agent-skills",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No agent skills index with a non-empty skills array was served as JSON at the 3 declared paths (/.well-known/agent-skills/index.json 404 text/plain; /.well-known/agent-skills.json 404 text/plain; /.well-known/skills.json 404 text/plain).",
      "evidence": null,
      "fix": "{\n  \"$schema\": \"https://schemas.agentskills.io/discovery/0.2.0/schema.json\",\n  \"skills\": [\n    {\n      \"name\": \"invoice-reconciliation\",\n      \"type\": \"skill-md\",\n      \"description\": \"Reconcile invoices against payments and flag unmatched line items.\",\n      \"url\": \"/.well-known/agent-skills/invoice-reconciliation/SKILL.md\",\n      \"digest\": \"sha256:9f2c1a4b7d8e0f3a5c6b1d2e4f7089a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6\"\n    }\n  ]\n}"
    },
    {
      "id": "a2a-card",
      "category": "protocol",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "A2A agent card",
      "why": "A2A v1.0 (Linux Foundation) is the emerging standard for agent-to-agent discovery. Almost no site publishes a card yet, which makes this one of the cheapest places to be early.",
      "skill": "a2a-agent-card",
      "standards": [
        "A2A v1.0"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No A2A agent card was served as JSON at the 2 declared paths (/.well-known/agent-card.json 404 text/plain; /.well-known/agent.json 404 text/plain).",
      "evidence": null,
      "fix": "{\n  \"name\": \"Example Support Agent\",\n  \"description\": \"Answers product and billing questions for partner agents.\",\n  \"version\": \"1.0.0\",\n  \"supportedInterfaces\": [\n    { \"url\": \"https://your-domain.example/a2a/v1\", \"protocolBinding\": \"JSONRPC\", \"protocolVersion\": \"1.0\" }\n  ],\n  \"capabilities\": { \"streaming\": true },\n  \"defaultInputModes\": [\"text/plain\"],\n  \"defaultOutputModes\": [\"text/plain\"],\n  \"skills\": [\n    {\n      \"id\": \"billing-question\",\n      \"name\": \"Billing question\",\n      \"description\": \"Answers invoice questions for one account.\",\n      \"tags\": [\"billing\"]\n    }\n  ]\n}"
    },
    {
      "id": "a2a-signed",
      "category": "protocol",
      "tier": "emerging",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Cryptographically signed agent card",
      "why": "A2A v1.0 makes identity verifiable through JWS (RFC 7515).",
      "skill": "a2a-card-signing",
      "standards": [
        "RFC 7515"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "unmeasurable",
      "detail": "No A2A agent card is published, so there are no signatures to inspect and the check is not scored.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "auth-md",
      "category": "protocol",
      "tier": "emerging",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "/auth.md agent authentication guide",
      "why": "A guide telling an agent which authentication flow to use.",
      "skill": "auth-md",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No markdown authentication guide was served at the 2 declared paths (/auth.md 404 text/html; /.well-known/auth.md 404 text/plain).",
      "evidence": null,
      "fix": "# auth.md\n\nAgents authenticate here: discover, register, claim if needed, call.\n\n## Methods\n- `identity_assertion`: you hold an ID-JAG bound to this `resource`.\n- `service_auth`: you have the user's verified email; a claim follows.\n- `anonymous`: no user identity yet.\n\n## Endpoints\nGET https://api.your-domain.example/.well-known/oauth-protected-resource\nPOST `agent_auth.identity_endpoint`, then `agent_auth.claim_endpoint` when claim is\nrequired; exchange at `token_endpoint` for an access_token."
    },
    {
      "id": "webmcp",
      "category": "protocol",
      "tier": "emerging",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "WebMCP browser tool declaration",
      "why": "WebMCP lets sites expose tools to in-browser agents. It is the only normative deliverable of the W3C Agentic Web WG.",
      "skill": "webmcp",
      "standards": [
        "W3C WebMCP"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No WebMCP declaration was found: the 3 manifest paths served no tools array and the homepage contains 0 registerTool calls.",
      "evidence": null,
      "fix": "{\n  \"tools\": [\n    {\n      \"name\": \"search_products\",\n      \"title\": \"Search products\",\n      \"description\": \"Search the public catalogue by free-text query and return matching products with prices.\",\n      \"inputSchema\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"query\": { \"type\": \"string\", \"description\": \"Free-text search query\" },\n          \"limit\": { \"type\": \"integer\", \"minimum\": 1, \"maximum\": 50, \"default\": 10 }\n        },\n        \"required\": [\"query\"],\n        \"additionalProperties\": false\n      }\n    }\n  ]\n}"
    },
    {
      "id": "ard-manifest",
      "category": "protocol",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "ARD resource discovery manifest",
      "why": "Cisco/Outshift's Agentic Resource Discovery specification; Lighthouse audits it too.",
      "skill": "ard",
      "standards": [
        "ard-spec"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No ARD manifest with an entries array was served at the 4 declared paths (/.well-known/ard.json 404 text/plain; /.well-known/agent-resources.json 404 text/plain; /.well-known/ai-catalog.json 404 text/plain; /ard.json 404 text/html; first JSON document: none).",
      "evidence": null,
      "fix": "{\n  \"entries\": [\n    {\n      \"identifier\": \"urn:air:your-domain.example:server:support\",\n      \"displayName\": \"Example Support MCP Server\",\n      \"type\": \"application/mcp-server-card+json\",\n      \"url\": \"https://your-domain.example/.well-known/mcp/server-card.json\",\n      \"description\": \"Tools for order status and returns.\"\n    }\n  ]\n}"
    },
    {
      "id": "docs",
      "category": "protocol",
      "tier": "recommended",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Documentation reachable",
      "why": "An agent needs documentation to complete an integration on its own.",
      "skill": "documentation",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "Documentation is reachable at /blog/topics/guides (homepage anchor) and returns HTTP 200 text/html with 1060 readable words.",
      "evidence": null,
      "fix": "<!-- Homepage <head>: tell agents where the public docs are -->\n<link rel=\"service-doc\" href=\"/docs/\" type=\"text/html\">\n\n<!-- Homepage body: a real link, so crawlers and users both find it -->\n<a href=\"/docs/\">Documentation and API reference</a>"
    },
    {
      "id": "pricing-structured",
      "category": "protocol",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Structured pricing information",
      "why": "An offer without a price cannot be compared by an agent — you drop out of consideration.",
      "skill": "pricing-schema",
      "standards": [
        "schema.org/Offer"
      ],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "No structured offer is present in the homepage JSON-LD and the only price signal is prose copy reading \"$125.00\".",
      "evidence": null,
      "fix": "{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Service\",\n  \"name\": \"Agent Readiness Audit\",\n  \"offers\": {\n    \"@type\": \"Offer\",\n    \"price\": \"490.00\",\n    \"priceCurrency\": \"USD\",\n    \"availability\": \"https://schema.org/InStock\",\n    \"priceSpecification\": {\n      \"@type\": \"UnitPriceSpecification\",\n      \"price\": \"490.00\",\n      \"priceCurrency\": \"USD\"\n    }\n  }\n}"
    },
    {
      "id": "service-schema",
      "category": "protocol",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Service/product scope machine-readable",
      "why": "An agent must be able to answer \"what does this site offer, and to whom\".",
      "skill": "service-schema",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "The homepage JSON-LD carries 1 model types with 0 Service or Product nodes, so the offer scope cannot be read.",
      "evidence": null,
      "fix": "{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Service\",\n  \"name\": \"Agent readiness audit\",\n  \"serviceType\": \"Website agent-readiness audit and remediation\",\n  \"provider\": { \"@type\": \"Organization\", \"name\": \"Example Inc.\", \"url\": \"https://your-domain.example\" },\n  \"areaServed\": [{ \"@type\": \"Country\", \"name\": \"United States\" }],\n  \"audience\": { \"@type\": \"BusinessAudience\", \"name\": \"E-commerce and SaaS teams\" }\n}"
    },
    {
      "id": "contact",
      "category": "protocol",
      "tier": "emerging",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Structured contact information",
      "why": "An agent must know where to reach you before starting a transaction, or when something fails.",
      "skill": "contact-schema",
      "standards": [
        "schema.org/Organization"
      ],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "Homepage JSON-LD declares 1 organization node with 0 contact details while the page itself carries 0 plain-text contact signals.",
      "evidence": null,
      "fix": "{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Organization\",\n  \"name\": \"Example Inc.\",\n  \"url\": \"https://your-domain.example\",\n  \"contactPoint\": [\n    {\n      \"@type\": \"ContactPoint\",\n      \"contactType\": \"technical support\",\n      \"email\": \"agents@your-domain.example\",\n      \"telephone\": \"+1-555-0100\",\n      \"availableLanguage\": [\"en\"]\n    }\n  ]\n}"
    },
    {
      "id": "status-page",
      "category": "protocol",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "Service status and changelog feed",
      "why": "An agent should be able to learn about outages and API changes in a machine-readable way.",
      "skill": "status-changelog",
      "standards": [],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "The homepage advertises 1 status or feed reference, but the status document at https://shopifystatus.com was not fetched by this scan, so its response was not observed.",
      "evidence": null,
      "fix": "<!-- Homepage <head>: advertise machine-readable status and history -->\n<link rel=\"alternate\" type=\"application/atom+xml\" title=\"Service status\"\n      href=\"/status/feed.atom\">\n<link rel=\"alternate\" type=\"application/atom+xml\" title=\"Changelog\"\n      href=\"/changelog/feed.atom\">\n\n<!-- Homepage body: links a user (or a crawler) can follow -->\n<a href=\"/status/\">Service status</a>\n<a href=\"/changelog/\">Changelog</a>"
    },
    {
      "id": "product-schema",
      "category": "commerce",
      "tier": "essential",
      "weight": 3,
      "impact": "critical",
      "conditional": true,
      "label": "Product/catalog schema",
      "why": "Product data is the most valuable and the least machine-readable: price, availability and returns are usually rendered for a person to read and never declared for a machine to parse.",
      "skill": "product-schema",
      "standards": [
        "schema.org/Product"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No Product, Offer or AggregateOffer type appears in the homepage JSON-LD (2 types) or in the JSON-LD of the 2 readable product or collection pages.",
      "evidence": "homepage @type: Corporation, ContactPoint; product paths: /products HTTP 200, /shop HTTP 200, /store HTTP 404",
      "fix": "{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Product\",\n  \"name\": \"Aurora Desk Lamp\",\n  \"sku\": \"ADL-100-BLK\",\n  \"offers\": {\n    \"@type\": \"Offer\",\n    \"price\": \"1299.00\",\n    \"priceCurrency\": \"USD\",\n    \"availability\": \"https://schema.org/InStock\"\n  }\n}"
    },
    {
      "id": "payment-protocols",
      "category": "commerce",
      "tier": "recommended",
      "weight": 3,
      "impact": "high",
      "conditional": true,
      "label": "Agent payment standard support (AP2/ACP/x402/UCP)",
      "why": "The least-implemented surface in the rubric. Accepting an agent payment means choosing a standard and changing a checkout, which is a business decision most sites have not made yet.",
      "skill": "agent-payments",
      "standards": [
        "AP2",
        "ACP",
        "x402",
        "UCP"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "2 distinct agent-payment signals: UCP named on /developers; agent-purchase grant stated on /developers.",
      "evidence": "paths read: 3/8; standards: UCP",
      "fix": null
    },
    {
      "id": "agent-purchase",
      "category": "commerce",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": true,
      "label": "Agent purchase policy",
      "why": "Liability is the open question in agent commerce, and it is a policy decision rather than a technical one: a site that accepts an agent purchase has to decide who carries the cost when the agent is wrong, and publish that decision where an agent can read it.",
      "skill": "agent-purchase-policy",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No page among the 5 agent policy paths carries both an agent word and a purchase word (/ai-policy HTTP 404, /agent-policy HTTP 404, /terms HTTP 200, /agentic-commerce HTTP 404, /ai HTTP 200).",
      "evidence": "readable pages: /terms, /ai",
      "fix": null
    },
    {
      "id": "ucp-manifest",
      "category": "commerce",
      "tier": "emerging",
      "weight": 2,
      "impact": "medium",
      "conditional": true,
      "label": "UCP manifest (/.well-known/ucp)",
      "why": "Google and Shopify's Universal Commerce Protocol; lets a merchant declare checkout capabilities at transaction time.",
      "skill": "ucp",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "Neither /.well-known/ucp nor /.well-known/ucp.json returned HTTP 200 (/.well-known/ucp HTTP 404, /.well-known/ucp.json HTTP 404), so no manifest was served.",
      "evidence": null,
      "fix": "{\n  \"protocol_version\": \"1.0\",\n  \"merchant\": { \"id\": \"shop.example.com\", \"name\": \"Example Shop\", \"url\": \"https://shop.example.com\" },\n  \"capabilities\": { \"catalog_search\": true, \"product_detail\": true, \"cart\": true, \"checkout\": true },\n  \"checkout\": {\n    \"endpoint\": \"https://shop.example.com/api/ucp/checkout\",\n    \"payment_handlers\": [\"ap2\", \"acp\", \"x402\"]\n  }\n}"
    },
    {
      "id": "returns",
      "category": "commerce",
      "tier": "recommended",
      "weight": 1,
      "impact": "medium",
      "conditional": true,
      "label": "Return and shipping terms machine-readable",
      "why": "An agent must verify return terms before making a purchase decision.",
      "skill": "return-policy-schema",
      "standards": [
        "schema.org/MerchantReturnPolicy"
      ],
      "status": "warn",
      "points": 0.65,
      "counted": true,
      "excluded": null,
      "detail": "/shipping responded but none of the 4 documents read declares MerchantReturnPolicy or OfferShippingDetails.",
      "evidence": "readable return pages: /shipping 437912 bytes",
      "fix": "{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Offer\",\n  \"hasMerchantReturnPolicy\": {\n    \"@type\": \"MerchantReturnPolicy\",\n    \"applicableCountry\": \"US\",\n    \"merchantReturnDays\": 14,\n    \"returnMethod\": \"https://schema.org/ReturnByMail\",\n    \"returnFees\": \"https://schema.org/FreeReturn\"\n  },\n  \"shippingDetails\": {\n    \"@type\": \"OfferShippingDetails\",\n    \"shippingRate\": { \"@type\": \"MonetaryAmount\", \"value\": \"49.00\", \"currency\": \"USD\" }\n  }\n}"
    },
    {
      "id": "agent-analytics",
      "category": "commerce",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": true,
      "label": "Agent traffic measurement",
      "why": "If agent traffic is not measured separately, the channel's return is invisible and never funded.",
      "skill": "agent-analytics",
      "standards": [],
      "status": "warn",
      "points": 0.8,
      "counted": true,
      "excluded": null,
      "detail": "The homepage names 1 analytics vendor (googletagmanager) but none of the 5 agent segmentation markers appears, so agent traffic is not separated.",
      "evidence": "homepage 668424 bytes; vendors: googletagmanager; markers: none",
      "fix": null
    },
    {
      "id": "inventory-freshness",
      "category": "commerce",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Inventory and price freshness",
      "why": "An agent that cannot tell whether an item is in stock — or when a price was last valid — will quote a stale offer to a buyer, or refuse to quote at all.",
      "skill": "inventory-freshness",
      "standards": [
        "schema.org/Offer"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to ecommerce or marketplace sites, and the site type could not be confirmed (best candidates: marketplace, api). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "seller-identity",
      "category": "commerce",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Seller identity declared",
      "why": "On a marketplace an offer is meaningless without knowing who is selling and who is the merchant of record, because that is who the agent has a contract with.",
      "skill": "seller-identity",
      "standards": [
        "schema.org/Organization"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to ecommerce or marketplace sites, and the site type could not be confirmed (best candidates: marketplace, api). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "shipping-costs",
      "category": "commerce",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Shipping cost and delivery declared",
      "why": "A purchase agent that cannot compute the delivered total cannot complete a checkout, and returns to the merchant without it.",
      "skill": "shipping-costs",
      "standards": [
        "schema.org/OfferShippingDetails"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to ecommerce or marketplace sites, and the site type could not be confirmed (best candidates: marketplace, api). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "sandbox-environment",
      "category": "protocol",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Sandbox or test environment documented",
      "why": "An agent cannot safely integrate against a production endpoint; a documented sandbox is the difference between a working trial and a support ticket.",
      "skill": "sandbox-environment",
      "standards": [],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to saas or api sites, and the site type could not be confirmed (best candidates: marketplace, api). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "rate-limits-declared",
      "category": "protocol",
      "tier": "recommended",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Rate limits and quotas documented",
      "why": "An agent that does not know the quota discovers it by being throttled, halfway through a task it cannot resume.",
      "skill": "rate-limits",
      "standards": [
        "RFC 9110"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to api sites, and the site type could not be confirmed (best candidates: marketplace, api). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "licensing-terms",
      "category": "content",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Reuse and licensing terms declared",
      "why": "Declaring ai-train=no without stating a licensing path leaves both the publisher and the agent without an answer they can act on.",
      "skill": "licensing",
      "standards": [
        "TDM Reservation Protocol"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to publisher or institution sites, and the site type could not be confirmed (best candidates: marketplace, api). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "provenance-declared",
      "category": "content",
      "tier": "emerging",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Content provenance declared",
      "why": "Author, publication date and update date are what let an agent judge whether a source is current and attributable before it quotes it.",
      "skill": "provenance",
      "standards": [
        "schema.org/author",
        "C2PA"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to publisher or institution sites, and the site type could not be confirmed (best candidates: marketplace, api). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "booking-action",
      "category": "commerce",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Machine-readable booking action",
      "why": "For a service business the agent's task is to book, not to browse — a declared action is what turns a contact page into a completed job.",
      "skill": "booking-action",
      "standards": [
        "schema.org/ReserveAction"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to services sites, and the site type could not be confirmed (best candidates: marketplace, api). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "document-formats",
      "category": "content",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Documents in machine-readable formats",
      "why": "A PDF that carries no document structure is unreadable to an agent and to a screen reader alike — the same defect, found twice.",
      "skill": "document-formats",
      "standards": [
        "PDF/UA"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to institution sites, and the site type could not be confirmed (best candidates: marketplace, api). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    }
  ],
  "counts": {
    "pass": 9,
    "warn": 13,
    "fail": 29,
    "na": 10,
    "total": 61
  },
  "blockedBy": {
    "level": 1,
    "levelName": "Basic Web Presence",
    "checks": [
      "reachable"
    ]
  },
  "nextLevelGaps": [
    "reachable"
  ],
  "ratio": {
    "passed": 9,
    "applicable": 51,
    "label": "9/51"
  },
  "meta": {
    "title": "Shopify: The All-in-One Commerce Platform for Businesses - Shopify",
    "description": "Try Shopify free. Build or grow your business fast with AI. Get more than ecommerce software with tools to manage every part of your business.",
    "lang": "en",
    "words": 1024,
    "tokensEst": 1382,
    "bytes": 668424
  },
  "requests_log": [
    {
      "path": "/",
      "status": 200,
      "bytes": 668424,
      "ms": 74,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/robots.txt",
      "status": 429,
      "bytes": 9358,
      "ms": 29,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/sitemap.xml",
      "status": 200,
      "bytes": 69899,
      "ms": 77,
      "contentType": "application/xml",
      "hops": 1
    },
    {
      "path": "/llms.txt",
      "status": 200,
      "bytes": 12520,
      "ms": 77,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/llms-full.txt",
      "status": 200,
      "bytes": 18863,
      "ms": 77,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/AGENTS.md",
      "status": 404,
      "bytes": 11026,
      "ms": 48,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/sitemap.md",
      "status": 404,
      "bytes": 11029,
      "ms": 59,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/ai.txt",
      "status": 404,
      "bytes": 11017,
      "ms": 57,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/ai-policy",
      "status": 404,
      "bytes": 11026,
      "ms": 57,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/ai-usage",
      "status": 404,
      "bytes": 11023,
      "ms": 56,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/ai",
      "status": 200,
      "bytes": 508682,
      "ms": 111,
      "contentType": "text/html",
      "hops": 2
    },
    {
      "path": "/terms/ai",
      "status": 404,
      "bytes": 11027,
      "ms": 54,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/yapay-zeka-politikasi",
      "status": 404,
      "bytes": 11062,
      "ms": 59,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/auth.md",
      "status": 404,
      "bytes": 11020,
      "ms": 58,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/.well-known/auth.md",
      "status": 404,
      "bytes": 9,
      "ms": 52,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/.well-known/http-message-signatures-directory",
      "status": 200,
      "bytes": 224,
      "ms": 16,
      "contentType": "application/http-message-signatures-directory+json",
      "hops": 1
    },
    {
      "path": "/.well-known/agent-permissions.json",
      "status": 404,
      "bytes": 9,
      "ms": 19,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/agent-permissions.json",
      "status": 404,
      "bytes": 11065,
      "ms": 23,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/.well-known/mcp/server-card.json",
      "status": 404,
      "bytes": 9,
      "ms": 18,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/.well-known/mcp.json",
      "status": 404,
      "bytes": 9,
      "ms": 17,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/mcp.json",
      "status": 404,
      "bytes": 11023,
      "ms": 24,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/.well-known/agent-card.json",
      "status": 404,
      "bytes": 9,
      "ms": 19,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/.well-known/agent.json",
      "status": 404,
      "bytes": 9,
      "ms": 20,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/.well-known/oauth-authorization-server",
      "status": 404,
      "bytes": 9,
      "ms": 18,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/.well-known/oauth-protected-resource",
      "status": 404,
      "bytes": 9,
      "ms": 24,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/.well-known/openid-configuration",
      "status": 404,
      "bytes": 9,
      "ms": 18,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/.well-known/api-catalog",
      "status": 404,
      "bytes": 9,
      "ms": 19,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/api-catalog.json",
      "status": 404,
      "bytes": 11047,
      "ms": 22,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/.well-known/ai-plugin.json",
      "status": 404,
      "bytes": 9,
      "ms": 19,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/.well-known/agent-skills/index.json",
      "status": 404,
      "bytes": 9,
      "ms": 17,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/.well-known/agent-skills.json",
      "status": 404,
      "bytes": 9,
      "ms": 17,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/.well-known/skills.json",
      "status": 404,
      "bytes": 9,
      "ms": 16,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/.well-known/security.txt",
      "status": 200,
      "bytes": 277,
      "ms": 28,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/security.txt",
      "status": 404,
      "bytes": 11035,
      "ms": 28,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/.well-known/webmcp.json",
      "status": 404,
      "bytes": 9,
      "ms": 25,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/.well-known/webmcp",
      "status": 404,
      "bytes": 9,
      "ms": 23,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/webmcp.json",
      "status": 404,
      "bytes": 11032,
      "ms": 24,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/.well-known/ard.json",
      "status": 404,
      "bytes": 9,
      "ms": 12,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/.well-known/agent-resources.json",
      "status": 404,
      "bytes": 9,
      "ms": 19,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/.well-known/ai-catalog.json",
      "status": 404,
      "bytes": 9,
      "ms": 16,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/ard.json",
      "status": 404,
      "bytes": 11023,
      "ms": 24,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/.well-known/ucp",
      "status": 404,
      "bytes": 9,
      "ms": 15,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/.well-known/ucp.json",
      "status": 404,
      "bytes": 9,
      "ms": 15,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/openapi.json",
      "status": 404,
      "bytes": 11035,
      "ms": 24,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/openapi.yaml",
      "status": 404,
      "bytes": 11035,
      "ms": 26,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/.well-known/openapi.json",
      "status": 404,
      "bytes": 9,
      "ms": 20,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/api/openapi.json",
      "status": 404,
      "bytes": 11051,
      "ms": 27,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/swagger.json",
      "status": 404,
      "bytes": 11035,
      "ms": 25,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/.well-known/ai",
      "status": 404,
      "bytes": 9,
      "ms": 16,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/api",
      "status": 404,
      "bytes": 11008,
      "ms": 27,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/bot",
      "status": 404,
      "bytes": 11008,
      "ms": 34,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/bots",
      "status": 404,
      "bytes": 11011,
      "ms": 44,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/agents",
      "status": 404,
      "bytes": 11017,
      "ms": 51,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/agent",
      "status": 404,
      "bytes": 11014,
      "ms": 50,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/agent-policy",
      "status": 404,
      "bytes": 11035,
      "ms": 38,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/agentic-commerce",
      "status": 404,
      "bytes": 11047,
      "ms": 64,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/terms",
      "status": 200,
      "bytes": 662418,
      "ms": 65,
      "contentType": "text/html",
      "hops": 2
    },
    {
      "path": "/pricing",
      "status": 200,
      "bytes": 1093072,
      "ms": 44,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/fiyatlandirma",
      "status": 404,
      "bytes": 11038,
      "ms": 40,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/fiyat",
      "status": 404,
      "bytes": 11014,
      "ms": 32,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/plans",
      "status": 404,
      "bytes": 11014,
      "ms": 19,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/contact",
      "status": 200,
      "bytes": 409667,
      "ms": 24,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/iletisim",
      "status": 404,
      "bytes": 11023,
      "ms": 20,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/contact-us",
      "status": 404,
      "bytes": 11029,
      "ms": 22,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/faq",
      "status": 200,
      "bytes": 386049,
      "ms": 13,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/sss",
      "status": 404,
      "bytes": 11008,
      "ms": 33,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/sikca-sorulan-sorular",
      "status": 404,
      "bytes": 11062,
      "ms": 29,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/help",
      "status": 200,
      "bytes": 93166,
      "ms": 992,
      "contentType": "text/html",
      "hops": 3
    },
    {
      "path": "/yardim",
      "status": 404,
      "bytes": 11017,
      "ms": 35,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/docs",
      "status": 404,
      "bytes": 11011,
      "ms": 32,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/documentation",
      "status": 404,
      "bytes": 11038,
      "ms": 35,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/developers",
      "status": 200,
      "bytes": 336832,
      "ms": 47,
      "contentType": "text/html",
      "hops": 3
    },
    {
      "path": "/gelistiriciler",
      "status": 404,
      "bytes": 11041,
      "ms": 32,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/status",
      "status": 404,
      "bytes": 11017,
      "ms": 36,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/changelog",
      "status": 200,
      "bytes": 330005,
      "ms": 462,
      "contentType": "text/html",
      "hops": 2
    },
    {
      "path": "/releases",
      "status": 404,
      "bytes": 11023,
      "ms": 24,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/whats-new",
      "status": 404,
      "bytes": 11026,
      "ms": 25,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/returns",
      "status": 404,
      "bytes": 11020,
      "ms": 30,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/shipping",
      "status": 200,
      "bytes": 437912,
      "ms": 54,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/iade",
      "status": 404,
      "bytes": 11011,
      "ms": 48,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/kargo",
      "status": 404,
      "bytes": 11014,
      "ms": 45,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/refund-policy",
      "status": 404,
      "bytes": 11038,
      "ms": 35,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/about",
      "status": 200,
      "bytes": 420943,
      "ms": 37,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/products",
      "status": 200,
      "bytes": 422898,
      "ms": 32,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/shop",
      "status": 200,
      "bytes": 365816,
      "ms": 30,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/store",
      "status": 404,
      "bytes": 11014,
      "ms": 31,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/urunler",
      "status": 404,
      "bytes": 11020,
      "ms": 28,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/magaza",
      "status": 404,
      "bytes": 11017,
      "ms": 45,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/cart",
      "status": 404,
      "bytes": 11011,
      "ms": 37,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/sepet",
      "status": 404,
      "bytes": 11014,
      "ms": 45,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/docs/sandbox",
      "status": 404,
      "bytes": 11039,
      "ms": 23,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/sandbox",
      "status": 404,
      "bytes": 11020,
      "ms": 29,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/developers/sandbox",
      "status": 404,
      "bytes": 11057,
      "ms": 30,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/rate-limits.json",
      "status": 404,
      "bytes": 11047,
      "ms": 21,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/.well-known/rate-limits.json",
      "status": 404,
      "bytes": 9,
      "ms": 15,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/docs/rate-limits",
      "status": 404,
      "bytes": 11051,
      "ms": 22,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/licensing",
      "status": 404,
      "bytes": 11026,
      "ms": 28,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/.well-known/tdmrep.json",
      "status": 404,
      "bytes": 9,
      "ms": 21,
      "contentType": "text/plain",
      "hops": 1
    },
    {
      "path": "/book",
      "status": 200,
      "bytes": 668424,
      "ms": 84,
      "contentType": "text/html",
      "hops": 2
    },
    {
      "path": "/appointment",
      "status": 404,
      "bytes": 11032,
      "ms": 41,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/documents",
      "status": 404,
      "bytes": 11026,
      "ms": 40,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/publications",
      "status": 404,
      "bytes": 11035,
      "ms": 35,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/reports",
      "status": 200,
      "bytes": 668424,
      "ms": 59,
      "contentType": "text/html",
      "hops": 2
    },
    {
      "path": "/blog/topics/guides",
      "status": 200,
      "bytes": 452566,
      "ms": 34,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/",
      "status": 200,
      "bytes": 668424,
      "ms": 30,
      "contentType": "text/html",
      "hops": 1
    }
  ]
}