{"scope":"site","url":"https://example.com/","finalUrl":"https://example.com/","focusUrl":"https://example.com/","domain":"example.com","score":40,"grade":"D","gradeLabel":"At risk","pillars":[{"id":"discovery","name":"Discovery & Manifests","shortName":"Discovery","description":"Can an agent find a curated, standards-compliant index of the content?","score":29,"checks":[{"weight":3,"scope":"site","id":"llms-txt","label":"llms.txt manifest","status":"fail","summary":"Missing","detail":"No /llms.txt file was found at the site root, so agents have no curated entry point.","protocol":"llmstxt.org · H1 + markdown index","evidence":{"file":"/llms.txt","line":null,"snippet":null},"recommendation":"Publish /llms.txt with one H1, a blockquote summary and H2 sections linking to the pages an LLM should read first.","fix":{"language":"markdown","code":"# Your site name\n\n> One sentence explaining what this site covers and who it is for.\n\n## Documentation\n- [Getting started](https://example.com/docs/start)\n- [API reference](https://example.com/docs/api)\n- [Authentication](https://example.com/docs/auth)"}},{"weight":1,"scope":"site","id":"llms-full-txt","label":"llms-full.txt bundle","status":"warn","summary":"Not published","detail":"The optional expanded manifest is not published.","protocol":"llmstxt.org · llms-full.txt","evidence":{"file":"/llms-full.txt","line":null,"snippet":null},"recommendation":"Publish /llms-full.txt as one unpaginated markdown file containing the long-form content agents should ingest without crawling.","fix":{"language":"markdown","code":"# Your site name\n\n> The complete documentation bundle.\n\n## Getting started\n\nFull page content in markdown, with no `?page=` links and no truncated sections."}},{"weight":2,"scope":"site","id":"sitemap","label":"sitemap + robots directive","status":"fail","summary":"Missing","detail":"No usable XML sitemap was found at /sitemap.xml or the locations referenced in robots.txt.","protocol":"sitemaps.org · RFC 9309 Sitemap directive","evidence":{"file":"/sitemap.xml","line":null,"snippet":null},"recommendation":"Publish an XML sitemap at /sitemap.xml, keep it fresh, and reference it from robots.txt with a Sitemap: directive.","fix":{"language":"robots","code":"# robots.txt\nSitemap: https://example.com/sitemap.xml\n\n# /sitemap.xml\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n  <url><loc>https://example.com/docs/start</loc></url>\n</urlset>"}},{"weight":0.5,"scope":"site","id":"feed","label":"RSS or Atom feed","status":"info","summary":"No feed","detail":"The homepage does not advertise an RSS, Atom or JSON feed.","protocol":"RSS 2.0 · Atom · JSON Feed","evidence":{"file":"/","line":null,"snippet":null}},{"weight":1.5,"scope":"site","id":"markdown-mirror","label":"Markdown for agents","status":"info","summary":"Not offered","detail":"No markdown mirror was found through content negotiation, a markdown alternate link or a .md sibling.","protocol":"text/markdown content negotiation · link rel=alternate","evidence":{"file":"/","line":null,"snippet":null}},{"weight":1.5,"scope":"page","id":"freshness","label":"Freshness signals","status":"pass","summary":"1 / 1 pages pass","detail":"1 of 1 sampled pages pass.","protocol":"schema.org dateModified · article:modified_time · sitemap lastmod","evidence":{"file":"/","line":null,"snippet":null},"score":100,"sample":{"total":1,"passed":1,"warned":0,"failed":0,"affected":[]}},{"weight":1,"scope":"page","id":"canonical","label":"Canonical URL","status":"warn","summary":"0 / 1 pages pass","detail":"0 of 1 sampled pages pass · 1 warn. Failing pages: https://example.com/.","protocol":"HTML link rel=canonical","evidence":{"file":"/","line":null,"snippet":null},"recommendation":"Add an absolute, same-origin canonical link to each page and point it at the authoritative URL.","fix":{"language":"html","code":"<link rel=\"canonical\" href=\"https://example.com\" />"},"score":50,"sample":{"total":1,"passed":0,"warned":1,"failed":0,"affected":["https://example.com/"]}}]},{"id":"access","name":"Crawler Access Rules","shortName":"Access","description":"Are the user agents that power AI answers explicitly allowed in?","score":89,"checks":[{"weight":1,"scope":"site","id":"robots-reachable","label":"robots.txt reachable","status":"warn","summary":"Missing","detail":"No robots.txt exists, so crawler access is implicit rather than explicit.","protocol":"RFC 9309 §2.2","evidence":{"file":"/robots.txt","line":null,"snippet":null},"recommendation":"Publish a robots.txt that states your crawler policy explicitly, including the AI user agents you want to allow or block.","fix":{"language":"robots","code":"# Search and citation crawlers\nUser-agent: OAI-SearchBot\nAllow: /\n\nUser-agent: Claude-SearchBot\nAllow: /\n\nUser-agent: PerplexityBot\nAllow: /\n\n# On-demand fetch agents\nUser-agent: ChatGPT-User\nAllow: /\n\nUser-agent: Claude-User\nAllow: /\n\n# Training crawlers: Allow or Disallow is a deliberate choice\nUser-agent: GPTBot\nAllow: /\n\nUser-agent: ClaudeBot\nAllow: /\n\nUser-agent: Google-Extended\nAllow: /\n\nSitemap: https://example.com/sitemap.xml"}},{"weight":1,"scope":"site","id":"ai-policy","label":"Explicit AI user-agent policy","status":"warn","summary":"No robots.txt","detail":"There is no robots.txt to hold an explicit AI crawler policy.","protocol":"RFC 9309 §2.2.1","evidence":{"file":"/robots.txt","line":null,"snippet":null},"recommendation":"Add named groups for search, fetch and training crawlers so the allow/block intent is explicit. Blocking training is a valid choice.","fix":{"language":"robots","code":"# Search and citation crawlers\nUser-agent: OAI-SearchBot\nAllow: /\n\n# On-demand fetch agents\nUser-agent: ChatGPT-User\nAllow: /\n\n# Training crawlers: choose Allow or Disallow deliberately\nUser-agent: GPTBot\nAllow: /"}},{"weight":3,"scope":"site","id":"access-search","label":"Search and citation crawlers","status":"pass","summary":"All 6 allowed","detail":"Every search crawler is allowed on all 1 sampled paths, so answers can cite the site.","protocol":"RFC 9309 §2.2.1 · sampled paths","evidence":{"file":"/robots.txt","line":null,"snippet":null}},{"weight":2,"scope":"site","id":"access-fetch","label":"On-demand fetch agents","status":"pass","summary":"All 3 allowed","detail":"Every on-demand fetch agent is allowed on all 1 sampled paths.","protocol":"RFC 9309 §2.2.1 · sampled paths","evidence":{"file":"/robots.txt","line":null,"snippet":null}},{"weight":1,"scope":"site","id":"access-training","label":"Training crawlers","status":"warn","summary":"0/7 explicit","detail":"7 training crawlers inherit a wildcard group. Name them explicitly so a decision to allow or block training is visible.","protocol":"RFC 9309 §2.2.1 · explicit training policy","evidence":{"file":"/robots.txt","line":null,"snippet":null},"recommendation":"Add explicit groups for the training crawlers you care about. Allow and Disallow are both valid; the point is to make the choice auditable.","fix":{"language":"robots","code":"# Training crawlers: choose one policy per vendor\nUser-agent: GPTBot\nAllow: /          # or: Disallow: /\n\nUser-agent: ClaudeBot\nAllow: /          # or: Disallow: /\n\nUser-agent: Google-Extended\nAllow: /          # or: Disallow: /"}},{"weight":3,"scope":"site","id":"agent-fetch","label":"AI user-agent firewall check","status":"pass","summary":"Agents allowed","detail":"GPTBot returned HTTP 200. against the default HTTP 200. The default fetch and the GPTBot fetch are consistent.","protocol":"Live HTTP fetch · GPTBot and OAI-SearchBot","evidence":{"file":"HTTP response headers","line":null,"snippet":"GPTBot: HTTP 200 · 577 B"}},{"weight":0.5,"scope":"site","id":"content-signal","label":"Content-Signal directive","status":"info","summary":"Not declared","detail":"robots.txt does not declare a Cloudflare Content-Signal directive. The directive is optional, but it makes AI usage preferences machine-readable.","protocol":"Cloudflare Content-Signal · robots.txt","evidence":{"file":"/robots.txt","line":null,"snippet":null}},{"weight":0,"scope":"site","id":"bot-gptbot","label":"GPTBot access","status":"pass","summary":"Allowed · 1/1 sampled paths","detail":"OpenAI · training intent: No crawler-specific block applies, and all 1 sampled paths are allowed.","protocol":"RFC 9309 §2.2.1 · sampled paths","evidence":{"file":"/robots.txt","line":null,"snippet":null},"recommendation":"Add an explicit GPTBot group so the allow decision is auditable rather than inherited from a wildcard.","fix":{"language":"robots","code":"User-agent: GPTBot\nAllow: /"},"sample":{"total":1,"passed":1,"warned":0,"failed":0,"affected":[]}},{"weight":0,"scope":"site","id":"bot-oai-searchbot","label":"OAI-SearchBot access","status":"pass","summary":"Allowed · 1/1 sampled paths","detail":"OpenAI · search intent: No crawler-specific block applies, and all 1 sampled paths are allowed.","protocol":"RFC 9309 §2.2.1 · sampled paths","evidence":{"file":"/robots.txt","line":null,"snippet":null},"recommendation":"Add an explicit OAI-SearchBot group so the allow decision is auditable rather than inherited from a wildcard.","fix":{"language":"robots","code":"User-agent: OAI-SearchBot\nAllow: /"},"sample":{"total":1,"passed":1,"warned":0,"failed":0,"affected":[]}},{"weight":0,"scope":"site","id":"bot-chatgpt-user","label":"ChatGPT-User access","status":"pass","summary":"Allowed · 1/1 sampled paths","detail":"OpenAI · fetch intent: No crawler-specific block applies, and all 1 sampled paths are allowed.","protocol":"RFC 9309 §2.2.1 · sampled paths","evidence":{"file":"/robots.txt","line":null,"snippet":null},"recommendation":"Add an explicit ChatGPT-User group so the allow decision is auditable rather than inherited from a wildcard.","fix":{"language":"robots","code":"User-agent: ChatGPT-User\nAllow: /"},"sample":{"total":1,"passed":1,"warned":0,"failed":0,"affected":[]}},{"weight":0,"scope":"site","id":"bot-claudebot","label":"ClaudeBot access","status":"pass","summary":"Allowed · 1/1 sampled paths","detail":"Anthropic · training intent: No crawler-specific block applies, and all 1 sampled paths are allowed.","protocol":"RFC 9309 §2.2.1 · sampled paths","evidence":{"file":"/robots.txt","line":null,"snippet":null},"recommendation":"Add an explicit ClaudeBot group so the allow decision is auditable rather than inherited from a wildcard.","fix":{"language":"robots","code":"User-agent: ClaudeBot\nAllow: /"},"sample":{"total":1,"passed":1,"warned":0,"failed":0,"affected":[]}},{"weight":0,"scope":"site","id":"bot-claude-searchbot","label":"Claude-SearchBot access","status":"pass","summary":"Allowed · 1/1 sampled paths","detail":"Anthropic · search intent: No crawler-specific block applies, and all 1 sampled paths are allowed.","protocol":"RFC 9309 §2.2.1 · sampled paths","evidence":{"file":"/robots.txt","line":null,"snippet":null},"recommendation":"Add an explicit Claude-SearchBot group so the allow decision is auditable rather than inherited from a wildcard.","fix":{"language":"robots","code":"User-agent: Claude-SearchBot\nAllow: /"},"sample":{"total":1,"passed":1,"warned":0,"failed":0,"affected":[]}},{"weight":0,"scope":"site","id":"bot-claude-user","label":"Claude-User access","status":"pass","summary":"Allowed · 1/1 sampled paths","detail":"Anthropic · fetch intent: No crawler-specific block applies, and all 1 sampled paths are allowed.","protocol":"RFC 9309 §2.2.1 · sampled paths","evidence":{"file":"/robots.txt","line":null,"snippet":null},"recommendation":"Add an explicit Claude-User group so the allow decision is auditable rather than inherited from a wildcard.","fix":{"language":"robots","code":"User-agent: Claude-User\nAllow: /"},"sample":{"total":1,"passed":1,"warned":0,"failed":0,"affected":[]}},{"weight":0,"scope":"site","id":"bot-google-extended","label":"Google-Extended access","status":"pass","summary":"Allowed · 1/1 sampled paths","detail":"Google · training intent: No crawler-specific block applies, and all 1 sampled paths are allowed.","protocol":"RFC 9309 §2.2.1 · sampled paths","evidence":{"file":"/robots.txt","line":null,"snippet":null},"recommendation":"Add an explicit Google-Extended group so the allow decision is auditable rather than inherited from a wildcard.","fix":{"language":"robots","code":"User-agent: Google-Extended\nAllow: /"},"sample":{"total":1,"passed":1,"warned":0,"failed":0,"affected":[]}},{"weight":0,"scope":"site","id":"bot-googlebot","label":"Googlebot access","status":"pass","summary":"Allowed · 1/1 sampled paths","detail":"Google · search intent: No crawler-specific block applies, and all 1 sampled paths are allowed.","protocol":"RFC 9309 §2.2.1 · sampled paths","evidence":{"file":"/robots.txt","line":null,"snippet":null},"recommendation":"Add an explicit Googlebot group so the allow decision is auditable rather than inherited from a wildcard.","fix":{"language":"robots","code":"User-agent: Googlebot\nAllow: /"},"sample":{"total":1,"passed":1,"warned":0,"failed":0,"affected":[]}},{"weight":0,"scope":"site","id":"bot-bingbot","label":"Bingbot access","status":"pass","summary":"Allowed · 1/1 sampled paths","detail":"Microsoft · search intent: No crawler-specific block applies, and all 1 sampled paths are allowed.","protocol":"RFC 9309 §2.2.1 · sampled paths","evidence":{"file":"/robots.txt","line":null,"snippet":null},"recommendation":"Add an explicit Bingbot group so the allow decision is auditable rather than inherited from a wildcard.","fix":{"language":"robots","code":"User-agent: Bingbot\nAllow: /"},"sample":{"total":1,"passed":1,"warned":0,"failed":0,"affected":[]}},{"weight":0,"scope":"site","id":"bot-perplexitybot","label":"PerplexityBot access","status":"pass","summary":"Allowed · 1/1 sampled paths","detail":"Perplexity · search intent: No crawler-specific block applies, and all 1 sampled paths are allowed.","protocol":"RFC 9309 §2.2.1 · sampled paths","evidence":{"file":"/robots.txt","line":null,"snippet":null},"recommendation":"Add an explicit PerplexityBot group so the allow decision is auditable rather than inherited from a wildcard.","fix":{"language":"robots","code":"User-agent: PerplexityBot\nAllow: /"},"sample":{"total":1,"passed":1,"warned":0,"failed":0,"affected":[]}},{"weight":0,"scope":"site","id":"bot-perplexity-user","label":"Perplexity-User access","status":"pass","summary":"Allowed · 1/1 sampled paths","detail":"Perplexity · fetch intent: No crawler-specific block applies, and all 1 sampled paths are allowed.","protocol":"RFC 9309 §2.2.1 · sampled paths","evidence":{"file":"/robots.txt","line":null,"snippet":null},"recommendation":"Add an explicit Perplexity-User group so the allow decision is auditable rather than inherited from a wildcard.","fix":{"language":"robots","code":"User-agent: Perplexity-User\nAllow: /"},"sample":{"total":1,"passed":1,"warned":0,"failed":0,"affected":[]}},{"weight":0,"scope":"site","id":"bot-applebot-extended","label":"Applebot-Extended access","status":"pass","summary":"Allowed · 1/1 sampled paths","detail":"Apple · training intent: No crawler-specific block applies, and all 1 sampled paths are allowed.","protocol":"RFC 9309 §2.2.1 · sampled paths","evidence":{"file":"/robots.txt","line":null,"snippet":null},"recommendation":"Add an explicit Applebot-Extended group so the allow decision is auditable rather than inherited from a wildcard.","fix":{"language":"robots","code":"User-agent: Applebot-Extended\nAllow: /"},"sample":{"total":1,"passed":1,"warned":0,"failed":0,"affected":[]}},{"weight":0,"scope":"site","id":"bot-meta-externalagent","label":"Meta-ExternalAgent access","status":"pass","summary":"Allowed · 1/1 sampled paths","detail":"Meta · training intent: No crawler-specific block applies, and all 1 sampled paths are allowed.","protocol":"RFC 9309 §2.2.1 · sampled paths","evidence":{"file":"/robots.txt","line":null,"snippet":null},"recommendation":"Add an explicit Meta-ExternalAgent group so the allow decision is auditable rather than inherited from a wildcard.","fix":{"language":"robots","code":"User-agent: Meta-ExternalAgent\nAllow: /"},"sample":{"total":1,"passed":1,"warned":0,"failed":0,"affected":[]}},{"weight":0,"scope":"site","id":"bot-amazonbot","label":"Amazonbot access","status":"pass","summary":"Allowed · 1/1 sampled paths","detail":"Amazon · search intent: No crawler-specific block applies, and all 1 sampled paths are allowed.","protocol":"RFC 9309 §2.2.1 · sampled paths","evidence":{"file":"/robots.txt","line":null,"snippet":null},"recommendation":"Add an explicit Amazonbot group so the allow decision is auditable rather than inherited from a wildcard.","fix":{"language":"robots","code":"User-agent: Amazonbot\nAllow: /"},"sample":{"total":1,"passed":1,"warned":0,"failed":0,"affected":[]}},{"weight":0,"scope":"site","id":"bot-ccbot","label":"CCBot access","status":"pass","summary":"Allowed · 1/1 sampled paths","detail":"Common Crawl · training intent: No crawler-specific block applies, and all 1 sampled paths are allowed.","protocol":"RFC 9309 §2.2.1 · sampled paths","evidence":{"file":"/robots.txt","line":null,"snippet":null},"recommendation":"Add an explicit CCBot group so the allow decision is auditable rather than inherited from a wildcard.","fix":{"language":"robots","code":"User-agent: CCBot\nAllow: /"},"sample":{"total":1,"passed":1,"warned":0,"failed":0,"affected":[]}},{"weight":0,"scope":"site","id":"bot-bytespider","label":"Bytespider access","status":"pass","summary":"Allowed · 1/1 sampled paths","detail":"ByteDance · training intent: No crawler-specific block applies, and all 1 sampled paths are allowed.","protocol":"RFC 9309 §2.2.1 · sampled paths","evidence":{"file":"/robots.txt","line":null,"snippet":null},"recommendation":"Add an explicit Bytespider group so the allow decision is auditable rather than inherited from a wildcard.","fix":{"language":"robots","code":"User-agent: Bytespider\nAllow: /"},"sample":{"total":1,"passed":1,"warned":0,"failed":0,"affected":[]}},{"weight":1,"scope":"page","id":"meta-robots","label":"robots meta directives","status":"pass","summary":"1 / 1 pages pass","detail":"1 of 1 sampled pages pass.","protocol":"HTML robots meta directives","evidence":{"file":"/","line":null,"snippet":null},"score":100,"sample":{"total":1,"passed":1,"warned":0,"failed":0,"affected":[]}},{"weight":2,"scope":"page","id":"x-robots-tag","label":"X-Robots-Tag header","status":"pass","summary":"1 / 1 pages pass","detail":"1 of 1 sampled pages pass.","protocol":"X-Robots-Tag · RFC 9309","evidence":{"file":"HTTP response headers","line":null,"snippet":null},"score":100,"sample":{"total":1,"passed":1,"warned":0,"failed":0,"affected":[]}}]},{"id":"parseability","name":"Static Parseability","shortName":"Parse","description":"Does the first HTML response read like a document, not a script bundle?","score":33,"checks":[{"weight":1.5,"scope":"page","id":"h1","label":"Single H1","status":"fail","summary":"0 / 1 pages pass","detail":"0 of 1 sampled pages pass · 1 fail. Failing pages: https://example.com/.","protocol":"HTML heading outline","evidence":{"file":"/","line":null,"snippet":null},"recommendation":"Give the page exactly one descriptive H1 that names the topic.","fix":{"language":"html","code":"<h1>Page topic in one clear sentence</h1>"},"score":0,"sample":{"total":1,"passed":0,"warned":0,"failed":1,"affected":["https://example.com/"]}},{"weight":2,"scope":"page","id":"heading-order","label":"Heading sequence","status":"fail","summary":"0 / 1 pages pass","detail":"0 of 1 sampled pages pass · 1 fail. Failing pages: https://example.com/.","protocol":"Semantic HTML heading hierarchy","evidence":{"file":"/","line":null,"snippet":null},"recommendation":"Keep heading levels sequential (H1 → H2 → H3) so the document outline is unambiguous.","fix":{"language":"html","code":"<h1>Page topic</h1>\n  <h2>First section</h2>\n    <h3>Supporting detail</h3>\n  <h2>Second section</h2>"},"score":0,"sample":{"total":1,"passed":0,"warned":0,"failed":1,"affected":["https://example.com/"]}},{"weight":2.5,"scope":"page","id":"snr","label":"Static HTML signal-to-noise","status":"pass","summary":"1 / 1 pages pass","detail":"1 of 1 sampled pages pass.","protocol":"Static HTML SNR ≥ 65%","evidence":{"file":"/","line":1,"snippet":"<!doctype html><html lang=en><head><meta charset=utf-8><link rel=icon href=data:,><meta name=viewport content=\"width=device-width,initial-scale=1\"><title>Example Domain</title><style>html{color-scheme:light dark;background:light-dark(#eee,#"},"score":100,"sample":{"total":1,"passed":1,"warned":0,"failed":0,"affected":[]}},{"weight":2,"scope":"page","id":"ssr-content","label":"SSR payload readability","status":"fail","summary":"0 / 1 pages pass","detail":"0 of 1 sampled pages pass · 1 fail. Failing pages: https://example.com/.","protocol":"No-JS initial response","evidence":{"file":"/","line":1,"snippet":"<!doctype html><html lang=en><head><meta charset=utf-8><link rel=icon href=data:,><meta name=viewport content=\"width=device-width,initial-scale=1\"><title>Example Domain</title><style>html{color-scheme:light dark;background:light-dark(#eee,#"},"recommendation":"Render primary content on the server (SSR/SSG) so it exists in the first HTML response.","fix":{"language":"html","code":"<!-- Server-render the primary content, not a client-only shell -->\n<main>\n  <h1>Page topic</h1>\n  <p>At least 600 characters of readable content in the initial response.</p>\n</main>"},"score":0,"sample":{"total":1,"passed":0,"warned":0,"failed":1,"affected":["https://example.com/"]}},{"weight":2,"scope":"page","id":"faq-content","label":"Visible FAQ content","status":"fail","summary":"0 / 1 pages pass","detail":"0 of 1 sampled pages pass · 1 fail. Failing pages: https://example.com/.","protocol":"Visible Q&A · FAQPage mainEntity","evidence":{"file":"/","line":null,"snippet":null},"recommendation":"Add a short FAQ to the pages people ask about most: three questions with one-paragraph answers in the HTML.","fix":{"language":"html","code":"<section aria-labelledby=\"faq\">\n  <h2 id=\"faq\">Frequently asked questions</h2>\n  <h3>What does it cost?</h3>\n  <p>A direct answer in one paragraph, visible without JavaScript.</p>\n  <h3>How long does setup take?</h3>\n  <p>A direct answer in one paragraph, visible without JavaScript.</p>\n  <h3>Can I cancel at any time?</h3>\n  <p>A direct answer in one paragraph, visible without JavaScript.</p>\n</section>\n\n<script type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What does it cost?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"A direct answer in one paragraph.\"\n      }\n    }\n  ]\n}\n</script>"},"score":0,"sample":{"total":1,"passed":0,"warned":0,"failed":1,"affected":["https://example.com/"]}},{"weight":1.5,"scope":"page","id":"answer-first","label":"Answer-first summary","status":"warn","summary":"0 / 1 pages pass","detail":"0 of 1 sampled pages pass · 1 warn. Failing pages: https://example.com/.","protocol":"Answer-first content structure","evidence":{"file":"/","line":1,"snippet":"<!doctype html><html lang=en><head><meta charset=utf-8><link rel=icon href=data:,><meta name=viewport content=\"width=device-width,initial-scale=1\"><title>Example Domain</title><style>html{color-scheme:light dark;background:light-dark(#eee,#"},"recommendation":"Put one plain-language summary paragraph of 40–160 words directly under the H1.","fix":{"language":"html","code":"<h1>Page topic</h1>\n<p>One paragraph of 40–160 words that answers the main question directly, before the first section heading.</p>\n<h2>Supporting detail</h2>"},"score":50,"sample":{"total":1,"passed":0,"warned":1,"failed":0,"affected":["https://example.com/"]}},{"weight":1,"scope":"page","id":"section-chunks","label":"Chunk-friendly sections","status":"pass","summary":"1 / 1 pages pass","detail":"1 of 1 sampled pages pass.","protocol":"Section length · 80–500 word median","evidence":{"file":"/","line":1,"snippet":"<!doctype html><html lang=en><head><meta charset=utf-8><link rel=icon href=data:,><meta name=viewport content=\"width=device-width,initial-scale=1\"><title>Example Domain</title><style>html{color-scheme:light dark;background:light-dark(#eee,#"},"score":100,"sample":{"total":1,"passed":1,"warned":0,"failed":0,"affected":[]}},{"weight":1.5,"scope":"page","id":"page-metadata","label":"Page title and description","status":"fail","summary":"0 / 1 pages pass","detail":"0 of 1 sampled pages pass · 1 fail. Failing pages: https://example.com/.","protocol":"HTML title, meta description, html lang","evidence":{"file":"/","line":1,"snippet":"<!doctype html><html lang=en><head><meta charset=utf-8><link rel=icon href=data:,><meta name=viewport content=\"width=device-width,initial-scale=1\"><title>Example Domain</title><style>html{color-scheme:light dark;background:light-dark(#eee,#"},"recommendation":"Give each page a unique 15–70 character title, a 50–160 character meta description and a lang attribute on <html>.","fix":{"language":"html","code":"<html lang=\"en\">\n<head>\n  <title>A specific page title under 70 characters</title>\n  <meta name=\"description\" content=\"A 50–160 character summary that reads as a sentence and says what the page covers.\" />\n</head>"},"score":0,"sample":{"total":1,"passed":0,"warned":0,"failed":1,"affected":["https://example.com/"]}},{"weight":0.5,"scope":"page","id":"image-alt","label":"Image alt text","status":"pass","summary":"1 / 1 pages pass","detail":"1 of 1 sampled pages pass.","protocol":"HTML img alt attribute","evidence":{"file":"/","line":null,"snippet":null},"score":100,"sample":{"total":1,"passed":1,"warned":0,"failed":0,"affected":[]}},{"weight":0.5,"scope":"page","id":"citable-evidence","label":"Statistics and references","status":"warn","summary":"0 / 1 pages pass","detail":"0 of 1 sampled pages pass · 1 warn. Failing pages: https://example.com/.","protocol":"Editorial evidence heuristic","evidence":{"file":"/","line":1,"snippet":null},"recommendation":"Add concrete numbers, dates or measurements and link to the sources behind them. Editorial work, not a template change.","score":50,"sample":{"total":1,"passed":0,"warned":1,"failed":0,"affected":["https://example.com/"]}}]},{"id":"structured","name":"Structured Machine Interfaces","shortName":"Schema","description":"Can agents classify the page and execute against a schema without guessing?","score":10,"checks":[{"weight":2.5,"scope":"page","id":"json-ld","label":"Structured data presence & syntax","status":"fail","summary":"0 / 1 pages pass","detail":"0 of 1 sampled pages pass · 1 fail. Failing pages: https://example.com/.","protocol":"schema.org · JSON-LD, microdata, RDFa","evidence":{"file":"/","line":null,"snippet":null},"recommendation":"Add a JSON-LD block with @context and @type so the page can be classified without guessing.","fix":{"language":"json","code":"{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"SoftwareApplication\",\n  \"name\": \"Your site or page\",\n  \"description\": \"One-sentence summary of the page.\"\n}"},"score":0,"sample":{"total":1,"passed":0,"warned":0,"failed":1,"affected":["https://example.com/"]}},{"weight":1.5,"scope":"page","id":"schema-types","label":"Profile schema types","status":"fail","summary":"0 / 1 pages pass","detail":"0 of 1 sampled pages pass · 1 fail. Failing pages: https://example.com/.","protocol":"schema.org · SoftwareApplication / WebApplication","evidence":{"file":"/","line":null,"snippet":null},"recommendation":"Add a SoftwareApplication object (or an equivalent saas / product type) to the page's JSON-LD.","fix":{"language":"json","code":"{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"SoftwareApplication\",\n  \"name\": \"Your site or page\",\n  \"description\": \"One-sentence summary matched to this profile.\"\n}"},"score":0,"sample":{"total":1,"passed":0,"warned":0,"failed":1,"affected":["https://example.com/"]}},{"weight":1.5,"scope":"page","id":"schema-depth","label":"Schema property depth","status":"fail","summary":"0 / 1 pages pass","detail":"0 of 1 sampled pages pass · 1 fail. Failing pages: https://example.com/.","protocol":"schema.org · SoftwareApplication","evidence":{"file":"/","line":null,"snippet":null},"recommendation":"Fill in the missing properties on the primary structured data node so an agent can answer factual questions without guessing.","fix":{"language":"json","code":"{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"SoftwareApplication\",\n  \"name\": \"Your name\"\n}"},"score":0,"sample":{"total":1,"passed":0,"warned":0,"failed":1,"affected":["https://example.com/"]}},{"weight":0.5,"scope":"page","id":"breadcrumbs","label":"Breadcrumb trail","status":"info","summary":"Info across 1 pages","detail":"The homepage does not need a breadcrumb trail.","protocol":"schema.org · BreadcrumbList","evidence":{"file":"/","line":null,"snippet":null},"sample":{"total":1,"passed":0,"warned":0,"failed":0,"affected":[]}},{"weight":1.5,"scope":"site","id":"openapi","label":"OpenAPI description","status":"warn","summary":"Not found","detail":"No OpenAPI description was found at /openapi.json, the usual .well-known paths, or the API catalog.","protocol":"OpenAPI 3 · /openapi.json","evidence":{"file":"/openapi.json","line":null,"snippet":null},"recommendation":"If the site exposes an API, publish an OpenAPI description at /openapi.json so agents can call it correctly.","fix":{"language":"json","code":"{\n  \"openapi\": \"3.1.0\",\n  \"info\": {\n    \"title\": \"Your API\",\n    \"version\": \"1.0.0\"\n  },\n  \"paths\": {}\n}"}},{"weight":2.5,"scope":"site","id":"entity-identity","label":"Organization or Person identity","status":"fail","summary":"No identity node","detail":"No Organization or Person structured-data node was found on the homepage or a Company page such as /about or /team.","protocol":"schema.org · Organization / Person · sameAs","evidence":{"file":"/","line":null,"snippet":null},"recommendation":"Publish an Organization or Person node with name, url, description and at least two sameAs links to authoritative profiles.","fix":{"language":"json","code":"{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Organization\",\n  \"name\": \"Example Domain\",\n  \"url\": \"https://example.com\",\n  \"description\": \"One sentence describing who you are and what you do.\",\n  \"sameAs\": [\n    \"https://www.wikidata.org/wiki/Q000000\",\n    \"https://www.linkedin.com/company/your-company\",\n    \"https://github.com/your-org\",\n    \"https://www.crunchbase.com/organization/your-company\"\n  ]\n}"}},{"weight":0.5,"scope":"site","id":"well-known","label":".well-known discovery","status":"warn","summary":"Nothing found","detail":"No /.well-known/api-catalog document was found. Publish one so agents can discover the OpenAPI description.","protocol":"RFC 9727 · API catalog · RFC 9116 · security.txt","evidence":{"file":"/.well-known/","line":null,"snippet":null},"recommendation":"Publish /.well-known/api-catalog with a linkset entry pointing at the OpenAPI description.","fix":{"language":"json","code":"{\n  \"linkset\": [\n    {\n      \"anchor\": \"https://example.com\",\n      \"service-desc\": [\n        {\n          \"href\": \"https://example.com/openapi.json\",\n          \"type\": \"application/vnd.oai.openapi+json\"\n        }\n      ]\n    }\n  ]\n}"}}]}],"classification":{"type":"saas","label":"SaaS / product","confidence":15,"method":"heuristic","detected":{"type":"saas","label":"SaaS / product","confidence":15},"alternatives":[{"type":"saas","label":"SaaS / product","confidence":15},{"type":"portfolio","label":"Portfolio","confidence":15},{"type":"docs","label":"Documentation","confidence":15},{"type":"ecommerce","label":"E-commerce","confidence":15},{"type":"local-business","label":"Local business","confidence":15},{"type":"blog-media","label":"Blog / media","confidence":15}],"signals":[{"type":"saas","label":"Fallback profile","detail":"No strong profile signals were found, so the audit defaulted to SaaS. Override it in the workspace if this site is a portfolio, store, local business or publication.","weight":0,"source":"fallback"}],"compatibility":{"openApiScored":true,"requiredSchema":["SoftwareApplication","WebApplication"],"recommendedSchema":["SoftwareApplication","WebApplication","FAQPage","Organization"],"faqExpected":true,"note":"OpenAPI is scored. Schema expectations require SoftwareApplication or WebApplication, with FAQPage and Organization as depth signals."}},"profile":{"url":"https://example.com/","finalUrl":"https://example.com/","domain":"example.com","title":"Example Domain","description":"","siteName":"Example Domain","language":"en"},"pages":[{"url":"https://example.com/","label":"Home","section":"Home","source":"home"}],"pageResults":[{"url":"https://example.com/","finalUrl":"https://example.com/","label":"Home","section":"Home","source":"home","outcome":"analyzed","status":"fail","score":38,"grade":"F","checks":[{"weight":1,"scope":"page","id":"meta-robots","label":"robots meta directives","status":"pass","summary":"Not set","detail":"No The robots meta tag directives were returned, so nothing blocks indexing or AI ingestion.","protocol":"HTML robots meta directives","evidence":{"file":"/","line":null,"snippet":null}},{"weight":2,"scope":"page","id":"x-robots-tag","label":"X-Robots-Tag header","status":"pass","summary":"Not set","detail":"No X-Robots-Tag directives were returned, so nothing blocks indexing or AI ingestion.","protocol":"X-Robots-Tag · RFC 9309","evidence":{"file":"HTTP response headers","line":null,"snippet":null}},{"weight":1.5,"scope":"page","id":"h1","label":"Single H1","status":"fail","summary":"Missing","detail":"No H1 heading was found in the content region.","protocol":"HTML heading outline","evidence":{"file":"/","line":null,"snippet":null},"recommendation":"Give the page exactly one descriptive H1 that names the topic.","fix":{"language":"html","code":"<h1>Page topic in one clear sentence</h1>"}},{"weight":2,"scope":"page","id":"heading-order","label":"Heading sequence","status":"fail","summary":"No headings","detail":"The page contains no heading elements for a parser to build an outline from.","protocol":"Semantic HTML heading hierarchy","evidence":{"file":"/","line":null,"snippet":null},"recommendation":"Keep heading levels sequential (H1 → H2 → H3) so the document outline is unambiguous.","fix":{"language":"html","code":"<h1>Page topic</h1>\n  <h2>First section</h2>\n    <h3>Supporting detail</h3>\n  <h2>Second section</h2>"}},{"weight":2.5,"scope":"page","id":"snr","label":"Static HTML signal-to-noise","status":"pass","summary":"100.0% signal","detail":"156 characters of content text against 0 characters of navigation, footer, banner and widget text. V2 requires at least 65% signal.","protocol":"Static HTML SNR ≥ 65%","evidence":{"file":"/","line":1,"snippet":"<!doctype html><html lang=en><head><meta charset=utf-8><link rel=icon href=data:,><meta name=viewport content=\"width=device-width,initial-scale=1\"><title>Example Domain</title><style>html{color-scheme:light dark;background:light-dark(#eee,#"}},{"weight":2,"scope":"page","id":"ssr-content","label":"SSR payload readability","status":"fail","summary":"156 chars in HTML","detail":"The initial HTML response contains little readable content, which suggests client-side rendering or a JavaScript gate.","protocol":"No-JS initial response","evidence":{"file":"/","line":1,"snippet":"<!doctype html><html lang=en><head><meta charset=utf-8><link rel=icon href=data:,><meta name=viewport content=\"width=device-width,initial-scale=1\"><title>Example Domain</title><style>html{color-scheme:light dark;background:light-dark(#eee,#"},"recommendation":"Render primary content on the server (SSR/SSG) so it exists in the first HTML response.","fix":{"language":"html","code":"<!-- Server-render the primary content, not a client-only shell -->\n<main>\n  <h1>Page topic</h1>\n  <p>At least 600 characters of readable content in the initial response.</p>\n</main>"}},{"weight":2,"scope":"page","id":"faq-content","label":"Visible FAQ content","status":"fail","summary":"None found","detail":"No visible question-and-answer content was found on the page.","protocol":"Visible Q&A · FAQPage mainEntity","evidence":{"file":"/","line":null,"snippet":null},"recommendation":"Add a short FAQ to the pages people ask about most: three questions with one-paragraph answers in the HTML.","fix":{"language":"html","code":"<section aria-labelledby=\"faq\">\n  <h2 id=\"faq\">Frequently asked questions</h2>\n  <h3>What does it cost?</h3>\n  <p>A direct answer in one paragraph, visible without JavaScript.</p>\n  <h3>How long does setup take?</h3>\n  <p>A direct answer in one paragraph, visible without JavaScript.</p>\n  <h3>Can I cancel at any time?</h3>\n  <p>A direct answer in one paragraph, visible without JavaScript.</p>\n</section>\n\n<script type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What does it cost?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"A direct answer in one paragraph.\"\n      }\n    }\n  ]\n}\n</script>"}},{"weight":1.5,"scope":"page","id":"answer-first","label":"Answer-first summary","status":"warn","summary":"25 word summary","detail":"The first paragraph has 25 words. A 40–160 word summary is easier for a model to quote.","protocol":"Answer-first content structure","evidence":{"file":"/","line":1,"snippet":"<!doctype html><html lang=en><head><meta charset=utf-8><link rel=icon href=data:,><meta name=viewport content=\"width=device-width,initial-scale=1\"><title>Example Domain</title><style>html{color-scheme:light dark;background:light-dark(#eee,#"},"recommendation":"Put one plain-language summary paragraph of 40–160 words directly under the H1.","fix":{"language":"html","code":"<h1>Page topic</h1>\n<p>One paragraph of 40–160 words that answers the main question directly, before the first section heading.</p>\n<h2>Supporting detail</h2>"}},{"weight":1,"scope":"page","id":"section-chunks","label":"Chunk-friendly sections","status":"pass","summary":"Short page, no sections","detail":"The page is short enough that section splitting does not change how it is quoted.","protocol":"Section length · 80–500 word median","evidence":{"file":"/","line":1,"snippet":"<!doctype html><html lang=en><head><meta charset=utf-8><link rel=icon href=data:,><meta name=viewport content=\"width=device-width,initial-scale=1\"><title>Example Domain</title><style>html{color-scheme:light dark;background:light-dark(#eee,#"}},{"weight":1.5,"scope":"page","id":"page-metadata","label":"Page title and description","status":"fail","summary":"Description missing","detail":"Title 14 chars (target 15–70), description 0 chars (target 50–160, missing), language en.","protocol":"HTML title, meta description, html lang","evidence":{"file":"/","line":1,"snippet":"<!doctype html><html lang=en><head><meta charset=utf-8><link rel=icon href=data:,><meta name=viewport content=\"width=device-width,initial-scale=1\"><title>Example Domain</title><style>html{color-scheme:light dark;background:light-dark(#eee,#"},"recommendation":"Give each page a unique 15–70 character title, a 50–160 character meta description and a lang attribute on <html>.","fix":{"language":"html","code":"<html lang=\"en\">\n<head>\n  <title>A specific page title under 70 characters</title>\n  <meta name=\"description\" content=\"A 50–160 character summary that reads as a sentence and says what the page covers.\" />\n</head>"}},{"weight":0.5,"scope":"page","id":"image-alt","label":"Image alt text","status":"pass","summary":"No content images","detail":"The content region contains no images that need alt text.","protocol":"HTML img alt attribute","evidence":{"file":"/","line":null,"snippet":null}},{"weight":0.5,"scope":"page","id":"citable-evidence","label":"Statistics and references","status":"warn","summary":"0 numeric claims · 0 outbound","detail":"0 numeric claims across 25 words (0.0 per 500 words) and 0 outbound references. This is a heuristic, not a correctness score.","protocol":"Editorial evidence heuristic","evidence":{"file":"/","line":1,"snippet":null},"recommendation":"Add concrete numbers, dates or measurements and link to the sources behind them. Editorial work, not a template change."},{"weight":2.5,"scope":"page","id":"json-ld","label":"Structured data presence & syntax","status":"fail","summary":"Missing","detail":"No JSON-LD, microdata or RDFa structured data was found in the page.","protocol":"schema.org · JSON-LD, microdata, RDFa","evidence":{"file":"/","line":null,"snippet":null},"recommendation":"Add a JSON-LD block with @context and @type so the page can be classified without guessing.","fix":{"language":"json","code":"{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"SoftwareApplication\",\n  \"name\": \"Your site or page\",\n  \"description\": \"One-sentence summary of the page.\"\n}"}},{"weight":1.5,"scope":"page","id":"schema-types","label":"Profile schema types","status":"fail","summary":"0 / 2 required","detail":"The SaaS / product profile requires SoftwareApplication or WebApplication. Found: none. Recommended depth types are SoftwareApplication, WebApplication, FAQPage, Organization.","protocol":"schema.org · SoftwareApplication / WebApplication","evidence":{"file":"/","line":null,"snippet":null},"recommendation":"Add a SoftwareApplication object (or an equivalent saas / product type) to the page's JSON-LD.","fix":{"language":"json","code":"{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"SoftwareApplication\",\n  \"name\": \"Your site or page\",\n  \"description\": \"One-sentence summary matched to this profile.\"\n}"}},{"weight":1.5,"scope":"page","id":"schema-depth","label":"Schema property depth","status":"fail","summary":"No matching type","detail":"No structured data type with a required-property table was found on the page.","protocol":"schema.org · SoftwareApplication","evidence":{"file":"/","line":null,"snippet":null},"recommendation":"Fill in the missing properties on the primary structured data node so an agent can answer factual questions without guessing.","fix":{"language":"json","code":"{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"SoftwareApplication\",\n  \"name\": \"Your name\"\n}"}},{"weight":0.5,"scope":"page","id":"breadcrumbs","label":"Breadcrumb trail","status":"info","summary":"Homepage","detail":"The homepage does not need a breadcrumb trail.","protocol":"schema.org · BreadcrumbList","evidence":{"file":"/","line":null,"snippet":null}},{"weight":1.5,"scope":"page","id":"freshness","label":"Freshness signals","status":"pass","summary":"Modified 0 months ago","detail":"A machine-readable modified date is present and recent.","protocol":"schema.org dateModified · article:modified_time · sitemap lastmod","evidence":{"file":"/","line":null,"snippet":null}},{"weight":1,"scope":"page","id":"canonical","label":"Canonical URL","status":"warn","summary":"Missing","detail":"No canonical link was found, so an agent has to infer which URL is authoritative.","protocol":"HTML link rel=canonical","evidence":{"file":"/","line":null,"snippet":null},"recommendation":"Add an absolute, same-origin canonical link to each page and point it at the authoritative URL.","fix":{"language":"html","code":"<link rel=\"canonical\" href=\"https://example.com\" />"}}],"title":"Example Domain","textChars":156,"snr":1,"h1Count":0,"headingCount":0,"jsonLdTypes":[],"structuredFormats":[],"metaRobots":"","xRobotsTag":null,"freshness":{"source":"header","property":"last-modified","iso":"Sat, 24 Oct 2026 11:34:40 GMT","line":null},"faqPairs":0,"hasFaqSchema":false,"identity":[],"descriptionChars":0,"canonical":null,"fetchMs":0}],"focusPage":{"url":"https://example.com/","finalUrl":"https://example.com/","label":"Home","section":"Home","source":"home","outcome":"analyzed","status":"fail","score":38,"grade":"F","checks":[{"weight":1,"scope":"page","id":"meta-robots","label":"robots meta directives","status":"pass","summary":"Not set","detail":"No The robots meta tag directives were returned, so nothing blocks indexing or AI ingestion.","protocol":"HTML robots meta directives","evidence":{"file":"/","line":null,"snippet":null}},{"weight":2,"scope":"page","id":"x-robots-tag","label":"X-Robots-Tag header","status":"pass","summary":"Not set","detail":"No X-Robots-Tag directives were returned, so nothing blocks indexing or AI ingestion.","protocol":"X-Robots-Tag · RFC 9309","evidence":{"file":"HTTP response headers","line":null,"snippet":null}},{"weight":1.5,"scope":"page","id":"h1","label":"Single H1","status":"fail","summary":"Missing","detail":"No H1 heading was found in the content region.","protocol":"HTML heading outline","evidence":{"file":"/","line":null,"snippet":null},"recommendation":"Give the page exactly one descriptive H1 that names the topic.","fix":{"language":"html","code":"<h1>Page topic in one clear sentence</h1>"}},{"weight":2,"scope":"page","id":"heading-order","label":"Heading sequence","status":"fail","summary":"No headings","detail":"The page contains no heading elements for a parser to build an outline from.","protocol":"Semantic HTML heading hierarchy","evidence":{"file":"/","line":null,"snippet":null},"recommendation":"Keep heading levels sequential (H1 → H2 → H3) so the document outline is unambiguous.","fix":{"language":"html","code":"<h1>Page topic</h1>\n  <h2>First section</h2>\n    <h3>Supporting detail</h3>\n  <h2>Second section</h2>"}},{"weight":2.5,"scope":"page","id":"snr","label":"Static HTML signal-to-noise","status":"pass","summary":"100.0% signal","detail":"156 characters of content text against 0 characters of navigation, footer, banner and widget text. V2 requires at least 65% signal.","protocol":"Static HTML SNR ≥ 65%","evidence":{"file":"/","line":1,"snippet":"<!doctype html><html lang=en><head><meta charset=utf-8><link rel=icon href=data:,><meta name=viewport content=\"width=device-width,initial-scale=1\"><title>Example Domain</title><style>html{color-scheme:light dark;background:light-dark(#eee,#"}},{"weight":2,"scope":"page","id":"ssr-content","label":"SSR payload readability","status":"fail","summary":"156 chars in HTML","detail":"The initial HTML response contains little readable content, which suggests client-side rendering or a JavaScript gate.","protocol":"No-JS initial response","evidence":{"file":"/","line":1,"snippet":"<!doctype html><html lang=en><head><meta charset=utf-8><link rel=icon href=data:,><meta name=viewport content=\"width=device-width,initial-scale=1\"><title>Example Domain</title><style>html{color-scheme:light dark;background:light-dark(#eee,#"},"recommendation":"Render primary content on the server (SSR/SSG) so it exists in the first HTML response.","fix":{"language":"html","code":"<!-- Server-render the primary content, not a client-only shell -->\n<main>\n  <h1>Page topic</h1>\n  <p>At least 600 characters of readable content in the initial response.</p>\n</main>"}},{"weight":2,"scope":"page","id":"faq-content","label":"Visible FAQ content","status":"fail","summary":"None found","detail":"No visible question-and-answer content was found on the page.","protocol":"Visible Q&A · FAQPage mainEntity","evidence":{"file":"/","line":null,"snippet":null},"recommendation":"Add a short FAQ to the pages people ask about most: three questions with one-paragraph answers in the HTML.","fix":{"language":"html","code":"<section aria-labelledby=\"faq\">\n  <h2 id=\"faq\">Frequently asked questions</h2>\n  <h3>What does it cost?</h3>\n  <p>A direct answer in one paragraph, visible without JavaScript.</p>\n  <h3>How long does setup take?</h3>\n  <p>A direct answer in one paragraph, visible without JavaScript.</p>\n  <h3>Can I cancel at any time?</h3>\n  <p>A direct answer in one paragraph, visible without JavaScript.</p>\n</section>\n\n<script type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What does it cost?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"A direct answer in one paragraph.\"\n      }\n    }\n  ]\n}\n</script>"}},{"weight":1.5,"scope":"page","id":"answer-first","label":"Answer-first summary","status":"warn","summary":"25 word summary","detail":"The first paragraph has 25 words. A 40–160 word summary is easier for a model to quote.","protocol":"Answer-first content structure","evidence":{"file":"/","line":1,"snippet":"<!doctype html><html lang=en><head><meta charset=utf-8><link rel=icon href=data:,><meta name=viewport content=\"width=device-width,initial-scale=1\"><title>Example Domain</title><style>html{color-scheme:light dark;background:light-dark(#eee,#"},"recommendation":"Put one plain-language summary paragraph of 40–160 words directly under the H1.","fix":{"language":"html","code":"<h1>Page topic</h1>\n<p>One paragraph of 40–160 words that answers the main question directly, before the first section heading.</p>\n<h2>Supporting detail</h2>"}},{"weight":1,"scope":"page","id":"section-chunks","label":"Chunk-friendly sections","status":"pass","summary":"Short page, no sections","detail":"The page is short enough that section splitting does not change how it is quoted.","protocol":"Section length · 80–500 word median","evidence":{"file":"/","line":1,"snippet":"<!doctype html><html lang=en><head><meta charset=utf-8><link rel=icon href=data:,><meta name=viewport content=\"width=device-width,initial-scale=1\"><title>Example Domain</title><style>html{color-scheme:light dark;background:light-dark(#eee,#"}},{"weight":1.5,"scope":"page","id":"page-metadata","label":"Page title and description","status":"fail","summary":"Description missing","detail":"Title 14 chars (target 15–70), description 0 chars (target 50–160, missing), language en.","protocol":"HTML title, meta description, html lang","evidence":{"file":"/","line":1,"snippet":"<!doctype html><html lang=en><head><meta charset=utf-8><link rel=icon href=data:,><meta name=viewport content=\"width=device-width,initial-scale=1\"><title>Example Domain</title><style>html{color-scheme:light dark;background:light-dark(#eee,#"},"recommendation":"Give each page a unique 15–70 character title, a 50–160 character meta description and a lang attribute on <html>.","fix":{"language":"html","code":"<html lang=\"en\">\n<head>\n  <title>A specific page title under 70 characters</title>\n  <meta name=\"description\" content=\"A 50–160 character summary that reads as a sentence and says what the page covers.\" />\n</head>"}},{"weight":0.5,"scope":"page","id":"image-alt","label":"Image alt text","status":"pass","summary":"No content images","detail":"The content region contains no images that need alt text.","protocol":"HTML img alt attribute","evidence":{"file":"/","line":null,"snippet":null}},{"weight":0.5,"scope":"page","id":"citable-evidence","label":"Statistics and references","status":"warn","summary":"0 numeric claims · 0 outbound","detail":"0 numeric claims across 25 words (0.0 per 500 words) and 0 outbound references. This is a heuristic, not a correctness score.","protocol":"Editorial evidence heuristic","evidence":{"file":"/","line":1,"snippet":null},"recommendation":"Add concrete numbers, dates or measurements and link to the sources behind them. Editorial work, not a template change."},{"weight":2.5,"scope":"page","id":"json-ld","label":"Structured data presence & syntax","status":"fail","summary":"Missing","detail":"No JSON-LD, microdata or RDFa structured data was found in the page.","protocol":"schema.org · JSON-LD, microdata, RDFa","evidence":{"file":"/","line":null,"snippet":null},"recommendation":"Add a JSON-LD block with @context and @type so the page can be classified without guessing.","fix":{"language":"json","code":"{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"SoftwareApplication\",\n  \"name\": \"Your site or page\",\n  \"description\": \"One-sentence summary of the page.\"\n}"}},{"weight":1.5,"scope":"page","id":"schema-types","label":"Profile schema types","status":"fail","summary":"0 / 2 required","detail":"The SaaS / product profile requires SoftwareApplication or WebApplication. Found: none. Recommended depth types are SoftwareApplication, WebApplication, FAQPage, Organization.","protocol":"schema.org · SoftwareApplication / WebApplication","evidence":{"file":"/","line":null,"snippet":null},"recommendation":"Add a SoftwareApplication object (or an equivalent saas / product type) to the page's JSON-LD.","fix":{"language":"json","code":"{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"SoftwareApplication\",\n  \"name\": \"Your site or page\",\n  \"description\": \"One-sentence summary matched to this profile.\"\n}"}},{"weight":1.5,"scope":"page","id":"schema-depth","label":"Schema property depth","status":"fail","summary":"No matching type","detail":"No structured data type with a required-property table was found on the page.","protocol":"schema.org · SoftwareApplication","evidence":{"file":"/","line":null,"snippet":null},"recommendation":"Fill in the missing properties on the primary structured data node so an agent can answer factual questions without guessing.","fix":{"language":"json","code":"{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"SoftwareApplication\",\n  \"name\": \"Your name\"\n}"}},{"weight":0.5,"scope":"page","id":"breadcrumbs","label":"Breadcrumb trail","status":"info","summary":"Homepage","detail":"The homepage does not need a breadcrumb trail.","protocol":"schema.org · BreadcrumbList","evidence":{"file":"/","line":null,"snippet":null}},{"weight":1.5,"scope":"page","id":"freshness","label":"Freshness signals","status":"pass","summary":"Modified 0 months ago","detail":"A machine-readable modified date is present and recent.","protocol":"schema.org dateModified · article:modified_time · sitemap lastmod","evidence":{"file":"/","line":null,"snippet":null}},{"weight":1,"scope":"page","id":"canonical","label":"Canonical URL","status":"warn","summary":"Missing","detail":"No canonical link was found, so an agent has to infer which URL is authoritative.","protocol":"HTML link rel=canonical","evidence":{"file":"/","line":null,"snippet":null},"recommendation":"Add an absolute, same-origin canonical link to each page and point it at the authoritative URL.","fix":{"language":"html","code":"<link rel=\"canonical\" href=\"https://example.com\" />"}}],"title":"Example Domain","textChars":156,"snr":1,"h1Count":0,"headingCount":0,"jsonLdTypes":[],"structuredFormats":[],"metaRobots":"","xRobotsTag":null,"freshness":{"source":"header","property":"last-modified","iso":"Sat, 24 Oct 2026 11:34:40 GMT","line":null},"faqPairs":0,"hasFaqSchema":false,"identity":[],"descriptionChars":0,"canonical":null,"fetchMs":0},"coverage":{"method":"homepage","inventorySize":1,"listedPages":1,"sampleSize":1,"analyzedPages":1,"failedPages":0,"skippedPages":0,"sitemapFound":false,"homepageFallback":false,"truncated":false,"deadlineHit":false,"note":"Analyzed 1 of 1 pages from the homepage."},"files":[{"id":"llms-txt","label":"llms.txt","path":"/llms.txt","url":"https://example.com/llms.txt","found":false,"statusCode":404,"bytes":577,"note":"Not published"},{"id":"llms-full-txt","label":"llms-full.txt","path":"/llms-full.txt","url":"https://example.com/llms-full.txt","found":false,"statusCode":404,"bytes":577,"note":"Optional, not published"},{"id":"sitemap","label":"sitemap.xml","path":"/sitemap.xml","url":"https://example.com/sitemap.xml","found":false,"statusCode":404,"bytes":577,"note":"Not published"},{"id":"robots-txt","label":"robots.txt","path":"/robots.txt","url":"https://example.com/robots.txt","found":false,"statusCode":404,"bytes":577,"note":"Not published"},{"id":"openapi","label":"OpenAPI","path":"/openapi.json","url":"https://example.com/openapi.json","found":false,"statusCode":null,"bytes":0,"note":"Not found"},{"id":"well-known","label":".well-known","path":"/.well-known/","url":"https://example.com/.well-known/","found":false,"statusCode":null,"bytes":0,"note":"Nothing found"}],"vision":{"rawHtml":"<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"utf-8\"><link rel=\"icon\" href=\"data:,\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"><title>Example Domain</title><!-- style removed: 168 chars --></head><body><p>This domain is for use in documentation examples without needing permission. This is not a service; avoid relying on it for testing and monitoring purposes.</p><!-- script removed: 0 chars -->\n</body></html>","markdown":"# Example Domain\n\nThis domain is for use in documentation examples without needing permission. This is not a service; avoid relying on it for testing and monitoring purposes.","htmlBytes":577,"markdownBytes":174,"textBytes":156,"reductionPct":70,"tokenEstimate":{"html":145,"markdown":44},"removed":{"scripts":1,"styles":1,"landmarks":0,"svg":0,"frames":0},"rawTruncated":false,"markdownTruncated":false},"fixes":[{"checkId":"llms-txt","pillarId":"discovery","pillarName":"Discovery","label":"llms.txt manifest","status":"fail","summary":"Missing","recommendation":"Publish /llms.txt with one H1, a blockquote summary and H2 sections linking to the pages an LLM should read first.","evidence":{"file":"/llms.txt","line":null,"snippet":null},"fix":{"language":"markdown","code":"# Your site name\n\n> One sentence explaining what this site covers and who it is for.\n\n## Documentation\n- [Getting started](https://example.com/docs/start)\n- [API reference](https://example.com/docs/api)\n- [Authentication](https://example.com/docs/auth)"},"weight":3,"scope":"site"},{"checkId":"json-ld","pillarId":"structured","pillarName":"Schema","label":"Structured data presence & syntax","status":"fail","summary":"0 / 1 pages pass","recommendation":"Add a JSON-LD block with @context and @type so the page can be classified without guessing.","evidence":{"file":"/","line":null,"snippet":null},"fix":{"language":"json","code":"{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"SoftwareApplication\",\n  \"name\": \"Your site or page\",\n  \"description\": \"One-sentence summary of the page.\"\n}"},"weight":2.5,"scope":"page","sample":{"total":1,"passed":0,"warned":0,"failed":1,"affected":["https://example.com/"]}},{"checkId":"entity-identity","pillarId":"structured","pillarName":"Schema","label":"Organization or Person identity","status":"fail","summary":"No identity node","recommendation":"Publish an Organization or Person node with name, url, description and at least two sameAs links to authoritative profiles.","evidence":{"file":"/","line":null,"snippet":null},"fix":{"language":"json","code":"{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Organization\",\n  \"name\": \"Example Domain\",\n  \"url\": \"https://example.com\",\n  \"description\": \"One sentence describing who you are and what you do.\",\n  \"sameAs\": [\n    \"https://www.wikidata.org/wiki/Q000000\",\n    \"https://www.linkedin.com/company/your-company\",\n    \"https://github.com/your-org\",\n    \"https://www.crunchbase.com/organization/your-company\"\n  ]\n}"},"weight":2.5,"scope":"site"},{"checkId":"sitemap","pillarId":"discovery","pillarName":"Discovery","label":"sitemap + robots directive","status":"fail","summary":"Missing","recommendation":"Publish an XML sitemap at /sitemap.xml, keep it fresh, and reference it from robots.txt with a Sitemap: directive.","evidence":{"file":"/sitemap.xml","line":null,"snippet":null},"fix":{"language":"robots","code":"# robots.txt\nSitemap: https://example.com/sitemap.xml\n\n# /sitemap.xml\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n  <url><loc>https://example.com/docs/start</loc></url>\n</urlset>"},"weight":2,"scope":"site"},{"checkId":"heading-order","pillarId":"parseability","pillarName":"Parse","label":"Heading sequence","status":"fail","summary":"0 / 1 pages pass","recommendation":"Keep heading levels sequential (H1 → H2 → H3) so the document outline is unambiguous.","evidence":{"file":"/","line":null,"snippet":null},"fix":{"language":"html","code":"<h1>Page topic</h1>\n  <h2>First section</h2>\n    <h3>Supporting detail</h3>\n  <h2>Second section</h2>"},"weight":2,"scope":"page","sample":{"total":1,"passed":0,"warned":0,"failed":1,"affected":["https://example.com/"]}},{"checkId":"ssr-content","pillarId":"parseability","pillarName":"Parse","label":"SSR payload readability","status":"fail","summary":"0 / 1 pages pass","recommendation":"Render primary content on the server (SSR/SSG) so it exists in the first HTML response.","evidence":{"file":"/","line":1,"snippet":"<!doctype html><html lang=en><head><meta charset=utf-8><link rel=icon href=data:,><meta name=viewport content=\"width=device-width,initial-scale=1\"><title>Example Domain</title><style>html{color-scheme:light dark;background:light-dark(#eee,#"},"fix":{"language":"html","code":"<!-- Server-render the primary content, not a client-only shell -->\n<main>\n  <h1>Page topic</h1>\n  <p>At least 600 characters of readable content in the initial response.</p>\n</main>"},"weight":2,"scope":"page","sample":{"total":1,"passed":0,"warned":0,"failed":1,"affected":["https://example.com/"]}},{"checkId":"faq-content","pillarId":"parseability","pillarName":"Parse","label":"Visible FAQ content","status":"fail","summary":"0 / 1 pages pass","recommendation":"Add a short FAQ to the pages people ask about most: three questions with one-paragraph answers in the HTML.","evidence":{"file":"/","line":null,"snippet":null},"fix":{"language":"html","code":"<section aria-labelledby=\"faq\">\n  <h2 id=\"faq\">Frequently asked questions</h2>\n  <h3>What does it cost?</h3>\n  <p>A direct answer in one paragraph, visible without JavaScript.</p>\n  <h3>How long does setup take?</h3>\n  <p>A direct answer in one paragraph, visible without JavaScript.</p>\n  <h3>Can I cancel at any time?</h3>\n  <p>A direct answer in one paragraph, visible without JavaScript.</p>\n</section>\n\n<script type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What does it cost?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"A direct answer in one paragraph.\"\n      }\n    }\n  ]\n}\n</script>"},"weight":2,"scope":"page","sample":{"total":1,"passed":0,"warned":0,"failed":1,"affected":["https://example.com/"]}},{"checkId":"h1","pillarId":"parseability","pillarName":"Parse","label":"Single H1","status":"fail","summary":"0 / 1 pages pass","recommendation":"Give the page exactly one descriptive H1 that names the topic.","evidence":{"file":"/","line":null,"snippet":null},"fix":{"language":"html","code":"<h1>Page topic in one clear sentence</h1>"},"weight":1.5,"scope":"page","sample":{"total":1,"passed":0,"warned":0,"failed":1,"affected":["https://example.com/"]}}],"freshness":{"source":"header","property":"last-modified","iso":"Sat, 24 Oct 2026 11:34:40 GMT","line":null},"agentFetch":[{"userAgent":"GPTBot","status":200,"blocked":false,"challenge":null,"bytes":577,"finalUrl":"https://example.com/","detail":"GPTBot returned HTTP 200. against the default HTTP 200."}],"meta":{"fetchMs":438,"pageCount":1,"discoveredPageCount":1,"sampledPageCount":1,"crawledAt":"2026-10-28T14:56:50.289Z","cached":false,"siteCached":false,"focusCached":false,"scoringVersion":"site-2"}}