{
  "scan": "Consumer Goods — Crane Index (AI Visibility Suite)",
  "cohort": "consumer-goods",
  "date": "2026-10-01",
  "scanners": {
    "retrieval": "AI Search Readiness",
    "execution": "Agent Readiness",
    "representation": "Brand Representation"
  },
  "concurrency": 10,
  "pages": 1,
  "basis": "page",
  "aggregate": {
    "scannedRequested": 188,
    "reachable": 119,
    "unreachable": 69,
    "retrieval": {
      "n": 119,
      "min": 18,
      "max": 77,
      "median": 49,
      "mean": 50,
      "ge70": 11,
      "b5569": 34,
      "b4054": 47,
      "lt40": 27,
      "below55": 74,
      "ge90": 0
    },
    "execution": {
      "n": 119,
      "min": 34,
      "max": 97,
      "median": 65,
      "mean": 69,
      "ge70": 42,
      "b5569": 69,
      "b4054": 4,
      "lt40": 4,
      "below55": 8,
      "ge90": 4
    },
    "representation": {
      "n": 119,
      "min": 8,
      "max": 68,
      "median": 15,
      "mean": 22,
      "ge70": 0,
      "b5569": 5,
      "b4054": 11,
      "lt40": 103,
      "below55": 114,
      "ge90": 0
    },
    "composite": {
      "n": 119,
      "min": 21,
      "max": 75,
      "median": 46,
      "mean": 47,
      "ge70": 3,
      "b5569": 32,
      "b4054": 41,
      "lt40": 43,
      "below55": 84,
      "ge90": 0
    }
  },
  "escalations": [
    {
      "name": "Flowers Foods",
      "domain": "flowersfoods.com",
      "from": 60,
      "since": "2026-09-01",
      "outcome": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Marico",
      "domain": "marico.com",
      "from": 44,
      "since": "2026-09-01",
      "outcome": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Britannia Industries",
      "domain": "britannia.co.in",
      "from": 33,
      "since": "2026-09-01",
      "outcome": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Columbia Sportswear",
      "domain": "columbia.com",
      "from": 62,
      "since": "2026-09-01",
      "outcome": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "G-III Apparel Group",
      "domain": "g-iii.com",
      "from": 29,
      "since": "2026-09-01",
      "outcome": "UNREACHABLE (no response)",
      "wafVendor": ""
    }
  ],
  "recoveries": [],
  "companies": [
    {
      "name": "Nestle",
      "domain": "nestle.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Unilever",
      "domain": "unilever.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": ""
    },
    {
      "name": "Mondelez International",
      "domain": "mondelezinternational.com",
      "ok": true,
      "finalUrl": "https://www.mondelezinternational.com/",
      "offDomain": "mondelezinternational.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 54,
        "execution": 62,
        "representation": 25,
        "composite": 47
      },
      "detail": {
        "retrieval": {
          "score": 54,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 44,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Corporation.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Your entity carries some descriptive depth.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 21,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "1 of 10 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 2 H2, 6 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 575 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 35 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 147 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No images to assess.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 96,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 575 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 25,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Mondelēz International, Inc), but thin: no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "3 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "The Kraft Heinz Company",
      "domain": "kraftheinzcompany.com",
      "ok": true,
      "finalUrl": "https://www.kraftheinzcompany.com/",
      "offDomain": "kraftheinzcompany.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 31,
        "execution": 58,
        "representation": 8,
        "composite": 32
      },
      "detail": {
        "retrieval": {
          "score": 31,
          "band": "Largely invisible to AI",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "4 of 4 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "2 H1, 0 H2, 2 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 70,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 244 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 23 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 143 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 6 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 67,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "No robots.txt is blocking AI crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No canonical link found.",
                  "rec": "Declare a canonical URL so engines consolidate signals on one address."
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "partial",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, no lang.",
                  "rec": "Serve over HTTPS, add a responsive viewport meta tag, and set an html lang attribute."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (2)"
            },
            {
              "sev": "warning",
              "label": "Heading levels skip from H1 to H3"
            },
            {
              "sev": "error",
              "label": "7 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "No canonical URL declared"
            },
            {
              "sev": "warning",
              "label": "Thin content (under 250 words)"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 58,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No robots.txt is blocking retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 60,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Only about 244 words in the static HTML; some content likely depends on JavaScript.",
                  "rec": "Server-render or pre-render the primary content and controls. Agents and most crawlers do not execute JavaScript, so a client-rendered action surface is invisible to them."
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "General Mills",
      "domain": "generalmills.com",
      "ok": true,
      "finalUrl": "https://www.generalmills.com/",
      "offDomain": "generalmills.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 53,
        "execution": 62,
        "representation": 8,
        "composite": 41
      },
      "detail": {
        "retrieval": {
          "score": 53,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 83,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "16 of 17 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 question-led heading(s) or Q&A found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 6 H2, 14 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 660 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 43 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 145 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 21 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 96,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "A form element is present but has no usable named inputs.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 660 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Kellanova",
      "domain": "kellanova.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": ""
    },
    {
      "name": "WK Kellogg",
      "domain": "wkkellogg.com",
      "ok": true,
      "finalUrl": "https://www.wkkellogg.com/",
      "offDomain": "wkkellogg.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 61,
        "execution": 62,
        "representation": 32,
        "composite": 52
      },
      "detail": {
        "retrieval": {
          "score": 61,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 72,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization, Corporation.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "3 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Your entity carries some descriptive depth.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 43,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "8 of 15 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 3 H2, 0 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 85,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 435 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 21 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 152 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 26 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 89,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "partial",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, no lang.",
                  "rec": "Serve over HTTPS, add a responsive viewport meta tag, and set an html lang attribute."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 435 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 32,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (WK Kellogg Co), but thin: no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 30,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 confirmed and 0 unverified authoritative home(s) (of 3 declared; the rest did not resolve): linkedin.com.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 3,
              "reachable": 3,
              "confirmed": 1,
              "dead": 0,
              "links": [
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "linkedin.com"
              ],
              "confirmedHosts": [
                "linkedin.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Mars",
      "domain": "mars.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "AWS CloudFront or AWS WAF"
    },
    {
      "name": "Ferrero",
      "domain": "ferrero.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Danone",
      "domain": "danone.com",
      "ok": true,
      "finalUrl": "https://www.danone.com/",
      "offDomain": "danone.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 65,
        "execution": 63,
        "representation": 54,
        "composite": 61
      },
      "detail": {
        "retrieval": {
          "score": 65,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 75,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Corporation.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "7 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Your entity carries some descriptive depth.",
                  "rec": null
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "3 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "5 of 32 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 54 H2, 7 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 958 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 41 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 159 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "87% of 61 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 83,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "error",
              "label": "1 insecure HTTP resource on a secure page"
            },
            {
              "sev": "warning",
              "label": "8 images missing alt text"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 63,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 80,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 958 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 54,
          "band": "Ambiguous identity",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 79,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity declared (Danone) with a description and descriptive depth.",
                  "rec": null
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 60,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 confirmed and 2 unverified authoritative home(s) (of 7 declared; the rest did not resolve): linkedin.com, x.com, instagram.com.",
                  "rec": null
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "7 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 5,
              "reachable": 3,
              "confirmed": 1,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "x.com",
                  "status": 403,
                  "state": "unverified"
                },
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                }
              ],
              "scoringHosts": [
                "linkedin.com",
                "x.com",
                "instagram.com"
              ],
              "confirmedHosts": [
                "linkedin.com"
              ],
              "unverifiedHosts": [
                "x.com",
                "instagram.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Conagra Brands",
      "domain": "conagrabrands.com",
      "ok": true,
      "finalUrl": "https://www.conagrabrands.com/",
      "offDomain": "conagrabrands.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 41,
        "execution": 68,
        "representation": 8,
        "composite": 39
      },
      "detail": {
        "retrieval": {
          "score": 41,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "25 of 28 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "4 H1, 8 H2, 44 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1800 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 21 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 163 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 61 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 78,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "1/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (4)"
            },
            {
              "sev": "error",
              "label": "1 insecure HTTP resource on a secure page"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 68,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "7 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1800 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "The Campbell's Company",
      "domain": "campbells.com",
      "ok": true,
      "finalUrl": "https://www.campbells.com/",
      "offDomain": "campbells.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 67,
        "execution": 83,
        "representation": 32,
        "composite": 61
      },
      "detail": {
        "retrieval": {
          "score": 67,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 69,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "5 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "3 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "5 of 7 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 8 H2, 5 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 608 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 57 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 139 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 40 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 100,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (2,181 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 83,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 80,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 608 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "llms.txt present but declares no transactional surfaces.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 32,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Campbell's), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name \"Campbell's\" is not clearly echoed in the title or og:site_name, which weakens disambiguation.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 30,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "0 confirmed and 2 unverified authoritative home(s) (of 4 declared; the rest did not resolve): instagram.com, twitter.com.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 4,
              "reachable": 2,
              "confirmed": 0,
              "dead": 0,
              "links": [
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "twitter.com",
                  "status": 403,
                  "state": "unverified"
                }
              ],
              "scoringHosts": [
                "instagram.com",
                "twitter.com"
              ],
              "confirmedHosts": [],
              "unverifiedHosts": [
                "instagram.com",
                "twitter.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Hormel Foods",
      "domain": "hormelfoods.com",
      "ok": true,
      "finalUrl": "https://www.hormelfoods.com/",
      "offDomain": "hormelfoods.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 57,
        "execution": 79,
        "representation": 25,
        "composite": 54
      },
      "detail": {
        "retrieval": {
          "score": 57,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 42,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "6 of 6 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 3 H2, 0 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 667 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 12 characters.",
                  "rec": "Aim for a 15 to 70 character title that states who you are and what you do."
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 140 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "96% of 70 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "error",
              "label": "4 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "3 images missing alt text"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 79,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 65,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 667 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "partial",
                  "weight": 1,
                  "detail": "An invisible reCAPTCHA v3 is present; it scores requests rather than blocking outright, but can still gate an action on a low score.",
                  "rec": "Do not gate primary actions behind an interactive CAPTCHA (hCaptcha, Turnstile, reCAPTCHA v2), which agents cannot solve. Invisible scoring (reCAPTCHA v3) is less hostile but can still block a low-scoring agent, so keep it off critical task paths."
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 25,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Hormel Foods Corporation), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "3 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "McCormick",
      "domain": "mccormick.com",
      "ok": true,
      "finalUrl": "https://www.mccormick.com/",
      "offDomain": "mccormick.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 68,
        "execution": 86,
        "representation": 21,
        "composite": 58
      },
      "detail": {
        "retrieval": {
          "score": 68,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 31,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Corporation.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No logo and contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 21,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "2 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 100,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "12 of 119 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "2 question-led heading(s) or Q&A found.",
                  "rec": null
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 37 H2, 106 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 2200 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 62 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 155 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "98% of 239 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 96,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (4,418 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "3 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "5 images missing alt text"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 86,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 80,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "66 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 2200 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "fail",
                  "weight": 1,
                  "detail": "An interactive CAPTCHA (hCaptcha, Cloudflare Turnstile or reCAPTCHA v2) is present; autonomous agents cannot pass it.",
                  "rec": "Do not gate primary actions behind an interactive CAPTCHA (hCaptcha, Turnstile, reCAPTCHA v2), which agents cannot solve. Invisible scoring (reCAPTCHA v3) is less hostile but can still block a low-scoring agent, so keep it off critical task paths."
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Interactive CAPTCHA present; autonomous agents cannot complete it"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 21,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 29,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (named), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "49 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "The J.M. Smucker Company",
      "domain": "jmsmucker.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "The Hershey Company",
      "domain": "thehersheycompany.com",
      "ok": true,
      "finalUrl": "https://www.thehersheycompany.com/",
      "offDomain": "thehersheycompany.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 56,
        "execution": 83,
        "representation": 23,
        "composite": 54
      },
      "detail": {
        "retrieval": {
          "score": 56,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 42,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 43,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "3 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "11 of 12 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 H1, 0 H2, 5 H3.",
                  "rec": "Add H2/H3 subheadings; a flat page is hard for a model to segment and quote."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 570 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 26 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 96 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 21 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 65,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "No robots.txt is blocking AI crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No canonical link found.",
                  "rec": "Declare a canonical URL so engines consolidate signals on one address."
                },
                {
                  "label": "Sitemap",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "No sitemap found via robots.txt or /sitemap.xml.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Heading levels skip from H1 to H3"
            },
            {
              "sev": "error",
              "label": "3 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "No canonical URL declared"
            },
            {
              "sev": "warning",
              "label": "No sitemap discoverable"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 83,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No robots.txt is blocking retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 100,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 570 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 25,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "No sitemap found via robots.txt or /sitemap.xml.",
                  "rec": "Publish a sitemap.xml and reference it in robots.txt so agents can enumerate your actionable pages."
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 23,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (The Hershey Company), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Tyson Foods",
      "domain": "tysonfoods.com",
      "ok": true,
      "finalUrl": "https://www.tysonfoods.com/",
      "offDomain": "tysonfoods.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 53,
        "execution": 82,
        "representation": 10,
        "composite": 48
      },
      "detail": {
        "retrieval": {
          "score": 53,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 39,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Uses @graph / @id, but the page does not reference a subject entity.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Dates present in meta or <time> tags, but not in structured data.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "7 of 12 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 6 H2, 0 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 894 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 22 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 163 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 16 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 78,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 82,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "A form element is present but has no usable named inputs.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 894 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 10,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "2 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Kerry Group",
      "domain": "kerry.com",
      "ok": true,
      "finalUrl": "https://www.kerry.com/",
      "offDomain": "kerry.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 63,
        "execution": 62,
        "representation": 34,
        "composite": 53
      },
      "detail": {
        "retrieval": {
          "score": 63,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 53,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "4 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 21,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "12 of 21 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 6 H2, 3 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 848 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 59 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 164 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "88% of 8 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 91,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "AI answer crawlers allowed; training or user-initiated crawlers blocked (gptbot, claudebot, google-extended, meta-externalagent, ccbot, cohere-ai, bytespider, diffbot, omgili, imagesiftbot, oai-adsbot), a legitimate choice.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "1 image missing alt text"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 848 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 34,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Kerry Group), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 30,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "0 confirmed and 2 unverified authoritative home(s) (of 4 declared; the rest did not resolve): twitter.com, instagram.com.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "4 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (training/other crawlers blocked (gptbot, claudebot, google-extended, meta-externalagent).)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 4,
              "reachable": 2,
              "confirmed": 0,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "twitter.com",
                  "status": 403,
                  "state": "unverified"
                },
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                }
              ],
              "scoringHosts": [
                "twitter.com",
                "instagram.com"
              ],
              "confirmedHosts": [],
              "unverifiedHosts": [
                "twitter.com",
                "instagram.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Associated British Foods",
      "domain": "abf.co.uk",
      "ok": false,
      "reason": "UNREADABLE (no content / client-side rendered)",
      "wafVendor": ""
    },
    {
      "name": "Premier Foods",
      "domain": "premierfoods.co.uk",
      "ok": true,
      "finalUrl": "https://www.premierfoods.co.uk/",
      "offDomain": "premierfoods.co.uk",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 60,
        "execution": 87,
        "representation": 10,
        "composite": 52
      },
      "detail": {
        "retrieval": {
          "score": 60,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 14,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "12 of 27 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 7 H2, 3 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 675 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 24 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 264 characters.",
                  "rec": "Aim for a 70 to 180 character description; it is often quoted verbatim as your summary."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "95% of 38 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "2 images missing alt text"
            },
            {
              "sev": "warning",
              "label": "Meta description over 180 characters"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 87,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 429, GPTBot 200). 1 probe(s) returned a transient rate-limit or timeout and are not counted as a block.",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 675 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 10,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "2 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Bakkavor",
      "domain": "bakkavor.com",
      "ok": true,
      "finalUrl": "https://www.greencore.com/",
      "offDomain": "greencore.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 72,
        "execution": 90,
        "representation": 25,
        "composite": 62
      },
      "detail": {
        "retrieval": {
          "score": 72,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 53,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "partial",
                  "weight": 2,
                  "detail": "2 distinct external profiles linked via sameAs.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "16 of 28 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 2 H2, 3 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1100 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 41 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 141 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "85% of 26 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 100,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (2,002 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "1 insecure HTTP resource on a secure page"
            },
            {
              "sev": "warning",
              "label": "4 images missing alt text"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 90,
          "band": "Built for agents",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "2 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1100 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 25,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Greencore Group PLC), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 confirmed and 1 unverified authoritative home(s) (of 2 declared; the rest did not resolve): instagram.com.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "5 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No usage terms found on the page (license, copyrightHolder, meta reservation), and the TDM reservation file (/.well-known/tdmrep.json) could not be read on this scan, so the declared-terms verdict is unmeasured rather than a definitive absence. (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 2,
              "reachable": 1,
              "confirmed": 0,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                }
              ],
              "scoringHosts": [
                "instagram.com"
              ],
              "confirmedHosts": [],
              "unverifiedHosts": [
                "instagram.com"
              ]
            }
          },
          "tdmUnmeasured": true
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": [
        "tdmrep-unmeasured"
      ]
    },
    {
      "name": "Greencore",
      "domain": "greencore.com",
      "ok": true,
      "finalUrl": "https://www.greencore.com/",
      "offDomain": "greencore.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 72,
        "execution": 90,
        "representation": 25,
        "composite": 62
      },
      "detail": {
        "retrieval": {
          "score": 72,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 53,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "partial",
                  "weight": 2,
                  "detail": "2 distinct external profiles linked via sameAs.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "16 of 28 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 2 H2, 3 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1100 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 41 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 141 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "85% of 26 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 100,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (2,002 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "1 insecure HTTP resource on a secure page"
            },
            {
              "sev": "warning",
              "label": "4 images missing alt text"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 90,
          "band": "Built for agents",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "2 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1100 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 25,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Greencore Group PLC), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 confirmed and 1 unverified authoritative home(s) (of 2 declared; the rest did not resolve): instagram.com.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "5 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No usage terms found on the page (license, copyrightHolder, meta reservation), and the TDM reservation file (/.well-known/tdmrep.json) could not be read on this scan, so the declared-terms verdict is unmeasured rather than a definitive absence. (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 2,
              "reachable": 1,
              "confirmed": 0,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                }
              ],
              "scoringHosts": [
                "instagram.com"
              ],
              "confirmedHosts": [],
              "unverifiedHosts": [
                "instagram.com"
              ]
            }
          },
          "tdmUnmeasured": true
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": [
        "tdmrep-unmeasured"
      ]
    },
    {
      "name": "Nomad Foods",
      "domain": "nomadfoods.com",
      "ok": true,
      "finalUrl": "https://www.nomadfoods.com/",
      "offDomain": "nomadfoods.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 48,
        "execution": 84,
        "representation": 13,
        "composite": 48
      },
      "detail": {
        "retrieval": {
          "score": 48,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 14,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "7 of 34 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 H1, 1 H2, 0 H3.",
                  "rec": "Add H2/H3 subheadings; a flat page is hard for a model to segment and quote."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 65,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 393 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 18 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No meta description found.",
                  "rec": "Add a clear meta description."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 6 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 65,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "robots.txt could not be read on this pass (a transient network fault or rate-limit), so AI crawler access is inconclusive and is not scored as a pass.",
                  "rec": "Re-run the scan. If robots.txt still will not load, confirm it responds with 200 and does not Disallow the AI answer crawlers (OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot)."
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "1/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Missing meta description"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": true
        },
        "execution": {
          "score": 84,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 88,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "partial",
                  "weight": 1,
                  "detail": "robots.txt could not be read on this scan (a transient network fault or rate-limit), so the declared retrieval policy is unmeasured; held inconclusive, not scored as a pass or a block.",
                  "rec": "Re-run the scan. If robots.txt still will not load, confirm it responds with 200 and does not Disallow the retrieval agents (OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot)."
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "2 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 393 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": true
        },
        "representation": {
          "score": 13,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "8 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (training-crawler posture unmeasured this scan: robots.txt could not be read.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": [
        "robots-unmeasured"
      ]
    },
    {
      "name": "Lamb Weston",
      "domain": "lambweston.com",
      "ok": true,
      "finalUrl": "https://www.lambweston.com/",
      "offDomain": "lambweston.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 63,
        "execution": 63,
        "representation": 34,
        "composite": 53
      },
      "detail": {
        "retrieval": {
          "score": 63,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 75,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "3 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Your entity carries some descriptive depth.",
                  "rec": null
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 21,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "13 of 17 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "4 H1, 8 H2, 7 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 842 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 55 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 142 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "partial",
                  "weight": 1,
                  "detail": "77% of 30 images have alt text.",
                  "rec": "Give images descriptive alt text; it is readable context a model can use."
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 91,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (4)"
            },
            {
              "sev": "warning",
              "label": "7 images missing alt text"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 63,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 80,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "1 form(s) present, but inputs are poorly labelled.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 842 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 34,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 79,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity declared (United States) with a description and descriptive depth.",
                  "rec": null
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name \"United States\" is not clearly echoed in the title or og:site_name, which weakens disambiguation.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 confirmed and 1 unverified authoritative home(s) (of 3 declared; the rest did not resolve): twitter.com.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "2 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 3,
              "reachable": 2,
              "confirmed": 0,
              "dead": 0,
              "links": [
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "twitter.com",
                  "status": 403,
                  "state": "unverified"
                }
              ],
              "scoringHosts": [
                "twitter.com"
              ],
              "confirmedHosts": [],
              "unverifiedHosts": [
                "twitter.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": [
        "sameas-unverified"
      ]
    },
    {
      "name": "McCain Foods",
      "domain": "mccain.com",
      "ok": true,
      "finalUrl": "https://www.mccain.com/",
      "offDomain": "mccain.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 37,
        "execution": 68,
        "representation": 10,
        "composite": 38
      },
      "detail": {
        "retrieval": {
          "score": 37,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "1 of 7 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 4 H2, 0 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 539 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 50 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 238 characters.",
                  "rec": "Aim for a 70 to 180 character description; it is often quoted verbatim as your summary."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 19 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "41 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "Meta description over 180 characters"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 68,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 539 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 10,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "4 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Barilla",
      "domain": "barilla.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Grupo Bimbo",
      "domain": "grupobimbo.com",
      "ok": true,
      "finalUrl": "https://grupobimbo.com/",
      "offDomain": "grupobimbo.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 73,
        "execution": 69,
        "representation": 64,
        "composite": 69
      },
      "detail": {
        "retrieval": {
          "score": 73,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 69,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "5 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Your entity carries some descriptive depth.",
                  "rec": null
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 50,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "2 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Dates present in meta or <time> tags, but not in structured data.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "5 of 5 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 8 H2, 0 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 754 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 52 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 222 characters.",
                  "rec": "Aim for a 70 to 180 character description; it is often quoted verbatim as your summary."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "96% of 27 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 100,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (1,792 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "2 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "1 image missing alt text"
            },
            {
              "sev": "warning",
              "label": "Meta description over 180 characters"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 69,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 100,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 754 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "llms.txt present but declares no transactional surfaces.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 64,
          "band": "Partly resolved",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 79,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity declared (Grupo Bimbo) with a description and descriptive depth.",
                  "rec": null
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 100,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "2 confirmed and 1 unverified authoritative home(s) (of 5 declared; the rest did not resolve): wikidata.org, linkedin.com, instagram.com.",
                  "rec": null
                },
                {
                  "label": "Spans registry and profile",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Identity spans a confirmed registry (wikidata.org) and a profile source.",
                  "rec": null
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "3 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 5,
              "reachable": 4,
              "confirmed": 2,
              "dead": 0,
              "links": [
                {
                  "host": "wikidata.org",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                },
                {
                  "host": "tiktok.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "wikidata.org",
                "linkedin.com",
                "instagram.com"
              ],
              "confirmedHosts": [
                "wikidata.org",
                "linkedin.com"
              ],
              "unverifiedHosts": [
                "instagram.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "JBS",
      "domain": "jbs.com.br",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": ""
    },
    {
      "name": "Grupo Nutresa",
      "domain": "gruponutresa.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "AWS CloudFront or AWS WAF"
    },
    {
      "name": "Ajinomoto",
      "domain": "ajinomoto.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Mowi",
      "domain": "mowi.com",
      "ok": true,
      "finalUrl": "https://mowi.com/",
      "offDomain": "mowi.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 70,
        "execution": 90,
        "representation": 28,
        "composite": 63
      },
      "detail": {
        "retrieval": {
          "score": 70,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 42,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "3 of 3 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 question-led heading(s) or Q&A found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 2 H2, 6 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1500 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 54 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 152 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 20 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 100,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (200,000 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "No robots.txt is blocking AI crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 90,
          "band": "Built for agents",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No robots.txt is blocking retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "2 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1500 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 28,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Mowi Company Website), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "7 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Saputo",
      "domain": "saputo.com",
      "ok": true,
      "finalUrl": "https://saputo.com/",
      "offDomain": "saputo.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 43,
        "execution": 62,
        "representation": 8,
        "composite": 38
      },
      "detail": {
        "retrieval": {
          "score": 43,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "8 of 19 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "3 H1, 0 H2, 6 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 506 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 34 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 84 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 1 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (3)"
            },
            {
              "sev": "warning",
              "label": "Heading levels skip from H1 to H3"
            },
            {
              "sev": "error",
              "label": "2 insecure HTTP resources on a secure page"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 506 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Lactalis",
      "domain": "lactalis.com",
      "ok": true,
      "finalUrl": "https://www.lactalis.com/fr/",
      "offDomain": "lactalis.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 62,
        "execution": 87,
        "representation": 32,
        "composite": 60
      },
      "detail": {
        "retrieval": {
          "score": 62,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 31,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "partial",
                  "weight": 2,
                  "detail": "2 distinct external profiles linked via sameAs.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 50,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "4 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Dates present in meta or <time> tags, but not in structured data.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "8 of 10 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 6 H2, 18 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 523 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 8 characters.",
                  "rec": "Aim for a 15 to 70 character title that states who you are and what you do."
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 133 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 32 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 83,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 87,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 523 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 32,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Lactalis), but thin: no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 30,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 confirmed and 1 unverified authoritative home(s): linkedin.com, x.com.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 2,
              "reachable": 1,
              "confirmed": 1,
              "dead": 0,
              "links": [
                {
                  "host": "x.com",
                  "status": 403,
                  "state": "unverified"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                }
              ],
              "scoringHosts": [
                "linkedin.com",
                "x.com"
              ],
              "confirmedHosts": [
                "linkedin.com"
              ],
              "unverifiedHosts": [
                "x.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Arla Foods",
      "domain": "arla.com",
      "ok": true,
      "finalUrl": "https://www.arla.com/",
      "offDomain": "arla.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 47,
        "execution": 63,
        "representation": 8,
        "composite": 39
      },
      "detail": {
        "retrieval": {
          "score": 47,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "9 of 11 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "12 question-led heading(s) or Q&A found.",
                  "rec": null
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 9 H2, 18 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 636 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 39 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 97 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 29 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 83,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "error",
              "label": "1 insecure HTTP resource on a secure page"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 63,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 80,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 636 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "FrieslandCampina",
      "domain": "frieslandcampina.com",
      "ok": false,
      "reason": "UNREADABLE (no content / client-side rendered)",
      "wafVendor": ""
    },
    {
      "name": "Fonterra",
      "domain": "fonterra.com",
      "ok": true,
      "finalUrl": "https://www.fonterra.com/nz/en.html",
      "offDomain": "fonterra.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 37,
        "execution": 62,
        "representation": 10,
        "composite": 36
      },
      "detail": {
        "retrieval": {
          "score": 37,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "16 of 64 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 1 H2, 3 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 80,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 822 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 8 characters.",
                  "rec": "Aim for a 15 to 70 character title that states who you are and what you do."
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 229 characters.",
                  "rec": "Aim for a 70 to 180 character description; it is often quoted verbatim as your summary."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 5 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 89,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (2,076 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "partial",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, no lang.",
                  "rec": "Serve over HTTPS, add a responsive viewport meta tag, and set an html lang attribute."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "warning",
              "label": "Meta description over 180 characters"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "A form element is present but has no usable named inputs.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 822 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "llms.txt present but declares no transactional surfaces.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 10,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "2 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Tate & Lyle",
      "domain": "tateandlyle.com",
      "ok": true,
      "finalUrl": "https://www.tateandlyle.com/",
      "offDomain": "tateandlyle.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 43,
        "execution": 68,
        "representation": 20,
        "composite": 44
      },
      "detail": {
        "retrieval": {
          "score": 43,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "19 of 25 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "2 H1, 30 H2, 12 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1400 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 22 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 80 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "97% of 29 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (2)"
            },
            {
              "sev": "warning",
              "label": "1 image missing alt text"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 68,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "4 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1400 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 20,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "8 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 100,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "pass",
                  "weight": 1,
                  "detail": "You actively govern representation: TDM reservation. (no training opt-out declared.)",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Post Holdings",
      "domain": "postholdings.com",
      "ok": true,
      "finalUrl": "https://www.postholdings.com/",
      "offDomain": "postholdings.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 60,
        "execution": 85,
        "representation": 25,
        "composite": 57
      },
      "detail": {
        "retrieval": {
          "score": 60,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 42,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "6 of 16 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 3 H2, 0 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 50,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 244 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 24 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No meta description found.",
                  "rec": "Add a clear meta description."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 9 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 78,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "1/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Missing meta description"
            },
            {
              "sev": "warning",
              "label": "Thin content (under 250 words)"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 85,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 85,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Only about 244 words in the static HTML; some content likely depends on JavaScript.",
                  "rec": "Server-render or pre-render the primary content and controls. Agents and most crawlers do not execute JavaScript, so a client-rendered action surface is invisible to them."
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 25,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Post Holdings), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "3 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "TreeHouse Foods",
      "domain": "treehousefoods.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Flowers Foods",
      "domain": "flowersfoods.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": "",
      "escalatedFrom": {
        "name": "Flowers Foods",
        "domain": "flowersfoods.com",
        "from": 60,
        "since": "2026-09-01",
        "outcome": "UNREACHABLE (no response)",
        "wafVendor": ""
      }
    },
    {
      "name": "Hain Celestial",
      "domain": "hain.com",
      "ok": true,
      "finalUrl": "https://www.hain.com/",
      "offDomain": "hain.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 46,
        "execution": 87,
        "representation": 8,
        "composite": 47
      },
      "detail": {
        "retrieval": {
          "score": 46,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 14,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "3 of 4 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "2 H1, 4 H2, 5 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 65,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 344 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 21 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No meta description found.",
                  "rec": "Add a clear meta description."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "93% of 15 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 78,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "1/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (2)"
            },
            {
              "sev": "warning",
              "label": "1 image missing alt text"
            },
            {
              "sev": "warning",
              "label": "Missing meta description"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 87,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 344 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "B&G Foods",
      "domain": "bgfoods.com",
      "ok": true,
      "finalUrl": "https://bgfoods.com/",
      "offDomain": "bgfoods.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 52,
        "execution": 82,
        "representation": 23,
        "composite": 52
      },
      "detail": {
        "retrieval": {
          "score": 52,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 42,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 17,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "3 of 3 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 4 H2, 0 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 65,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 397 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 20 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No meta description found.",
                  "rec": "Add a clear meta description."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "91% of 11 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 96,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "error",
              "label": "2 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "1 image missing alt text"
            },
            {
              "sev": "warning",
              "label": "Missing meta description"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 82,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 397 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 23,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (B&amp;G Foods), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Lancaster Colony",
      "domain": "lancastercolony.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Bel Group",
      "domain": "groupe-bel.com",
      "ok": true,
      "finalUrl": "https://www.groupe-bel.com/",
      "offDomain": "groupe-bel.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 75,
        "execution": 82,
        "representation": 23,
        "composite": 60
      },
      "detail": {
        "retrieval": {
          "score": 75,
          "band": "Well positioned",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 42,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 100,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "10 of 15 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "5 question-led heading(s) or Q&A found.",
                  "rec": null
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 8 H2, 9 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 80,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1200 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 82 characters.",
                  "rec": "Aim for a 15 to 70 character title that states who you are and what you do."
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 185 characters.",
                  "rec": "Aim for a 70 to 180 character description; it is often quoted verbatim as your summary."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 46 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 96,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Title likely truncated in results (over 65 characters)"
            },
            {
              "sev": "warning",
              "label": "Meta description over 180 characters"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 82,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1200 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 23,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Niji), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name \"Niji\" is not clearly echoed in the title or og:site_name, which weakens disambiguation.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Pladis",
      "domain": "pladisglobal.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Weetabix",
      "domain": "weetabix.co.uk",
      "ok": true,
      "finalUrl": "https://weetabix.co.uk/",
      "offDomain": "weetabix.co.uk",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 45,
        "execution": 78,
        "representation": 8,
        "composite": 44
      },
      "detail": {
        "retrieval": {
          "score": 45,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 14,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "23 of 26 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "7 H1, 0 H2, 0 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 55,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 277 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 23 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No meta description found.",
                  "rec": "Add a clear meta description."
                },
                {
                  "label": "Image alt coverage",
                  "status": "partial",
                  "weight": 1,
                  "detail": "73% of 11 images have alt text.",
                  "rec": "Give images descriptive alt text; it is readable context a model can use."
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 78,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "1/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (7)"
            },
            {
              "sev": "warning",
              "label": "3 images missing alt text"
            },
            {
              "sev": "warning",
              "label": "Missing meta description"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 78,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 60,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Only about 277 words in the static HTML; some content likely depends on JavaScript.",
                  "rec": "Server-render or pre-render the primary content and controls. Agents and most crawlers do not execute JavaScript, so a client-rendered action surface is invisible to them."
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Warburtons",
      "domain": "warburtons.co.uk",
      "ok": true,
      "finalUrl": "https://www.warburtons.co.uk/",
      "offDomain": "warburtons.co.uk",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 58,
        "execution": 65,
        "representation": 25,
        "composite": 49
      },
      "detail": {
        "retrieval": {
          "score": 58,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 25,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 39,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Uses @graph / @id, but the page does not reference a subject entity.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Dates present in meta or <time> tags, but not in structured data.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "6 of 15 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 2 H2, 0 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 85,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 382 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 52 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 130 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "94% of 17 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "1 image missing alt text"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 65,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 85,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "2 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 382 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "partial",
                  "weight": 1,
                  "detail": "An invisible reCAPTCHA v3 is present; it scores requests rather than blocking outright, but can still gate an action on a low score.",
                  "rec": "Do not gate primary actions behind an interactive CAPTCHA (hCaptcha, Turnstile, reCAPTCHA v2), which agents cannot solve. Invisible scoring (reCAPTCHA v3) is less hostile but can still block a low-scoring agent, so keep it off critical task paths."
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 25,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Warburtons), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "2 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Hovis",
      "domain": "hovis.co.uk",
      "ok": true,
      "finalUrl": "https://www.hovis.co.uk/",
      "offDomain": "hovis.co.uk",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 45,
        "execution": 62,
        "representation": 10,
        "composite": 39
      },
      "detail": {
        "retrieval": {
          "score": 45,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "36 of 38 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 question-led heading(s) or Q&A found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "6 H1, 0 H2, 57 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 95,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 2600 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 26 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 147 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "98% of 64 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No lists, landmarks or header tables found.",
                  "rec": "Use lists, <main>/<article> landmarks and tables with <th> headers; they help AI parsers isolate and extract your content cleanly."
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 76,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "No robots.txt is blocking AI crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No canonical link found.",
                  "rec": "Declare a canonical URL so engines consolidate signals on one address."
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "partial",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, no lang.",
                  "rec": "Serve over HTTPS, add a responsive viewport meta tag, and set an html lang attribute."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (6)"
            },
            {
              "sev": "warning",
              "label": "Heading levels skip from H1 to H3"
            },
            {
              "sev": "warning",
              "label": "1 image missing alt text"
            },
            {
              "sev": "warning",
              "label": "No canonical URL declared"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No robots.txt is blocking retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 2600 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 10,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "3 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Lindt & Spruengli",
      "domain": "lindt.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Haribo",
      "domain": "haribo.com",
      "ok": true,
      "finalUrl": "https://www.haribo.com/en-us",
      "offDomain": "haribo.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 63,
        "execution": 62,
        "representation": 49,
        "composite": 58
      },
      "detail": {
        "retrieval": {
          "score": 63,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 69,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "3 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Your entity carries some descriptive depth.",
                  "rec": null
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "6 of 9 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 8 H2, 0 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 85,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 458 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 23 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 155 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "96% of 76 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "warning",
              "label": "3 images missing alt text"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 458 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 49,
          "band": "Ambiguous identity",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 79,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity declared (HARIBO) with a description and descriptive depth.",
                  "rec": null
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 60,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "3 confirmed and 0 unverified authoritative home(s): wikidata.org, en.wikipedia.org, de.wikipedia.org.",
                  "rec": null
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "A registry link is confirmed, but no distinct profile source corroborates it.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 3,
              "reachable": 3,
              "confirmed": 3,
              "dead": 0,
              "links": [
                {
                  "host": "wikidata.org",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "en.wikipedia.org",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "de.wikipedia.org",
                  "status": 200,
                  "state": "confirmed"
                }
              ],
              "scoringHosts": [
                "wikidata.org",
                "en.wikipedia.org",
                "de.wikipedia.org"
              ],
              "confirmedHosts": [
                "wikidata.org",
                "en.wikipedia.org",
                "de.wikipedia.org"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Tootsie Roll Industries",
      "domain": "tootsie.com",
      "ok": true,
      "finalUrl": "https://tootsie.com/",
      "offDomain": "tootsie.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 61,
        "execution": 85,
        "representation": 10,
        "composite": 52
      },
      "detail": {
        "retrieval": {
          "score": 61,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 14,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "7 of 39 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 3 H2, 0 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 85,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 351 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 70 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 140 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 48 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 96,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "1 insecure HTTP resource on a secure page"
            },
            {
              "sev": "warning",
              "label": "Title likely truncated in results (over 65 characters)"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 85,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 85,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 351 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "partial",
                  "weight": 1,
                  "detail": "An invisible reCAPTCHA v3 is present; it scores requests rather than blocking outright, but can still gate an action on a low score.",
                  "rec": "Do not gate primary actions behind an interactive CAPTCHA (hCaptcha, Turnstile, reCAPTCHA v2), which agents cannot solve. Invisible scoring (reCAPTCHA v3) is less hostile but can still block a low-scoring agent, so keep it off critical task paths."
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 10,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "2 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Lotus Bakeries",
      "domain": "lotusbakeries.com",
      "ok": true,
      "finalUrl": "https://www.lotusbakeries.com/",
      "offDomain": "lotusbakeries.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 47,
        "execution": 58,
        "representation": 33,
        "composite": 46
      },
      "detail": {
        "retrieval": {
          "score": 47,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 36,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Person, Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Author or person is named, but without credential depth.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 0,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No paragraph content found.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 2 H2, 1 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 85,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 267 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 26 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 153 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 19 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "error",
              "label": "3 insecure HTTP resources on a secure page"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 58,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 60,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Only about 267 words in the static HTML; some content likely depends on JavaScript.",
                  "rec": "Server-render or pre-render the primary content and controls. Agents and most crawlers do not execute JavaScript, so a client-rendered action surface is invisible to them."
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 33,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (ioadmin), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name \"ioadmin\" is not clearly echoed in the title or og:site_name, which weakens disambiguation.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 40,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "A person or author is named, but without credential depth.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "2 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Beyond Meat",
      "domain": "beyondmeat.com",
      "ok": true,
      "finalUrl": "https://www.beyondmeat.com/en-US",
      "offDomain": "beyondmeat.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 46,
        "execution": 62,
        "representation": 8,
        "composite": 39
      },
      "detail": {
        "retrieval": {
          "score": 46,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "17 of 24 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 10 H2, 13 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 724 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 32 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 153 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "93% of 28 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 78,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No canonical link found.",
                  "rec": "Declare a canonical URL so engines consolidate signals on one address."
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "2 images missing alt text"
            },
            {
              "sev": "warning",
              "label": "No canonical URL declared"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "2 form(s) with named inputs, but no action attribute: submission is wired in JavaScript, so a non-rendering agent has no endpoint to post to.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 724 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Oatly",
      "domain": "oatly.com",
      "ok": true,
      "finalUrl": "https://www.oatly.com/",
      "offDomain": "oatly.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 53,
        "execution": 34,
        "representation": 31,
        "composite": 39
      },
      "detail": {
        "retrieval": {
          "score": 53,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 86,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "4 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Your entity carries some descriptive depth.",
                  "rec": null
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 43,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "3 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 0,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No paragraph content found.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "1 H1, 0 H2, 0 H3.",
                  "rec": "Add H2/H3 subheadings; a flat page is hard for a model to segment and quote."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 70,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 100 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 38 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 136 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No images to assess.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No canonical link found.",
                  "rec": "Declare a canonical URL so engines consolidate signals on one address."
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "1 insecure HTTP resource on a secure page"
            },
            {
              "sev": "warning",
              "label": "No canonical URL declared"
            },
            {
              "sev": "warning",
              "label": "Thin content (under 250 words)"
            },
            {
              "sev": "error",
              "label": "Content appears client-side rendered; static AI crawlers may see little text"
            }
          ],
          "renderDependent": true,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 34,
          "band": "Closed to agents",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 50,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Very little static content (~100 words) with a single-page-app mount point; agents that do not run JavaScript will see almost nothing.",
                  "rec": "Server-render or pre-render the primary content and controls. Agents and most crawlers do not execute JavaScript, so a client-rendered action surface is invisible to them."
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            },
            {
              "sev": "error",
              "label": "Action surface appears client-side rendered; agents may see little"
            },
            {
              "sev": "warning",
              "label": "Client-rendered app: raw-fetch agents see an empty shell (this cap is honest for them); rendering agents may still operate it"
            }
          ],
          "renderDependent": true,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 31,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 79,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity declared (Oatly AB) with a description and descriptive depth.",
                  "rec": null
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name \"Oatly AB\" is not clearly echoed in the title or og:site_name, which weakens disambiguation.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 confirmed and 1 unverified authoritative home(s) (of 4 declared; the rest did not resolve): instagram.com.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 4,
              "reachable": 3,
              "confirmed": 0,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "tiktok.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "instagram.com"
              ],
              "confirmedHosts": [],
              "unverifiedHosts": [
                "instagram.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": [
        "sameas-unverified"
      ]
    },
    {
      "name": "Chobani",
      "domain": "chobani.com",
      "ok": true,
      "finalUrl": "https://www.chobani.com/",
      "offDomain": "chobani.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 20,
        "execution": 58,
        "representation": 8,
        "composite": 29
      },
      "detail": {
        "retrieval": {
          "score": 20,
          "band": "Largely invisible to AI",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 0,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No paragraph content found.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 0 H2, 0 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 55,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 179 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 8 characters.",
                  "rec": "Aim for a 15 to 70 character title that states who you are and what you do."
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 166 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 1 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No lists, landmarks or header tables found.",
                  "rec": "Use lists, <main>/<article> landmarks and tables with <th> headers; they help AI parsers isolate and extract your content cleanly."
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 63,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No canonical link found.",
                  "rec": "Declare a canonical URL so engines consolidate signals on one address."
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "1/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "partial",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, no lang.",
                  "rec": "Serve over HTTPS, add a responsive viewport meta tag, and set an html lang attribute."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "warning",
              "label": "No canonical URL declared"
            },
            {
              "sev": "warning",
              "label": "Thin content (under 250 words)"
            }
          ],
          "renderDependent": true,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 58,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 60,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Only about 179 words in the static HTML; some content likely depends on JavaScript.",
                  "rec": "Server-render or pre-render the primary content and controls. Agents and most crawlers do not execute JavaScript, so a client-rendered action surface is invisible to them."
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": true,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Glanbia",
      "domain": "glanbia.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Meiji Holdings",
      "domain": "meiji.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Yakult Honsha",
      "domain": "yakult.co.jp",
      "ok": true,
      "finalUrl": "https://www.yakult.co.jp/",
      "offDomain": "yakult.co.jp",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 31,
        "execution": 40,
        "representation": 8,
        "composite": 26
      },
      "detail": {
        "retrieval": {
          "score": 31,
          "band": "Largely invisible to AI",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 of 71 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 4 H2, 1 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 60,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 215 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 6 characters.",
                  "rec": "Aim for a 15 to 70 character title that states who you are and what you do."
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 76 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 78 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 74,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "No robots.txt is blocking AI crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No canonical link found.",
                  "rec": "Declare a canonical URL so engines consolidate signals on one address."
                },
                {
                  "label": "Sitemap",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "No sitemap found via robots.txt or /sitemap.xml.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No canonical URL declared"
            },
            {
              "sev": "warning",
              "label": "Thin content (under 250 words)"
            },
            {
              "sev": "warning",
              "label": "No sitemap discoverable"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 40,
          "band": "Major friction",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 63,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "partial",
                  "weight": 3,
                  "detail": "Some AI agents are refused at the edge while a browser gets 200 (OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 403).",
                  "rec": "Your CDN or WAF is refusing AI user-agents at the network layer, so the page is invisible to those agents regardless of robots.txt. If you intend to be agent-reachable, allow the retrieval user-agents (OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot) in your bot-management or Pay-Per-Crawl settings. Note: we test this by sending these user-agent strings from our scanner, so it measures how your edge treats the user-agent; a real agent presents the same string from its own network, making this a strong signal rather than a guarantee."
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No robots.txt is blocking retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 60,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Only about 215 words in the static HTML; some content likely depends on JavaScript.",
                  "rec": "Server-render or pre-render the primary content and controls. Agents and most crawlers do not execute JavaScript, so a client-rendered action surface is invisible to them."
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 25,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "No sitemap found via robots.txt or /sitemap.xml.",
                  "rec": "Publish a sitemap.xml and reference it in robots.txt so agents can enumerate your actionable pages."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Some AI agents refused at the edge (GPTBot)"
            },
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "ITC",
      "domain": "itcportal.com",
      "ok": true,
      "finalUrl": "https://itcportal.com/",
      "offDomain": "itcportal.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 35,
        "execution": 62,
        "representation": 13,
        "composite": 37
      },
      "detail": {
        "retrieval": {
          "score": 35,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 11,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 JSON-LD block(s), but 1 failed to parse.",
                  "rec": "Fix the malformed JSON-LD; invalid blocks are ignored or distrusted."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "52 of 61 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 3 H2, 16 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 70,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 2500 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 91 characters.",
                  "rec": "Aim for a 15 to 70 character title that states who you are and what you do."
                },
                {
                  "label": "Meta description quality",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No meta description found.",
                  "rec": "Add a clear meta description."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "94% of 80 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 74,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "1/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "error",
              "label": "1 invalid structured-data block"
            },
            {
              "sev": "warning",
              "label": "5 images missing alt text"
            },
            {
              "sev": "warning",
              "label": "Title likely truncated in results (over 65 characters)"
            },
            {
              "sev": "warning",
              "label": "Missing meta description"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 2500 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 13,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "9 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Dabur",
      "domain": "dabur.com",
      "ok": true,
      "finalUrl": "https://www.dabur.com/",
      "offDomain": "dabur.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 62,
        "execution": 89,
        "representation": 34,
        "composite": 62
      },
      "detail": {
        "retrieval": {
          "score": 62,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 58,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "4 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 21,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "2 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "41 of 68 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 question-led heading(s) or Q&A found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "2 H1, 9 H2, 9 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 2600 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 78 characters.",
                  "rec": "Aim for a 15 to 70 character title that states who you are and what you do."
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 177 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "93% of 58 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 83,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "AI answer crawlers allowed; training or user-initiated crawlers blocked (bytespider), a legitimate choice.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (2)"
            },
            {
              "sev": "warning",
              "label": "4 images missing alt text"
            },
            {
              "sev": "warning",
              "label": "Title likely truncated in results (over 65 characters)"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 89,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 100,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "3 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 2600 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 34,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Dabur), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 30,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "0 confirmed and 2 unverified authoritative home(s) (of 4 declared; the rest did not resolve): instagram.com, x.com.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "3 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (training/other crawlers blocked (bytespider).)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 4,
              "reachable": 2,
              "confirmed": 0,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                },
                {
                  "host": "x.com",
                  "status": 403,
                  "state": "unverified"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "instagram.com",
                "x.com"
              ],
              "confirmedHosts": [],
              "unverifiedHosts": [
                "instagram.com",
                "x.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Marico",
      "domain": "marico.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": "",
      "escalatedFrom": {
        "name": "Marico",
        "domain": "marico.com",
        "from": 44,
        "since": "2026-09-01",
        "outcome": "UNREACHABLE (no response)",
        "wafVendor": ""
      }
    },
    {
      "name": "Godrej Consumer Products",
      "domain": "godrejcp.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": ""
    },
    {
      "name": "Britannia Industries",
      "domain": "britannia.co.in",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": "",
      "escalatedFrom": {
        "name": "Britannia Industries",
        "domain": "britannia.co.in",
        "from": 33,
        "since": "2026-09-01",
        "outcome": "UNREACHABLE (no response)",
        "wafVendor": ""
      }
    },
    {
      "name": "Tata Consumer Products",
      "domain": "tataconsumer.com",
      "ok": true,
      "finalUrl": "https://www.tataconsumer.com/",
      "offDomain": "tataconsumer.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 40,
        "execution": 62,
        "representation": 13,
        "composite": 38
      },
      "detail": {
        "retrieval": {
          "score": 40,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "15 of 65 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 H1, 0 H2, 1 H3.",
                  "rec": "Add H2/H3 subheadings; a flat page is hard for a model to segment and quote."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1300 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 22 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 124 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "99% of 120 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 70,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "No sitemap found via robots.txt or /sitemap.xml.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Heading levels skip from H1 to H3"
            },
            {
              "sev": "error",
              "label": "2 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "1 image missing alt text"
            },
            {
              "sev": "warning",
              "label": "No sitemap discoverable"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1300 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 25,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "No sitemap found via robots.txt or /sitemap.xml.",
                  "rec": "Publish a sitemap.xml and reference it in robots.txt so agents can enumerate your actionable pages."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 13,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "6 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "PepsiCo",
      "domain": "pepsico.com",
      "ok": true,
      "finalUrl": "https://www.pepsico.com/",
      "offDomain": "pepsico.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 36,
        "execution": 58,
        "representation": 8,
        "composite": 34
      },
      "detail": {
        "retrieval": {
          "score": 36,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "7 of 35 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "1 H1, 0 H2, 0 H3.",
                  "rec": "Add H2/H3 subheadings; a flat page is hard for a model to segment and quote."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 85,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 277 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 40 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 142 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 18 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 83,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 58,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 60,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Only about 277 words in the static HTML; some content likely depends on JavaScript.",
                  "rec": "Server-render or pre-render the primary content and controls. Agents and most crawlers do not execute JavaScript, so a client-rendered action surface is invisible to them."
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "The Coca-Cola Company",
      "domain": "coca-colacompany.com",
      "ok": true,
      "finalUrl": "https://www.coca-colacompany.com/",
      "offDomain": "coca-colacompany.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 48,
        "execution": 62,
        "representation": 8,
        "composite": 39
      },
      "detail": {
        "retrieval": {
          "score": 48,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 43,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "8 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Rich types present: Videoobject.",
                  "rec": null
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "7 of 58 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "19 H1, 38 H2, 10 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 80,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1500 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 21 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 123 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "fail",
                  "weight": 1,
                  "detail": "58% of 67 images have alt text.",
                  "rec": "Give images descriptive alt text; it is readable context a model can use."
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 83,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (19)"
            },
            {
              "sev": "warning",
              "label": "28 images missing alt text"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "A form element is present but has no usable named inputs.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1500 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Keurig Dr Pepper",
      "domain": "keurigdrpepper.com",
      "ok": true,
      "finalUrl": "https://www.keurigdrpepper.com/",
      "offDomain": "keurigdrpepper.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 34,
        "execution": 56,
        "representation": 8,
        "composite": 33
      },
      "detail": {
        "retrieval": {
          "score": 34,
          "band": "Largely invisible to AI",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "1 of 3 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 11 H2, 9 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 65,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 451 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 79 characters.",
                  "rec": "Aim for a 15 to 70 character title that states who you are and what you do."
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 229 characters.",
                  "rec": "Aim for a 70 to 180 character description; it is often quoted verbatim as your summary."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 53 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 83,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "No robots.txt is blocking AI crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Title likely truncated in results (over 65 characters)"
            },
            {
              "sev": "warning",
              "label": "Meta description over 180 characters"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 56,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 63,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "partial",
                  "weight": 3,
                  "detail": "Some AI agents are refused at the edge while a browser gets 200 (OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 403).",
                  "rec": "Your CDN or WAF is refusing AI user-agents at the network layer, so the page is invisible to those agents regardless of robots.txt. If you intend to be agent-reachable, allow the retrieval user-agents (OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot) in your bot-management or Pay-Per-Crawl settings. Note: we test this by sending these user-agent strings from our scanner, so it measures how your edge treats the user-agent; a real agent presents the same string from its own network, making this a strong signal rather than a guarantee."
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No robots.txt is blocking retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "3 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 451 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Some AI agents refused at the edge (GPTBot)"
            },
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Monster Beverage",
      "domain": "monsterbevcorp.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Red Bull",
      "domain": "redbull.com",
      "ok": true,
      "finalUrl": "https://www.redbull.com/us-en",
      "offDomain": "redbull.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 43,
        "execution": 53,
        "representation": 8,
        "composite": 35
      },
      "detail": {
        "retrieval": {
          "score": 43,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 29,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Dates present in meta or <time> tags, but not in structured data.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "9 of 43 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 4 H2, 0 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 85,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 449 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 41 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 149 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 39 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (957 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 53,
          "band": "Major friction",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 63,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "partial",
                  "weight": 3,
                  "detail": "Some AI agents are refused at the edge while a browser gets 200 (OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 403, ClaudeBot 200, GPTBot 200).",
                  "rec": "Your CDN or WAF is refusing AI user-agents at the network layer, so the page is invisible to those agents regardless of robots.txt. If you intend to be agent-reachable, allow the retrieval user-agents (OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot) in your bot-management or Pay-Per-Crawl settings. Note: we test this by sending these user-agent strings from our scanner, so it measures how your edge treats the user-agent; a real agent presents the same string from its own network, making this a strong signal rather than a guarantee."
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 449 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Some AI agents refused at the edge (PerplexityBot)"
            },
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": false,
        "consistent": null,
        "note": "browser-ua-unreadable"
      },
      "flags": []
    },
    {
      "name": "National Beverage",
      "domain": "nationalbeverage.com",
      "ok": true,
      "finalUrl": "https://www.nationalbeverage.com/",
      "offDomain": "nationalbeverage.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 53,
        "execution": 82,
        "representation": 13,
        "composite": 49
      },
      "detail": {
        "retrieval": {
          "score": 53,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 14,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "25 of 56 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "5 H1, 3 H2, 0 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 80,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1600 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 30 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No meta description found.",
                  "rec": "Add a clear meta description."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 55 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 78,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "1/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (5)"
            },
            {
              "sev": "error",
              "label": "1 insecure HTTP resource on a secure page"
            },
            {
              "sev": "warning",
              "label": "Missing meta description"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 82,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1600 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 13,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "7 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No usage terms found on the page (license, copyrightHolder, meta reservation), and the TDM reservation file (/.well-known/tdmrep.json) could not be read on this scan, so the declared-terms verdict is unmeasured rather than a definitive absence. (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": true
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": [
        "tdmrep-unmeasured"
      ]
    },
    {
      "name": "Coca-Cola Europacific Partners",
      "domain": "cocacolaep.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Coca-Cola HBC",
      "domain": "coca-colahellenic.com",
      "ok": false,
      "reason": "UNREADABLE (no content / client-side rendered)",
      "wafVendor": ""
    },
    {
      "name": "A.G. Barr",
      "domain": "agbarr.co.uk",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Nichols",
      "domain": "nicholsplc.co.uk",
      "ok": true,
      "finalUrl": "https://www.nicholsplc.co.uk/",
      "offDomain": "nicholsplc.co.uk",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 46,
        "execution": 87,
        "representation": 10,
        "composite": 48
      },
      "detail": {
        "retrieval": {
          "score": 46,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 14,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "27 of 40 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 2 H2, 9 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 50,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 695 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 14 characters.",
                  "rec": "Aim for a 15 to 70 character title that states who you are and what you do."
                },
                {
                  "label": "Meta description quality",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No meta description found.",
                  "rec": "Add a clear meta description."
                },
                {
                  "label": "Image alt coverage",
                  "status": "fail",
                  "weight": 1,
                  "detail": "40% of 10 images have alt text.",
                  "rec": "Give images descriptive alt text; it is readable context a model can use."
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "warning",
              "label": "6 images missing alt text"
            },
            {
              "sev": "warning",
              "label": "Missing meta description"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 87,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "2 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 695 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 10,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "2 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Fever-Tree",
      "domain": "fever-tree.com",
      "ok": true,
      "finalUrl": "https://fever-tree.com/en-us",
      "offDomain": "fever-tree.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 57,
        "execution": 71,
        "representation": 23,
        "composite": 50
      },
      "detail": {
        "retrieval": {
          "score": 57,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 31,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 43,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "5 of 28 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 H1, 1 H2, 1 H3.",
                  "rec": "Add H2/H3 subheadings; a flat page is hard for a model to segment and quote."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 85,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 306 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 30 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 109 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 45 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 91,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (146,434 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 71,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 306 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 23,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Fever-Tree), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Suntory",
      "domain": "suntory.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Akamai"
    },
    {
      "name": "Anheuser-Busch InBev",
      "domain": "ab-inbev.com",
      "ok": true,
      "finalUrl": "https://www.ab-inbev.com/",
      "offDomain": "ab-inbev.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 36,
        "execution": 62,
        "representation": 8,
        "composite": 35
      },
      "detail": {
        "retrieval": {
          "score": 36,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "15 of 17 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 question-led heading(s) or Q&A found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 1 H2, 0 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 80,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 956 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 15 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 31 characters.",
                  "rec": "Aim for a 70 to 180 character description; it is often quoted verbatim as your summary."
                },
                {
                  "label": "Image alt coverage",
                  "status": "partial",
                  "weight": 1,
                  "detail": "75% of 12 images have alt text.",
                  "rec": "Give images descriptive alt text; it is readable context a model can use."
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 65,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No canonical link found.",
                  "rec": "Declare a canonical URL so engines consolidate signals on one address."
                },
                {
                  "label": "Sitemap",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "No sitemap found via robots.txt or /sitemap.xml.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "warning",
              "label": "3 images missing alt text"
            },
            {
              "sev": "warning",
              "label": "No canonical URL declared"
            },
            {
              "sev": "warning",
              "label": "No sitemap discoverable"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "2 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 956 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 25,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "No sitemap found via robots.txt or /sitemap.xml.",
                  "rec": "Publish a sitemap.xml and reference it in robots.txt so agents can enumerate your actionable pages."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Heineken",
      "domain": "heineken.com",
      "ok": true,
      "finalUrl": "https://www.heineken.com/global/en/home/",
      "offDomain": "heineken.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 40,
        "execution": 62,
        "representation": 10,
        "composite": 37
      },
      "detail": {
        "retrieval": {
          "score": 40,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "8 of 17 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "3 H1, 13 H2, 4 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 85,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 435 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 48 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 117 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 29 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 83,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (3)"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 435 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 10,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "2 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Molson Coors Beverage Company",
      "domain": "molsoncoors.com",
      "ok": true,
      "finalUrl": "https://www.molsoncoors.com/",
      "offDomain": "molsoncoors.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 33,
        "execution": 63,
        "representation": 8,
        "composite": 35
      },
      "detail": {
        "retrieval": {
          "score": 33,
          "band": "Largely invisible to AI",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "2 of 4 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 H1, 1 H2, 0 H3.",
                  "rec": "Add H2/H3 subheadings; a flat page is hard for a model to segment and quote."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 70,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 233 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 19 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 160 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 1 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 78,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "2 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "Thin content (under 250 words)"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 63,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 80,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Only about 233 words in the static HTML; some content likely depends on JavaScript.",
                  "rec": "Server-render or pre-render the primary content and controls. Agents and most crawlers do not execute JavaScript, so a client-rendered action surface is invisible to them."
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No usage terms found on the page (license, copyrightHolder, meta reservation), and the TDM reservation file (/.well-known/tdmrep.json) could not be read on this scan, so the declared-terms verdict is unmeasured rather than a definitive absence. (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": true
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": [
        "tdmrep-unmeasured"
      ]
    },
    {
      "name": "Carlsberg",
      "domain": "carlsberggroup.com",
      "ok": true,
      "finalUrl": "https://carlsberggroup.com/",
      "offDomain": "carlsberggroup.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 45,
        "execution": 59,
        "representation": 13,
        "composite": 39
      },
      "detail": {
        "retrieval": {
          "score": 45,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "10 of 28 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "2 H1, 27 H2, 19 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1100 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 15 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 175 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 22 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 96,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (13,244 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (2)"
            },
            {
              "sev": "error",
              "label": "10 insecure HTTP resources on a secure page"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 59,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 63,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "partial",
                  "weight": 3,
                  "detail": "Some AI agents are refused at the edge while a browser gets 200 (OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 403, GPTBot 403).",
                  "rec": "Your CDN or WAF is refusing AI user-agents at the network layer, so the page is invisible to those agents regardless of robots.txt. If you intend to be agent-reachable, allow the retrieval user-agents (OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot) in your bot-management or Pay-Per-Crawl settings. Note: we test this by sending these user-agent strings from our scanner, so it measures how your edge treats the user-agent; a real agent presents the same string from its own network, making this a strong signal rather than a guarantee."
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "3 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1100 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Some AI agents refused at the edge (ClaudeBot, GPTBot)"
            },
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 13,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "35 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Asahi Group Holdings",
      "domain": "asahigroup-holdings.com",
      "ok": true,
      "finalUrl": "https://www.asahigroup-holdings.com/",
      "offDomain": "asahigroup-holdings.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 42,
        "execution": 62,
        "representation": 8,
        "composite": 37
      },
      "detail": {
        "retrieval": {
          "score": 42,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 7,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Dates present in meta or <time> tags, but not in structured data.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "2 of 33 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 11 H2, 0 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 85,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 346 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 15 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 150 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 28 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 83,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 346 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Kirin Holdings",
      "domain": "kirinholdings.com",
      "ok": true,
      "finalUrl": "https://www.kirinholdings.com/en/",
      "offDomain": "kirinholdings.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 48,
        "execution": 56,
        "representation": 13,
        "composite": 39
      },
      "detail": {
        "retrieval": {
          "score": 48,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 7,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Dates present in meta or <time> tags, but not in structured data.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "14 of 15 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 12 H2, 0 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 941 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 53 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 353 characters.",
                  "rec": "Aim for a 70 to 180 character description; it is often quoted verbatim as your summary."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 58 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "No robots.txt is blocking AI crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "No sitemap found via robots.txt or /sitemap.xml.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Meta description over 180 characters"
            },
            {
              "sev": "warning",
              "label": "No sitemap discoverable"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 56,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No robots.txt is blocking retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "1 form(s) present, but inputs are poorly labelled.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 941 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 25,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "No sitemap found via robots.txt or /sitemap.xml.",
                  "rec": "Publish a sitemap.xml and reference it in robots.txt so agents can enumerate your actionable pages."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 13,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "8 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Sapporo Holdings",
      "domain": "sapporoholdings.jp",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Constellation Brands",
      "domain": "cbrands.com",
      "ok": true,
      "finalUrl": "https://www.cbrands.com/",
      "offDomain": "cbrands.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 63,
        "execution": 85,
        "representation": 23,
        "composite": 57
      },
      "detail": {
        "retrieval": {
          "score": 63,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 31,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 54,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "5 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Uses @graph / @id, but the page does not reference a subject entity.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Rich types present: Itemlist.",
                  "rec": null
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "19 of 21 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 8 H2, 0 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1300 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 100 characters.",
                  "rec": "Aim for a 15 to 70 character title that states who you are and what you do."
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 141 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 59 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (4,188 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "2 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "Title likely truncated in results (over 65 characters)"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 85,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "2 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1300 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "fail",
                  "weight": 1,
                  "detail": "An interactive CAPTCHA (hCaptcha, Cloudflare Turnstile or reCAPTCHA v2) is present; autonomous agents cannot pass it.",
                  "rec": "Do not gate primary actions behind an interactive CAPTCHA (hCaptcha, Turnstile, reCAPTCHA v2), which agents cannot solve. Invisible scoring (reCAPTCHA v3) is less hostile but can still block a low-scoring agent, so keep it off critical task paths."
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Interactive CAPTCHA present; autonomous agents cannot complete it"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 23,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Constellation Brands), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "The Boston Beer Company",
      "domain": "bostonbeer.com",
      "ok": true,
      "finalUrl": "https://www.bostonbeer.com/",
      "offDomain": "bostonbeer.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 26,
        "execution": 34,
        "representation": 8,
        "composite": 23
      },
      "detail": {
        "retrieval": {
          "score": 26,
          "band": "Largely invisible to AI",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 21,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 0,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No paragraph content found.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "1 H1, 0 H2, 0 H3.",
                  "rec": "Add H2/H3 subheadings; a flat page is hard for a model to segment and quote."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 50,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 90 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 16 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No meta description found.",
                  "rec": "Add a clear meta description."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 1 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 74,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Missing meta description"
            },
            {
              "sev": "warning",
              "label": "Thin content (under 250 words)"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 34,
          "band": "Closed to agents",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 45,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Very little static content (~90 words); agents that do not run JavaScript will see almost nothing.",
                  "rec": "Server-render or pre-render the primary content and controls. Agents and most crawlers do not execute JavaScript, so a client-rendered action surface is invisible to them."
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            },
            {
              "sev": "error",
              "label": "Action surface appears client-side rendered; agents may see little"
            },
            {
              "sev": "warning",
              "label": "Reachable but nothing to operate (little content, no action, no form)"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Royal Unibrew",
      "domain": "royalunibrew.com",
      "ok": true,
      "finalUrl": "https://www.royalunibrew.com/",
      "offDomain": "royalunibrew.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 40,
        "execution": 65,
        "representation": 18,
        "composite": 41
      },
      "detail": {
        "retrieval": {
          "score": 40,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "6 of 7 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "9 H1, 4 H2, 8 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 610 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 19 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 176 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 27 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 74,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (116,412 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No canonical link found.",
                  "rec": "Declare a canonical URL so engines consolidate signals on one address."
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (9)"
            },
            {
              "sev": "warning",
              "label": "No canonical URL declared"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 65,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 610 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 18,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "5 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 100,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "pass",
                  "weight": 1,
                  "detail": "You actively govern representation: TDM reservation. (no training opt-out declared.)",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "C&C Group",
      "domain": "candcgroupplc.com",
      "ok": true,
      "finalUrl": "https://candcgroupplc.com/",
      "offDomain": "candcgroupplc.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 42,
        "execution": 68,
        "representation": 10,
        "composite": 40
      },
      "detail": {
        "retrieval": {
          "score": 42,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "13 of 18 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 question-led heading(s) or Q&A found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "3 H1, 4 H2, 4 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 80,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 678 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 24 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No meta description found.",
                  "rec": "Add a clear meta description."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 44 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 74,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (3)"
            },
            {
              "sev": "error",
              "label": "1 insecure HTTP resource on a secure page"
            },
            {
              "sev": "warning",
              "label": "Missing meta description"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 68,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "2 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 678 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 10,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "4 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "BrewDog",
      "domain": "brewdog.com",
      "ok": true,
      "finalUrl": "https://brewdog.com/",
      "offDomain": "brewdog.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 50,
        "execution": 85,
        "representation": 13,
        "composite": 49
      },
      "detail": {
        "retrieval": {
          "score": 50,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 21,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "14 of 69 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 question-led heading(s) or Q&A found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "2 H1, 2 H2, 14 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1400 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 54 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 165 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "93% of 40 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 78,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (4,312 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "1/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (2)"
            },
            {
              "sev": "warning",
              "label": "3 images missing alt text"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 85,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "7 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1400 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "fail",
                  "weight": 1,
                  "detail": "An interactive CAPTCHA (hCaptcha, Cloudflare Turnstile or reCAPTCHA v2) is present; autonomous agents cannot pass it.",
                  "rec": "Do not gate primary actions behind an interactive CAPTCHA (hCaptcha, Turnstile, reCAPTCHA v2), which agents cannot solve. Invisible scoring (reCAPTCHA v3) is less hostile but can still block a low-scoring agent, so keep it off critical task paths."
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Interactive CAPTCHA present; autonomous agents cannot complete it"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 13,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "38 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Diageo",
      "domain": "diageo.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Pernod Ricard",
      "domain": "pernod-ricard.com",
      "ok": true,
      "finalUrl": "https://www.pernod-ricard.com/en",
      "offDomain": "pernod-ricard.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 49,
        "execution": 68,
        "representation": 10,
        "composite": 42
      },
      "detail": {
        "retrieval": {
          "score": 49,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 7,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Dates present in meta or <time> tags, but not in structured data.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "19 of 22 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 9 H2, 20 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1100 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 40 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 143 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "98% of 51 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "1 image missing alt text"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 68,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1100 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 10,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "5 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Brown-Forman",
      "domain": "brown-forman.com",
      "ok": true,
      "finalUrl": "https://www.brown-forman.com/",
      "offDomain": "brown-forman.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 40,
        "execution": 56,
        "representation": 10,
        "composite": 35
      },
      "detail": {
        "retrieval": {
          "score": 40,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "7 of 7 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 H1, 0 H2, 15 H3.",
                  "rec": "Add H2/H3 subheadings; a flat page is hard for a model to segment and quote."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 765 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 24 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 28 characters.",
                  "rec": "Aim for a 70 to 180 character description; it is often quoted verbatim as your summary."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 35 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 78,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "No sitemap found via robots.txt or /sitemap.xml.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Heading levels skip from H1 to H3"
            },
            {
              "sev": "error",
              "label": "1 insecure HTTP resource on a secure page"
            },
            {
              "sev": "warning",
              "label": "No sitemap discoverable"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 56,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 765 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 25,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "No sitemap found via robots.txt or /sitemap.xml.",
                  "rec": "Publish a sitemap.xml and reference it in robots.txt so agents can enumerate your actionable pages."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 10,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "5 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Bacardi",
      "domain": "bacardilimited.com",
      "ok": true,
      "finalUrl": "http://www.bacardilimited.com/",
      "offDomain": "bacardilimited.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 40,
        "execution": 62,
        "representation": 8,
        "composite": 37
      },
      "detail": {
        "retrieval": {
          "score": 40,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 7,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Dates present in meta or <time> tags, but not in structured data.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "9 of 20 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "5 H1, 2 H2, 3 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 65,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 394 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 72 characters.",
                  "rec": "Aim for a 15 to 70 character title that states who you are and what you do."
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 197 characters.",
                  "rec": "Aim for a 70 to 180 character description; it is often quoted verbatim as your summary."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 39 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 85,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "partial",
                  "weight": 0.75,
                  "detail": "not HTTPS, responsive viewport, lang set.",
                  "rec": "Serve over HTTPS, add a responsive viewport meta tag, and set an html lang attribute."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (5)"
            },
            {
              "sev": "warning",
              "label": "Title likely truncated in results (over 65 characters)"
            },
            {
              "sev": "warning",
              "label": "Meta description over 180 characters"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 394 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Remy Cointreau",
      "domain": "remy-cointreau.com",
      "ok": true,
      "finalUrl": "https://www.remy-cointreau.com/fr/",
      "offDomain": "remy-cointreau.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 44,
        "execution": 62,
        "representation": 8,
        "composite": 38
      },
      "detail": {
        "retrieval": {
          "score": 44,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "14 of 37 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 8 H2, 6 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 577 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 161 characters.",
                  "rec": "Aim for a 15 to 70 character title that states who you are and what you do."
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 138 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 7 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 78,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "9 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "Title likely truncated in results (over 65 characters)"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "1 form(s) with named inputs, but no action attribute: submission is wired in JavaScript, so a non-rendering agent has no endpoint to post to.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 577 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Campari Group",
      "domain": "camparigroup.com",
      "ok": true,
      "finalUrl": "https://www.camparigroup.com/en",
      "offDomain": "camparigroup.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 37,
        "execution": 68,
        "representation": 10,
        "composite": 38
      },
      "detail": {
        "retrieval": {
          "score": 37,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 7,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Dates present in meta or <time> tags, but not in structured data.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "4 of 19 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 4 H2, 0 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 55,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 401 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 29 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No meta description found.",
                  "rec": "Add a clear meta description."
                },
                {
                  "label": "Image alt coverage",
                  "status": "partial",
                  "weight": 1,
                  "detail": "75% of 8 images have alt text.",
                  "rec": "Give images descriptive alt text; it is readable context a model can use."
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 78,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "2 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "2 images missing alt text"
            },
            {
              "sev": "warning",
              "label": "Missing meta description"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 68,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 401 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 10,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "2 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Treasury Wine Estates",
      "domain": "tweglobal.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Edrington",
      "domain": "edrington.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "William Grant & Sons",
      "domain": "williamgrant.com",
      "ok": true,
      "finalUrl": "https://www.williamgrant.com/",
      "offDomain": "williamgrant.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 35,
        "execution": 68,
        "representation": 8,
        "composite": 37
      },
      "detail": {
        "retrieval": {
          "score": 35,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "4 of 23 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 question-led heading(s) or Q&A found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 4 H2, 2 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 714 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 31 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 160 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "partial",
                  "weight": 1,
                  "detail": "75% of 4 images have alt text.",
                  "rec": "Give images descriptive alt text; it is readable context a model can use."
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 74,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No canonical link found.",
                  "rec": "Declare a canonical URL so engines consolidate signals on one address."
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "error",
              "label": "1 insecure HTTP resource on a secure page"
            },
            {
              "sev": "warning",
              "label": "1 image missing alt text"
            },
            {
              "sev": "warning",
              "label": "No canonical URL declared"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 68,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 714 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Chapel Down",
      "domain": "chapeldown.com",
      "ok": true,
      "finalUrl": "https://chapeldown.com/",
      "offDomain": "chapeldown.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 48,
        "execution": 66,
        "representation": 13,
        "composite": 42
      },
      "detail": {
        "retrieval": {
          "score": 48,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "21 of 65 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 3 H2, 0 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1300 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 50 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 201 characters.",
                  "rec": "Aim for a 70 to 180 character description; it is often quoted verbatim as your summary."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "99% of 97 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 96,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (4,475 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "1 image missing alt text"
            },
            {
              "sev": "warning",
              "label": "Meta description over 180 characters"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 66,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 80,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1300 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "fail",
                  "weight": 1,
                  "detail": "An interactive CAPTCHA (hCaptcha, Cloudflare Turnstile or reCAPTCHA v2) is present; autonomous agents cannot pass it.",
                  "rec": "Do not gate primary actions behind an interactive CAPTCHA (hCaptcha, Turnstile, reCAPTCHA v2), which agents cannot solve. Invisible scoring (reCAPTCHA v3) is less hostile but can still block a low-scoring agent, so keep it off critical task paths."
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            },
            {
              "sev": "warning",
              "label": "Interactive CAPTCHA present; autonomous agents cannot complete it"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 13,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "16 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "L'Oreal",
      "domain": "loreal.com",
      "ok": true,
      "finalUrl": "https://www.loreal.com/en/",
      "offDomain": "loreal.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 43,
        "execution": 87,
        "representation": 28,
        "composite": 53
      },
      "detail": {
        "retrieval": {
          "score": 43,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 39,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Your entity carries some descriptive depth.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 21,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "2 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 0,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "1 of 32 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 1 H2, 0 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 747 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 54 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 198 characters.",
                  "rec": "Aim for a 70 to 180 character description; it is often quoted verbatim as your summary."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 62 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 96,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "warning",
              "label": "Meta description over 180 characters"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 87,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 747 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 28,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (L'Oréal), but thin: no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "6 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "The Estee Lauder Companies",
      "domain": "elcompanies.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Coty",
      "domain": "coty.com",
      "ok": true,
      "finalUrl": "https://www.coty.com/",
      "offDomain": "coty.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 53,
        "execution": 62,
        "representation": 25,
        "composite": 47
      },
      "detail": {
        "retrieval": {
          "score": 53,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 39,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Your entity carries some descriptive depth.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 32,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "2 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Uses @graph / @id, but the page does not reference a subject entity.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "3 of 11 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 H1, 1 H2, 1 H3.",
                  "rec": "Add H2/H3 subheadings; a flat page is hard for a model to segment and quote."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 521 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 49 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 145 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 29 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 521 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 25,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Coty), but thin: no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "2 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Shiseido",
      "domain": "shiseido.com",
      "ok": true,
      "finalUrl": "https://www.shiseido.com/us/en/",
      "offDomain": "shiseido.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 66,
        "execution": 89,
        "representation": 37,
        "composite": 64
      },
      "detail": {
        "retrieval": {
          "score": 66,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 58,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "5 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 43,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "14 of 27 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 27 H2, 25 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 2200 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 48 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 163 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "99% of 75 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 74,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "4 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "1 image missing alt text"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 89,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 100,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "23 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 2200 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 37,
          "band": "Ambiguous identity",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (SHISEIDO), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 30,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 confirmed and 1 unverified authoritative home(s) (of 5 declared; the rest did not resolve): linkedin.com, instagram.com.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "60 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 5,
              "reachable": 4,
              "confirmed": 1,
              "dead": 0,
              "links": [
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "tiktok.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                }
              ],
              "scoringHosts": [
                "linkedin.com",
                "instagram.com"
              ],
              "confirmedHosts": [
                "linkedin.com"
              ],
              "unverifiedHosts": [
                "instagram.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Beiersdorf",
      "domain": "beiersdorf.com",
      "ok": true,
      "finalUrl": "https://www.beiersdorf.com/",
      "offDomain": "beiersdorf.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 37,
        "execution": 68,
        "representation": 13,
        "composite": 39
      },
      "detail": {
        "retrieval": {
          "score": 37,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "12 of 12 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 8 H2, 0 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 857 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 46 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 110 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 20 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 78,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No canonical link found.",
                  "rec": "Declare a canonical URL so engines consolidate signals on one address."
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "warning",
              "label": "No canonical URL declared"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 68,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 857 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 13,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "11 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Kao Corporation",
      "domain": "kao.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Kenvue",
      "domain": "kenvue.com",
      "ok": true,
      "finalUrl": "https://www.kenvue.com/",
      "offDomain": "kenvue.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 57,
        "execution": 87,
        "representation": 28,
        "composite": 57
      },
      "detail": {
        "retrieval": {
          "score": 57,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 31,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 32,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "The page references a subject, but the schema is otherwise flat.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "5 of 8 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 question-led heading(s) or Q&A found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 4 H2, 76 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1500 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 34 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 161 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 53 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 96,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 87,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1500 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 28,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Kenvue), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "11 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Haleon",
      "domain": "haleon.com",
      "ok": false,
      "reason": "UNREADABLE (no content / client-side rendered)",
      "wafVendor": ""
    },
    {
      "name": "Reckitt",
      "domain": "reckitt.com",
      "ok": true,
      "finalUrl": "https://www.reckitt.com/",
      "offDomain": "reckitt.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 77,
        "execution": 63,
        "representation": 37,
        "composite": 59
      },
      "detail": {
        "retrieval": {
          "score": 77,
          "band": "Well positioned",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 78,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "4 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Your entity carries some descriptive depth.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "3 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "22 of 48 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 4 H2, 22 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 833 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 22 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 101 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 70 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 96,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (70 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 63,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 80,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 833 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "llms.txt present but declares no transactional surfaces.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 37,
          "band": "Ambiguous identity",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Reckitt.com), but thin: no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 30,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "0 confirmed and 2 unverified authoritative home(s) (of 4 declared; the rest did not resolve): instagram.com, x.com.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "8 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 4,
              "reachable": 2,
              "confirmed": 0,
              "dead": 0,
              "links": [
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "x.com",
                  "status": 403,
                  "state": "unverified"
                }
              ],
              "scoringHosts": [
                "instagram.com",
                "x.com"
              ],
              "confirmedHosts": [],
              "unverifiedHosts": [
                "instagram.com",
                "x.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "e.l.f. Beauty",
      "domain": "elfbeauty.com",
      "ok": true,
      "finalUrl": "https://www.elfbeauty.com/",
      "offDomain": "elfbeauty.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 58,
        "execution": 61,
        "representation": 39,
        "composite": 53
      },
      "detail": {
        "retrieval": {
          "score": 58,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 50,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "partial",
                  "weight": 2,
                  "detail": "1 distinct external profile linked via sameAs.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Your entity carries some descriptive depth.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 21,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "2 of 14 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 11 H2, 6 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 85,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 267 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 49 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 157 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 15 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 96,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (9,113 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No canonical link found.",
                  "rec": "Declare a canonical URL so engines consolidate signals on one address."
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No canonical URL declared"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 61,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 60,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "1 form(s) with named inputs, but no action attribute: submission is wired in JavaScript, so a non-rendering agent has no endpoint to post to.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Only about 267 words in the static HTML; some content likely depends on JavaScript.",
                  "rec": "Server-render or pre-render the primary content and controls. Agents and most crawlers do not execute JavaScript, so a client-rendered action surface is invisible to them."
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 39,
          "band": "Ambiguous identity",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (e.l.f. Beauty), but thin: no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 30,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 confirmed and 0 unverified authoritative home(s): linkedin.com.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 100,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "pass",
                  "weight": 1,
                  "detail": "You actively govern representation: TDM reservation. (no training opt-out declared.)",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 1,
              "reachable": 1,
              "confirmed": 1,
              "dead": 0,
              "links": [
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                }
              ],
              "scoringHosts": [
                "linkedin.com"
              ],
              "confirmedHosts": [
                "linkedin.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Natura & Co",
      "domain": "naturaeco.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Oriflame",
      "domain": "oriflame.com",
      "ok": true,
      "finalUrl": "https://www.oriflame.com/",
      "offDomain": "oriflame.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 27,
        "execution": 57,
        "representation": 15,
        "composite": 33
      },
      "detail": {
        "retrieval": {
          "score": 27,
          "band": "Largely invisible to AI",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "1 of 2 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 2 H2, 6 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 65,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 358 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 39 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No meta description found.",
                  "rec": "Add a clear meta description."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No images to assess.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 48,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (50,833 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "robots.txt blocks AI answer crawlers: oai-searchbot, perplexitybot, claude-searchbot.",
                  "rec": "Allow the crawlers that surface you in AI answers (OAI-SearchBot for ChatGPT search, ChatGPT-User for pages a ChatGPT user opens, PerplexityBot, Claude-SearchBot), or you are opting out of much AI visibility. Blocking training crawlers (GPTBot, ClaudeBot, Google-Extended) is a separate, legitimate choice that does not affect being cited in AI answers."
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No canonical link found.",
                  "rec": "Declare a canonical URL so engines consolidate signals on one address."
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "7 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "Missing meta description"
            },
            {
              "sev": "warning",
              "label": "No canonical URL declared"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 57,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 75,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "fail",
                  "weight": 1,
                  "detail": "robots.txt disallows retrieval agents: oai-searchbot, perplexitybot, claude-searchbot.",
                  "rec": "Allow the retrieval crawlers that feed AI answers (OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot) in robots.txt. Blocking training crawlers is a separate, legitimate choice."
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 358 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "robots.txt disallows retrieval agents"
            },
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 15,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 100,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "pass",
                  "weight": 1,
                  "detail": "You actively govern representation: TDM reservation. (training/other crawlers blocked (gptbot, claudebot, google-extended, applebot-extended).)",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Puig",
      "domain": "puig.com",
      "ok": true,
      "finalUrl": "https://www.puig.com/en/",
      "offDomain": "puig.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 49,
        "execution": 59,
        "representation": 23,
        "composite": 44
      },
      "detail": {
        "retrieval": {
          "score": 49,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 58,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Corporation.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "3 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 32,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "11 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Uses @graph / @id, but the page does not reference a subject entity.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 17,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "4 of 8 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 5 H2, 0 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 85,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 263 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 52 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 151 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 12 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 78,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 59,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 65,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Only about 263 words in the static HTML; some content likely depends on JavaScript.",
                  "rec": "Server-render or pre-render the primary content and controls. Agents and most crawlers do not execute JavaScript, so a client-rendered action surface is invisible to them."
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 23,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Apivita), but thin: no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name \"Apivita\" is not clearly echoed in the title or og:site_name, which weakens disambiguation.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 confirmed and 1 unverified authoritative home(s) (of 3 declared; the rest did not resolve): instagram.com.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No usage terms found on the page (license, copyrightHolder, meta reservation), and the TDM reservation file (/.well-known/tdmrep.json) could not be read on this scan, so the declared-terms verdict is unmeasured rather than a definitive absence. (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 3,
              "reachable": 2,
              "confirmed": 0,
              "dead": 0,
              "links": [
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "instagram.com"
              ],
              "confirmedHosts": [],
              "unverifiedHosts": [
                "instagram.com"
              ]
            }
          },
          "tdmUnmeasured": true
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": [
        "sameas-unverified",
        "tdmrep-unmeasured"
      ]
    },
    {
      "name": "PZ Cussons",
      "domain": "pzcussons.com",
      "ok": true,
      "finalUrl": "https://www.pzcussons.com/",
      "offDomain": "pzcussons.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 68,
        "execution": 87,
        "representation": 23,
        "composite": 59
      },
      "detail": {
        "retrieval": {
          "score": 68,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 42,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "6 of 28 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 7 H2, 1 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 950 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 63 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 124 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 78 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 91,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (5,554 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 87,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "2 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 950 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "llms.txt present but declares no transactional surfaces.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 23,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (PZ Cussons), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Revolution Beauty",
      "domain": "revolutionbeauty.com",
      "ok": true,
      "finalUrl": "https://www.revolutionbeauty.com/",
      "offDomain": "revolutionbeauty.com",
      "truncated": true,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 68,
        "execution": 85,
        "representation": 28,
        "composite": 60
      },
      "detail": {
        "retrieval": {
          "score": 68,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 67,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "5 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Your entity carries some descriptive depth.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 21,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "2 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "5 of 11 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 31 H2, 1 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1800 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 60 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 145 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 322 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 96,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (4,557 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "AI answer crawlers allowed; training or user-initiated crawlers blocked (bytespider), a legitimate choice.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 85,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "73 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1800 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "fail",
                  "weight": 1,
                  "detail": "An interactive CAPTCHA (hCaptcha, Cloudflare Turnstile or reCAPTCHA v2) is present; autonomous agents cannot pass it.",
                  "rec": "Do not gate primary actions behind an interactive CAPTCHA (hCaptcha, Turnstile, reCAPTCHA v2), which agents cannot solve. Invisible scoring (reCAPTCHA v3) is less hostile but can still block a low-scoring agent, so keep it off critical task paths."
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Interactive CAPTCHA present; autonomous agents cannot complete it"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 28,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Revolution Beauty), but thin: no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 confirmed and 1 unverified authoritative home(s) (of 4 declared; the rest did not resolve): instagram.com.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "132 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (training/other crawlers blocked (bytespider).)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 4,
              "reachable": 3,
              "confirmed": 0,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "tiktok.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "instagram.com"
              ],
              "confirmedHosts": [],
              "unverifiedHosts": [
                "instagram.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": [
        "sameas-unverified"
      ]
    },
    {
      "name": "Lush",
      "domain": "lush.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "L'Occitane",
      "domain": "loccitane.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Rituals",
      "domain": "rituals.com",
      "ok": true,
      "finalUrl": "https://www.rituals.com/",
      "offDomain": "rituals.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 21,
        "execution": 34,
        "representation": 8,
        "composite": 21
      },
      "detail": {
        "retrieval": {
          "score": 21,
          "band": "Largely invisible to AI",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 0,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No paragraph content found.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "1 H1, 0 H2, 0 H3.",
                  "rec": "Add H2/H3 subheadings; a flat page is hard for a model to segment and quote."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 50,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 21 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 44 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 74 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "fail",
                  "weight": 1,
                  "detail": "50% of 4 images have alt text.",
                  "rec": "Give images descriptive alt text; it is readable context a model can use."
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 74,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No canonical link found.",
                  "rec": "Declare a canonical URL so engines consolidate signals on one address."
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "2 images missing alt text"
            },
            {
              "sev": "warning",
              "label": "No canonical URL declared"
            },
            {
              "sev": "warning",
              "label": "Thin content (under 250 words)"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 34,
          "band": "Closed to agents",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 45,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Very little static content (~21 words); agents that do not run JavaScript will see almost nothing.",
                  "rec": "Server-render or pre-render the primary content and controls. Agents and most crawlers do not execute JavaScript, so a client-rendered action surface is invisible to them."
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            },
            {
              "sev": "error",
              "label": "Action surface appears client-side rendered; agents may see little"
            },
            {
              "sev": "warning",
              "label": "Reachable but nothing to operate (little content, no action, no form)"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Nu Skin",
      "domain": "nuskin.com",
      "ok": false,
      "reason": "UNREADABLE (no content / client-side rendered)",
      "wafVendor": ""
    },
    {
      "name": "Herbalife",
      "domain": "herbalife.com",
      "ok": true,
      "finalUrl": "https://www.herbalife.com/en-us",
      "offDomain": "herbalife.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 54,
        "execution": 83,
        "representation": 23,
        "composite": 53
      },
      "detail": {
        "retrieval": {
          "score": 54,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 36,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 32,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Uses @graph / @id, but the page does not reference a subject entity.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "59 of 109 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 H1, 1 H2, 0 H3.",
                  "rec": "Add H2/H3 subheadings; a flat page is hard for a model to segment and quote."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 80,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 7100 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 38 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 160 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "fail",
                  "weight": 1,
                  "detail": "33% of 52 images have alt text.",
                  "rec": "Give images descriptive alt text; it is readable context a model can use."
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 83,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "35 images missing alt text"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 83,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 80,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "11 form(s) with named inputs, but no action attribute: submission is wired in JavaScript, so a non-rendering agent has no endpoint to post to.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 7100 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 23,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Herbalife), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Edgewell Personal Care",
      "domain": "edgewell.com",
      "ok": true,
      "finalUrl": "https://edgewell.com/",
      "offDomain": "edgewell.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 46,
        "execution": 65,
        "representation": 10,
        "composite": 40
      },
      "detail": {
        "retrieval": {
          "score": 46,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "6 of 12 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 4 H2, 0 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 85,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 454 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 29 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 120 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 15 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (4,280 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 65,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "2 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 454 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "fail",
                  "weight": 1,
                  "detail": "An interactive CAPTCHA (hCaptcha, Cloudflare Turnstile or reCAPTCHA v2) is present; autonomous agents cannot pass it.",
                  "rec": "Do not gate primary actions behind an interactive CAPTCHA (hCaptcha, Turnstile, reCAPTCHA v2), which agents cannot solve. Invisible scoring (reCAPTCHA v3) is less hostile but can still block a low-scoring agent, so keep it off critical task paths."
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            },
            {
              "sev": "warning",
              "label": "Interactive CAPTCHA present; autonomous agents cannot complete it"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 10,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "2 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Helen of Troy",
      "domain": "helenoftroy.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Spectrum Brands",
      "domain": "spectrumbrands.com",
      "ok": true,
      "finalUrl": "https://spectrumbrands.com/",
      "offDomain": "spectrumbrands.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 27,
        "execution": 58,
        "representation": 8,
        "composite": 31
      },
      "detail": {
        "retrieval": {
          "score": 27,
          "band": "Largely invisible to AI",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 17,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "1 of 2 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 H1, 1 H2, 0 H3.",
                  "rec": "Add H2/H3 subheadings; a flat page is hard for a model to segment and quote."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 60,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 182 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 15 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 976 characters.",
                  "rec": "Aim for a 70 to 180 character description; it is often quoted verbatim as your summary."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 10 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 74,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "No robots.txt is blocking AI crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No canonical link found.",
                  "rec": "Declare a canonical URL so engines consolidate signals on one address."
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "5 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "Meta description over 180 characters"
            },
            {
              "sev": "warning",
              "label": "No canonical URL declared"
            },
            {
              "sev": "warning",
              "label": "Thin content (under 250 words)"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 58,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No robots.txt is blocking retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 60,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Only about 182 words in the static HTML; some content likely depends on JavaScript.",
                  "rec": "Server-render or pre-render the primary content and controls. Agents and most crawlers do not execute JavaScript, so a client-rendered action surface is invisible to them."
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Newell Brands",
      "domain": "newellbrands.com",
      "ok": true,
      "finalUrl": "https://www.newellbrands.com/",
      "offDomain": "newellbrands.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 26,
        "execution": 62,
        "representation": 8,
        "composite": 32
      },
      "detail": {
        "retrieval": {
          "score": 26,
          "band": "Largely invisible to AI",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 0,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "1 of 21 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 1 H2, 1 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 70,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 839 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 13 characters.",
                  "rec": "Aim for a 15 to 70 character title that states who you are and what you do."
                },
                {
                  "label": "Meta description quality",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No meta description found.",
                  "rec": "Add a clear meta description."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "98% of 45 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 83,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "error",
              "label": "14 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "1 image missing alt text"
            },
            {
              "sev": "warning",
              "label": "Missing meta description"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "1 form(s) present, but inputs are poorly labelled.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 839 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Amorepacific",
      "domain": "apgroup.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "LG Household & Health Care",
      "domain": "lghnh.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": ""
    },
    {
      "name": "Procter & Gamble",
      "domain": "pg.com",
      "ok": true,
      "finalUrl": "https://us.pg.com/",
      "offDomain": "us.pg.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 63,
        "execution": 69,
        "representation": 43,
        "composite": 58
      },
      "detail": {
        "retrieval": {
          "score": 63,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 58,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "5 distinct external profiles linked via sameAs (10 links in total).",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 21,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "9 of 25 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 3 H2, 0 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 85,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 455 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 20 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 132 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 38 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 91,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 69,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 100,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 455 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 43,
          "band": "Ambiguous identity",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Procter & Gamble), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name \"Procter & Gamble\" is not clearly echoed in the title or og:site_name, which weakens disambiguation.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 60,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 confirmed and 2 unverified authoritative home(s) (of 5 declared; the rest did not resolve): linkedin.com, twitter.com, instagram.com.",
                  "rec": null
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "4 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 5,
              "reachable": 3,
              "confirmed": 1,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "twitter.com",
                  "status": 403,
                  "state": "unverified"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                }
              ],
              "scoringHosts": [
                "linkedin.com",
                "twitter.com",
                "instagram.com"
              ],
              "confirmedHosts": [
                "linkedin.com"
              ],
              "unverifiedHosts": [
                "twitter.com",
                "instagram.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Colgate-Palmolive",
      "domain": "colgatepalmolive.com",
      "ok": true,
      "finalUrl": "https://www.colgatepalmolive.com/en-us",
      "offDomain": "colgatepalmolive.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 70,
        "execution": 74,
        "representation": 55,
        "composite": 66
      },
      "detail": {
        "retrieval": {
          "score": 70,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 81,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Corporation, Person, Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "5 distinct external profiles linked via sameAs (6 links in total).",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Author or person is named, but without credential depth.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Your entity carries some descriptive depth.",
                  "rec": null
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 32,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Uses @graph / @id, but the page does not reference a subject entity.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "14 of 54 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 2 H2, 3 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 683 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 60 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 152 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "partial",
                  "weight": 1,
                  "detail": "69% of 75 images have alt text.",
                  "rec": "Give images descriptive alt text; it is readable context a model can use."
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (27,004 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap is referenced but its file could not be read on this scan, so its lastmod freshness is unmeasured.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "23 images missing alt text"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 74,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 63,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "partial",
                  "weight": 3,
                  "detail": "Could not establish a browser baseline (control returned 403); agent results inconclusive. Probed: OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200.",
                  "rec": "Your CDN or WAF is refusing AI user-agents at the network layer, so the page is invisible to those agents regardless of robots.txt. If you intend to be agent-reachable, allow the retrieval user-agents (OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot) in your bot-management or Pay-Per-Crawl settings. Note: we test this by sending these user-agent strings from our scanner, so it measures how your edge treats the user-agent; a real agent presents the same string from its own network, making this a strong signal rather than a guarantee."
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 80,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 683 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 55,
          "band": "Partly resolved",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 79,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity declared (Colgate‑Palmolive Company) with a description and descriptive depth.",
                  "rec": null
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 30,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "0 confirmed and 2 unverified authoritative home(s) (of 5 declared; the rest did not resolve): twitter.com, instagram.com.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 30,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "A person or author is named, but without credential depth.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 100,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "pass",
                  "weight": 1,
                  "detail": "You actively govern representation: TDM reservation. (no training opt-out declared.)",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 5,
              "reachable": 3,
              "confirmed": 0,
              "dead": 0,
              "links": [
                {
                  "host": "en.wikipedia.org",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "twitter.com",
                  "status": 403,
                  "state": "unverified"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                }
              ],
              "scoringHosts": [
                "twitter.com",
                "instagram.com"
              ],
              "confirmedHosts": [],
              "unverifiedHosts": [
                "twitter.com",
                "instagram.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": false,
        "consistent": null,
        "note": "browser-ua-unreadable"
      },
      "flags": []
    },
    {
      "name": "Henkel",
      "domain": "henkel.com",
      "ok": true,
      "finalUrl": "https://www.henkel.com/",
      "offDomain": "henkel.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 52,
        "execution": 69,
        "representation": 13,
        "composite": 45
      },
      "detail": {
        "retrieval": {
          "score": 52,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Rich types present: Videoobject.",
                  "rec": null
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "28 of 49 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "2 H1, 6 H2, 13 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1800 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 4 characters.",
                  "rec": "Aim for a 15 to 70 character title that states who you are and what you do."
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 166 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 36 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 83,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (2)"
            },
            {
              "sev": "error",
              "label": "2 insecure HTTP resources on a secure page"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 69,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 100,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "2 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1800 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 13,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "8 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Church & Dwight",
      "domain": "churchdwight.com",
      "ok": true,
      "finalUrl": "https://churchdwight.com/",
      "offDomain": "churchdwight.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 54,
        "execution": 66,
        "representation": 42,
        "composite": 54
      },
      "detail": {
        "retrieval": {
          "score": 54,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 58,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Corporation.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "3 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 43,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "14 of 26 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 7 H2, 1 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 508 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 68 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 137 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "partial",
                  "weight": 1,
                  "detail": "71% of 42 images have alt text.",
                  "rec": "Give images descriptive alt text; it is readable context a model can use."
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 67,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (14,023 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No canonical link found.",
                  "rec": "Declare a canonical URL so engines consolidate signals on one address."
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "partial",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, no lang.",
                  "rec": "Serve over HTTPS, add a responsive viewport meta tag, and set an html lang attribute."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "error",
              "label": "32 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "12 images missing alt text"
            },
            {
              "sev": "warning",
              "label": "Title likely truncated in results (over 65 characters)"
            },
            {
              "sev": "warning",
              "label": "No canonical URL declared"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 66,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 80,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "1 form(s) with named inputs, but no action attribute: submission is wired in JavaScript, so a non-rendering agent has no endpoint to post to.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 508 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 42,
          "band": "Ambiguous identity",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Church & Dwight Co., Inc.), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 30,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 confirmed and 0 unverified authoritative home(s) (of 3 declared; the rest did not resolve): linkedin.com.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "5 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 100,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "pass",
                  "weight": 1,
                  "detail": "You actively govern representation: TDM reservation. (no training opt-out declared.)",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 3,
              "reachable": 3,
              "confirmed": 1,
              "dead": 0,
              "links": [
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "en.wikipedia.org",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "linkedin.com"
              ],
              "confirmedHosts": [
                "linkedin.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "The Clorox Company",
      "domain": "thecloroxcompany.com",
      "ok": true,
      "finalUrl": "https://thecloroxcompany.com/",
      "offDomain": "thecloroxcompany.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 63,
        "execution": 69,
        "representation": 43,
        "composite": 58
      },
      "detail": {
        "retrieval": {
          "score": 63,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 67,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Corporation.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "5 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Your entity carries some descriptive depth.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 29,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "2 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Dates present in meta or <time> tags, but not in structured data.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "7 of 14 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "7 H1, 4 H2, 3 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 555 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 18 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 152 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "partial",
                  "weight": 1,
                  "detail": "78% of 23 images have alt text.",
                  "rec": "Give images descriptive alt text; it is readable context a model can use."
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 91,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (7)"
            },
            {
              "sev": "warning",
              "label": "5 images missing alt text"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 69,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 100,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "2 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 555 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 43,
          "band": "Ambiguous identity",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (The Clorox Company), but thin: no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 60,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 confirmed and 2 unverified authoritative home(s) (of 5 declared; the rest did not resolve): linkedin.com, x.com, instagram.com.",
                  "rec": null
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "3 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 5,
              "reachable": 3,
              "confirmed": 1,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "x.com",
                  "status": 403,
                  "state": "unverified"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                },
                {
                  "host": "en.wikipedia.org",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "linkedin.com",
                "x.com",
                "instagram.com"
              ],
              "confirmedHosts": [
                "linkedin.com"
              ],
              "unverifiedHosts": [
                "x.com",
                "instagram.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "SC Johnson",
      "domain": "scjohnson.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 429)",
      "wafVendor": ""
    },
    {
      "name": "Kimberly-Clark",
      "domain": "kimberly-clark.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Essity",
      "domain": "essity.com",
      "ok": true,
      "finalUrl": "https://www.essity.com/",
      "offDomain": "essity.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 37,
        "execution": 62,
        "representation": 10,
        "composite": 36
      },
      "detail": {
        "retrieval": {
          "score": 37,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "3 of 16 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "2 H1, 0 H2, 13 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 601 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 71 characters.",
                  "rec": "Aim for a 15 to 70 character title that states who you are and what you do."
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 141 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 29 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (2)"
            },
            {
              "sev": "warning",
              "label": "Heading levels skip from H1 to H3"
            },
            {
              "sev": "warning",
              "label": "Title likely truncated in results (over 65 characters)"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 601 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 10,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "5 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Georgia-Pacific",
      "domain": "gp.com",
      "ok": true,
      "finalUrl": "https://www.gp.com/",
      "offDomain": "gp.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 54,
        "execution": 85,
        "representation": 26,
        "composite": 55
      },
      "detail": {
        "retrieval": {
          "score": 54,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 31,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 21,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "2 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "3 of 14 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 5 H2, 1 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 80,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 544 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 44 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 237 characters.",
                  "rec": "Aim for a 70 to 180 character description; it is often quoted verbatim as your summary."
                },
                {
                  "label": "Image alt coverage",
                  "status": "partial",
                  "weight": 1,
                  "detail": "62% of 37 images have alt text.",
                  "rec": "Give images descriptive alt text; it is readable context a model can use."
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 100,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (53,592 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "14 images missing alt text"
            },
            {
              "sev": "warning",
              "label": "Meta description over 180 characters"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 85,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 544 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 26,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 29,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (named), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "2 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 100,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "pass",
                  "weight": 1,
                  "detail": "You actively govern representation: TDM reservation. (no training opt-out declared.)",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "BIC",
      "domain": "bic.com",
      "ok": false,
      "reason": "UNREADABLE (HTTP 410)",
      "wafVendor": ""
    },
    {
      "name": "Energizer Holdings",
      "domain": "energizerholdings.com",
      "ok": true,
      "finalUrl": "https://energizerholdings.com/",
      "offDomain": "energizerholdings.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 59,
        "execution": 87,
        "representation": 25,
        "composite": 57
      },
      "detail": {
        "retrieval": {
          "score": 59,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 42,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "2 of 3 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 7 H2, 5 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 65,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 328 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 25 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No meta description found.",
                  "rec": "Add a clear meta description."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 24 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "1 insecure HTTP resource on a secure page"
            },
            {
              "sev": "warning",
              "label": "Missing meta description"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 87,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "2 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 328 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 25,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Energizer Holdings), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "2 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "McBride",
      "domain": "mcbride.co.uk",
      "ok": true,
      "finalUrl": "https://www.mcbride.co.uk/",
      "offDomain": "mcbride.co.uk",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 70,
        "execution": 79,
        "representation": 34,
        "composite": 61
      },
      "detail": {
        "retrieval": {
          "score": 70,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 53,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "partial",
                  "weight": 2,
                  "detail": "1 distinct external profile linked via sameAs.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "10 of 17 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 5 H2, 6 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 651 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 51 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 133 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 16 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 79,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 65,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 651 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "partial",
                  "weight": 1,
                  "detail": "An invisible reCAPTCHA v3 is present; it scores requests rather than blocking outright, but can still gate an action on a low score.",
                  "rec": "Do not gate primary actions behind an interactive CAPTCHA (hCaptcha, Turnstile, reCAPTCHA v2), which agents cannot solve. Invisible scoring (reCAPTCHA v3) is less hostile but can still block a low-scoring agent, so keep it off critical task paths."
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 34,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (McBride), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 30,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 confirmed and 0 unverified authoritative home(s): linkedin.com.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "4 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 1,
              "reachable": 1,
              "confirmed": 1,
              "dead": 0,
              "links": [
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                }
              ],
              "scoringHosts": [
                "linkedin.com"
              ],
              "confirmedHosts": [
                "linkedin.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Nike",
      "domain": "nike.com",
      "ok": true,
      "finalUrl": "https://www.nike.com/",
      "offDomain": "nike.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 67,
        "execution": 71,
        "representation": 53,
        "composite": 64
      },
      "detail": {
        "retrieval": {
          "score": 67,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 58,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "7 distinct external profiles linked via sameAs (21 links in total).",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 32,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "3 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Uses @graph / @id, but the page does not reference a subject entity.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "12 of 422 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 13 H2, 11 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1200 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 26 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 97 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 35 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 91,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "4 insecure HTTP resources on a secure page"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 71,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 63,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "partial",
                  "weight": 3,
                  "detail": "Some AI agents are refused at the edge while a browser gets 200 (OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 403, ClaudeBot 200, GPTBot 200).",
                  "rec": "Your CDN or WAF is refusing AI user-agents at the network layer, so the page is invisible to those agents regardless of robots.txt. If you intend to be agent-reachable, allow the retrieval user-agents (OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot) in your bot-management or Pay-Per-Crawl settings. Note: we test this by sending these user-agent strings from our scanner, so it measures how your edge treats the user-agent; a real agent presents the same string from its own network, making this a strong signal rather than a guarantee."
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 80,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "A form element is present but has no usable named inputs.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1200 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Some AI agents refused at the edge (PerplexityBot)"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 53,
          "band": "Ambiguous identity",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Nike), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 100,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "3 confirmed and 0 unverified authoritative home(s) (of 7 declared; the rest did not resolve): wikidata.org, en.wikipedia.org, linkedin.com.",
                  "rec": null
                },
                {
                  "label": "Spans registry and profile",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Identity spans a confirmed registry (wikidata.org, en.wikipedia.org) and a profile source.",
                  "rec": null
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 5,
              "reachable": 5,
              "confirmed": 3,
              "dead": 0,
              "links": [
                {
                  "host": "wikidata.org",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "en.wikipedia.org",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "wikidata.org",
                "en.wikipedia.org",
                "linkedin.com"
              ],
              "confirmedHosts": [
                "wikidata.org",
                "en.wikipedia.org",
                "linkedin.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Adidas",
      "domain": "adidas.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Akamai"
    },
    {
      "name": "Puma",
      "domain": "puma.com",
      "ok": true,
      "finalUrl": "https://us.puma.com/us/en",
      "offDomain": "us.puma.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 59,
        "execution": 86,
        "representation": 47,
        "composite": 64
      },
      "detail": {
        "retrieval": {
          "score": 59,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 78,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Corporation, Person, Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "13 distinct external profiles linked via sameAs (17 links in total).",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Named author or person with credibility detail (role, employer, expertise or profiles).",
                  "rec": null
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Your entity carries some descriptive depth.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 21,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "2 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "1 of 4 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 3 H2, 1 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 649 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 49 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 123 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 10 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (200,000 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 86,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 80,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 649 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 47,
          "band": "Ambiguous identity",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (PUMA US), but thin: no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 30,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "0 confirmed and 2 unverified authoritative home(s) (of 8 declared; the rest did not resolve): instagram.com, x.com.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 60,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Named author or person with credibility detail (role, employer, expertise or profiles).",
                  "rec": null
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 5,
              "reachable": 2,
              "confirmed": 0,
              "dead": 0,
              "links": [
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                },
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                },
                {
                  "host": "x.com",
                  "status": 403,
                  "state": "unverified"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "instagram.com",
                "x.com"
              ],
              "confirmedHosts": [],
              "unverifiedHosts": [
                "instagram.com",
                "x.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Under Armour",
      "domain": "underarmour.com",
      "ok": true,
      "finalUrl": "https://www.underarmour.com/en-us/",
      "offDomain": "underarmour.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 70,
        "execution": 71,
        "representation": 37,
        "composite": 59
      },
      "detail": {
        "retrieval": {
          "score": 70,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 58,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "4 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 43,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "3 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "6 of 17 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "2 question-led heading(s) or Q&A found.",
                  "rec": null
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 25 H2, 24 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1000 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 54 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 156 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 41 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 96,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (19,505 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 71,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 63,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "partial",
                  "weight": 3,
                  "detail": "Could not establish a browser baseline (control returned 418); agent results inconclusive. Probed: OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200.",
                  "rec": "Your CDN or WAF is refusing AI user-agents at the network layer, so the page is invisible to those agents regardless of robots.txt. If you intend to be agent-reachable, allow the retrieval user-agents (OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot) in your bot-management or Pay-Per-Crawl settings. Note: we test this by sending these user-agent strings from our scanner, so it measures how your edge treats the user-agent; a real agent presents the same string from its own network, making this a strong signal rather than a guarantee."
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 80,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "3 form(s) with named inputs, but no action attribute: submission is wired in JavaScript, so a non-rendering agent has no endpoint to post to.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1000 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "llms.txt present but declares no transactional surfaces.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 37,
          "band": "Ambiguous identity",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Under Armour), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 30,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "0 confirmed and 2 unverified authoritative home(s) (of 4 declared; the rest did not resolve): twitter.com, instagram.com.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "9 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 4,
              "reachable": 2,
              "confirmed": 0,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "twitter.com",
                  "status": 403,
                  "state": "unverified"
                },
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "twitter.com",
                "instagram.com"
              ],
              "confirmedHosts": [],
              "unverifiedHosts": [
                "twitter.com",
                "instagram.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": false,
        "consistent": null,
        "note": "browser-ua-unreadable"
      },
      "flags": []
    },
    {
      "name": "Lululemon",
      "domain": "lululemon.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "VF Corporation",
      "domain": "vfc.com",
      "ok": true,
      "finalUrl": "https://vfc.com/",
      "offDomain": "vfc.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 69,
        "execution": 65,
        "representation": 55,
        "composite": 63
      },
      "detail": {
        "retrieval": {
          "score": 69,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 67,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Corporation.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "4 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Your entity carries some descriptive depth.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 50,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Dates present in meta or <time> tags, but not in structured data.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "7 of 7 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "2 H1, 10 H2, 2 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 765 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 20 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 148 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 20 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 96,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (13,199 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "No robots.txt is blocking AI crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (2)"
            },
            {
              "sev": "error",
              "label": "4 insecure HTTP resources on a secure page"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 65,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No robots.txt is blocking retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 765 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "fail",
                  "weight": 1,
                  "detail": "An interactive CAPTCHA (hCaptcha, Cloudflare Turnstile or reCAPTCHA v2) is present; autonomous agents cannot pass it.",
                  "rec": "Do not gate primary actions behind an interactive CAPTCHA (hCaptcha, Turnstile, reCAPTCHA v2), which agents cannot solve. Invisible scoring (reCAPTCHA v3) is less hostile but can still block a low-scoring agent, so keep it off critical task paths."
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            },
            {
              "sev": "warning",
              "label": "Interactive CAPTCHA present; autonomous agents cannot complete it"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 55,
          "band": "Partly resolved",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (VF Corporation), but thin: no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 100,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "2 confirmed and 0 unverified authoritative home(s) (of 4 declared; the rest did not resolve): linkedin.com, en.wikipedia.org.",
                  "rec": null
                },
                {
                  "label": "Spans registry and profile",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Identity spans a confirmed registry (en.wikipedia.org) and a profile source.",
                  "rec": null
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "2 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 4,
              "reachable": 4,
              "confirmed": 2,
              "dead": 0,
              "links": [
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "en.wikipedia.org",
                  "status": 200,
                  "state": "confirmed"
                }
              ],
              "scoringHosts": [
                "linkedin.com",
                "en.wikipedia.org"
              ],
              "confirmedHosts": [
                "linkedin.com",
                "en.wikipedia.org"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Levi Strauss & Co.",
      "domain": "levistrauss.com",
      "ok": true,
      "finalUrl": "https://www.levistrauss.com/",
      "offDomain": "levistrauss.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 67,
        "execution": 88,
        "representation": 57,
        "composite": 71
      },
      "detail": {
        "retrieval": {
          "score": 67,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 92,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization, Person.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "5 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Author or person is named, but without credential depth.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Your entity carries some descriptive depth.",
                  "rec": null
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "3 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "pass",
                  "weight": 1,
                  "detail": "datePublished / dateModified present in structured data.",
                  "rec": null
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No paragraph content found.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 8 H2, 0 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 296 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 65 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 202 characters.",
                  "rec": "Aim for a 70 to 180 character description; it is often quoted verbatim as your summary."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "97% of 31 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 91,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (3,349 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "1 image missing alt text"
            },
            {
              "sev": "warning",
              "label": "Meta description over 180 characters"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 88,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 85,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Only about 296 words in the static HTML; some content likely depends on JavaScript.",
                  "rec": "Server-render or pre-render the primary content and controls. Agents and most crawlers do not execute JavaScript, so a client-rendered action surface is invisible to them."
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 57,
          "band": "Partly resolved",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 79,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity declared (Levi Strauss & Co.) with a description and descriptive depth.",
                  "rec": null
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name \"Levi Strauss & Co.\" is not clearly echoed in the title or og:site_name, which weakens disambiguation.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 60,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 confirmed and 2 unverified authoritative home(s) (of 5 declared; the rest did not resolve): linkedin.com, twitter.com, instagram.com.",
                  "rec": null
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 30,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "A person or author is named, but without credential depth.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 5,
              "reachable": 3,
              "confirmed": 1,
              "dead": 0,
              "links": [
                {
                  "host": "en.wikipedia.org",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "wikidata.org",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "twitter.com",
                  "status": 403,
                  "state": "unverified"
                },
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                }
              ],
              "scoringHosts": [
                "linkedin.com",
                "twitter.com",
                "instagram.com"
              ],
              "confirmedHosts": [
                "linkedin.com"
              ],
              "unverifiedHosts": [
                "twitter.com",
                "instagram.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "PVH",
      "domain": "pvh.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Akamai"
    },
    {
      "name": "Ralph Lauren",
      "domain": "ralphlauren.com",
      "ok": false,
      "reason": "UNREADABLE (HTTP 307)",
      "wafVendor": ""
    },
    {
      "name": "Tapestry",
      "domain": "tapestry.com",
      "ok": true,
      "finalUrl": "https://www.tapestry.com/",
      "offDomain": "tapestry.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 75,
        "execution": 83,
        "representation": 68,
        "composite": 75
      },
      "detail": {
        "retrieval": {
          "score": 75,
          "band": "Well positioned",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 89,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization, Person.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "5 distinct external profiles linked via sameAs (7 links in total).",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Named author or person with credibility detail (role, employer, expertise or profiles).",
                  "rec": null
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Your entity carries some descriptive depth.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 43,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "2 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "5 of 11 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 5 H2, 0 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 85,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 449 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 49 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 140 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 24 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 96,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 83,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 80,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 449 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 68,
          "band": "Partly resolved",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Tapestry, Inc.), but thin: no description.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 100,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "2 confirmed and 2 unverified authoritative home(s) (of 5 declared; the rest did not resolve): linkedin.com, wikidata.org, instagram.com, twitter.com.",
                  "rec": null
                },
                {
                  "label": "Spans registry and profile",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Identity spans a confirmed registry (wikidata.org) and a profile source.",
                  "rec": null
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 60,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Named author or person with credibility detail (role, employer, expertise or profiles).",
                  "rec": null
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 5,
              "reachable": 3,
              "confirmed": 2,
              "dead": 0,
              "links": [
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "twitter.com",
                  "status": 403,
                  "state": "unverified"
                },
                {
                  "host": "wikidata.org",
                  "status": 200,
                  "state": "confirmed"
                }
              ],
              "scoringHosts": [
                "linkedin.com",
                "wikidata.org",
                "instagram.com",
                "twitter.com"
              ],
              "confirmedHosts": [
                "linkedin.com",
                "wikidata.org"
              ],
              "unverifiedHosts": [
                "instagram.com",
                "twitter.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Capri Holdings",
      "domain": "capriholdings.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Hanesbrands",
      "domain": "hanesbrands.com",
      "ok": true,
      "finalUrl": "https://gildancorp.com/en/gildan-and-hanesbrands-homepage/",
      "offDomain": "gildancorp.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 64,
        "execution": 63,
        "representation": 43,
        "composite": 57
      },
      "detail": {
        "retrieval": {
          "score": 64,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 58,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "4 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 21,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 83,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "29 of 56 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 question-led heading(s) or Q&A found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 5 H2, 12 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 80,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1500 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 40 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No meta description found.",
                  "rec": "Add a clear meta description."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 11 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 78,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No canonical link found.",
                  "rec": "Declare a canonical URL so engines consolidate signals on one address."
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap is referenced but its file could not be read on this scan, so its lastmod freshness is unmeasured.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Missing meta description"
            },
            {
              "sev": "warning",
              "label": "No canonical URL declared"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 63,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 80,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "3 form(s) present, but an anti-bot honeypot field is likely to reject an autonomous submission.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1500 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 43,
          "band": "Ambiguous identity",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Gildan), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 60,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 confirmed and 2 unverified authoritative home(s) (of 4 declared; the rest did not resolve): linkedin.com, x.com, instagram.com.",
                  "rec": null
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "2 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 4,
              "reachable": 2,
              "confirmed": 1,
              "dead": 0,
              "links": [
                {
                  "host": "x.com",
                  "status": 403,
                  "state": "unverified"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                }
              ],
              "scoringHosts": [
                "linkedin.com",
                "x.com",
                "instagram.com"
              ],
              "confirmedHosts": [
                "linkedin.com"
              ],
              "unverifiedHosts": [
                "x.com",
                "instagram.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Gildan",
      "domain": "gildan.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Columbia Sportswear",
      "domain": "columbia.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare",
      "escalatedFrom": {
        "name": "Columbia Sportswear",
        "domain": "columbia.com",
        "from": 62,
        "since": "2026-09-01",
        "outcome": "BLOCKED (HTTP 403)",
        "wafVendor": "Cloudflare"
      }
    },
    {
      "name": "Deckers Brands",
      "domain": "deckers.com",
      "ok": true,
      "finalUrl": "https://deckers.com/",
      "offDomain": "deckers.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 29,
        "execution": 46,
        "representation": 8,
        "composite": 28
      },
      "detail": {
        "retrieval": {
          "score": 29,
          "band": "Largely invisible to AI",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "2 of 9 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "2 H1, 8 H2, 0 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 50,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 151 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 33 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 77 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "fail",
                  "weight": 1,
                  "detail": "50% of 12 images have alt text.",
                  "rec": "Give images descriptive alt text; it is readable context a model can use."
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 70,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "No sitemap found via robots.txt or /sitemap.xml.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (2)"
            },
            {
              "sev": "warning",
              "label": "6 images missing alt text"
            },
            {
              "sev": "warning",
              "label": "Thin content (under 250 words)"
            },
            {
              "sev": "warning",
              "label": "No sitemap discoverable"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 46,
          "band": "Major friction",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 63,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "partial",
                  "weight": 3,
                  "detail": "Some AI agents are refused at the edge while a browser gets 200 (OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 406, GPTBot 200).",
                  "rec": "Your CDN or WAF is refusing AI user-agents at the network layer, so the page is invisible to those agents regardless of robots.txt. If you intend to be agent-reachable, allow the retrieval user-agents (OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot) in your bot-management or Pay-Per-Crawl settings. Note: we test this by sending these user-agent strings from our scanner, so it measures how your edge treats the user-agent; a real agent presents the same string from its own network, making this a strong signal rather than a guarantee."
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 80,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Only about 151 words in the static HTML; some content likely depends on JavaScript.",
                  "rec": "Server-render or pre-render the primary content and controls. Agents and most crawlers do not execute JavaScript, so a client-rendered action surface is invisible to them."
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 25,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "No sitemap found via robots.txt or /sitemap.xml.",
                  "rec": "Publish a sitemap.xml and reference it in robots.txt so agents can enumerate your actionable pages."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Some AI agents refused at the edge (ClaudeBot)"
            },
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Crocs",
      "domain": "crocs.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 429)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Skechers",
      "domain": "skechers.com",
      "ok": true,
      "finalUrl": "https://www.skechers.com/",
      "offDomain": "skechers.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 72,
        "execution": 97,
        "representation": 44,
        "composite": 71
      },
      "detail": {
        "retrieval": {
          "score": 72,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 64,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Person.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "11 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Author or person is named, but without credential depth.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 64,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "2 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Products or services are described in structured data.",
                  "rec": null
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "6 of 14 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 15 H2, 2 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1300 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 41 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 187 characters.",
                  "rec": "Aim for a 70 to 180 character description; it is often quoted verbatim as your summary."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "98% of 63 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 83,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "43 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "1 image missing alt text"
            },
            {
              "sev": "warning",
              "label": "Meta description over 180 characters"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 97,
          "band": "Built for agents",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 100,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema (priced Offer).",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Products or services are described in structured data.",
                  "rec": null
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 100,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "5 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1300 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 44,
          "band": "Ambiguous identity",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Robert Greenberg), but thin: no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name \"Robert Greenberg\" is not clearly echoed in the title or og:site_name, which weakens disambiguation.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 30,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 confirmed and 1 unverified authoritative home(s) (of 6 declared; the rest did not resolve): linkedin.com, instagram.com.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 50,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "A person or author is named, but without credential depth.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "12 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 5,
              "reachable": 4,
              "confirmed": 1,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "tiktok.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "linkedin.com",
                "instagram.com"
              ],
              "confirmedHosts": [
                "linkedin.com"
              ],
              "unverifiedHosts": [
                "instagram.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Wolverine World Wide",
      "domain": "wolverineworldwide.com",
      "ok": true,
      "finalUrl": "https://wolverineworldwide.com/",
      "offDomain": "wolverineworldwide.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 44,
        "execution": 62,
        "representation": 13,
        "composite": 40
      },
      "detail": {
        "retrieval": {
          "score": 44,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "6 of 7 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 6 H2, 9 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 70,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 610 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 26 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 203 characters.",
                  "rec": "Aim for a 70 to 180 character description; it is often quoted verbatim as your summary."
                },
                {
                  "label": "Image alt coverage",
                  "status": "fail",
                  "weight": 1,
                  "detail": "1% of 77 images have alt text.",
                  "rec": "Give images descriptive alt text; it is readable context a model can use."
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "10 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "76 images missing alt text"
            },
            {
              "sev": "warning",
              "label": "Meta description over 180 characters"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 610 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 13,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "13 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Asics",
      "domain": "asics.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Akamai"
    },
    {
      "name": "Mizuno",
      "domain": "mizuno.com",
      "ok": true,
      "finalUrl": "https://usa.mizuno.com/",
      "offDomain": "usa.mizuno.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 49,
        "execution": 62,
        "representation": 28,
        "composite": 46
      },
      "detail": {
        "retrieval": {
          "score": 49,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 25,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 21,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "12 of 45 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "3 H1, 2 H2, 0 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1400 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 45 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 158 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 66 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 70,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "No sitemap found via robots.txt or /sitemap.xml.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (3)"
            },
            {
              "sev": "warning",
              "label": "No sitemap discoverable"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "3 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1400 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 25,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "No sitemap found via robots.txt or /sitemap.xml.",
                  "rec": "Publish a sitemap.xml and reference it in robots.txt so agents can enumerate your actionable pages."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 28,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Mizuno USA), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "12 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Carter's",
      "domain": "carters.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Guess",
      "domain": "guess.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Kontoor Brands",
      "domain": "kontoorbrands.com",
      "ok": true,
      "finalUrl": "https://www.kontoorbrands.com/",
      "offDomain": "kontoorbrands.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 42,
        "execution": 62,
        "representation": 18,
        "composite": 41
      },
      "detail": {
        "retrieval": {
          "score": 42,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "7 of 7 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 3 H2, 18 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 65,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 433 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 26 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No meta description found.",
                  "rec": "Add a clear meta description."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 1 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 83,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "4 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "Missing meta description"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 433 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "fail",
                  "weight": 1,
                  "detail": "An interactive CAPTCHA (hCaptcha, Cloudflare Turnstile or reCAPTCHA v2) is present; autonomous agents cannot pass it.",
                  "rec": "Do not gate primary actions behind an interactive CAPTCHA (hCaptcha, Turnstile, reCAPTCHA v2), which agents cannot solve. Invisible scoring (reCAPTCHA v3) is less hostile but can still block a low-scoring agent, so keep it off critical task paths."
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            },
            {
              "sev": "warning",
              "label": "Interactive CAPTCHA present; autonomous agents cannot complete it"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 18,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "3 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 100,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "pass",
                  "weight": 1,
                  "detail": "You actively govern representation: TDM reservation. (no training opt-out declared.)",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "On Holding",
      "domain": "on.com",
      "ok": true,
      "finalUrl": "https://www.on.com/en-us/",
      "offDomain": "on.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 62,
        "execution": 63,
        "representation": 48,
        "composite": 58
      },
      "detail": {
        "retrieval": {
          "score": 62,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 58,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "20 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Logo and contact details in structured data.",
                  "rec": null
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 32,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "The page references a subject, but the schema is otherwise flat.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "6 of 11 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 3 H2, 1 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 65,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 368 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 51 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 148 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "fail",
                  "weight": 1,
                  "detail": "5% of 40 images have alt text.",
                  "rec": "Give images descriptive alt text; it is readable context a model can use."
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (799 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "38 images missing alt text"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 63,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 80,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "A form element is present but has no usable named inputs.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 368 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "llms.txt present but declares no transactional surfaces.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 48,
          "band": "Ambiguous identity",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (On), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name \"On\" is not clearly echoed in the title or og:site_name, which weakens disambiguation.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 60,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 confirmed and 2 unverified authoritative home(s) (of 16 declared; the rest did not resolve): youtube.com, instagram.com, x.com.",
                  "rec": null
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 100,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "pass",
                  "weight": 1,
                  "detail": "You actively govern representation: TDM reservation. (no training opt-out declared.)",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 5,
              "reachable": 3,
              "confirmed": 1,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "x.com",
                  "status": 403,
                  "state": "unverified"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "confirmed"
                }
              ],
              "scoringHosts": [
                "youtube.com",
                "instagram.com",
                "x.com"
              ],
              "confirmedHosts": [
                "youtube.com"
              ],
              "unverifiedHosts": [
                "instagram.com",
                "x.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Allbirds",
      "domain": "allbirds.com",
      "ok": true,
      "finalUrl": "https://www.allbirds.com/",
      "offDomain": "allbirds.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 58,
        "execution": 66,
        "representation": 15,
        "composite": 46
      },
      "detail": {
        "retrieval": {
          "score": 58,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 100,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "67 of 172 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "2 question-led heading(s) or Q&A found.",
                  "rec": null
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 40 H2, 16 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 14800 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 54 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 155 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 42 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 96,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (4,410 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "1 insecure HTTP resource on a secure page"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 66,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 80,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 14800 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "fail",
                  "weight": 1,
                  "detail": "An interactive CAPTCHA (hCaptcha, Cloudflare Turnstile or reCAPTCHA v2) is present; autonomous agents cannot pass it.",
                  "rec": "Do not gate primary actions behind an interactive CAPTCHA (hCaptcha, Turnstile, reCAPTCHA v2), which agents cannot solve. Invisible scoring (reCAPTCHA v3) is less hostile but can still block a low-scoring agent, so keep it off critical task paths."
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            },
            {
              "sev": "warning",
              "label": "Interactive CAPTCHA present; autonomous agents cannot complete it"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 15,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 30,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "21 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "1 outbound citation(s) sit inside claim-bearing paragraphs, the shape of genuinely sourced writing.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Dr. Martens",
      "domain": "drmartens.com",
      "ok": true,
      "finalUrl": "https://www.drmartens.com/",
      "offDomain": "drmartens.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 25,
        "execution": 34,
        "representation": 8,
        "composite": 22
      },
      "detail": {
        "retrieval": {
          "score": 25,
          "band": "Largely invisible to AI",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 17,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 of 1 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 H1, 1 H2, 2 H3.",
                  "rec": "Add H2/H3 subheadings; a flat page is hard for a model to segment and quote."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 70,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 112 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 18 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 111 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 1 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 57,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Page is set to noindex (meta or X-Robots-Tag); excluded from search and AI.",
                  "rec": "Remove the noindex directive; a noindexed page cannot be cited."
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "Page is set to noindex (excluded from search and AI)"
            },
            {
              "sev": "error",
              "label": "2 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "Thin content (under 250 words)"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 34,
          "band": "Closed to agents",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 63,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "partial",
                  "weight": 3,
                  "detail": "Some AI agents are refused at the edge while a browser gets 200 (OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 403, GPTBot 200).",
                  "rec": "Your CDN or WAF is refusing AI user-agents at the network layer, so the page is invisible to those agents regardless of robots.txt. If you intend to be agent-reachable, allow the retrieval user-agents (OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot) in your bot-management or Pay-Per-Crawl settings. Note: we test this by sending these user-agent strings from our scanner, so it measures how your edge treats the user-agent; a real agent presents the same string from its own network, making this a strong signal rather than a guarantee."
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 45,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Very little static content (~112 words); agents that do not run JavaScript will see almost nothing.",
                  "rec": "Server-render or pre-render the primary content and controls. Agents and most crawlers do not execute JavaScript, so a client-rendered action surface is invisible to them."
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Some AI agents refused at the edge (ClaudeBot)"
            },
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            },
            {
              "sev": "error",
              "label": "Action surface appears client-side rendered; agents may see little"
            },
            {
              "sev": "warning",
              "label": "Reachable but nothing to operate (little content, no action, no form)"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": false,
        "consistent": null,
        "note": "browser-ua-unreadable"
      },
      "flags": []
    },
    {
      "name": "Superdry",
      "domain": "superdry.com",
      "ok": true,
      "finalUrl": "https://www.superdry.com/",
      "offDomain": "superdry.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 51,
        "execution": 83,
        "representation": 37,
        "composite": 57
      },
      "detail": {
        "retrieval": {
          "score": 51,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 61,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "4 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Your entity carries some descriptive depth.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 21,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "2 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "4 of 21 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "2 H1, 5 H2, 2 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1300 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 78 characters.",
                  "rec": "Aim for a 15 to 70 character title that states who you are and what you do."
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 134 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 57 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 70,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "No sitemap found via robots.txt or /sitemap.xml.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (2)"
            },
            {
              "sev": "warning",
              "label": "Title likely truncated in results (over 65 characters)"
            },
            {
              "sev": "warning",
              "label": "No sitemap discoverable"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 83,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 100,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "2 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1300 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 25,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "No sitemap found via robots.txt or /sitemap.xml.",
                  "rec": "Publish a sitemap.xml and reference it in robots.txt so agents can enumerate your actionable pages."
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 37,
          "band": "Ambiguous identity",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Superdry), but thin: no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 30,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "0 confirmed and 2 unverified authoritative home(s) (of 4 declared; the rest did not resolve): twitter.com, instagram.com.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "8 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 4,
              "reachable": 2,
              "confirmed": 0,
              "dead": 0,
              "links": [
                {
                  "host": "twitter.com",
                  "status": 403,
                  "state": "unverified"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "twitter.com",
                "instagram.com"
              ],
              "confirmedHosts": [],
              "unverifiedHosts": [
                "twitter.com",
                "instagram.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Barbour",
      "domain": "barbour.com",
      "ok": true,
      "finalUrl": "https://www.barbour.com/us/",
      "offDomain": "barbour.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 36,
        "execution": 69,
        "representation": 10,
        "composite": 38
      },
      "detail": {
        "retrieval": {
          "score": 36,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "20 of 33 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 7 H2, 6 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 924 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 27 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 91 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "88% of 17 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 74,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "warning",
              "label": "2 images missing alt text"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 69,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 100,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "2 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 924 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 10,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "2 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Pentland Brands",
      "domain": "pentland.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "New Balance",
      "domain": "newbalance.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Akamai"
    },
    {
      "name": "Amer Sports",
      "domain": "amersports.com",
      "ok": true,
      "finalUrl": "https://www.amersports.com/",
      "offDomain": "amersports.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 59,
        "execution": 76,
        "representation": 23,
        "composite": 53
      },
      "detail": {
        "retrieval": {
          "score": 59,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 36,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 43,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entities are linked with @graph / @id, and the page references its subject.",
                  "rec": null
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "4 of 8 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 7 H2, 0 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 85,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 420 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 62 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 140 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "96% of 23 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 96,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "1 image missing alt text"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 76,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 55,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 420 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "fail",
                  "weight": 1,
                  "detail": "An interactive CAPTCHA (hCaptcha, Cloudflare Turnstile or reCAPTCHA v2) is present; autonomous agents cannot pass it.",
                  "rec": "Do not gate primary actions behind an interactive CAPTCHA (hCaptcha, Turnstile, reCAPTCHA v2), which agents cannot solve. Invisible scoring (reCAPTCHA v3) is less hostile but can still block a low-scoring agent, so keep it off critical task paths."
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Interactive CAPTCHA present; autonomous agents cannot complete it"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 23,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Amer Sports), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Hugo Boss",
      "domain": "hugoboss.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Akamai"
    },
    {
      "name": "Lacoste",
      "domain": "lacoste.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Akamai"
    },
    {
      "name": "Anta Sports",
      "domain": "anta.com",
      "ok": true,
      "finalUrl": "https://anta.com/",
      "offDomain": "anta.com",
      "truncated": true,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 65,
        "execution": 85,
        "representation": 28,
        "composite": 59
      },
      "detail": {
        "retrieval": {
          "score": 65,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 64,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "4 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 32,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "3 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Uses @graph / @id, but the page does not reference a subject entity.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "3 of 31 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 4 H2, 23 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 2700 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 31 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 163 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 67 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 96,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (4,419 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 85,
          "band": "Agent-operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 71,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "rec": null
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "13 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 2700 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "fail",
                  "weight": 1,
                  "detail": "An interactive CAPTCHA (hCaptcha, Cloudflare Turnstile or reCAPTCHA v2) is present; autonomous agents cannot pass it.",
                  "rec": "Do not gate primary actions behind an interactive CAPTCHA (hCaptcha, Turnstile, reCAPTCHA v2), which agents cannot solve. Invisible scoring (reCAPTCHA v3) is less hostile but can still block a low-scoring agent, so keep it off critical task paths."
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Interactive CAPTCHA present; autonomous agents cannot complete it"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 28,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (ANTA), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 confirmed and 1 unverified authoritative home(s) (of 4 declared; the rest did not resolve): instagram.com.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "474 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 4,
              "reachable": 3,
              "confirmed": 0,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "tiktok.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "instagram.com"
              ],
              "confirmedHosts": [],
              "unverifiedHosts": [
                "instagram.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": [
        "sameas-unverified"
      ]
    },
    {
      "name": "Li-Ning",
      "domain": "lining.com",
      "ok": true,
      "finalUrl": "https://lining.com/",
      "offDomain": "lining.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 18,
        "execution": 61,
        "representation": 20,
        "composite": 33
      },
      "detail": {
        "retrieval": {
          "score": 18,
          "band": "Largely invisible to AI",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 0,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 of 19 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 0 H2, 23 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 45,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 295 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 4 characters.",
                  "rec": "Aim for a 15 to 70 character title that states who you are and what you do."
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 1 characters.",
                  "rec": "Aim for a 70 to 180 character description; it is often quoted verbatim as your summary."
                },
                {
                  "label": "Image alt coverage",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0% of 93 images have alt text.",
                  "rec": "Give images descriptive alt text; it is readable context a model can use."
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 61,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (1,518 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No canonical link found.",
                  "rec": "Declare a canonical URL so engines consolidate signals on one address."
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "1/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "fail",
                  "weight": 0.75,
                  "detail": "HTTPS, no viewport, no lang.",
                  "rec": "Serve over HTTPS, add a responsive viewport meta tag, and set an html lang attribute."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "warning",
              "label": "Heading levels skip from H1 to H3"
            },
            {
              "sev": "error",
              "label": "59 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "93 images missing alt text"
            },
            {
              "sev": "warning",
              "label": "No canonical URL declared"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 61,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 60,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "A form element is present but has no usable named inputs.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Only about 295 words in the static HTML; some content likely depends on JavaScript.",
                  "rec": "Server-render or pre-render the primary content and controls. Agents and most crawlers do not execute JavaScript, so a client-rendered action surface is invisible to them."
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 20,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 20,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "12 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": null
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 100,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "pass",
                  "weight": 1,
                  "detail": "You actively govern representation: TDM reservation. (no training opt-out declared.)",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "G-III Apparel Group",
      "domain": "g-iii.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": "",
      "escalatedFrom": {
        "name": "G-III Apparel Group",
        "domain": "g-iii.com",
        "from": 29,
        "since": "2026-09-01",
        "outcome": "UNREACHABLE (no response)",
        "wafVendor": ""
      }
    },
    {
      "name": "LVMH",
      "domain": "lvmh.com",
      "ok": true,
      "finalUrl": "https://www.lvmh.com/en",
      "offDomain": "lvmh.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 36,
        "execution": 62,
        "representation": 8,
        "composite": 35
      },
      "detail": {
        "retrieval": {
          "score": 36,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "6 of 44 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "1 H1, 0 H2, 0 H3.",
                  "rec": "Add H2/H3 subheadings; a flat page is hard for a model to segment and quote."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 718 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 43 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 158 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 14 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 76,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "partial",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, no lang.",
                  "rec": "Serve over HTTPS, add a responsive viewport meta tag, and set an html lang attribute."
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot timeout, ClaudeBot 200, GPTBot 200). 1 probe(s) returned a transient rate-limit or timeout and are not counted as a block.",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 718 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Kering",
      "domain": "kering.com",
      "ok": true,
      "finalUrl": "https://www.kering.com/en/",
      "offDomain": "kering.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 41,
        "execution": 46,
        "representation": 41,
        "composite": 43
      },
      "detail": {
        "retrieval": {
          "score": 41,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 47,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "5 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 21,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 0,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 of 17 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "1 H1, 0 H2, 0 H3.",
                  "rec": "Add H2/H3 subheadings; a flat page is hard for a model to segment and quote."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 70,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 124 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 36 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 160 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "91% of 169 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 91,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "pass",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags plus a Twitter card.",
                  "rec": null
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "16 images missing alt text"
            },
            {
              "sev": "warning",
              "label": "Thin content (under 250 words)"
            }
          ],
          "renderDependent": true,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 46,
          "band": "Major friction",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 63,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "partial",
                  "weight": 3,
                  "detail": "Some AI agents are refused at the edge while a browser gets 200 (OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 403, ClaudeBot 200, GPTBot 200).",
                  "rec": "Your CDN or WAF is refusing AI user-agents at the network layer, so the page is invisible to those agents regardless of robots.txt. If you intend to be agent-reachable, allow the retrieval user-agents (OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot) in your bot-management or Pay-Per-Crawl settings. Note: we test this by sending these user-agent strings from our scanner, so it measures how your edge treats the user-agent; a real agent presents the same string from its own network, making this a strong signal rather than a guarantee."
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 60,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "2 form(s) with named inputs, but no action attribute: submission is wired in JavaScript, so a non-rendering agent has no endpoint to post to.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Only about 124 words in the static HTML; some content likely depends on JavaScript.",
                  "rec": "Server-render or pre-render the primary content and controls. Agents and most crawlers do not execute JavaScript, so a client-rendered action surface is invisible to them."
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Some AI agents refused at the edge (PerplexityBot)"
            },
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": true,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 41,
          "band": "Ambiguous identity",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Kering), but thin: no description; no knowsAbout / areaServed / founder detail.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across surfaces, but no legal identifier (company number, VAT, LEI) is declared.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 60,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 confirmed and 2 unverified authoritative home(s) (of 5 declared; the rest did not resolve): linkedin.com, instagram.com, x.com.",
                  "rec": null
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "Profile links are present, but no CONFIRMED authoritative registry (Wikidata, Companies House, OpenCorporates) anchors them.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 5,
              "reachable": 3,
              "confirmed": 1,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 429,
                  "state": "unverified"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "x.com",
                  "status": 403,
                  "state": "unverified"
                }
              ],
              "scoringHosts": [
                "linkedin.com",
                "instagram.com",
                "x.com"
              ],
              "confirmedHosts": [
                "linkedin.com"
              ],
              "unverifiedHosts": [
                "instagram.com",
                "x.com"
              ]
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Hermes",
      "domain": "hermes.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Richemont",
      "domain": "richemont.com",
      "ok": true,
      "finalUrl": "https://www.richemont.com/",
      "offDomain": "richemont.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 43,
        "execution": 69,
        "representation": 10,
        "composite": 41
      },
      "detail": {
        "retrieval": {
          "score": 43,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "14 of 21 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "7 H1, 4 H2, 3 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1100 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 45 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 148 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 67 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "3/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (7)"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 69,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 100,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "2 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1100 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A contact route (ContactPoint, mailto or tel) is available for an agent to hand off.",
                  "rec": null
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 10,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "2 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Burberry",
      "domain": "burberry.com",
      "ok": true,
      "finalUrl": "https://www.burberry.com/",
      "offDomain": "burberry.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 21,
        "execution": 59,
        "representation": 15,
        "composite": 32
      },
      "detail": {
        "retrieval": {
          "score": 21,
          "band": "Largely invisible to AI",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 0,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "1 of 1 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "1 H1, 0 H2, 0 H3.",
                  "rec": "Add H2/H3 subheadings; a flat page is hard for a model to segment and quote."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 45,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 407 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No title tag found.",
                  "rec": "Add a descriptive title tag."
                },
                {
                  "label": "Meta description quality",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No meta description found.",
                  "rec": "Add a clear meta description."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No images to assess.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 74,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (176,640 characters); read today by coding and agent tools.",
                  "rec": null
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No canonical link found.",
                  "rec": "Declare a canonical URL so engines consolidate signals on one address."
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "Missing title tag"
            },
            {
              "sev": "warning",
              "label": "Missing meta description"
            },
            {
              "sev": "warning",
              "label": "No canonical URL declared"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 59,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 55,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "1 form(s) with named inputs, but no action attribute: submission is wired in JavaScript, so a non-rendering agent has no endpoint to post to.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 407 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "fail",
                  "weight": 1,
                  "detail": "An interactive CAPTCHA (hCaptcha, Cloudflare Turnstile or reCAPTCHA v2) is present; autonomous agents cannot pass it.",
                  "rec": "Do not gate primary actions behind an interactive CAPTCHA (hCaptcha, Turnstile, reCAPTCHA v2), which agents cannot solve. Invisible scoring (reCAPTCHA v3) is less hostile but can still block a low-scoring agent, so keep it off critical task paths."
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt declares transactional or API surfaces for agents.",
                  "rec": null
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            },
            {
              "sev": "warning",
              "label": "Interactive CAPTCHA present; autonomous agents cannot complete it"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 15,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 100,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "pass",
                  "weight": 1,
                  "detail": "You actively govern representation: TDM reservation. (no training opt-out declared.)",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Prada Group",
      "domain": "pradagroup.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Moncler",
      "domain": "moncler.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Akamai"
    },
    {
      "name": "Salvatore Ferragamo",
      "domain": "ferragamo.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Brunello Cucinelli",
      "domain": "brunellocucinelli.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Tod's",
      "domain": "tods.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Akamai"
    },
    {
      "name": "Ermenegildo Zegna",
      "domain": "zegna.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Akamai"
    },
    {
      "name": "The Swatch Group",
      "domain": "swatchgroup.com",
      "ok": true,
      "finalUrl": "https://www.swatchgroup.com/en",
      "offDomain": "swatchgroup.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 30,
        "execution": 56,
        "representation": 10,
        "composite": 32
      },
      "detail": {
        "retrieval": {
          "score": 30,
          "band": "Largely invisible to AI",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 0,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 17,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "4 of 11 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 12 H2, 0 H3.",
                  "rec": "Use exactly one H1, then H2/H3 to structure the content a model parses."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 80,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 564 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 87 characters.",
                  "rec": "Aim for a 15 to 70 character title that states who you are and what you do."
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 571 characters.",
                  "rec": "Aim for a 70 to 180 character description; it is often quoted verbatim as your summary."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 7 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 78,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "warning",
              "label": "Title likely truncated in results (over 65 characters)"
            },
            {
              "sev": "warning",
              "label": "Meta description over 180 characters"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 56,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 63,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "partial",
                  "weight": 3,
                  "detail": "Could not establish a browser baseline (control returned timeout); agent results inconclusive. Probed: OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot timeout, ClaudeBot 200, GPTBot 200.",
                  "rec": "Your CDN or WAF is refusing AI user-agents at the network layer, so the page is invisible to those agents regardless of robots.txt. If you intend to be agent-reachable, allow the retrieval user-agents (OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot) in your bot-management or Pay-Per-Crawl settings. Note: we test this by sending these user-agent strings from our scanner, so it measures how your edge treats the user-agent; a real agent presents the same string from its own network, making this a strong signal rather than a guarantee."
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 95,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "1 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 564 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 10,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "3 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": false,
        "consistent": null,
        "note": "browser-ua-unreadable"
      },
      "flags": []
    },
    {
      "name": "Pandora",
      "domain": "pandoragroup.com",
      "ok": true,
      "finalUrl": "https://pandoragroup.com/",
      "offDomain": "pandoragroup.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 47,
        "execution": 62,
        "representation": 10,
        "composite": 40
      },
      "detail": {
        "retrieval": {
          "score": 47,
          "band": "Significant gaps",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 3,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No BreadcrumbList schema found.",
                  "rec": "Add BreadcrumbList schema so engines understand where this page sits in your site."
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 7,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No JSON-LD found.",
                  "rec": "Add JSON-LD structured data; it is how a machine reads your facts rather than guessing them."
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Dates present in meta or <time> tags, but not in structured data.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "7 of 8 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 4 H2, 14 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 85,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 453 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 62 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 168 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 9 images have alt text.",
                  "rec": null
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap with lastmod dates is discoverable.",
                  "rec": null
                },
                {
                  "label": "Social / Open Graph",
                  "status": "partial",
                  "weight": 1,
                  "detail": "2/3 Open Graph tags plus a Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 62,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 75,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "partial",
                  "weight": 2,
                  "detail": "No HTML form on this page, so an agent cannot complete a form-based task here.",
                  "rec": "Provide real <form> elements with a real action attribute, named inputs and <label>/aria-label, and no honeypot trap, so an agent can read and complete the task. Forms wired only in JavaScript are invisible to non-rendering agents."
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 453 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No CAPTCHA challenge detected.",
                  "rec": null
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 10,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 10,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "3 extractable signals (statistics, figures, quotations, definitions) a model can lift and attribute.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "EssilorLuxottica",
      "domain": "essilorluxottica.com",
      "ok": false,
      "reason": "UNREADABLE (no content / client-side rendered)",
      "wafVendor": ""
    },
    {
      "name": "Safilo Group",
      "domain": "safilogroup.com",
      "ok": false,
      "reason": "UNREADABLE (no content / client-side rendered)",
      "wafVendor": ""
    },
    {
      "name": "Mulberry",
      "domain": "mulberry.com",
      "ok": true,
      "finalUrl": "https://www.mulberry.com/us/",
      "offDomain": "mulberry.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 34,
        "execution": 65,
        "representation": 8,
        "composite": 36
      },
      "detail": {
        "retrieval": {
          "score": 34,
          "band": "Largely invisible to AI",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 14,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, LocalBusiness or Person markup found.",
                  "rec": "Declare an Organisation (or LocalBusiness / Person) entity in JSON-LD so AI engines can identify and attribute you by name."
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No sameAs links found to verify your identity.",
                  "rec": "Add several sameAs links to distinct profiles (LinkedIn, Companies House, Wikidata, key socials) so a model can confirm you are a real, single entity. Distinct domains count, so several links to one profile count once."
                },
                {
                  "label": "Logo & contact in schema",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No logo and no contact details in structured data.",
                  "rec": "Add a logo and contactPoint / address to your Organisation schema so AI answers can render and trust you."
                },
                {
                  "label": "Authorship & credibility",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Person or author markup found.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout or sameAs. Models weigh named, credentialed authorship (E-E-A-T) when deciding who to trust."
                },
                {
                  "label": "Breadcrumbs",
                  "status": "pass",
                  "weight": 1,
                  "detail": "BreadcrumbList schema present.",
                  "rec": null
                },
                {
                  "label": "Entity detail (description & expertise)",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Your entity has a name but little descriptive detail.",
                  "rec": "Flesh out the entity: a description plus knowsAbout, areaServed or founder, so a model understands what you do and for whom."
                },
                {
                  "label": "Social proof schema",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No verifiable reputation signal in your structured data.",
                  "rec": "Link a third-party review profile, such as your Google Business Profile, via sameAs so a model can corroborate your reputation. Reserve Review or AggregateRating schema for eligible pages like individual products with independent reviews; Google disallows self-serving reviews on your own organisation."
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 21,
              "checks": [
                {
                  "label": "Valid structured data (JSON-LD)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 valid JSON-LD block(s).",
                  "rec": null
                },
                {
                  "label": "Linked entity graph",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Structured data is flat, with no entity linking.",
                  "rec": "Link entities with @id (an @graph) and connect the page to its subject with about / mainEntity, so a model reads one connected entity."
                },
                {
                  "label": "Rich content types",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "Only basic site markup; no Product, Service, Article, FAQ or similar.",
                  "rec": "Mark up what you actually offer (Product, Service, Article, FAQPage, Review). Org-and-website-only schema tells a model almost nothing about your value."
                },
                {
                  "label": "Freshness signals (dates)",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No published or modified dates found.",
                  "rec": "Expose datePublished / dateModified in JSON-LD (an article:published_time meta or <time datetime> is a partial signal). Models favour content they can date."
                },
                {
                  "label": "Offerings marked up",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No Product, Service or Offer markup for what you sell.",
                  "rec": "Mark up what you actually offer (Product, Service or Offer). A model cannot recommend offerings it cannot see."
                }
              ]
            },
            {
              "key": "answer",
              "label": "Answerability",
              "weight": 0.26,
              "score": 17,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "0 of 3 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": "Write several concise, self-contained paragraphs (roughly 40 to 450 characters, at least eight words each) that each answer a real question, rather than long unbroken blocks or repeated one-liners."
                },
                {
                  "label": "Question-led content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No question-led content found.",
                  "rec": "Frame some sections as the questions buyers actually ask, each with a concise answer beneath. This is the content pattern, not the deprecated FAQ rich result, so no FAQ schema is required."
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "1 H1, 0 H2, 1 H3.",
                  "rec": "Add H2/H3 subheadings; a flat page is hard for a model to segment and quote."
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 65,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 492 words of readable text.",
                  "rec": "Give models enough clean, standalone prose to quote. This measures depth, not quality; a focused page can be cited at lower length, but very thin pages rarely are."
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 41 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 150 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0% of 5 images have alt text.",
                  "rec": "Give images descriptive alt text; it is readable context a model can use."
                },
                {
                  "label": "Semantic structure",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Uses lists, HTML5 landmarks or header-table structure.",
                  "rec": null
                }
              ]
            },
            {
              "key": "access",
              "label": "AI Access & Discovery",
              "weight": 0.2,
              "score": 74,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No llms.txt at the site root.",
                  "rec": "Scored lightly, by design. As of 2026 the major AI search crawlers rarely fetch llms.txt, and Google has stated it has no effect on Google Search. Coding and agent tools (Cursor, Copilot, Claude Code) do read it, and other AI systems may adopt the convention, so it is a sensible, low-cost hedge for the agent era, not an AI-search ranking signal today."
                },
                {
                  "label": "AI crawler access",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "robots.txt allows the major AI answer crawlers.",
                  "rec": null
                },
                {
                  "label": "Indexable & snippet-eligible",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Indexable and snippet-eligible.",
                  "rec": null
                },
                {
                  "label": "Canonical URL",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Canonical link declared.",
                  "rec": null
                },
                {
                  "label": "Sitemap",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "A sitemap exists but carries no lastmod dates.",
                  "rec": "Publish a sitemap.xml with lastmod dates and reference it in robots.txt."
                },
                {
                  "label": "Social / Open Graph",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0/3 Open Graph tags, no Twitter card.",
                  "rec": "Complete og:title, og:description, og:image and a twitter:card for clean rendering when shared or cited."
                },
                {
                  "label": "Mobile, language & HTTPS",
                  "status": "pass",
                  "weight": 0.75,
                  "detail": "HTTPS, responsive viewport, lang set.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Heading levels skip from H1 to H3"
            },
            {
              "sev": "error",
              "label": "13 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "5 images missing alt text"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 65,
          "band": "Partly operable",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 100,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "pass",
                  "weight": 3,
                  "detail": "AI agents reach the page like a browser (browser 200; OAI-SearchBot 200, ChatGPT-User 200, PerplexityBot 200, ClaudeBot 200, GPTBot 200).",
                  "rec": null
                },
                {
                  "label": "Robots policy for retrieval agents",
                  "status": "pass",
                  "weight": 1,
                  "detail": "robots.txt allows the retrieval agents.",
                  "rec": null
                }
              ]
            },
            {
              "key": "action",
              "label": "Actionability",
              "weight": 0.28,
              "score": 0,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "fail",
                  "weight": 2.5,
                  "detail": "No machine-readable action (priced Offer, OrderAction, ReserveAction or potentialAction) found.",
                  "rec": "Mark up the action an agent would take: a priced Offer (price + priceCurrency + availability), or an Action type (OrderAction, ReserveAction, potentialAction) with a valid absolute-URL target. An agent cannot transact against what it cannot read."
                },
                {
                  "label": "Offerings described",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No Product, Service or Offer markup for what you provide.",
                  "rec": "Describe what you offer with Product / Service / Offer schema so an agent can identify and select it."
                }
              ]
            },
            {
              "key": "operability",
              "label": "Operability",
              "weight": 0.28,
              "score": 85,
              "checks": [
                {
                  "label": "Form / task operability",
                  "status": "pass",
                  "weight": 2,
                  "detail": "5 form(s) with named, labelled inputs and a submittable action an agent can complete.",
                  "rec": null
                },
                {
                  "label": "Static content (render dependency)",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 492 words of content are present in the static HTML.",
                  "rec": null
                },
                {
                  "label": "Machine-readable contact",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No machine-readable contact route for an agent hand-off.",
                  "rec": "Expose a ContactPoint in schema and a mailto:/tel: link so an agent can route a human when it reaches the limit of what it can do."
                },
                {
                  "label": "No CAPTCHA wall",
                  "status": "partial",
                  "weight": 1,
                  "detail": "An invisible reCAPTCHA v3 is present; it scores requests rather than blocking outright, but can still gate an action on a low score.",
                  "rec": "Do not gate primary actions behind an interactive CAPTCHA (hCaptcha, Turnstile, reCAPTCHA v2), which agents cannot solve. Invisible scoring (reCAPTCHA v3) is less hostile but can still block a low-scoring agent, so keep it off critical task paths."
                }
              ]
            },
            {
              "key": "discovery",
              "label": "Discoverability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Declared machine interface",
                  "status": "partial",
                  "weight": 0.5,
                  "detail": "No agent-facing interface declaration found.",
                  "rec": "As agent protocols settle, declare your agent-facing surfaces (in llms.txt today, and emerging well-known manifests). Scored lightly and forward-looking; not a ranking signal."
                },
                {
                  "label": "Discoverable sitemap",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "A sitemap is discoverable for agents to enumerate pages.",
                  "rec": null
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 8,
          "band": "Unresolved to machines",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "fail",
                  "weight": 2,
                  "detail": "No Organisation, Brand or Person entity in structured data.",
                  "rec": "Declare an Organisation / Brand / Person with a description and depth fields (knowsAbout, areaServed, founder, foundingDate) so a model can build a faithful picture of who you are."
                },
                {
                  "label": "Identity consistency",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No entity name in schema to check for consistency.",
                  "rec": "Use one consistent name across schema, <title> and og:site_name, and declare a legal identifier (company number, VAT, or LEI) so a model can resolve you to a single, verifiable legal entity."
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No sameAs links to anchor your identity.",
                  "rec": "Declare at least two authoritative homes that resolve and reference you. Bot-walled links (uncheckable, e.g. LinkedIn) count for less than confirmed ones, so include a checkable registry (Wikidata, Companies House, OpenCorporates)."
                },
                {
                  "label": "Spans registry and profile",
                  "status": "fail",
                  "weight": 1,
                  "detail": "No authoritative links to span.",
                  "rec": "Link both a registry (Wikidata, Companies House, OpenCorporates, SEC, ORCID) that resolves and references you, and a profile (LinkedIn, Crunchbase, a verified social). Two of the same kind corroborate less than one of each."
                }
              ]
            },
            {
              "key": "authority",
              "label": "Authority",
              "weight": 0.25,
              "score": 0,
              "checks": [
                {
                  "label": "Credentialed authorship",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "No named, credentialed person or author; content reads as anonymous to a model.",
                  "rec": "Mark up the people behind the content as Person / author with jobTitle, worksFor, knowsAbout and sameAs. Models weigh named, credentialed authorship when deciding whose account of you to trust."
                },
                {
                  "label": "Citation-worthy claims",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Few extractable, quotable claims; little for a model to cite back to you.",
                  "rec": "Publish concrete, attributable claims: statistics, figures, defined terms and quotable statements. These are the units a model lifts, and lifting yours keeps the narrative in your words."
                },
                {
                  "label": "Sourced claims (outbound citations)",
                  "status": "fail",
                  "weight": 0.5,
                  "detail": "Claims are not backed by outbound links to sources a model can follow and trust.",
                  "rec": "Where you cite a figure or a study, link the source (an external, authoritative URL) from within the same paragraph. Sourced claims read as more citable than unbacked ones."
                }
              ]
            },
            {
              "key": "rights",
              "label": "Representation Rights",
              "weight": 0.15,
              "score": 50,
              "checks": [
                {
                  "label": "Representation & usage rights",
                  "status": "partial",
                  "weight": 1,
                  "detail": "No representation or usage terms declared (license, copyrightHolder, TDM reservation). (no training opt-out declared.)",
                  "rec": "State your terms so the machine layer knows how it may use your content: a schema license and copyrightHolder, and, if you wish to govern AI training/text-and-data-mining, a TDM reservation (/.well-known/tdmrep.json) or noai directive. Declaring terms is governance, not a penalty for any particular choice."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "error",
              "label": "No machine-readable entity (Organisation / Brand / Person)"
            },
            {
              "sev": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 0,
              "reachable": 0,
              "confirmed": 0,
              "dead": 0,
              "links": [],
              "scoringHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    }
  ]
}