{
  "scan": "Financial Services — Crane Index (AI Visibility Suite)",
  "cohort": "financial-services",
  "date": "2026-09-01",
  "scanners": {
    "retrieval": "AI Search Readiness",
    "execution": "Agent Readiness",
    "representation": "Brand Representation"
  },
  "concurrency": 10,
  "pages": 1,
  "basis": "page",
  "aggregate": {
    "scannedRequested": 175,
    "reachable": 119,
    "unreachable": 56,
    "retrieval": {
      "n": 119,
      "min": 13,
      "max": 79,
      "median": 52,
      "mean": 51,
      "ge70": 12,
      "b5569": 43,
      "b4054": 37,
      "lt40": 27,
      "below55": 64,
      "ge90": 0
    },
    "execution": {
      "n": 119,
      "min": 30,
      "max": 89,
      "median": 63,
      "mean": 62,
      "ge70": 18,
      "b5569": 81,
      "b4054": 7,
      "lt40": 13,
      "below55": 20,
      "ge90": 0
    },
    "representation": {
      "n": 119,
      "min": 8,
      "max": 66,
      "median": 15,
      "mean": 24,
      "ge70": 0,
      "b5569": 11,
      "b4054": 17,
      "lt40": 91,
      "below55": 108,
      "ge90": 0
    },
    "composite": {
      "n": 119,
      "min": 19,
      "max": 76,
      "median": 44,
      "mean": 46,
      "ge70": 6,
      "b5569": 26,
      "b4054": 47,
      "lt40": 40,
      "below55": 87,
      "ge90": 0
    }
  },
  "escalations": [],
  "recoveries": [],
  "companies": [
    {
      "name": "JPMorgan Chase",
      "domain": "jpmorganchase.com",
      "ok": true,
      "finalUrl": "https://www.jpmorganchase.com/",
      "offDomain": "jpmorganchase.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 41,
        "execution": 62,
        "representation": 13,
        "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": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "19 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": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 40 H2, 8 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 60,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 892 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": "fail",
                  "weight": 1,
                  "detail": "No meta description found.",
                  "rec": "Add a clear meta description."
                },
                {
                  "label": "Image alt coverage",
                  "status": "fail",
                  "weight": 1,
                  "detail": "20% of 15 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, 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": "12 images 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, 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 892 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": "Bank of America",
      "domain": "bankofamerica.com",
      "ok": true,
      "finalUrl": "https://www.bankofamerica.com/",
      "offDomain": "bankofamerica.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 59,
        "execution": 62,
        "representation": 23,
        "composite": 48
      },
      "detail": {
        "retrieval": {
          "score": 59,
          "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, 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": "3 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": "52 of 69 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, 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 3800 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 146 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "88% of 33 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": "4 images missing alt text"
            },
            {
              "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, 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": "4 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 3800 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": 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 (Bank of America), 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": "Citigroup",
      "domain": "citigroup.com",
      "ok": true,
      "finalUrl": "https://www.citigroup.com/global",
      "offDomain": "citigroup.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 60,
        "execution": 78,
        "representation": 34,
        "composite": 57
      },
      "detail": {
        "retrieval": {
          "score": 60,
          "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": "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": "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": "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": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 5 H2, 0 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 70,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 140 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 136 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% 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": "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": "Thin content (under 250 words)"
            }
          ],
          "renderDependent": true,
          "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, 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 140 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": true,
          "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 (Citigroup), 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): 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": "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": 3,
              "reachable": 3,
              "confirmed": 1,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "twitter.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "twitter.com"
              ],
              "confirmedHosts": [
                "twitter.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Wells Fargo",
      "domain": "wellsfargo.com",
      "ok": true,
      "finalUrl": "https://www.wellsfargo.com/",
      "offDomain": "wellsfargo.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 69,
        "execution": 68,
        "representation": 28,
        "composite": 55
      },
      "detail": {
        "retrieval": {
          "score": 69,
          "band": "Partly legible",
          "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, 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": "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": 100,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "33 of 59 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, 14 H2, 19 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1900 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 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": 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": 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, 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 1900 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": 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 (Wells Fargo Bank – Branch & Online Banking Services), 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": "Goldman Sachs",
      "domain": "goldmansachs.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Akamai"
    },
    {
      "name": "Morgan Stanley",
      "domain": "morganstanley.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "U.S. Bancorp",
      "domain": "usbank.com",
      "ok": true,
      "finalUrl": "https://www.usbank.com/index.html",
      "offDomain": "usbank.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 51,
        "execution": 66,
        "representation": 10,
        "composite": 42
      },
      "detail": {
        "retrieval": {
          "score": 51,
          "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": "20 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": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 13 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 1700 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 65 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": "95% 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": 100,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (199,999 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": "1 image missing alt text"
            }
          ],
          "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, 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 1700 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": 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": "PNC Financial Services",
      "domain": "pnc.com",
      "ok": true,
      "finalUrl": "https://www.pnc.com/en/personal-banking.html",
      "offDomain": "pnc.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 46,
        "execution": 57,
        "representation": 10,
        "composite": 38
      },
      "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": "38 of 57 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, 15 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 1700 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 154 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "fail",
                  "weight": 1,
                  "detail": "52% of 29 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 (3)"
            },
            {
              "sev": "error",
              "label": "3 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "14 images missing alt text"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 57,
          "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, PerplexityBot timeout, ClaudeBot timeout, 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, 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": 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 1700 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": "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": false,
        "consistent": null,
        "note": "browser-ua-unreadable"
      },
      "flags": []
    },
    {
      "name": "Truist Financial",
      "domain": "truist.com",
      "ok": true,
      "finalUrl": "https://www.truist.com/",
      "offDomain": "truist.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 65,
        "execution": 69,
        "representation": 13,
        "composite": 49
      },
      "detail": {
        "retrieval": {
          "score": 65,
          "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": 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": 100,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "62 of 102 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, 6 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 4800 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 64 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 34 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": 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, 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 4800 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": "47 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": "Capital One",
      "domain": "capitalone.com",
      "ok": true,
      "finalUrl": "https://www.capitalone.com/",
      "offDomain": "capitalone.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 73,
        "execution": 83,
        "representation": 58,
        "composite": 71
      },
      "detail": {
        "retrieval": {
          "score": 73,
          "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": "11 distinct external profiles linked via sameAs (12 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": "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": 83,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "34 of 61 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, 12 H2, 19 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 821 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 74 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": 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, 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": "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 821 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": 58,
          "band": "Partly resolved",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 100,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity declared (Capital One) with a description and descriptive depth.",
                  "rec": null
                },
                {
                  "label": "Identity consistency",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across schema, title and og:site_name, with a legal identifier present.",
                  "rec": null
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 60,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "2 confirmed and 0 unverified authoritative home(s) (of 6 declared; the rest did not resolve): twitter.com, linkedin.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": 5,
              "confirmed": 2,
              "dead": 0,
              "links": [
                {
                  "host": "twitter.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "twitter.com",
                "linkedin.com"
              ],
              "confirmedHosts": [
                "twitter.com",
                "linkedin.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Charles Schwab",
      "domain": "schwab.com",
      "ok": true,
      "finalUrl": "https://www.schwab.com/",
      "offDomain": "schwab.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 18,
        "execution": 34,
        "representation": 15,
        "composite": 22
      },
      "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": "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": "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": 35,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 28 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 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": "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": 67,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (497 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, no viewport, lang set.",
                  "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": "1 insecure HTTP resource on a secure page"
            },
            {
              "sev": "warning",
              "label": "Missing meta description"
            },
            {
              "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, 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 (~28 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": "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"
            },
            {
              "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": 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": "American Express",
      "domain": "americanexpress.com",
      "ok": true,
      "finalUrl": "https://www.americanexpress.com/",
      "offDomain": "americanexpress.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 30,
        "execution": 53,
        "representation": 8,
        "composite": 30
      },
      "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": 0,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "1 of 5 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": 85,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 312 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 146 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": 96,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (642 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": 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, 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, 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 312 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)"
            },
            {
              "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": "BNY",
      "domain": "bny.com",
      "ok": true,
      "finalUrl": "https://www.bny.com/corporate/global/en.html",
      "offDomain": "bny.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 63,
        "execution": 62,
        "representation": 28,
        "composite": 51
      },
      "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": 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": "7 of 13 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, 7 H2, 4 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "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 31 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 125 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": 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": "5 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, 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 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": "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": 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 (BNY), 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": "State Street",
      "domain": "statestreet.com",
      "ok": true,
      "finalUrl": "https://www.statestreet.com/us/en",
      "offDomain": "statestreet.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 43,
        "execution": 62,
        "representation": 10,
        "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": "22 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, 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 783 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": "partial",
                  "weight": 1,
                  "detail": "Meta description is 11 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 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": 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 (2)"
            }
          ],
          "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, 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 783 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": "Ally Financial",
      "domain": "ally.com",
      "ok": true,
      "finalUrl": "https://www.ally.com/",
      "offDomain": "ally.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 65,
        "execution": 63,
        "representation": 41,
        "composite": 56
      },
      "detail": {
        "retrieval": {
          "score": 65,
          "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": "6 distinct external profiles linked via sameAs (13 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": "36 of 47 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, 16 H2, 4 H3.",
                  "rec": null
                }
              ]
            },
            {
              "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 44 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": "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": 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": "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, 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 1400 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": 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 (Ally Financial), 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": "2 confirmed and 0 unverified authoritative home(s) (of 5 declared; the rest did not resolve): x.com, linkedin.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": 5,
              "confirmed": 2,
              "dead": 0,
              "links": [
                {
                  "host": "x.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "x.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "x.com",
                "linkedin.com"
              ],
              "confirmedHosts": [
                "x.com",
                "linkedin.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Discover Financial Services",
      "domain": "discover.com",
      "ok": true,
      "finalUrl": "https://www.discover.com/",
      "offDomain": "discover.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 63,
        "execution": 89,
        "representation": 58,
        "composite": 70
      },
      "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": "6 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": "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": "18 of 29 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, 10 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 1100 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": "pass",
                  "weight": 1,
                  "detail": "Meta description is 125 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "82% 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": 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": "5 images 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, 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 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": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 58,
          "band": "Partly resolved",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Discover), 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": "4 confirmed and 0 unverified authoritative home(s) (of 6 declared; the rest did not resolve): en.wikipedia.org, wikidata.org, twitter.com, linkedin.com.",
                  "rec": null
                },
                {
                  "label": "Spans registry and profile",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Identity spans a confirmed registry (en.wikipedia.org, wikidata.org) and a profile source.",
                  "rec": null
                }
              ]
            },
            {
              "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": 5,
              "confirmed": 4,
              "dead": 0,
              "links": [
                {
                  "host": "en.wikipedia.org",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "wikidata.org",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "twitter.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                }
              ],
              "scoringHosts": [
                "en.wikipedia.org",
                "wikidata.org",
                "twitter.com",
                "linkedin.com"
              ],
              "confirmedHosts": [
                "en.wikipedia.org",
                "wikidata.org",
                "twitter.com",
                "linkedin.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "BlackRock",
      "domain": "blackrock.com",
      "ok": true,
      "finalUrl": "https://www.blackrock.com/us/individual",
      "offDomain": "blackrock.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 75,
        "execution": 85,
        "representation": 60,
        "composite": 73
      },
      "detail": {
        "retrieval": {
          "score": 75,
          "band": "Well positioned",
          "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, Person.",
                  "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": "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": "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": "pass",
                  "weight": 0.5,
                  "detail": "Reputation is verifiable through a linked review profile (sameAs).",
                  "rec": null
                }
              ]
            },
            {
              "key": "schema",
              "label": "Structured Data Depth",
              "weight": 0.2,
              "score": 64,
              "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": "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": "28 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, 4 H2, 5 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 2300 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 58 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 146 characters.",
                  "rec": null
                },
                {
                  "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": 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": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 85,
          "band": "Agent-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, PerplexityBot 403, 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, 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": 100,
              "checks": [
                {
                  "label": "Machine-readable action",
                  "status": "pass",
                  "weight": 2.5,
                  "detail": "A consequential action is described in schema.",
                  "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": "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 2300 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, ClaudeBot)"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 60,
          "band": "Partly resolved",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (BlackRock), 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 0 unverified authoritative home(s) (of 6 declared; the rest did not resolve): en.wikipedia.org, twitter.com.",
                  "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": 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": 5,
              "confirmed": 2,
              "dead": 0,
              "links": [
                {
                  "host": "en.wikipedia.org",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "twitter.com",
                  "status": 200,
                  "state": "confirmed"
                }
              ],
              "scoringHosts": [
                "en.wikipedia.org",
                "twitter.com"
              ],
              "confirmedHosts": [
                "en.wikipedia.org",
                "twitter.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Vanguard",
      "domain": "vanguard.com",
      "ok": true,
      "finalUrl": "https://investor.vanguard.com/corporate-portal",
      "offDomain": "investor.vanguard.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 35,
        "execution": 65,
        "representation": 10,
        "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": "2 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": 85,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 481 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 59 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 126 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": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (1,914 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": "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": 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, 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 481 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": 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": "Fidelity Investments",
      "domain": "fidelity.com",
      "ok": true,
      "finalUrl": "https://www.fidelity.com/",
      "offDomain": "fidelity.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 73,
        "execution": 89,
        "representation": 66,
        "composite": 76
      },
      "detail": {
        "retrieval": {
          "score": 73,
          "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": "8 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": 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": 83,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "3 of 5 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": "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, 8 H2, 5 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 80,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1000 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 128 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 318 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 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": "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": "Title likely truncated in results (over 65 characters)"
            },
            {
              "sev": "warning",
              "label": "Meta description over 180 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, 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": "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 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": "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": 66,
          "band": "Partly resolved",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 79,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity declared (Fidelity Investments) 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": "3 confirmed and 0 unverified authoritative home(s) (of 7 declared; the rest did not resolve): linkedin.com, twitter.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": 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": "10 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": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 5,
              "reachable": 5,
              "confirmed": 3,
              "dead": 0,
              "links": [
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "twitter.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "en.wikipedia.org",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "linkedin.com",
                "twitter.com",
                "en.wikipedia.org"
              ],
              "confirmedHosts": [
                "linkedin.com",
                "twitter.com",
                "en.wikipedia.org"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": true
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": [
        "tdmrep-unmeasured"
      ]
    },
    {
      "name": "T. Rowe Price",
      "domain": "troweprice.com",
      "ok": true,
      "finalUrl": "https://www.troweprice.com/en/us",
      "offDomain": "troweprice.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 57,
        "execution": 62,
        "representation": 28,
        "composite": 49
      },
      "detail": {
        "retrieval": {
          "score": 57,
          "band": "Partly legible",
          "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": 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": "26 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": "partial",
                  "weight": 1.5,
                  "detail": "2 H1, 17 H2, 27 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 1400 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 106 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "fail",
                  "weight": 1,
                  "detail": "13% of 24 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": "Multiple H1 headings (2)"
            },
            {
              "sev": "warning",
              "label": "21 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, 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 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": 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 (T. Rowe Price), 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": "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": "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": "Franklin Templeton",
      "domain": "franklintempleton.com",
      "ok": false,
      "reason": "UNREADABLE (no content / client-side rendered)",
      "wafVendor": ""
    },
    {
      "name": "Invesco",
      "domain": "invesco.com",
      "ok": true,
      "finalUrl": "https://www.invesco.com/us/en/country-splash.html",
      "offDomain": "invesco.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 22,
        "execution": 68,
        "representation": 8,
        "composite": 33
      },
      "detail": {
        "retrieval": {
          "score": 22,
          "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 6 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, 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 509 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": "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 2 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": "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": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "error",
              "label": "Page is set to noindex (excluded from search and AI)"
            },
            {
              "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, 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 509 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 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": "Ameriprise Financial",
      "domain": "ameriprise.com",
      "ok": true,
      "finalUrl": "https://www.ameriprise.com/",
      "offDomain": "ameriprise.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 55,
        "execution": 86,
        "representation": 34,
        "composite": 58
      },
      "detail": {
        "retrieval": {
          "score": 55,
          "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": "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": 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": "pass",
                  "weight": 1.5,
                  "detail": "11 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": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 1 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 641 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 116 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": 91,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (13,763 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": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "warning",
              "label": "Title likely truncated in results (over 65 characters)"
            }
          ],
          "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, 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 641 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": 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 (Ameriprise Financial), 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": "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": 3,
              "confirmed": 1,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "linkedin.com"
              ],
              "confirmedHosts": [
                "linkedin.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Raymond James",
      "domain": "raymondjames.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Northern Trust",
      "domain": "northerntrust.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Visa",
      "domain": "visa.com",
      "ok": true,
      "finalUrl": "https://www.visa.com/en-us",
      "offDomain": "visa.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 39,
        "execution": 52,
        "representation": 10,
        "composite": 34
      },
      "detail": {
        "retrieval": {
          "score": 39,
          "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 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": "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": 70,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 200 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 60 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 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": 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": "Thin content (under 250 words)"
            },
            {
              "sev": "warning",
              "label": "No sitemap discoverable"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 52,
          "band": "Major friction",
          "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, 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": "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 200 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": "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": "Mastercard",
      "domain": "mastercard.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Akamai"
    },
    {
      "name": "PayPal",
      "domain": "paypal.com",
      "ok": true,
      "finalUrl": "https://www.paypal.com/us/home",
      "offDomain": "paypal.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 68,
        "execution": 65,
        "representation": 28,
        "composite": 54
      },
      "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": "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": 64,
              "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": "pass",
                  "weight": 1.5,
                  "detail": "Rich types present: Article.",
                  "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": "12 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": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 14 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 1700 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 117 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 2 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 (40,049 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": 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, 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 1700 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": 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 (PayPal), 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": "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": "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": "Block",
      "domain": "block.xyz",
      "ok": true,
      "finalUrl": "https://block.xyz/",
      "offDomain": "block.xyz",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 33,
        "execution": 54,
        "representation": 8,
        "composite": 32
      },
      "detail": {
        "retrieval": {
          "score": 33,
          "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": 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": 60,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 83 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 5 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 136 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": 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": "Thin content (under 250 words)"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 54,
          "band": "Major friction",
          "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, 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": "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": "fail",
                  "weight": 1.5,
                  "detail": "Very little static content (~83 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"
            }
          ],
          "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": "Stripe",
      "domain": "stripe.com",
      "ok": true,
      "finalUrl": "https://stripe.com/",
      "offDomain": "stripe.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 66,
        "execution": 66,
        "representation": 53,
        "composite": 62
      },
      "detail": {
        "retrieval": {
          "score": 66,
          "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, Person.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "11 distinct external profiles linked via sameAs (12 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": "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": "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": "34 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": "2 H1, 6 H2, 25 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 2000 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 149 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": 96,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (64,985 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)"
            }
          ],
          "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, 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 2000 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": 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 (Stripe), 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": "2 confirmed and 0 unverified authoritative home(s) (of 10 declared; the rest did not resolve): twitter.com, linkedin.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": 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": "31 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": 5,
              "confirmed": 2,
              "dead": 0,
              "links": [
                {
                  "host": "twitter.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "twitter.com",
                "linkedin.com"
              ],
              "confirmedHosts": [
                "twitter.com",
                "linkedin.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Fiserv",
      "domain": "fiserv.com",
      "ok": true,
      "finalUrl": "https://www.fiserv.com/",
      "offDomain": "fiserv.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 63,
        "execution": 68,
        "representation": 43,
        "composite": 58
      },
      "detail": {
        "retrieval": {
          "score": 63,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 56,
              "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": "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": "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": "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": "20 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": "partial",
                  "weight": 1.5,
                  "detail": "3 H1, 1 H2, 21 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 549 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 64 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 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": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (3)"
            },
            {
              "sev": "error",
              "label": "2 insecure HTTP resources 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, 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 549 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": 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 (Fiserv), 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": "2 confirmed and 0 unverified authoritative home(s) (of 4 declared; the rest did not resolve): linkedin.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": 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": "x.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "linkedin.com",
                "x.com"
              ],
              "confirmedHosts": [
                "linkedin.com",
                "x.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "FIS",
      "domain": "fisglobal.com",
      "ok": true,
      "finalUrl": "https://www.fisglobal.com/",
      "offDomain": "fisglobal.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 66,
        "execution": 74,
        "representation": 43,
        "composite": 61
      },
      "detail": {
        "retrieval": {
          "score": 66,
          "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": "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": "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": "23 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, 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": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 993 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": "pass",
                  "weight": 1,
                  "detail": "Meta description is 113 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": 100,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (4,781 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": "Multiple H1 headings (2)"
            }
          ],
          "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 timeout); agent results inconclusive. Probed: OAI-SearchBot 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, 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": "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 993 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": 43,
          "band": "Ambiguous identity",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 79,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity declared (FIS Global) 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": "1 confirmed and 0 unverified authoritative home(s) (of 4 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": "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": 4,
              "reachable": 3,
              "confirmed": 1,
              "dead": 1,
              "links": [
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "twitter.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "youtube.com",
                  "status": 404,
                  "state": "dead"
                }
              ],
              "scoringHosts": [
                "twitter.com"
              ],
              "confirmedHosts": [
                "twitter.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": false,
        "consistent": null,
        "note": "browser-ua-unreadable"
      },
      "flags": []
    },
    {
      "name": "Coinbase",
      "domain": "coinbase.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Robinhood",
      "domain": "robinhood.com",
      "ok": true,
      "finalUrl": "https://robinhood.com/us/en/",
      "offDomain": "robinhood.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 44,
        "execution": 62,
        "representation": 20,
        "composite": 42
      },
      "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": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "28 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": "partial",
                  "weight": 1.5,
                  "detail": "8 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": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1700 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 61 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 171 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "86% 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": 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 (8)"
            },
            {
              "sev": "warning",
              "label": "2 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, 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 1700 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": "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": 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": "SoFi Technologies",
      "domain": "sofi.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "S&P Global",
      "domain": "spglobal.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Akamai"
    },
    {
      "name": "Moody's",
      "domain": "moodys.com",
      "ok": true,
      "finalUrl": "https://www.moodys.com/",
      "offDomain": "moodys.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 51,
        "execution": 66,
        "representation": 44,
        "composite": 54
      },
      "detail": {
        "retrieval": {
          "score": 51,
          "band": "Significant gaps",
          "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": "3 distinct external profiles linked via sameAs.",
                  "rec": null
                },
                {
                  "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": "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": "pass",
                  "weight": 1.5,
                  "detail": "32 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": "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": 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 75 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 221 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 30 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": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (2,773 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": "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": "warning",
              "label": "1 image missing alt text"
            },
            {
              "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": 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, 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 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": 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": 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 (MOODY'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 \"MOODY'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": "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": 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": "18 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": [],
          "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": "instagram.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "linkedin.com"
              ],
              "confirmedHosts": [
                "linkedin.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Nasdaq",
      "domain": "nasdaq.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "CME Group",
      "domain": "cmegroup.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Intercontinental Exchange",
      "domain": "ice.com",
      "ok": true,
      "finalUrl": "https://www.ice.com/index",
      "offDomain": "ice.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": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "9 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": "partial",
                  "weight": 1.5,
                  "detail": "4 H1, 5 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": 55,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 379 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 3 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": "92% 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": 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": "Multiple H1 headings (4)"
            },
            {
              "sev": "warning",
              "label": "1 image missing alt text"
            },
            {
              "sev": "warning",
              "label": "Missing meta description"
            },
            {
              "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, 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 379 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": "MSCI",
      "domain": "msci.com",
      "ok": true,
      "finalUrl": "https://www.msci.com/",
      "offDomain": "msci.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": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "14 of 23 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, 1 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 877 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 47 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 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": 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": "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": "Multiple H1 headings (5)"
            },
            {
              "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, 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 877 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": "London Stock Exchange Group",
      "domain": "lseg.com",
      "ok": true,
      "finalUrl": "https://www.lseg.com/en",
      "offDomain": "lseg.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 57,
        "execution": 68,
        "representation": 8,
        "composite": 44
      },
      "detail": {
        "retrieval": {
          "score": 57,
          "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": 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": "11 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, 5 H2, 15 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 581 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 128 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "86% 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": 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": "2 images 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, 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 581 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": "Deutsche Boerse",
      "domain": "deutsche-boerse.com",
      "ok": true,
      "finalUrl": "https://www.deutsche-boerse.com/dbg-de/",
      "offDomain": "deutsche-boerse.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 42,
        "execution": 69,
        "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": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "23 of 217 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": "6 H1, 11 H2, 26 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 1300 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 163 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 54 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 (6)"
            },
            {
              "sev": "error",
              "label": "3 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, 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": "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 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": [
            {
              "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": "Cboe Global Markets",
      "domain": "cboe.com",
      "ok": true,
      "finalUrl": "https://www.cboe.com/",
      "offDomain": "cboe.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 46,
        "execution": 56,
        "representation": 10,
        "composite": 37
      },
      "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": "10 of 16 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, 10 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": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 720 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": "partial",
                  "weight": 1,
                  "detail": "Meta description is 193 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 13 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": "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": "Multiple H1 headings (6)"
            },
            {
              "sev": "error",
              "label": "2 insecure HTTP resources on a secure page"
            },
            {
              "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, 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 720 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": "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 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": "Berkshire Hathaway",
      "domain": "berkshirehathaway.com",
      "ok": true,
      "finalUrl": "https://berkshirehathaway.com/",
      "offDomain": "berkshirehathaway.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 21,
        "execution": 52,
        "representation": 8,
        "composite": 27
      },
      "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": 17,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "3 of 5 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, 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 184 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": "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": 52,
              "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": "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": "error",
              "label": "3 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "Missing meta description"
            },
            {
              "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": 52,
          "band": "Major friction",
          "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, 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 184 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": "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": "MetLife",
      "domain": "metlife.com",
      "ok": true,
      "finalUrl": "https://www.metlife.com/",
      "offDomain": "metlife.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 58,
        "execution": 68,
        "representation": 13,
        "composite": 46
      },
      "detail": {
        "retrieval": {
          "score": 58,
          "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": 36,
              "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": "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": "15 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": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 2 H2, 8 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 4000 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 171 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": 91,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (2,195 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": 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, 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 4000 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": 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 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": "Prudential Financial",
      "domain": "prudential.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "AIG",
      "domain": "aig.com",
      "ok": true,
      "finalUrl": "https://www.aig.com/home",
      "offDomain": "aig.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 71,
        "execution": 63,
        "representation": 60,
        "composite": 65
      },
      "detail": {
        "retrieval": {
          "score": 71,
          "band": "Partly legible",
          "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": "20 distinct external profiles linked via sameAs (26 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": "pass",
                  "weight": 1.5,
                  "detail": "Your entity carries some descriptive depth.",
                  "rec": null
                },
                {
                  "label": "Social proof schema",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "Reputation is verifiable through a linked review profile (sameAs).",
                  "rec": null
                }
              ]
            },
            {
              "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": "63 of 125 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, 43 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 4000 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 160 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "93% 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": 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": "2 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, 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 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 4000 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": 60,
          "band": "Partly resolved",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 79,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity declared (AIG) 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": "1 confirmed and 1 unverified authoritative home(s) (of 7 declared; the rest did not resolve): linkedin.com, crunchbase.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": 80,
              "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": "pass",
                  "weight": 0.5,
                  "detail": "27 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": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 5,
              "reachable": 4,
              "confirmed": 1,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "crunchbase.com",
                  "status": 403,
                  "state": "unverified"
                }
              ],
              "scoringHosts": [
                "linkedin.com",
                "crunchbase.com"
              ],
              "confirmedHosts": [
                "linkedin.com"
              ],
              "unverifiedHosts": [
                "crunchbase.com"
              ]
            }
          },
          "tdmUnmeasured": true
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": [
        "tdmrep-unmeasured"
      ]
    },
    {
      "name": "Chubb",
      "domain": "chubb.com",
      "ok": true,
      "finalUrl": "https://www.chubb.com/us-en/",
      "offDomain": "chubb.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 46,
        "execution": 68,
        "representation": 13,
        "composite": 42
      },
      "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 18 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, 7 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 80,
              "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 46 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 147 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "fail",
                  "weight": 1,
                  "detail": "4% 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": "22 images 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, 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": 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": "Travelers",
      "domain": "travelers.com",
      "ok": true,
      "finalUrl": "https://www.travelers.com/",
      "offDomain": "travelers.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 61,
        "execution": 63,
        "representation": 23,
        "composite": 49
      },
      "detail": {
        "retrieval": {
          "score": 61,
          "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": 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": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "27 of 31 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, 23 H2, 12 H3.",
                  "rec": null
                }
              ]
            },
            {
              "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 66 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 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": 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)"
            }
          ],
          "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, 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": "16 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 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": [
            {
              "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 (Travelers), 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": "Allstate",
      "domain": "allstate.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Progressive",
      "domain": "progressive.com",
      "ok": true,
      "finalUrl": "https://www.progressive.com/",
      "offDomain": "progressive.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 49,
        "execution": 63,
        "representation": 13,
        "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": 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": "67 of 102 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, 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 2900 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": "pass",
                  "weight": 1,
                  "detail": "Meta description is 134 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "80% 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": "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": "4 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, 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": "6 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 2900 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": "18 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": "Aflac",
      "domain": "aflac.com",
      "ok": true,
      "finalUrl": "https://www.aflac.com/",
      "offDomain": "aflac.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 65,
        "execution": 71,
        "representation": 23,
        "composite": 53
      },
      "detail": {
        "retrieval": {
          "score": 65,
          "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": 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": 83,
              "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": "pass",
                  "weight": 1.5,
                  "detail": "3 question-led heading(s) or Q&A found.",
                  "rec": null
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "4 H1, 12 H2, 28 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 2300 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 107 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "95% 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": 100,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (5,791 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": "Multiple H1 headings (4)"
            },
            {
              "sev": "error",
              "label": "1 insecure HTTP resource on a secure page"
            },
            {
              "sev": "warning",
              "label": "1 image missing alt text"
            }
          ],
          "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 403); agent results inconclusive. Probed: OAI-SearchBot 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, 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": "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 2300 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": 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 (Aflac), 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": false,
        "consistent": null,
        "note": "browser-ua-unreadable"
      },
      "flags": []
    },
    {
      "name": "Marsh McLennan",
      "domain": "marshmclennan.com",
      "ok": true,
      "finalUrl": "https://www.marsh.com/en/home.html",
      "offDomain": "marsh.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 55,
        "execution": 62,
        "representation": 10,
        "composite": 42
      },
      "detail": {
        "retrieval": {
          "score": 55,
          "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": "18 of 23 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, 7 H2, 9 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 816 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 167 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% 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": 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, 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 816 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 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": "Aon",
      "domain": "aon.com",
      "ok": true,
      "finalUrl": "https://www.aon.com/en/",
      "offDomain": "aon.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 50,
        "execution": 62,
        "representation": 13,
        "composite": 42
      },
      "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": 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": "30 of 64 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, 11 H2, 7 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 2100 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": "partial",
                  "weight": 1,
                  "detail": "Meta description is 43 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 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": 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": "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, 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": "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 2100 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": 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": "Allianz",
      "domain": "allianz.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "AXA",
      "domain": "axa.com",
      "ok": true,
      "finalUrl": "https://www.axa.com/",
      "offDomain": "axa.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": 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": "9 of 51 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, 16 H2, 15 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 855 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": "partial",
                  "weight": 1,
                  "detail": "Meta description is 359 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": "58% of 26 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": "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": "No H1 heading on the page"
            },
            {
              "sev": "warning",
              "label": "11 images missing alt text"
            },
            {
              "sev": "warning",
              "label": "Meta description over 180 characters"
            },
            {
              "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, 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 855 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": "Zurich Insurance Group",
      "domain": "zurich.com",
      "ok": true,
      "finalUrl": "https://www.zurich.com/",
      "offDomain": "zurich.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 58,
        "execution": 66,
        "representation": 10,
        "composite": 45
      },
      "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": 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 22 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, 3 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": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 696 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 192 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 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": 91,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (11,453 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": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (3)"
            },
            {
              "sev": "error",
              "label": "5 insecure HTTP resources on a secure page"
            },
            {
              "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, 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 696 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": 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": "Munich Re",
      "domain": "munichre.com",
      "ok": true,
      "finalUrl": "https://www.munichre.com/en.html",
      "offDomain": "munichre.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 44,
        "execution": 50,
        "representation": 10,
        "composite": 35
      },
      "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": 50,
              "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": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 6 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 500 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 16 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 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": 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": "1 insecure HTTP resource on a secure page"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 50,
          "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, PerplexityBot 403, 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, 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 500 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 (PerplexityBot, ClaudeBot)"
            },
            {
              "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": "Swiss Re",
      "domain": "swissre.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Generali",
      "domain": "generali.com",
      "ok": true,
      "finalUrl": "https://www.generali.com/",
      "offDomain": "generali.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 45,
        "execution": 71,
        "representation": 20,
        "composite": 45
      },
      "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": "18 of 23 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, 43 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 70,
              "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 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": "partial",
                  "weight": 1,
                  "detail": "Meta description is 233 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": "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": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (12,628 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": [
            {
              "sev": "warning",
              "label": "7 images missing alt text"
            },
            {
              "sev": "warning",
              "label": "Meta description over 180 characters"
            }
          ],
          "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, 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 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": 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": "20 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": "HSBC",
      "domain": "hsbc.com",
      "ok": true,
      "finalUrl": "https://www.hsbc.com/",
      "offDomain": "hsbc.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 62,
        "execution": 68,
        "representation": 10,
        "composite": 47
      },
      "detail": {
        "retrieval": {
          "score": 62,
          "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": 68,
              "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": "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": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "58 of 107 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, 18 H2, 2 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "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 48 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": "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": 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": "2 insecure HTTP resources 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, 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 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": [
            {
              "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": "Barclays",
      "domain": "home.barclays",
      "ok": true,
      "finalUrl": "https://home.barclays/",
      "offDomain": "home.barclays",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 52,
        "execution": 30,
        "representation": 13,
        "composite": 32
      },
      "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": 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": "19 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, 14 H2, 27 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 43 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": "94% 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, 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": 30,
          "band": "Closed to agents",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 25,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "fail",
                  "weight": 3,
                  "detail": "Every probed AI agent is refused at the edge while a browser gets 200 (OAI-SearchBot 403, PerplexityBot 403, 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, 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 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": "error",
              "label": "AI agents are refused at the edge (CDN/WAF), not just in robots.txt"
            },
            {
              "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": "Lloyds Banking Group",
      "domain": "lloydsbankinggroup.com",
      "ok": true,
      "finalUrl": "https://www.lloydsbankinggroup.com/",
      "offDomain": "lloydsbankinggroup.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 24,
        "execution": 34,
        "representation": 15,
        "composite": 24
      },
      "detail": {
        "retrieval": {
          "score": 24,
          "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": "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": "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 46 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 28 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": 67,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (24,064 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, no viewport, lang set.",
                  "rec": "Serve over HTTPS, add a responsive viewport meta tag, and set an html lang attribute."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "Missing meta description"
            },
            {
              "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, 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 (~46 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": 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": "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": 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": "NatWest Group",
      "domain": "natwestgroup.com",
      "ok": true,
      "finalUrl": "https://www.natwestgroup.com/",
      "offDomain": "natwestgroup.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 71,
        "execution": 69,
        "representation": 45,
        "composite": 62
      },
      "detail": {
        "retrieval": {
          "score": 71,
          "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": "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": "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": 83,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "39 of 42 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, 9 H2, 10 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 80,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1700 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": "pass",
                  "weight": 1,
                  "detail": "Meta description is 142 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "partial",
                  "weight": 1,
                  "detail": "79% of 39 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": 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": "8 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, 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 1700 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": 45,
          "band": "Ambiguous identity",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 79,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity declared (NatWest Group) 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": "1 confirmed and 0 unverified authoritative home(s) (of 4 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": 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 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": 4,
              "reachable": 2,
              "confirmed": 1,
              "dead": 2,
              "links": [
                {
                  "host": "linkedin.com",
                  "status": 404,
                  "state": "dead"
                },
                {
                  "host": "twitter.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "youtube.com",
                  "status": 404,
                  "state": "dead"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "twitter.com"
              ],
              "confirmedHosts": [
                "twitter.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": true
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": [
        "tdmrep-unmeasured"
      ]
    },
    {
      "name": "Standard Chartered",
      "domain": "sc.com",
      "ok": false,
      "reason": "UNREADABLE (no content / client-side rendered)",
      "wafVendor": ""
    },
    {
      "name": "Banco Santander",
      "domain": "santander.com",
      "ok": true,
      "finalUrl": "https://www.santander.com/en/home",
      "offDomain": "santander.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": 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": "10 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": "fail",
                  "weight": 1.5,
                  "detail": "0 H1, 15 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 1300 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 108 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "fail",
                  "weight": 1,
                  "detail": "25% of 48 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": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "warning",
              "label": "36 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, 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 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": 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": "15 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": "BNP Paribas",
      "domain": "bnpparibas.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Akamai"
    },
    {
      "name": "Deutsche Bank",
      "domain": "db.com",
      "ok": true,
      "finalUrl": "https://www.db.com/",
      "offDomain": "db.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 54,
        "execution": 62,
        "representation": 8,
        "composite": 41
      },
      "detail": {
        "retrieval": {
          "score": 54,
          "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": 83,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "9 of 16 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, 23 H2, 7 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 521 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": "pass",
                  "weight": 1,
                  "detail": "Meta description is 127 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": 96,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (1,283 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": 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, 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": "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": 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": "UBS",
      "domain": "ubs.com",
      "ok": true,
      "finalUrl": "https://www.ubs.com/us/en.html",
      "offDomain": "ubs.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 63,
        "execution": 53,
        "representation": 20,
        "composite": 45
      },
      "detail": {
        "retrieval": {
          "score": 63,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 25,
              "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": "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": "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": "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": "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": "11 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": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 14 H2, 42 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1000 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 85 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 113 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "90% 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": 87,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (99,030 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": "warning",
              "label": "2 images missing alt text"
            },
            {
              "sev": "warning",
              "label": "Title likely truncated in results (over 65 characters)"
            }
          ],
          "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": "Could not establish a browser baseline (control returned 403); agent results inconclusive. Probed: OAI-SearchBot 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, 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 1000 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": 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": 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": "10 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": false,
        "consistent": null,
        "note": "browser-ua-unreadable"
      },
      "flags": []
    },
    {
      "name": "Credit Agricole",
      "domain": "credit-agricole.com",
      "ok": true,
      "finalUrl": "https://www.credit-agricole.com/",
      "offDomain": "credit-agricole.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 68,
        "execution": 68,
        "representation": 21,
        "composite": 52
      },
      "detail": {
        "retrieval": {
          "score": 68,
          "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": 79,
              "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": "pass",
                  "weight": 1.5,
                  "detail": "Rich types present: Article.",
                  "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": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "14 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": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 16 H2, 12 H3.",
                  "rec": null
                }
              ]
            },
            {
              "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 66 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 127 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": 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": "3 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "Title likely truncated in results (over 65 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, 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": 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": 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": "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": "Societe Generale",
      "domain": "societegenerale.com",
      "ok": true,
      "finalUrl": "https://www.societegenerale.com/fr",
      "offDomain": "societegenerale.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 52,
        "execution": 63,
        "representation": 25,
        "composite": 47
      },
      "detail": {
        "retrieval": {
          "score": 52,
          "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: 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": 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": 17,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "4 of 12 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, 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 814 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 33 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 277 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 13 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": "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": "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": "Meta description over 180 characters"
            },
            {
              "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, 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": 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 814 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": 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 (Société Générale), 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": "5 authoritative link(s) declared, but none resolved; dead links are not counted.",
                  "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": 5,
              "reachable": 5,
              "confirmed": 0,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "twitter.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [],
              "confirmedHosts": [],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": [
        "sameas-unverified"
      ]
    },
    {
      "name": "ING Group",
      "domain": "ing.com",
      "ok": true,
      "finalUrl": "https://ing.com/",
      "offDomain": "ing.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 46,
        "execution": 62,
        "representation": 10,
        "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": "38 of 44 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, 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": 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 32 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 129 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 50 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": "/sitemap.xml could not be read on this scan (a transient network fault or rate-limit), so sitemap presence is unmeasured; not scored as missing.",
                  "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": "error",
              "label": "1 insecure HTTP resource on a secure page"
            },
            {
              "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, 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 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": 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": "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": "BBVA",
      "domain": "bbva.com",
      "ok": true,
      "finalUrl": "https://www.bbva.com/en/",
      "offDomain": "bbva.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 77,
        "execution": 82,
        "representation": 58,
        "composite": 72
      },
      "detail": {
        "retrieval": {
          "score": 77,
          "band": "Well positioned",
          "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": "7 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": 57,
              "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": "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": 83,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "4 of 42 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": "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, 18 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 1100 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 134 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 3 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": 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, 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": "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 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": [],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "representation": {
          "score": 58,
          "band": "Partly resolved",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (BBVA), 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): twitter.com, linkedin.com, es.wikipedia.org.",
                  "rec": null
                },
                {
                  "label": "Spans registry and profile",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Identity spans a confirmed registry (es.wikipedia.org) and a profile source.",
                  "rec": null
                }
              ]
            },
            {
              "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": "14 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": 5,
              "confirmed": 3,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "twitter.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "es.wikipedia.org",
                  "status": 200,
                  "state": "confirmed"
                }
              ],
              "scoringHosts": [
                "twitter.com",
                "linkedin.com",
                "es.wikipedia.org"
              ],
              "confirmedHosts": [
                "twitter.com",
                "linkedin.com",
                "es.wikipedia.org"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Nordea",
      "domain": "nordea.com",
      "ok": true,
      "finalUrl": "https://www.nordea.com/en",
      "offDomain": "nordea.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 68,
        "execution": 69,
        "representation": 58,
        "composite": 65
      },
      "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": "8 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": 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": "10 of 23 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, 35 H2, 47 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 2300 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 47 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 216 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 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": "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": "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, 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 2300 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": 58,
          "band": "Partly resolved",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Nordea), 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": "4 confirmed and 0 unverified authoritative home(s) (of 7 declared; the rest did not resolve): wikidata.org, en.wikipedia.org, linkedin.com, x.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": 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": 5,
              "confirmed": 4,
              "dead": 0,
              "links": [
                {
                  "host": "wikidata.org",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "en.wikipedia.org",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "x.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "wikidata.org",
                "en.wikipedia.org",
                "linkedin.com",
                "x.com"
              ],
              "confirmedHosts": [
                "wikidata.org",
                "en.wikipedia.org",
                "linkedin.com",
                "x.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Intesa Sanpaolo",
      "domain": "intesasanpaolo.com",
      "ok": true,
      "finalUrl": "https://www.intesasanpaolo.com/",
      "offDomain": "intesasanpaolo.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 69,
        "execution": 66,
        "representation": 43,
        "composite": 59
      },
      "detail": {
        "retrieval": {
          "score": 69,
          "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: Corporation.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "6 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": 21,
              "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": "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": "45 of 62 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": "partial",
                  "weight": 1.5,
                  "detail": "5 H1, 6 H2, 50 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 2100 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 70 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 189 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": "92% of 145 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 (46,636 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": "Multiple H1 headings (5)"
            },
            {
              "sev": "error",
              "label": "7 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": "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, 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": "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 2100 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": 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 (Intesa Sanpaolo), 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": "2 confirmed and 0 unverified authoritative home(s) (of 6 declared; the rest did not resolve): twitter.com, linkedin.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": 5,
              "reachable": 5,
              "confirmed": 2,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "twitter.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "instagram.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                }
              ],
              "scoringHosts": [
                "twitter.com",
                "linkedin.com"
              ],
              "confirmedHosts": [
                "twitter.com",
                "linkedin.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Royal Bank of Canada",
      "domain": "rbc.com",
      "ok": false,
      "reason": "UNREADABLE (no content / client-side rendered)",
      "wafVendor": ""
    },
    {
      "name": "TD Bank Group",
      "domain": "td.com",
      "ok": true,
      "finalUrl": "https://www.td.com/us/en/personal-banking",
      "offDomain": "td.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 57,
        "execution": 66,
        "representation": 13,
        "composite": 45
      },
      "detail": {
        "retrieval": {
          "score": 57,
          "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": "39 of 147 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, 12 H2, 10 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 3500 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 64 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": "94% 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": 91,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (6,952 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": [
            {
              "sev": "warning",
              "label": "2 images missing alt text"
            }
          ],
          "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, 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 3500 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": 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": "37 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": "Bank of Montreal",
      "domain": "bmo.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Scotiabank",
      "domain": "scotiabank.com",
      "ok": true,
      "finalUrl": "https://www.scotiabank.com/global/en/global-site.html",
      "offDomain": "scotiabank.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 29,
        "execution": 62,
        "representation": 8,
        "composite": 33
      },
      "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": 17,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "1 of 119 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": 65,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 472 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 22 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": "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, 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 472 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": "CIBC",
      "domain": "cibc.com",
      "ok": true,
      "finalUrl": "https://www.cibc.com/en/personal-banking.html",
      "offDomain": "cibc.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 54,
        "execution": 68,
        "representation": 10,
        "composite": 44
      },
      "detail": {
        "retrieval": {
          "score": 54,
          "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": 100,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "34 of 91 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "4 question-led heading(s) or Q&A found.",
                  "rec": null
                },
                {
                  "label": "Heading structure",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 7 H2, 11 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 80,
              "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 46 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 102 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "fail",
                  "weight": 1,
                  "detail": "17% of 53 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, 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 invalid structured-data block"
            },
            {
              "sev": "warning",
              "label": "44 images 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, 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 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": 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": "Commonwealth Bank of Australia",
      "domain": "commbank.com.au",
      "ok": true,
      "finalUrl": "https://www.commbank.com.au/",
      "offDomain": "commbank.com.au",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 50,
        "execution": 65,
        "representation": 10,
        "composite": 42
      },
      "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": 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": "15 of 35 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, 9 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 867 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 64 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 106 characters.",
                  "rec": null
                },
                {
                  "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": 78,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (11,522 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": "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": "1 insecure HTTP resource on a secure page"
            },
            {
              "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, 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 867 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": 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": "Macquarie Group",
      "domain": "macquarie.com",
      "ok": true,
      "finalUrl": "https://www.macquarie.com/us/en.html",
      "offDomain": "macquarie.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 40,
        "execution": 63,
        "representation": 10,
        "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": "9 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": "partial",
                  "weight": 1.5,
                  "detail": "3 H1, 6 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": 80,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 756 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 175 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "fail",
                  "weight": 1,
                  "detail": "57% of 7 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 (3)"
            },
            {
              "sev": "warning",
              "label": "3 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, 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 756 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": "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": "DBS Bank",
      "domain": "dbs.com",
      "ok": true,
      "finalUrl": "https://www.dbs.com/default.page",
      "offDomain": "dbs.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 33,
        "execution": 65,
        "representation": 18,
        "composite": 39
      },
      "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": "3 of 15 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, 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": 80,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 551 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": "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 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": 72,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (1,733 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": "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": "Missing meta description"
            }
          ],
          "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, 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 551 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": "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": "Schroders",
      "domain": "schroders.com",
      "ok": true,
      "finalUrl": "https://www.schroders.com/en/global/individual/",
      "offDomain": "schroders.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 65,
        "execution": 65,
        "representation": 33,
        "composite": 54
      },
      "detail": {
        "retrieval": {
          "score": 65,
          "band": "Partly legible",
          "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": "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": "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": "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": "21 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, 19 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 1200 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 47 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 58 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": "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": "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": "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": 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, 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 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": 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": 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 (Schroders), 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": 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": "M&G",
      "domain": "mandg.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Legal & General",
      "domain": "legalandgeneral.com",
      "ok": true,
      "finalUrl": "https://www.legalandgeneral.com/",
      "offDomain": "legalandgeneral.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 66,
        "execution": 62,
        "representation": 13,
        "composite": 47
      },
      "detail": {
        "retrieval": {
          "score": 66,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 25,
              "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": "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": 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": 100,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "21 of 22 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, 19 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 1200 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 76 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 155 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": "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": "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, 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 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": [
            {
              "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": "Aviva",
      "domain": "aviva.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": ""
    },
    {
      "name": "Phoenix Group",
      "domain": "thephoenixgroup.com",
      "ok": true,
      "finalUrl": "https://www.standardlifeplc.com/",
      "offDomain": "standardlifeplc.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 64,
        "execution": 71,
        "representation": 36,
        "composite": 57
      },
      "detail": {
        "retrieval": {
          "score": 64,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 44,
              "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": "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": "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": "32 of 52 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, 16 H2, 15 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 40 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Meta description is 215 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 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 (76,441 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": "Meta description over 180 characters"
            }
          ],
          "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, 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 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": 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": 36,
          "band": "Ambiguous identity",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 71,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Standard Life plc), 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": "pass",
                  "weight": 1.5,
                  "detail": "Entity name is consistent across schema, title and og:site_name, with a legal identifier present.",
                  "rec": null
                }
              ]
            },
            {
              "key": "disambiguation",
              "label": "Disambiguation",
              "weight": 0.3,
              "score": 0,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "7 sameAs link(s), but none to an authoritative home.",
                  "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": "12 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": "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": "St James's Place",
      "domain": "sjp.co.uk",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Aberdeen Group",
      "domain": "aberdeeninvestments.com",
      "ok": true,
      "finalUrl": "https://www.aberdeeninvestments.com/en-us",
      "offDomain": "aberdeeninvestments.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 56,
        "execution": 58,
        "representation": 23,
        "composite": 46
      },
      "detail": {
        "retrieval": {
          "score": 56,
          "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": 57,
              "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": "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": "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": "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": 70,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 225 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 68 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 126 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": 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": "Heading levels skip from H1 to H3"
            },
            {
              "sev": "warning",
              "label": "Title likely truncated in results (over 65 characters)"
            },
            {
              "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, 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 225 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": 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 (Aberdeen 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": "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": "Hargreaves Lansdown",
      "domain": "hl.co.uk",
      "ok": true,
      "finalUrl": "https://www.hl.co.uk/",
      "offDomain": "hl.co.uk",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 49,
        "execution": 71,
        "representation": 13,
        "composite": 44
      },
      "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": 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": "25 of 33 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, 25 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 58 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 180 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 13 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 (14,385 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)"
            }
          ],
          "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, 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 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": 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": 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": "18 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": "Man Group",
      "domain": "man.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "3i Group",
      "domain": "3i.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Admiral Group",
      "domain": "admiralgroup.co.uk",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Prudential plc",
      "domain": "prudentialplc.com",
      "ok": true,
      "finalUrl": "https://www.prudentialplc.com/en/",
      "offDomain": "prudentialplc.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 42,
        "execution": 62,
        "representation": 13,
        "composite": 39
      },
      "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": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "17 of 51 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, 8 H2, 20 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 1600 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 47 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": "92% 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": 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 (5)"
            },
            {
              "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": 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, 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 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": [
            {
              "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": "Nationwide Building Society",
      "domain": "nationwide.co.uk",
      "ok": true,
      "finalUrl": "https://www.nationwide.co.uk/",
      "offDomain": "nationwide.co.uk",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 59,
        "execution": 63,
        "representation": 48,
        "composite": 57
      },
      "detail": {
        "retrieval": {
          "score": 59,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 36,
              "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": "pass",
                  "weight": 2,
                  "detail": "8 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": "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": "23 of 32 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, 13 H2, 32 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 31 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": "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": 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": "warning",
              "label": "Multiple H1 headings (2)"
            },
            {
              "sev": "warning",
              "label": "1 image 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, 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": "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 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": 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 (Nationwide Building Society), 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": "2 confirmed and 0 unverified authoritative home(s) (of 6 declared; the rest did not resolve): linkedin.com, twitter.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": "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": "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": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 5,
              "reachable": 5,
              "confirmed": 2,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "twitter.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "linkedin.com",
                "twitter.com"
              ],
              "confirmedHosts": [
                "linkedin.com",
                "twitter.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Monzo",
      "domain": "monzo.com",
      "ok": true,
      "finalUrl": "https://monzo.com/",
      "offDomain": "monzo.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 78,
        "execution": 62,
        "representation": 48,
        "composite": 63
      },
      "detail": {
        "retrieval": {
          "score": 78,
          "band": "Well positioned",
          "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": "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": 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": 100,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "45 of 51 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, 21 H2, 51 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 2100 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 113 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 72 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, 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 2100 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": 48,
          "band": "Ambiguous identity",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 79,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity declared (Monzo Bank) 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": "1 confirmed and 0 unverified authoritative home(s) (of 7 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": 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": "26 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": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 5,
              "reachable": 5,
              "confirmed": 1,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "twitter.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "instagram.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "twitter.com"
              ],
              "confirmedHosts": [
                "twitter.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Starling Bank",
      "domain": "starlingbank.com",
      "ok": true,
      "finalUrl": "https://www.starlingbank.com/",
      "offDomain": "starlingbank.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 66,
        "execution": 62,
        "representation": 39,
        "composite": 56
      },
      "detail": {
        "retrieval": {
          "score": 66,
          "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": "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": "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": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "20 of 36 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, 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 854 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 152 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": 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 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": "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, 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 854 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": 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 (Starling Bank), 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 5 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": 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": "12 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 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": 5,
              "reachable": 4,
              "confirmed": 1,
              "dead": 1,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "twitter.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "instagram.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 404,
                  "state": "dead"
                }
              ],
              "scoringHosts": [
                "twitter.com"
              ],
              "confirmedHosts": [
                "twitter.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": true
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": [
        "tdmrep-unmeasured"
      ]
    },
    {
      "name": "KKR",
      "domain": "kkr.com",
      "ok": true,
      "finalUrl": "https://www.kkr.com/",
      "offDomain": "kkr.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 55,
        "execution": 30,
        "representation": 25,
        "composite": 37
      },
      "detail": {
        "retrieval": {
          "score": 55,
          "band": "Partly legible",
          "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": "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": "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": "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": 50,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "5 of 18 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, 3 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": "pass",
                  "weight": 1.5,
                  "detail": "About 754 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": "partial",
                  "weight": 1,
                  "detail": "Meta description is 211 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": "10% of 21 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": 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": "Multiple H1 headings (4)"
            },
            {
              "sev": "warning",
              "label": "19 images missing alt text"
            },
            {
              "sev": "warning",
              "label": "Meta description over 180 characters"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 30,
          "band": "Closed to agents",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 25,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "fail",
                  "weight": 3,
                  "detail": "Every probed AI agent is refused at the edge while a browser gets 200 (OAI-SearchBot 403, PerplexityBot 403, 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, 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 754 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": "error",
              "label": "AI agents are refused at the edge (CDN/WAF), not just in robots.txt"
            },
            {
              "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 (KKR), 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": "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": "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": "Blackstone",
      "domain": "blackstone.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Apollo Global Management",
      "domain": "apollo.com",
      "ok": true,
      "finalUrl": "https://www.apollo.com/",
      "offDomain": "apollo.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 66,
        "execution": 62,
        "representation": 58,
        "composite": 62
      },
      "detail": {
        "retrieval": {
          "score": 66,
          "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": "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": 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": "30 of 36 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, 5 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 1700 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": "partial",
                  "weight": 1,
                  "detail": "Meta description is 4 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": 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": "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, 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 1700 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": 58,
          "band": "Partly resolved",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Apollo Global Management), 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": "3 confirmed and 0 unverified authoritative home(s) (of 4 declared; the rest did not resolve): en.wikipedia.org, linkedin.com, twitter.com.",
                  "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": 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": 4,
              "confirmed": 3,
              "dead": 0,
              "links": [
                {
                  "host": "en.wikipedia.org",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "twitter.com",
                  "status": 200,
                  "state": "confirmed"
                }
              ],
              "scoringHosts": [
                "en.wikipedia.org",
                "linkedin.com",
                "twitter.com"
              ],
              "confirmedHosts": [
                "en.wikipedia.org",
                "linkedin.com",
                "twitter.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Brookfield",
      "domain": "brookfield.com",
      "ok": true,
      "finalUrl": "https://www.brookfield.com/",
      "offDomain": "brookfield.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 51,
        "execution": 68,
        "representation": 8,
        "composite": 42
      },
      "detail": {
        "retrieval": {
          "score": 51,
          "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": 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": "11 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, 22 H2, 18 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": "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": "80% of 56 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, 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": "11 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, 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 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": [
            {
              "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": "Lloyd's of London",
      "domain": "lloyds.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Fifth Third Bancorp",
      "domain": "53.com",
      "ok": true,
      "finalUrl": "https://www.53.com/",
      "offDomain": "53.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 22,
        "execution": 34,
        "representation": 15,
        "composite": 24
      },
      "detail": {
        "retrieval": {
          "score": 22,
          "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": "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": "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": 30,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 61 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": "100% of 2 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": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (16,103 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": "Missing title tag"
            },
            {
              "sev": "warning",
              "label": "Missing meta description"
            },
            {
              "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, 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 (~61 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": 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": "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": 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": "KeyCorp",
      "domain": "key.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Akamai"
    },
    {
      "name": "Regions Financial",
      "domain": "regions.com",
      "ok": true,
      "finalUrl": "https://regions.com/",
      "offDomain": "regions.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 13,
        "execution": 34,
        "representation": 15,
        "composite": 21
      },
      "detail": {
        "retrieval": {
          "score": 13,
          "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": 25,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 6 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": "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": 46,
              "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": "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": "Page is set to noindex (excluded from search and AI)"
            },
            {
              "sev": "error",
              "label": "Missing title tag"
            },
            {
              "sev": "warning",
              "label": "Missing meta description"
            },
            {
              "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, 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 (~6 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": 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": "M&T Bank",
      "domain": "mtb.com",
      "ok": true,
      "finalUrl": "https://www.mtb.com/",
      "offDomain": "mtb.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 71,
        "execution": 69,
        "representation": 58,
        "composite": 66
      },
      "detail": {
        "retrieval": {
          "score": 71,
          "band": "Partly legible",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 61,
              "checks": [
                {
                  "label": "Organisation / entity schema",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity type declared: Corporation, 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": "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": 83,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "30 of 61 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": "partial",
                  "weight": 1.5,
                  "detail": "5 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 1400 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 151 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "94% 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": [
            {
              "sev": "warning",
              "label": "Multiple H1 headings (5)"
            },
            {
              "sev": "warning",
              "label": "1 image 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, 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 1400 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": 58,
          "band": "Partly resolved",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (M&T Bank), 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 \"M&T Bank\" 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": 100,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "3 confirmed and 0 unverified authoritative home(s) (of 5 declared; the rest did not resolve): twitter.com, 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": 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": "10 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": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 5,
              "reachable": 5,
              "confirmed": 3,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "twitter.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "en.wikipedia.org",
                  "status": 200,
                  "state": "confirmed"
                }
              ],
              "scoringHosts": [
                "twitter.com",
                "linkedin.com",
                "en.wikipedia.org"
              ],
              "confirmedHosts": [
                "twitter.com",
                "linkedin.com",
                "en.wikipedia.org"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": true
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": [
        "tdmrep-unmeasured"
      ]
    },
    {
      "name": "Huntington Bancshares",
      "domain": "huntington.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Akamai"
    },
    {
      "name": "Citizens Financial Group",
      "domain": "citizensbank.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Akamai"
    },
    {
      "name": "Synchrony Financial",
      "domain": "synchrony.com",
      "ok": true,
      "finalUrl": "https://www.synchrony.com/",
      "offDomain": "synchrony.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 73,
        "execution": 89,
        "representation": 54,
        "composite": 72
      },
      "detail": {
        "retrieval": {
          "score": 73,
          "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, Organization.",
                  "rec": null
                },
                {
                  "label": "Entity disambiguation (sameAs)",
                  "status": "pass",
                  "weight": 2,
                  "detail": "8 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": 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": 83,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "28 of 40 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, 10 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 1500 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 64 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": "100% of 129 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": "1 insecure HTTP resource on a secure page"
            }
          ],
          "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, PerplexityBot timeout, ClaudeBot timeout, GPTBot 200). 2 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": 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 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": [],
          "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 (Synchrony) 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": "2 confirmed and 0 unverified authoritative home(s) (of 6 declared; the rest did not resolve): twitter.com, linkedin.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": "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": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 5,
              "reachable": 5,
              "confirmed": 2,
              "dead": 0,
              "links": [
                {
                  "host": "twitter.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "instagram.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "twitter.com",
                "linkedin.com"
              ],
              "confirmedHosts": [
                "twitter.com",
                "linkedin.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Principal Financial Group",
      "domain": "principal.com",
      "ok": true,
      "finalUrl": "https://www.principal.com/",
      "offDomain": "principal.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 63,
        "execution": 63,
        "representation": 43,
        "composite": 56
      },
      "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 (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": "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": "16 of 36 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, 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 898 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": "pass",
                  "weight": 1,
                  "detail": "Meta description is 104 characters.",
                  "rec": null
                },
                {
                  "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": 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": 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, 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 898 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 (Principal Financial Group®), 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 \"Principal Financial Group®\" 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": "2 confirmed and 0 unverified authoritative home(s) (of 5 declared; the rest did not resolve): linkedin.com, twitter.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": "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": "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": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 5,
              "reachable": 5,
              "confirmed": 2,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "instagram.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "twitter.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "linkedin.com",
                "twitter.com"
              ],
              "confirmedHosts": [
                "linkedin.com",
                "twitter.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "AllianceBernstein",
      "domain": "alliancebernstein.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Janus Henderson",
      "domain": "janushenderson.com",
      "ok": true,
      "finalUrl": "https://www.janushenderson.com/en-us/",
      "offDomain": "janushenderson.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 61,
        "execution": 76,
        "representation": 8,
        "composite": 48
      },
      "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": "27 of 36 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": "4 H1, 3 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 800 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 117 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 3 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 (4)"
            },
            {
              "sev": "error",
              "label": "1 insecure HTTP resource on a secure page"
            }
          ],
          "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, 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 800 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": 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": "Lazard",
      "domain": "lazard.com",
      "ok": true,
      "finalUrl": "https://lazard.com/",
      "offDomain": "lazard.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 50,
        "execution": 62,
        "representation": 13,
        "composite": 42
      },
      "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": 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": "8 of 13 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, 13 H2, 26 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 704 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 89 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 113 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": 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": "warning",
              "label": "Title likely truncated in results (over 65 characters)"
            },
            {
              "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, 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 704 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": "Jefferies Financial Group",
      "domain": "jefferies.com",
      "ok": true,
      "finalUrl": "https://www.jefferies.com/",
      "offDomain": "jefferies.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 75,
        "execution": 87,
        "representation": 44,
        "composite": 69
      },
      "detail": {
        "retrieval": {
          "score": 75,
          "band": "Well positioned",
          "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, Person.",
                  "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": "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": "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": "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": "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": "52 of 80 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, 10 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1900 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 132 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% 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": 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": 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, 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": "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 1900 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": 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 (Jefferies Financial Group 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 4 declared; the rest did not resolve): 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": 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": "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": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 4,
              "reachable": 4,
              "confirmed": 1,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "x.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "x.com"
              ],
              "confirmedHosts": [
                "x.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Interactive Brokers",
      "domain": "interactivebrokers.com",
      "ok": true,
      "finalUrl": "https://www.interactivebrokers.com/",
      "offDomain": "interactivebrokers.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 54,
        "execution": 65,
        "representation": 28,
        "composite": 49
      },
      "detail": {
        "retrieval": {
          "score": 54,
          "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": "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": "pass",
                  "weight": 1.5,
                  "detail": "32 of 176 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, 17 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": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 3900 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": "partial",
                  "weight": 1,
                  "detail": "Meta description is 234 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": "93% 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": 83,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (11,106 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": "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": "Meta description over 180 characters"
            }
          ],
          "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, 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": "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 3900 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": 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 (Interactive Brokers LLC), 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": "4 authoritative link(s) declared, but none resolved; dead links are not counted.",
                  "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": "warning",
              "label": "No authoritative sameAs links to disambiguate the entity"
            }
          ],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 4,
              "reachable": 4,
              "confirmed": 0,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "twitter.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [],
              "confirmedHosts": [],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": [
        "sameas-unverified"
      ]
    },
    {
      "name": "Stifel Financial",
      "domain": "stifel.com",
      "ok": true,
      "finalUrl": "https://www.stifel.com/",
      "offDomain": "stifel.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 42,
        "execution": 50,
        "representation": 13,
        "composite": 35
      },
      "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": "21 of 24 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, 12 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": 80,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1000 words of readable text.",
                  "rec": null
                },
                {
                  "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": "partial",
                  "weight": 1,
                  "detail": "Meta description is 273 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": "83% 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": 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": "error",
              "label": "6 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "7 images missing alt text"
            },
            {
              "sev": "warning",
              "label": "Meta description over 180 characters"
            },
            {
              "sev": "warning",
              "label": "No sitemap discoverable"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 50,
          "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, PerplexityBot 403, 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, 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 1000 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": "Some AI agents refused at the edge (PerplexityBot, ClaudeBot)"
            },
            {
              "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": "LPL Financial",
      "domain": "lpl.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Global Payments",
      "domain": "globalpayments.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Adyen",
      "domain": "adyen.com",
      "ok": true,
      "finalUrl": "https://www.adyen.com/",
      "offDomain": "adyen.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 63,
        "execution": 65,
        "representation": 58,
        "composite": 62
      },
      "detail": {
        "retrieval": {
          "score": 63,
          "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": "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": "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": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "19 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, 8 H2, 8 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 556 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 47 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 114 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "partial",
                  "weight": 1,
                  "detail": "60% 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": 96,
              "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": "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": "2 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, 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 556 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": 58,
          "band": "Partly resolved",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 50,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "partial",
                  "weight": 2,
                  "detail": "Entity declared (Adyen), 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 0 unverified authoritative home(s): en.wikipedia.org, linkedin.com.",
                  "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": 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": 2,
              "reachable": 2,
              "confirmed": 2,
              "dead": 0,
              "links": [
                {
                  "host": "en.wikipedia.org",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                }
              ],
              "scoringHosts": [
                "en.wikipedia.org",
                "linkedin.com"
              ],
              "confirmedHosts": [
                "en.wikipedia.org",
                "linkedin.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Wise",
      "domain": "wise.com",
      "ok": true,
      "finalUrl": "https://wise.com/",
      "offDomain": "wise.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 61,
        "execution": 62,
        "representation": 43,
        "composite": 55
      },
      "detail": {
        "retrieval": {
          "score": 61,
          "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": "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": "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": "22 of 41 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, 10 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 1400 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 77 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 108 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 115 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": "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, 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 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": 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 (Wise), 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": "2 confirmed and 0 unverified authoritative home(s) (of 5 declared; the rest did not resolve): twitter.com, linkedin.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": 5,
              "confirmed": 2,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "twitter.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "instagram.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                }
              ],
              "scoringHosts": [
                "twitter.com",
                "linkedin.com"
              ],
              "confirmedHosts": [
                "twitter.com",
                "linkedin.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Klarna",
      "domain": "klarna.com",
      "ok": true,
      "finalUrl": "https://www.klarna.com/",
      "offDomain": "klarna.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 17,
        "execution": 34,
        "representation": 8,
        "composite": 20
      },
      "detail": {
        "retrieval": {
          "score": 17,
          "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": 25,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 26 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": "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": 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": "error",
              "label": "Missing title tag"
            },
            {
              "sev": "warning",
              "label": "Missing meta description"
            },
            {
              "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": 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 202; OAI-SearchBot 202, PerplexityBot 202, ClaudeBot 202, GPTBot 202).",
                  "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": 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 (~26 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": 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"
            },
            {
              "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": "Affirm",
      "domain": "affirm.com",
      "ok": true,
      "finalUrl": "https://www.affirm.com/",
      "offDomain": "affirm.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 39,
        "execution": 62,
        "representation": 13,
        "composite": 38
      },
      "detail": {
        "retrieval": {
          "score": 39,
          "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": "13 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, 6 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": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 572 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": "partial",
                  "weight": 1,
                  "detail": "Meta description is 181 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 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": 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": 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, 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 572 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": "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": "Western Union",
      "domain": "westernunion.com",
      "ok": true,
      "finalUrl": "https://www.westernunion.com/us/en/home.html",
      "offDomain": "westernunion.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 71,
        "execution": 63,
        "representation": 25,
        "composite": 53
      },
      "detail": {
        "retrieval": {
          "score": 71,
          "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": 64,
              "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": "pass",
                  "weight": 1.5,
                  "detail": "Rich types present: Faqpage.",
                  "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": 83,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "36 of 71 paragraphs are concise, substantive answers a model can lift directly.",
                  "rec": null
                },
                {
                  "label": "Question-led content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "3 question-led heading(s) or Q&A found.",
                  "rec": null
                },
                {
                  "label": "Heading structure",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "2 H1, 10 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": 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 45 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 146 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "95% 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": 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 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": "Multiple H1 headings (2)"
            },
            {
              "sev": "error",
              "label": "5 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "1 image 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, PerplexityBot timeout, ClaudeBot timeout, GPTBot 200). 2 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": 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 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": "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": 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 (Western Union), 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": "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": "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": "Revolut",
      "domain": "revolut.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "The Hartford",
      "domain": "thehartford.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Lincoln Financial Group",
      "domain": "lfg.com",
      "ok": false,
      "reason": "UNREADABLE (no content / client-side rendered)",
      "wafVendor": ""
    },
    {
      "name": "Cincinnati Financial",
      "domain": "cinfin.com",
      "ok": true,
      "finalUrl": "https://www.cinfin.com/",
      "offDomain": "cinfin.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 47,
        "execution": 63,
        "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": 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 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, 4 H2, 7 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 739 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": "pass",
                  "weight": 1,
                  "detail": "Meta description is 141 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": 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": "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": "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": 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, 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 739 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": "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": "Arch Capital Group",
      "domain": "archgroup.com",
      "ok": true,
      "finalUrl": "https://www.archgroup.com/",
      "offDomain": "archgroup.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 69,
        "execution": 87,
        "representation": 37,
        "composite": 64
      },
      "detail": {
        "retrieval": {
          "score": 69,
          "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": "16 of 18 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, 10 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 80,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 926 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": "fail",
                  "weight": 1,
                  "detail": "No meta description found.",
                  "rec": "Add a clear meta description."
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "90% 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": 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": "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, 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 926 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": 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 (Arch Capital Group Ltd.), 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": 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": "10 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": 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": "Markel",
      "domain": "markel.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Manulife",
      "domain": "manulife.com",
      "ok": true,
      "finalUrl": "https://www.manulife.com/ca/en/personal",
      "offDomain": "manulife.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 57,
        "execution": 63,
        "representation": 23,
        "composite": 48
      },
      "detail": {
        "retrieval": {
          "score": 57,
          "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": "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": 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": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "6 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": "partial",
                  "weight": 1.5,
                  "detail": "2 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 502 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 109 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "fail",
                  "weight": 1,
                  "detail": "0% 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": 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": "warning",
              "label": "4 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, 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 502 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": 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 (Manulife), 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": "Sun Life Financial",
      "domain": "sunlife.com",
      "ok": true,
      "finalUrl": "https://www.sunlife.com/en/",
      "offDomain": "sunlife.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 50,
        "execution": 56,
        "representation": 10,
        "composite": 39
      },
      "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": "13 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, 30 H2, 15 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 90,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 951 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 126 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "partial",
                  "weight": 1,
                  "detail": "71% of 7 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": "error",
              "label": "2 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "2 images missing alt text"
            }
          ],
          "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, PerplexityBot 403, 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, 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": "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 951 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 (PerplexityBot, ClaudeBot)"
            },
            {
              "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": "Aegon",
      "domain": "aegon.com",
      "ok": true,
      "finalUrl": "https://aegon.com/",
      "offDomain": "aegon.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 13,
        "execution": 34,
        "representation": 15,
        "composite": 21
      },
      "detail": {
        "retrieval": {
          "score": 13,
          "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": 25,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 6 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": "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": 46,
              "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": "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": "Page is set to noindex (excluded from search and AI)"
            },
            {
              "sev": "error",
              "label": "Missing title tag"
            },
            {
              "sev": "warning",
              "label": "Missing meta description"
            },
            {
              "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, 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 (~6 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": 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": "NN Group",
      "domain": "nn-group.com",
      "ok": true,
      "finalUrl": "https://www.nn-group.com/",
      "offDomain": "nn-group.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 62,
        "execution": 57,
        "representation": 41,
        "composite": 53
      },
      "detail": {
        "retrieval": {
          "score": 62,
          "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": "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": 39,
              "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": "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 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": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 15 H2, 33 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 75,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "About 410 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 147 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% 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": 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": "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": "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"
            },
            {
              "sev": "warning",
              "label": "No sitemap discoverable"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 57,
          "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, 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": 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 410 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": [
            {
              "sev": "warning",
              "label": "No machine-readable action found"
            }
          ],
          "renderDependent": false,
          "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 (NN 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": 60,
              "checks": [
                {
                  "label": "Authoritative profiles linked",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "2 confirmed and 0 unverified authoritative home(s) (of 3 declared; the rest did not resolve): x.com, linkedin.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": 3,
              "reachable": 3,
              "confirmed": 2,
              "dead": 0,
              "links": [
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "x.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                }
              ],
              "scoringHosts": [
                "x.com",
                "linkedin.com"
              ],
              "confirmedHosts": [
                "x.com",
                "linkedin.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "AIA Group",
      "domain": "aia.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Direct Line Group",
      "domain": "directlinegroup.co.uk",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": ""
    },
    {
      "name": "Beazley",
      "domain": "beazley.com",
      "ok": true,
      "finalUrl": "https://www.beazley.com/",
      "offDomain": "beazley.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 28,
        "execution": 55,
        "representation": 15,
        "composite": 33
      },
      "detail": {
        "retrieval": {
          "score": 28,
          "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, 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": 80,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 681 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": "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 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": 91,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (23,974 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": [
            {
              "sev": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "warning",
              "label": "Missing meta description"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 55,
          "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, 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, 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": "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 681 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": 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": false,
        "consistent": null,
        "note": "browser-ua-unreadable"
      },
      "flags": []
    },
    {
      "name": "Hiscox",
      "domain": "hiscox.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Fitch Ratings",
      "domain": "fitchratings.com",
      "ok": true,
      "finalUrl": "https://www.fitchratings.com/",
      "offDomain": "fitchratings.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 26,
        "execution": 61,
        "representation": 18,
        "composite": 35
      },
      "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 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": "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": 70,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 157 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 66 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 106 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": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (23,309 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": "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": "Title likely truncated in results (over 65 characters)"
            },
            {
              "sev": "warning",
              "label": "No canonical URL declared"
            },
            {
              "sev": "warning",
              "label": "Thin content (under 250 words)"
            }
          ],
          "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, 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 157 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": 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": "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": "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": "FactSet",
      "domain": "factset.com",
      "ok": true,
      "finalUrl": "https://www.factset.com/",
      "offDomain": "factset.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 28,
        "execution": 34,
        "representation": 8,
        "composite": 23
      },
      "detail": {
        "retrieval": {
          "score": 28,
          "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": "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": 65,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 9 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 57 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": "No images to assess.",
                  "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": 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 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": "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, 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 (~9 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": "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": "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": 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": "Morningstar",
      "domain": "morningstar.com",
      "ok": true,
      "finalUrl": "https://www.morningstar.com/",
      "offDomain": "morningstar.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 18,
        "execution": 30,
        "representation": 8,
        "composite": 19
      },
      "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": "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": 25,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 26 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": "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": 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": "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"
            },
            {
              "sev": "warning",
              "label": "Thin content (under 250 words)"
            }
          ],
          "renderDependent": false,
          "robotsUnmeasured": false
        },
        "execution": {
          "score": 30,
          "band": "Closed to agents",
          "categories": [
            {
              "key": "access",
              "label": "Agent Access",
              "weight": 0.32,
              "score": 25,
              "checks": [
                {
                  "label": "AI user-agent treatment at the edge",
                  "status": "fail",
                  "weight": 3,
                  "detail": "Every probed AI agent is refused at the edge while a browser gets 200 (OAI-SearchBot 403, PerplexityBot 403, 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, 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 (~26 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": "error",
              "label": "AI agents are refused at the edge (CDN/WAF), not just in robots.txt"
            },
            {
              "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": "Tradeweb Markets",
      "domain": "tradeweb.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Euronext",
      "domain": "euronext.com",
      "ok": true,
      "finalUrl": "https://www.euronext.com/en",
      "offDomain": "euronext.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 47,
        "execution": 68,
        "representation": 13,
        "composite": 43
      },
      "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": "20 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": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 8 H2, 7 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 3200 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 140 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": 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": "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, 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 3200 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": "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": "Japan Exchange Group",
      "domain": "jpx.co.jp",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Mizuho Financial Group",
      "domain": "mizuhogroup.com",
      "ok": true,
      "finalUrl": "https://www.mizuhogroup.com/",
      "offDomain": "mizuhogroup.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 68,
        "execution": 65,
        "representation": 37,
        "composite": 57
      },
      "detail": {
        "retrieval": {
          "score": 68,
          "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": "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": "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": "8 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, 8 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 1400 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 111 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": 91,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (11,441 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": "error",
              "label": "2 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, 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 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": 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": 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 (Mizuho Financial 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": "1 confirmed and 0 unverified authoritative home(s) (of 3 declared; the rest did not resolve): en.wikipedia.org.",
                  "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": "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": 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": 3,
              "reachable": 3,
              "confirmed": 1,
              "dead": 0,
              "links": [
                {
                  "host": "en.wikipedia.org",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "en.wikipedia.org"
              ],
              "confirmedHosts": [
                "en.wikipedia.org"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Mitsubishi UFJ Financial Group",
      "domain": "mufg.jp",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Sumitomo Mitsui Financial Group",
      "domain": "smfg.co.jp",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Nomura",
      "domain": "nomura.com",
      "ok": true,
      "finalUrl": "https://www.nomura.com/",
      "offDomain": "nomura.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 20,
        "execution": 34,
        "representation": 8,
        "composite": 21
      },
      "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": "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": "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 13 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 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": "pass",
                  "weight": 1,
                  "detail": "Meta description is 96 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "No images to assess.",
                  "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": 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": "No canonical URL declared"
            },
            {
              "sev": "warning",
              "label": "Thin content (under 250 words)"
            },
            {
              "sev": "warning",
              "label": "No sitemap discoverable"
            }
          ],
          "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, 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 (~13 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": 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"
            },
            {
              "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": "UniCredit",
      "domain": "unicreditgroup.eu",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Akamai"
    },
    {
      "name": "ABN AMRO",
      "domain": "abnamro.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 503)",
      "wafVendor": "Akamai"
    },
    {
      "name": "Danske Bank",
      "domain": "danskebank.com",
      "ok": true,
      "finalUrl": "https://danskebank.com/",
      "offDomain": "danskebank.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 37,
        "execution": 63,
        "representation": 13,
        "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": "partial",
                  "weight": 1.5,
                  "detail": "4 of 22 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, 6 H2, 11 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 2000 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 11 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 82 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": "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 (2)"
            }
          ],
          "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, 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 2000 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": "10 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": "SEB",
      "domain": "sebgroup.com",
      "ok": true,
      "finalUrl": "https://sebgroup.com/",
      "offDomain": "sebgroup.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 35,
        "execution": 34,
        "representation": 8,
        "composite": 26
      },
      "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": "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": "pass",
                  "weight": 1.5,
                  "detail": "1 H1, 4 H2, 0 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 70,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 92 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": "pass",
                  "weight": 1,
                  "detail": "Meta description is 155 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 2 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": "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, 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 (~92 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": "Swedbank",
      "domain": "swedbank.com",
      "ok": true,
      "finalUrl": "https://www.swedbank.com/",
      "offDomain": "swedbank.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": "16 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": "7 H1, 15 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 869 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 25 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 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": "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)"
            }
          ],
          "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, 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 869 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": "KBC Group",
      "domain": "kbc.com",
      "ok": true,
      "finalUrl": "https://www.kbc.com/en.html",
      "offDomain": "kbc.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 38,
        "execution": 87,
        "representation": 13,
        "composite": 46
      },
      "detail": {
        "retrieval": {
          "score": 38,
          "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": "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 12 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, 22 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 799 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "partial",
                  "weight": 1,
                  "detail": "Title is 2 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": "17% of 6 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": "error",
              "label": "No H1 heading on the page"
            },
            {
              "sev": "warning",
              "label": "5 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, 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 799 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": "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": "Commerzbank",
      "domain": "commerzbank.com",
      "ok": true,
      "finalUrl": "https://www.commerzbank.de/group/",
      "offDomain": "commerzbank.de",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 45,
        "execution": 62,
        "representation": 13,
        "composite": 40
      },
      "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": "13 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": "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 1200 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": "partial",
                  "weight": 1,
                  "detail": "Meta description is 48 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": 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, 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 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": [
            {
              "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": "CaixaBank",
      "domain": "caixabank.com",
      "ok": true,
      "finalUrl": "https://www.caixabank.com/home_es.html",
      "offDomain": "caixabank.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 68,
        "execution": 62,
        "representation": 43,
        "composite": 58
      },
      "detail": {
        "retrieval": {
          "score": 68,
          "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: 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": "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": "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": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "11 of 83 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, 16 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 898 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 150 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% of 49 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, 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 898 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": 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 (CaixaBank), 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": "2 confirmed and 0 unverified authoritative home(s) (of 6 declared; the rest did not resolve): twitter.com, linkedin.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": 5,
              "reachable": 5,
              "confirmed": 2,
              "dead": 0,
              "links": [
                {
                  "host": "twitter.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "twitter.com",
                "linkedin.com"
              ],
              "confirmedHosts": [
                "twitter.com",
                "linkedin.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Standard Bank Group",
      "domain": "standardbank.com",
      "ok": true,
      "finalUrl": "https://www.standardbank.com/sbg/standard-bank-group",
      "offDomain": "standardbank.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 52,
        "execution": 56,
        "representation": 41,
        "composite": 50
      },
      "detail": {
        "retrieval": {
          "score": 52,
          "band": "Significant gaps",
          "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": 33,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "13 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": "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 2500 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 111 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "86% 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": 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": "error",
              "label": "42 insecure HTTP resources on a secure page"
            },
            {
              "sev": "warning",
              "label": "3 images missing alt text"
            },
            {
              "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, 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 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": 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": 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 (Standard Bank 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": 60,
              "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): x.com, linkedin.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": 4,
              "reachable": 4,
              "confirmed": 2,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "x.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                }
              ],
              "scoringHosts": [
                "x.com",
                "linkedin.com"
              ],
              "confirmedHosts": [
                "x.com",
                "linkedin.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Itau Unibanco",
      "domain": "itau.com.br",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Akamai"
    },
    {
      "name": "HDFC Bank",
      "domain": "hdfcbank.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "ICICI Bank",
      "domain": "icicibank.com",
      "ok": true,
      "finalUrl": "https://www.icici.bank.in/",
      "offDomain": "icici.bank.in",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 79,
        "execution": 63,
        "representation": 62,
        "composite": 68
      },
      "detail": {
        "retrieval": {
          "score": 79,
          "band": "Well positioned",
          "categories": [
            {
              "key": "entity",
              "label": "Entity & Trust",
              "weight": 0.22,
              "score": 81,
              "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": "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": "2 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": 100,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "141 of 1397 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, 15 H2, 72 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 100,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 2100 words of readable text.",
                  "rec": null
                },
                {
                  "label": "Title quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Title is 65 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 108 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": [],
          "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, 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 2100 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": 62,
          "band": "Partly resolved",
          "categories": [
            {
              "key": "identity",
              "label": "Identity",
              "weight": 0.3,
              "score": 79,
              "checks": [
                {
                  "label": "Entity definition",
                  "status": "pass",
                  "weight": 2,
                  "detail": "Entity declared (ICICI Bank) 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": "2 confirmed and 0 unverified authoritative home(s) (of 5 declared; the rest did not resolve): twitter.com, linkedin.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": 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": "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": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 5,
              "reachable": 4,
              "confirmed": 2,
              "dead": 1,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "twitter.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "instagram.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "youtube.com",
                  "status": 404,
                  "state": "dead"
                }
              ],
              "scoringHosts": [
                "twitter.com",
                "linkedin.com"
              ],
              "confirmedHosts": [
                "twitter.com",
                "linkedin.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": true
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": [
        "tdmrep-unmeasured"
      ]
    },
    {
      "name": "OCBC",
      "domain": "ocbc.com",
      "ok": true,
      "finalUrl": "https://www.ocbc.com/group/gateway",
      "offDomain": "ocbc.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 41,
        "execution": 66,
        "representation": 20,
        "composite": 42
      },
      "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": "5 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": "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": 100,
              "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 60 characters.",
                  "rec": null
                },
                {
                  "label": "Meta description quality",
                  "status": "pass",
                  "weight": 1,
                  "detail": "Meta description is 144 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": 76,
              "checks": [
                {
                  "label": "llms.txt (forward-looking)",
                  "status": "pass",
                  "weight": 0.5,
                  "detail": "llms.txt present (7,346 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": "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": "warning",
              "label": "Multiple H1 headings (2)"
            },
            {
              "sev": "warning",
              "label": "Heading levels skip from H1 to H3"
            }
          ],
          "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, 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 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": 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": "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": 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": "Australia and New Zealand Banking Group",
      "domain": "anz.com.au",
      "ok": true,
      "finalUrl": "https://www.anz.com.au/personal/",
      "offDomain": "anz.com.au",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 44,
        "execution": 63,
        "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": "65 of 123 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": "5 H1, 13 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": 80,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 4300 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": "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": "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": 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 (5)"
            },
            {
              "sev": "error",
              "label": "7 insecure HTTP resources on a secure 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": 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, 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 4300 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": "25 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": "Investec",
      "domain": "investec.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Close Brothers Group",
      "domain": "closebrothers.com",
      "ok": true,
      "finalUrl": "https://www.closebrothers.com/s/",
      "offDomain": "closebrothers.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 24,
        "execution": 34,
        "representation": 8,
        "composite": 22
      },
      "detail": {
        "retrieval": {
          "score": 24,
          "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": 45,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "fail",
                  "weight": 1.5,
                  "detail": "About 11 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": "No images to assess.",
                  "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": 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 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": "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": "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, 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 (~11 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 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": "IG Group",
      "domain": "iggroup.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Carlyle Group",
      "domain": "carlyle.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Ares Management",
      "domain": "aresmgmt.com",
      "ok": false,
      "reason": "BLOCKED (HTTP 403)",
      "wafVendor": "Cloudflare"
    },
    {
      "name": "Ping An Insurance",
      "domain": "pingan.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Industrial and Commercial Bank of China",
      "domain": "icbc.com.cn",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "China Construction Bank",
      "domain": "ccb.com",
      "ok": false,
      "reason": "UNREACHABLE (no response)",
      "wafVendor": ""
    },
    {
      "name": "Fannie Mae",
      "domain": "fanniemae.com",
      "ok": true,
      "finalUrl": "https://www.fanniemae.com/",
      "offDomain": "fanniemae.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 51,
        "execution": 62,
        "representation": 13,
        "composite": 42
      },
      "detail": {
        "retrieval": {
          "score": 51,
          "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": 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": "15 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, 8 H2, 14 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 80,
              "checks": [
                {
                  "label": "Substantive content",
                  "status": "pass",
                  "weight": 1.5,
                  "detail": "About 809 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": "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 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": "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": "3 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, 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 809 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": "Freddie Mac",
      "domain": "freddiemac.com",
      "ok": true,
      "finalUrl": "https://www.freddiemac.com/",
      "offDomain": "freddiemac.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 68,
        "execution": 89,
        "representation": 48,
        "composite": 68
      },
      "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": 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": "19 of 53 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, 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 1000 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 128 characters.",
                  "rec": null
                },
                {
                  "label": "Image alt coverage",
                  "status": "pass",
                  "weight": 1,
                  "detail": "100% 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": 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": "Multiple H1 headings (2)"
            }
          ],
          "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, 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 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": "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": 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 (Freddie Mac), 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": "2 confirmed and 0 unverified authoritative home(s) (of 5 declared; the rest did not resolve): x.com, linkedin.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": "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": [],
          "enrichment": {
            "sameAs": {
              "ran": true,
              "declared": 5,
              "reachable": 5,
              "confirmed": 2,
              "dead": 0,
              "links": [
                {
                  "host": "facebook.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "x.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "linkedin.com",
                  "status": 200,
                  "state": "confirmed"
                },
                {
                  "host": "youtube.com",
                  "status": 200,
                  "state": "reachable"
                },
                {
                  "host": "instagram.com",
                  "status": 200,
                  "state": "reachable"
                }
              ],
              "scoringHosts": [
                "x.com",
                "linkedin.com"
              ],
              "confirmedHosts": [
                "x.com",
                "linkedin.com"
              ],
              "unverifiedHosts": []
            }
          },
          "tdmUnmeasured": false
        }
      },
      "serving": {
        "checked": true,
        "consistent": true,
        "note": "consistent"
      },
      "flags": []
    },
    {
      "name": "Ant Group",
      "domain": "antgroup.com",
      "ok": false,
      "reason": "UNREADABLE (no content / client-side rendered)",
      "wafVendor": ""
    },
    {
      "name": "Evelyn Partners",
      "domain": "evelyn.com",
      "ok": true,
      "finalUrl": "https://www.evelyn.com/",
      "offDomain": "evelyn.com",
      "truncated": false,
      "pagesScanned": 1,
      "scores": {
        "retrieval": 41,
        "execution": 63,
        "representation": 13,
        "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": 67,
              "checks": [
                {
                  "label": "Concise, extractable answers",
                  "status": "partial",
                  "weight": 1.5,
                  "detail": "4 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": "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, 30 H2, 21 H3.",
                  "rec": null
                }
              ]
            },
            {
              "key": "read",
              "label": "Machine Readability",
              "weight": 0.12,
              "score": 80,
              "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 44 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": "98% of 47 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": "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": "partial",
                  "weight": 0.75,
                  "detail": "HTTPS, no viewport, lang set.",
                  "rec": "Serve over HTTPS, add a responsive viewport meta tag, and set an html lang attribute."
                }
              ]
            }
          ],
          "issues": [
            {
              "sev": "warning",
              "label": "1 image missing alt text"
            },
            {
              "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, 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) 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 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": "10 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": []
    }
  ]
}