{"domain":"aieo.fyi","scannedAt":"2026-09-25T08:51:06.141Z","pages":[{"url":"https://aieo.fyi/","checks":[{"id":"title","title":"Page title","category":"seo","severity":"pass","detail":"Title is 50 characters — ideal range: \"AIEO | SEO and AI Search for UK Service Businesses\"","scoreMode":"scored"},{"id":"description","title":"Meta description","category":"seo","severity":"pass","detail":"Meta description is 153 characters — ideal range.","scoreMode":"scored"},{"id":"headings","title":"Heading structure","category":"seo","severity":"pass","detail":"H1: 1, H2: 8, H3: 9","scoreMode":"scored"},{"id":"canonical","title":"Canonical tag","category":"seo","severity":"pass","detail":"Canonical tag present and self-referencing: https://aieo.fyi/","scoreMode":"scored"},{"id":"og","title":"Open Graph tags","category":"seo","severity":"pass","detail":"og:title, og:description, and og:image all present.","scoreMode":"scored"},{"id":"schema-missing","title":"Structured data present","category":"aeo","severity":"pass","detail":"1 JSON-LD block(s) found.","scoreMode":"scored"},{"id":"schema-valid","title":"Structured data validity","category":"aeo","severity":"pass","detail":"All 1 block(s) parse with @context and @type; FAQPage questions match the visible text.","scoreMode":"scored"},{"id":"schema-types","title":"Structured data types","category":"aeo","severity":"pass","detail":"Found 4 item(s): Organization, WebSite, WebPage, FAQPage","scoreMode":"scored"},{"id":"schema-broken-url","title":"Broken URL in schema","category":"aeo","severity":"pass","detail":"No malformed URLs in structured data.","scoreMode":"scored"},{"id":"schema-faq","title":"FAQPage schema","category":"aeo","severity":"pass","detail":"FAQPage schema present. FAQ rich results were retired in 2026; keep it only where the questions are visible on the page.","scoreMode":"informative"},{"id":"schema-service","title":"Organization/Service schema","category":"aeo","severity":"pass","detail":"Business entity present: Organization.","scoreMode":"scored"},{"id":"org-entity","title":"Organization / LocalBusiness entity","category":"aeo","severity":"warn","detail":"Organization entity is missing logo, sameAs (0 of 2+).","scoreMode":"informative","fix":"Add a logo of at least 112px and sameAs links to LinkedIn, Companies House or Wikidata so engines can disambiguate you."},{"id":"freshness","title":"Content freshness signals","category":"aeo","severity":"info","detail":"No page dateModified, datePublished, article:modified_time or <time datetime> found. AI systems weight fresher content higher.","scoreMode":"scored","fix":"Add dateModified to your page or article schema and update it when content changes."},{"id":"answer-ready","title":"Answer-ready content","category":"aeo","severity":"pass","detail":"Answer-ready paragraph after the first heading (168 characters, ~28 words).","scoreMode":"scored"},{"id":"snippet-controls","title":"Snippet controls","category":"aeo","severity":"pass","detail":"No noindex, nosnippet or max-snippet restrictions.","scoreMode":"scored"},{"id":"ssr-content","title":"Server-rendered content","category":"aeo","severity":"pass","detail":"9467 characters of visible text present without executing JavaScript.","scoreMode":"scored"},{"id":"viewport","title":"Viewport meta tag","category":"seo","severity":"pass","detail":"Viewport meta tag present.","scoreMode":"scored"},{"id":"internal-links","title":"Internal linking","category":"seo","severity":"pass","detail":"Homepage links to 18 unique internal paths — good crawl surface for search and AI.","scoreMode":"scored"},{"id":"forms-labelled","title":"Form labelling","category":"agent","severity":"pass","detail":"100% of form controls are labelled (1/1).","scoreMode":"informative"},{"id":"button-semantics","title":"Button semantics","category":"agent","severity":"pass","detail":"45 semantic control(s), 0 clickable div/span(s).","scoreMode":"informative"},{"id":"link-text","title":"Descriptive link text","category":"agent","severity":"pass","detail":"0% of 42 links use generic text.","scoreMode":"informative"},{"id":"landmarks","title":"Page landmarks","category":"agent","severity":"pass","detail":"<main> and <nav> landmarks present.","scoreMode":"informative"},{"id":"webmcp-declarative","title":"Declarative WebMCP form markup","category":"agent","severity":"info","detail":"No declarative WebMCP forms (toolname/tooldescription) found. Optional — runtime registerTool is the primary route.","scoreMode":"informative"}]},{"url":"https://aieo.fyi/services","checks":[{"id":"title","title":"Page title","category":"seo","severity":"pass","detail":"Title is 51 characters — ideal range: \"SEO and AI Search Services for UK Businesses | AIEO\"","scoreMode":"scored"},{"id":"description","title":"Meta description","category":"seo","severity":"pass","detail":"Meta description is 162 characters — ideal range.","scoreMode":"scored"},{"id":"headings","title":"Heading structure","category":"seo","severity":"pass","detail":"H1: 1, H2: 5, H3: 3","scoreMode":"scored"},{"id":"canonical","title":"Canonical tag","category":"seo","severity":"pass","detail":"Canonical tag present and self-referencing: https://aieo.fyi/services/","scoreMode":"scored"},{"id":"og","title":"Open Graph tags","category":"seo","severity":"pass","detail":"og:title, og:description, and og:image all present.","scoreMode":"scored"},{"id":"schema-missing","title":"Structured data present","category":"aeo","severity":"pass","detail":"1 JSON-LD block(s) found.","scoreMode":"scored"},{"id":"schema-valid","title":"Structured data validity","category":"aeo","severity":"pass","detail":"All 1 block(s) parse with @context and @type.","scoreMode":"scored"},{"id":"schema-types","title":"Structured data types","category":"aeo","severity":"pass","detail":"Found 3 item(s): Organization, WebSite, WebPage","scoreMode":"scored"},{"id":"schema-broken-url","title":"Broken URL in schema","category":"aeo","severity":"pass","detail":"No malformed URLs in structured data.","scoreMode":"scored"},{"id":"schema-faq","title":"FAQPage schema","category":"aeo","severity":"info","detail":"No FAQPage schema on this page (not required).","scoreMode":"informative"},{"id":"schema-service","title":"Organization/Service schema","category":"aeo","severity":"pass","detail":"Business entity present: Organization.","scoreMode":"scored"},{"id":"freshness","title":"Content freshness signals","category":"aeo","severity":"info","detail":"No page dateModified, datePublished, article:modified_time or <time datetime> found. AI systems weight fresher content higher.","scoreMode":"scored","fix":"Add dateModified to your page or article schema and update it when content changes."},{"id":"answer-ready","title":"Answer-ready content","category":"aeo","severity":"pass","detail":"Answer-ready paragraph after the first heading (123 characters, ~21 words).","scoreMode":"scored"},{"id":"snippet-controls","title":"Snippet controls","category":"aeo","severity":"pass","detail":"No noindex, nosnippet or max-snippet restrictions.","scoreMode":"scored"},{"id":"ssr-content","title":"Server-rendered content","category":"aeo","severity":"pass","detail":"1612 characters of visible text present without executing JavaScript.","scoreMode":"scored"},{"id":"viewport","title":"Viewport meta tag","category":"seo","severity":"pass","detail":"Viewport meta tag present.","scoreMode":"scored"}]},{"url":"https://aieo.fyi/pricing","checks":[{"id":"title","title":"Page title","category":"seo","severity":"pass","detail":"Title is 52 characters — ideal range: \"AIEO Pricing | Free SEO Check, AI Audit and Strategy\"","scoreMode":"scored"},{"id":"description","title":"Meta description","category":"seo","severity":"pass","detail":"Meta description is 149 characters — ideal range.","scoreMode":"scored"},{"id":"headings","title":"Heading structure","category":"seo","severity":"pass","detail":"H1: 1, H2: 6, H3: 3","scoreMode":"scored"},{"id":"canonical","title":"Canonical tag","category":"seo","severity":"pass","detail":"Canonical tag present and self-referencing: https://aieo.fyi/pricing/","scoreMode":"scored"},{"id":"og","title":"Open Graph tags","category":"seo","severity":"pass","detail":"og:title, og:description, and og:image all present.","scoreMode":"scored"},{"id":"schema-missing","title":"Structured data present","category":"aeo","severity":"pass","detail":"1 JSON-LD block(s) found.","scoreMode":"scored"},{"id":"schema-valid","title":"Structured data validity","category":"aeo","severity":"pass","detail":"All 1 block(s) parse with @context and @type.","scoreMode":"scored"},{"id":"schema-types","title":"Structured data types","category":"aeo","severity":"pass","detail":"Found 3 item(s): Organization, WebSite, WebPage","scoreMode":"scored"},{"id":"schema-broken-url","title":"Broken URL in schema","category":"aeo","severity":"pass","detail":"No malformed URLs in structured data.","scoreMode":"scored"},{"id":"schema-faq","title":"FAQPage schema","category":"aeo","severity":"info","detail":"No FAQPage schema on this page (not required).","scoreMode":"informative"},{"id":"schema-service","title":"Organization/Service schema","category":"aeo","severity":"pass","detail":"Business entity present: Organization.","scoreMode":"scored"},{"id":"freshness","title":"Content freshness signals","category":"aeo","severity":"info","detail":"No page dateModified, datePublished, article:modified_time or <time datetime> found. AI systems weight fresher content higher.","scoreMode":"scored","fix":"Add dateModified to your page or article schema and update it when content changes."},{"id":"answer-ready","title":"Answer-ready content","category":"aeo","severity":"pass","detail":"Answer-ready paragraph after the first heading (177 characters, ~30 words).","scoreMode":"scored"},{"id":"snippet-controls","title":"Snippet controls","category":"aeo","severity":"pass","detail":"No noindex, nosnippet or max-snippet restrictions.","scoreMode":"scored"},{"id":"ssr-content","title":"Server-rendered content","category":"aeo","severity":"pass","detail":"4415 characters of visible text present without executing JavaScript.","scoreMode":"scored"},{"id":"viewport","title":"Viewport meta tag","category":"seo","severity":"pass","detail":"Viewport meta tag present.","scoreMode":"scored"}]},{"url":"https://aieo.fyi/about","checks":[{"id":"title","title":"Page title","category":"seo","severity":"pass","detail":"Title is 47 characters — ideal range: \"About AIEO | SEO and AI Search by CBK Solutions\"","scoreMode":"scored"},{"id":"description","title":"Meta description","category":"seo","severity":"pass","detail":"Meta description is 154 characters — ideal range.","scoreMode":"scored"},{"id":"headings","title":"Heading structure","category":"seo","severity":"pass","detail":"H1: 1, H2: 6, H3: 3","scoreMode":"scored"},{"id":"canonical","title":"Canonical tag","category":"seo","severity":"pass","detail":"Canonical tag present and self-referencing: https://aieo.fyi/about/","scoreMode":"scored"},{"id":"og","title":"Open Graph tags","category":"seo","severity":"pass","detail":"og:title, og:description, and og:image all present.","scoreMode":"scored"},{"id":"schema-missing","title":"Structured data present","category":"aeo","severity":"pass","detail":"1 JSON-LD block(s) found.","scoreMode":"scored"},{"id":"schema-valid","title":"Structured data validity","category":"aeo","severity":"pass","detail":"All 1 block(s) parse with @context and @type.","scoreMode":"scored"},{"id":"schema-types","title":"Structured data types","category":"aeo","severity":"pass","detail":"Found 3 item(s): Organization, WebSite, WebPage","scoreMode":"scored"},{"id":"schema-broken-url","title":"Broken URL in schema","category":"aeo","severity":"pass","detail":"No malformed URLs in structured data.","scoreMode":"scored"},{"id":"schema-faq","title":"FAQPage schema","category":"aeo","severity":"info","detail":"No FAQPage schema on this page (not required).","scoreMode":"informative"},{"id":"schema-service","title":"Organization/Service schema","category":"aeo","severity":"pass","detail":"Business entity present: Organization.","scoreMode":"scored"},{"id":"freshness","title":"Content freshness signals","category":"aeo","severity":"info","detail":"No page dateModified, datePublished, article:modified_time or <time datetime> found. AI systems weight fresher content higher.","scoreMode":"scored","fix":"Add dateModified to your page or article schema and update it when content changes."},{"id":"answer-ready","title":"Answer-ready content","category":"aeo","severity":"pass","detail":"Answer-ready paragraph after the first heading (179 characters, ~30 words).","scoreMode":"scored"},{"id":"snippet-controls","title":"Snippet controls","category":"aeo","severity":"pass","detail":"No noindex, nosnippet or max-snippet restrictions.","scoreMode":"scored"},{"id":"ssr-content","title":"Server-rendered content","category":"aeo","severity":"pass","detail":"2265 characters of visible text present without executing JavaScript.","scoreMode":"scored"},{"id":"viewport","title":"Viewport meta tag","category":"seo","severity":"pass","detail":"Viewport meta tag present.","scoreMode":"scored"}]},{"url":"https://aieo.fyi/contact","checks":[{"id":"title","title":"Page title","category":"seo","severity":"pass","detail":"Title is 52 characters — ideal range: \"Contact AIEO | SEO and AI Visibility Audit Enquiries\"","scoreMode":"scored"},{"id":"description","title":"Meta description","category":"seo","severity":"pass","detail":"Meta description is 111 characters — ideal range.","scoreMode":"scored"},{"id":"headings","title":"Heading structure","category":"seo","severity":"pass","detail":"H1: 1, H2: 4, H3: 0","scoreMode":"scored"},{"id":"canonical","title":"Canonical tag","category":"seo","severity":"pass","detail":"Canonical tag present and self-referencing: https://aieo.fyi/contact/","scoreMode":"scored"},{"id":"og","title":"Open Graph tags","category":"seo","severity":"pass","detail":"og:title, og:description, and og:image all present.","scoreMode":"scored"},{"id":"schema-missing","title":"Structured data present","category":"aeo","severity":"pass","detail":"1 JSON-LD block(s) found.","scoreMode":"scored"},{"id":"schema-valid","title":"Structured data validity","category":"aeo","severity":"pass","detail":"All 1 block(s) parse with @context and @type.","scoreMode":"scored"},{"id":"schema-types","title":"Structured data types","category":"aeo","severity":"pass","detail":"Found 3 item(s): Organization, WebSite, WebPage","scoreMode":"scored"},{"id":"schema-broken-url","title":"Broken URL in schema","category":"aeo","severity":"pass","detail":"No malformed URLs in structured data.","scoreMode":"scored"},{"id":"schema-faq","title":"FAQPage schema","category":"aeo","severity":"info","detail":"No FAQPage schema on this page (not required).","scoreMode":"informative"},{"id":"schema-service","title":"Organization/Service schema","category":"aeo","severity":"pass","detail":"Business entity present: Organization.","scoreMode":"scored"},{"id":"freshness","title":"Content freshness signals","category":"aeo","severity":"info","detail":"No page dateModified, datePublished, article:modified_time or <time datetime> found. AI systems weight fresher content higher.","scoreMode":"scored","fix":"Add dateModified to your page or article schema and update it when content changes."},{"id":"answer-ready","title":"Answer-ready content","category":"aeo","severity":"pass","detail":"Answer-ready paragraph after the first heading (137 characters, ~23 words).","scoreMode":"scored"},{"id":"snippet-controls","title":"Snippet controls","category":"aeo","severity":"pass","detail":"No noindex, nosnippet or max-snippet restrictions.","scoreMode":"scored"},{"id":"ssr-content","title":"Server-rendered content","category":"aeo","severity":"pass","detail":"1029 characters of visible text present without executing JavaScript.","scoreMode":"scored"},{"id":"viewport","title":"Viewport meta tag","category":"seo","severity":"pass","detail":"Viewport meta tag present.","scoreMode":"scored"}]}],"siteWideChecks":[{"id":"robots","title":"robots.txt","category":"seo","severity":"pass","detail":"robots.txt found: 8 group(s), Sitemap: https://aieo.fyi/sitemap-index.xml.","scoreMode":"scored"},{"id":"ai-bots","title":"AI crawler access summary","category":"aeo","severity":"info","detail":"Search: Googlebot allow*, bingbot allow*, OAI-SearchBot allow*, Claude-SearchBot allow*, PerplexityBot allow, DuckAssistBot allow*, Applebot allow*. User-fetchers: ChatGPT-User allow, Claude-User allow*, Perplexity-User allow*, meta-externalfetcher allow*, Google-Agent allow*. Training: GPTBot allow, ClaudeBot allow, Google-Extended allow, CCBot allow*, Bytespider allow*, Amazonbot allow*, meta-externalagent allow*, Applebot-Extended allow*. (* = inherits the wildcard group.)","scoreMode":"informative"},{"id":"ai-search-access","title":"AI search-lane access","category":"aeo","severity":"pass","detail":"All 7 search-lane bots may fetch / and the scanned pages (RFC 9309 evaluation).","scoreMode":"scored"},{"id":"ai-training-policy","title":"AI training policy (core-3)","category":"aeo","severity":"pass","detail":"GPTBot, ClaudeBot and Google-Extended are allowed. Extended list (informative): all allowed. Google-Extended governs Google's AI training/grounding only and does not affect Google Search.","scoreMode":"scored"},{"id":"ai-user-fetchers","title":"AI user-fetcher rules","category":"aeo","severity":"info","detail":"No rules block user-triggered fetchers (they ignore robots.txt anyway). Dead legacy tokens present: Anthropic-AI.","scoreMode":"informative","fix":"Delete the Anthropic-AI group(s); no current crawler reads them."},{"id":"crawl-delay","title":"Crawl-delay","category":"aeo","severity":"pass","detail":"No Crawl-delay directive.","scoreMode":"scored"},{"id":"sitemap","title":"XML sitemap","category":"seo","severity":"pass","detail":"Sitemap found: 25 URLs across 2 sitemap files. Latest <lastmod> 2026-09-12T18:52:41.000Z (12 days ago).","scoreMode":"scored"},{"id":"canonical-host","title":"Canonical host / redirects","category":"seo","severity":"pass","detail":"Canonical host aieo.fyi. http://aieo.fyi/ answered 200 from this vantage, but HSTS (max-age=31536000) enforces https in browsers; www.aieo.fyi → aieo.fyi 301 → 200.","scoreMode":"scored"},{"id":"hard-404","title":"Real 404 responses","category":"seo","severity":"pass","detail":"Unknown paths return a real 404.","scoreMode":"informative"},{"id":"llms-txt","title":"llms.txt","category":"aeo","severity":"pass","detail":"llms.txt is well-formed: H1, Markdown links, 5957 characters, text/plain.","scoreMode":"informative"},{"id":"pricing-md","title":"pricing.md","category":"aeo","severity":"pass","detail":"pricing.md exists — agents can read your pricing without executing JavaScript.","scoreMode":"informative"},{"id":"bot-ua-blocked","title":"AIEOBot response (origin view)","category":"aeo","severity":"pass","detail":"AIEOBot received HTTP 200 from the homepage (origin view — a WAF may still treat other AI user-agents differently).","scoreMode":"informative"},{"id":"webmcp","title":"WebMCP source evidence","category":"agent","severity":"pass","detail":"Static WebMCP-related source evidence found: 10 registerTool reference(s). References can include library definitions, comments or inactive code. JavaScript was not executed. Browser support, runtime registration, tool discovery and successful invocation were not verified. navigator.modelContext text was also found; check compatibility with the current document.modelContext draft. Scanned inline JavaScript plus 4 same-site script file(s) from 4 fetch attempt(s) (2 discovered by following bundle imports). The scan is limited to six files and 400,000 characters per fetched file; unavailable, generated or unvisited code can be missed.","scoreMode":"scored"},{"id":"webmcp-depth","title":"WebMCP registration references","category":"agent","severity":"info","scoreMode":"informative","detail":"10 registerTool text reference(s) found. This is not a count of distinct or registered tools: one loop can register several tools, while a library can contain unused references. Tool count and journey coverage require runtime discovery and task testing. This reference count does not contribute to the score."},{"id":"well-known-agent-manifests","title":"Agent capability manifests","category":"agent","severity":"info","detail":"None of /.well-known/mcp/server-card.json, /.well-known/agent-card.json, /.well-known/api-catalog, /openapi.json, /llms-full.txt is published (optional).","scoreMode":"informative","fix":"Publish a machine-readable capability manifest such as /.well-known/mcp/server-card.json or /openapi.json."},{"id":"spf","title":"SPF record","category":"security","severity":"pass","detail":"SPF configured with strict -all.","scoreMode":"informative"},{"id":"dmarc","title":"DMARC record","category":"security","severity":"fail","detail":"DMARC p=none — monitoring only, no enforcement.","scoreMode":"informative","fix":"Upgrade from p=none to p=quarantine then p=reject."},{"id":"dnssec","title":"DNSSEC","category":"security","severity":"warn","detail":"DNSSEC is not enabled — DNS answers for the domain can be spoofed.","scoreMode":"informative","fix":"Enable DNSSEC at your registrar and DNS host."},{"id":"hsts","title":"HSTS header","category":"security","severity":"pass","detail":"HSTS set (max-age=31536000, includeSubDomains, preload).","scoreMode":"informative"},{"id":"xcto","title":"X-Content-Type-Options","category":"security","severity":"pass","detail":"X-Content-Type-Options: nosniff set.","scoreMode":"informative"},{"id":"server-ver","title":"Server version disclosure","category":"security","severity":"pass","detail":"Server header \"cloudflare\" discloses no version.","scoreMode":"informative"},{"id":"csp","title":"Content-Security-Policy","category":"security","severity":"warn","detail":"No Content-Security-Policy header.","scoreMode":"informative","fix":"Add a Content-Security-Policy, starting in report-only mode."},{"id":"referrer-policy","title":"Referrer-Policy","category":"security","severity":"pass","detail":"Referrer-Policy: strict-origin-when-cross-origin.","scoreMode":"informative"},{"id":"permissions-policy","title":"Permissions-Policy","category":"security","severity":"pass","detail":"Permissions-Policy set.","scoreMode":"informative"},{"id":"security-txt","title":"security.txt","category":"security","severity":"pass","detail":"security.txt valid, expires 2027-09-05T00:00:00.000Z.","scoreMode":"informative"}],"scores":{"overall":100,"traditionalSEO":100,"aiDiscoverability":100,"schemaCoverage":100,"agentInteraction":100},"summary":{"pass":94,"warn":3,"fail":1,"info":14,"total":112},"stackHints":["Cloudflare CDN"],"security":{"grade":"B","score":80,"checks":10,"items":[{"id":"spf","group":"security","category":"security","title":"SPF record","severity":"pass","scoreMode":"informative","detail":"SPF configured with strict -all.","why":"Without SPF, anyone can send email that appears to come from your domain.","learnMoreUrl":"/methodology#spf","scope":"site","order":1,"pointsRecoverable":0},{"id":"dmarc","group":"security","category":"security","title":"DMARC record","severity":"fail","scoreMode":"informative","detail":"DMARC p=none — monitoring only, no enforcement.","why":"DMARC turns SPF/DKIM alignment into an enforceable anti-spoofing policy.","learnMoreUrl":"/methodology#dmarc","scope":"site","order":2,"pointsRecoverable":0,"fix":"Upgrade from p=none to p=quarantine then p=reject."},{"id":"hsts","group":"security","category":"security","title":"HSTS header","severity":"pass","scoreMode":"informative","detail":"HSTS set (max-age=31536000, includeSubDomains, preload).","why":"Forces browsers to use https, closing a downgrade-attack window.","learnMoreUrl":"/methodology#hsts","scope":"site","order":3,"pointsRecoverable":0},{"id":"xcto","group":"security","category":"security","title":"X-Content-Type-Options","severity":"pass","scoreMode":"informative","detail":"X-Content-Type-Options: nosniff set.","why":"Stops browsers from guessing content types in a way attackers can abuse.","learnMoreUrl":"/methodology#xcto","scope":"site","order":4,"pointsRecoverable":0},{"id":"server-ver","group":"security","category":"security","title":"Server version disclosure","severity":"pass","scoreMode":"informative","detail":"Server header \"cloudflare\" discloses no version.","why":"Version strings hand attackers a head start on known exploits.","learnMoreUrl":"/methodology#server-ver","scope":"site","order":5,"pointsRecoverable":0},{"id":"csp","group":"security","category":"security","title":"Content-Security-Policy","severity":"warn","scoreMode":"informative","detail":"No Content-Security-Policy header.","why":"The single most effective header against injected-script attacks.","learnMoreUrl":"/methodology#csp","scope":"site","order":6,"pointsRecoverable":0,"fix":"Add a Content-Security-Policy, starting in report-only mode."},{"id":"referrer-policy","group":"security","category":"security","title":"Referrer-Policy","severity":"pass","scoreMode":"informative","detail":"Referrer-Policy: strict-origin-when-cross-origin.","why":"Controls how much of a visitor's browsing context leaks to third-party links.","learnMoreUrl":"/methodology#referrer-policy","scope":"site","order":7,"pointsRecoverable":0},{"id":"permissions-policy","group":"security","category":"security","title":"Permissions-Policy","severity":"pass","scoreMode":"informative","detail":"Permissions-Policy set.","why":"Reduces the attack surface exposed to embedded and third-party scripts.","learnMoreUrl":"/methodology#permissions-policy","scope":"site","order":8,"pointsRecoverable":0},{"id":"security-txt","group":"security","category":"security","title":"security.txt","severity":"pass","scoreMode":"informative","detail":"security.txt valid, expires 2027-09-05T00:00:00.000Z.","why":"Gives researchers a documented way to report vulnerabilities responsibly.","learnMoreUrl":"/methodology#security-txt","scope":"site","order":9,"pointsRecoverable":0},{"id":"dnssec","group":"security","category":"security","title":"DNSSEC","severity":"warn","scoreMode":"informative","detail":"DNSSEC is not enabled — DNS answers for the domain can be spoofed.","why":"Protects the domain's own DNS answers from being spoofed.","learnMoreUrl":"/methodology#dnssec","scope":"site","order":10,"pointsRecoverable":0,"fix":"Enable DNSSEC at your registrar and DNS host."}]},"meta":{"engineVersion":"2.1","userAgent":"Mozilla/5.0 (compatible; AIEOBot/2.0; +https://aieo.fyi/bot)","vantage":"origin","pagesFetched":5,"blocked":false,"scriptsScanned":4,"durationMs":535,"warnings":[]},"version":2,"id":"9b9rdnxmxf1y","reportUrl":"https://aieo.fyi/report/9b9rdnxmxf1y","expiresAt":"2026-10-02T08:51:06.141Z","groups":[{"id":"traditionalSEO","label":"Traditional SEO","question":"Can search engines find and understand each page?","weight":40,"score":100,"checkIds":["title","description","headings","canonical","og","robots","sitemap","viewport","internal-links","canonical-host","hard-404"]},{"id":"aiDiscoverability","label":"AI Discoverability","question":"What published content and access-policy signals support AI discovery?","weight":25,"score":100,"checkIds":["ai-bots","crawl-delay","answer-ready","freshness","llms-txt","pricing-md","ai-search-access","ai-training-policy","ai-user-fetchers","snippet-controls","ssr-content","bot-ua-blocked"]},{"id":"schemaCoverage","label":"Schema Coverage","question":"Is the business and content described in structured data?","weight":15,"score":100,"checkIds":["schema-missing","schema-types","schema-broken-url","schema-faq","schema-service","schema-valid","org-entity"]},{"id":"agentInteraction","label":"Agent Interaction (WebMCP)","question":"What static WebMCP source and interface signals are present?","weight":20,"score":100,"checkIds":["webmcp","webmcp-depth","webmcp-declarative","well-known-agent-manifests","forms-labelled","button-semantics","link-text","landmarks"]}],"checks":[{"id":"title","group":"traditionalSEO","category":"seo","title":"Page title","severity":"pass","scoreMode":"scored","detail":"Title is 50 characters — ideal range: \"AIEO | SEO and AI Search for UK Service Businesses\"","why":"Search engines truncate long titles and pad short ones; both cost click-through.","learnMoreUrl":"/methodology#title","scope":"page","order":1,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/"},{"id":"title","group":"traditionalSEO","category":"seo","title":"Page title","severity":"pass","scoreMode":"scored","detail":"Title is 51 characters — ideal range: \"SEO and AI Search Services for UK Businesses | AIEO\"","why":"Search engines truncate long titles and pad short ones; both cost click-through.","learnMoreUrl":"/methodology#title","scope":"page","order":1,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/services"},{"id":"title","group":"traditionalSEO","category":"seo","title":"Page title","severity":"pass","scoreMode":"scored","detail":"Title is 52 characters — ideal range: \"AIEO Pricing | Free SEO Check, AI Audit and Strategy\"","why":"Search engines truncate long titles and pad short ones; both cost click-through.","learnMoreUrl":"/methodology#title","scope":"page","order":1,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/pricing"},{"id":"title","group":"traditionalSEO","category":"seo","title":"Page title","severity":"pass","scoreMode":"scored","detail":"Title is 47 characters — ideal range: \"About AIEO | SEO and AI Search by CBK Solutions\"","why":"Search engines truncate long titles and pad short ones; both cost click-through.","learnMoreUrl":"/methodology#title","scope":"page","order":1,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/about"},{"id":"title","group":"traditionalSEO","category":"seo","title":"Page title","severity":"pass","scoreMode":"scored","detail":"Title is 52 characters — ideal range: \"Contact AIEO | SEO and AI Visibility Audit Enquiries\"","why":"Search engines truncate long titles and pad short ones; both cost click-through.","learnMoreUrl":"/methodology#title","scope":"page","order":1,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/contact"},{"id":"description","group":"traditionalSEO","category":"seo","title":"Meta description","severity":"pass","scoreMode":"scored","detail":"Meta description is 153 characters — ideal range.","why":"Google truncates above ~160 characters and writes its own snippet when one is missing.","learnMoreUrl":"/methodology#description","scope":"page","order":2,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/"},{"id":"description","group":"traditionalSEO","category":"seo","title":"Meta description","severity":"pass","scoreMode":"scored","detail":"Meta description is 162 characters — ideal range.","why":"Google truncates above ~160 characters and writes its own snippet when one is missing.","learnMoreUrl":"/methodology#description","scope":"page","order":2,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/services"},{"id":"description","group":"traditionalSEO","category":"seo","title":"Meta description","severity":"pass","scoreMode":"scored","detail":"Meta description is 149 characters — ideal range.","why":"Google truncates above ~160 characters and writes its own snippet when one is missing.","learnMoreUrl":"/methodology#description","scope":"page","order":2,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/pricing"},{"id":"description","group":"traditionalSEO","category":"seo","title":"Meta description","severity":"pass","scoreMode":"scored","detail":"Meta description is 154 characters — ideal range.","why":"Google truncates above ~160 characters and writes its own snippet when one is missing.","learnMoreUrl":"/methodology#description","scope":"page","order":2,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/about"},{"id":"description","group":"traditionalSEO","category":"seo","title":"Meta description","severity":"pass","scoreMode":"scored","detail":"Meta description is 111 characters — ideal range.","why":"Google truncates above ~160 characters and writes its own snippet when one is missing.","learnMoreUrl":"/methodology#description","scope":"page","order":2,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/contact"},{"id":"headings","group":"traditionalSEO","category":"seo","title":"Heading structure","severity":"pass","scoreMode":"scored","detail":"H1: 1, H2: 8, H3: 9","why":"Search and AI systems use heading hierarchy as the primary topic and subtopic signal.","learnMoreUrl":"/methodology#headings","scope":"page","order":3,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/"},{"id":"headings","group":"traditionalSEO","category":"seo","title":"Heading structure","severity":"pass","scoreMode":"scored","detail":"H1: 1, H2: 5, H3: 3","why":"Search and AI systems use heading hierarchy as the primary topic and subtopic signal.","learnMoreUrl":"/methodology#headings","scope":"page","order":3,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/services"},{"id":"headings","group":"traditionalSEO","category":"seo","title":"Heading structure","severity":"pass","scoreMode":"scored","detail":"H1: 1, H2: 6, H3: 3","why":"Search and AI systems use heading hierarchy as the primary topic and subtopic signal.","learnMoreUrl":"/methodology#headings","scope":"page","order":3,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/pricing"},{"id":"headings","group":"traditionalSEO","category":"seo","title":"Heading structure","severity":"pass","scoreMode":"scored","detail":"H1: 1, H2: 6, H3: 3","why":"Search and AI systems use heading hierarchy as the primary topic and subtopic signal.","learnMoreUrl":"/methodology#headings","scope":"page","order":3,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/about"},{"id":"headings","group":"traditionalSEO","category":"seo","title":"Heading structure","severity":"pass","scoreMode":"scored","detail":"H1: 1, H2: 4, H3: 0","why":"Search and AI systems use heading hierarchy as the primary topic and subtopic signal.","learnMoreUrl":"/methodology#headings","scope":"page","order":3,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/contact"},{"id":"canonical","group":"traditionalSEO","category":"seo","title":"Canonical tag","severity":"pass","scoreMode":"scored","detail":"Canonical tag present and self-referencing: https://aieo.fyi/","why":"Without it, duplicate URL variants split ranking signals.","learnMoreUrl":"/methodology#canonical","scope":"page","order":4,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/"},{"id":"canonical","group":"traditionalSEO","category":"seo","title":"Canonical tag","severity":"pass","scoreMode":"scored","detail":"Canonical tag present and self-referencing: https://aieo.fyi/services/","why":"Without it, duplicate URL variants split ranking signals.","learnMoreUrl":"/methodology#canonical","scope":"page","order":4,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/services"},{"id":"canonical","group":"traditionalSEO","category":"seo","title":"Canonical tag","severity":"pass","scoreMode":"scored","detail":"Canonical tag present and self-referencing: https://aieo.fyi/pricing/","why":"Without it, duplicate URL variants split ranking signals.","learnMoreUrl":"/methodology#canonical","scope":"page","order":4,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/pricing"},{"id":"canonical","group":"traditionalSEO","category":"seo","title":"Canonical tag","severity":"pass","scoreMode":"scored","detail":"Canonical tag present and self-referencing: https://aieo.fyi/about/","why":"Without it, duplicate URL variants split ranking signals.","learnMoreUrl":"/methodology#canonical","scope":"page","order":4,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/about"},{"id":"canonical","group":"traditionalSEO","category":"seo","title":"Canonical tag","severity":"pass","scoreMode":"scored","detail":"Canonical tag present and self-referencing: https://aieo.fyi/contact/","why":"Without it, duplicate URL variants split ranking signals.","learnMoreUrl":"/methodology#canonical","scope":"page","order":4,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/contact"},{"id":"og","group":"traditionalSEO","category":"seo","title":"Open Graph tags","severity":"pass","scoreMode":"scored","detail":"og:title, og:description, and og:image all present.","why":"Controls how links preview on LinkedIn, X and inside chat apps.","learnMoreUrl":"/methodology#og","scope":"page","order":5,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/"},{"id":"og","group":"traditionalSEO","category":"seo","title":"Open Graph tags","severity":"pass","scoreMode":"scored","detail":"og:title, og:description, and og:image all present.","why":"Controls how links preview on LinkedIn, X and inside chat apps.","learnMoreUrl":"/methodology#og","scope":"page","order":5,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/services"},{"id":"og","group":"traditionalSEO","category":"seo","title":"Open Graph tags","severity":"pass","scoreMode":"scored","detail":"og:title, og:description, and og:image all present.","why":"Controls how links preview on LinkedIn, X and inside chat apps.","learnMoreUrl":"/methodology#og","scope":"page","order":5,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/pricing"},{"id":"og","group":"traditionalSEO","category":"seo","title":"Open Graph tags","severity":"pass","scoreMode":"scored","detail":"og:title, og:description, and og:image all present.","why":"Controls how links preview on LinkedIn, X and inside chat apps.","learnMoreUrl":"/methodology#og","scope":"page","order":5,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/about"},{"id":"og","group":"traditionalSEO","category":"seo","title":"Open Graph tags","severity":"pass","scoreMode":"scored","detail":"og:title, og:description, and og:image all present.","why":"Controls how links preview on LinkedIn, X and inside chat apps.","learnMoreUrl":"/methodology#og","scope":"page","order":5,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/contact"},{"id":"robots","group":"traditionalSEO","category":"seo","title":"robots.txt","severity":"pass","scoreMode":"scored","detail":"robots.txt found: 8 group(s), Sitemap: https://aieo.fyi/sitemap-index.xml.","why":"robots.txt expresses crawling instructions for cooperating crawlers; it is not an access-control mechanism.","learnMoreUrl":"/methodology#robots","scope":"site","order":6,"pointsRecoverable":0},{"id":"sitemap","group":"traditionalSEO","category":"seo","title":"XML sitemap","severity":"pass","scoreMode":"scored","detail":"Sitemap found: 25 URLs across 2 sitemap files. Latest <lastmod> 2026-09-12T18:52:41.000Z (12 days ago).","why":"Tells crawlers what exists and how fresh it is without them guessing via links.","learnMoreUrl":"/methodology#sitemap","scope":"site","order":7,"pointsRecoverable":0},{"id":"viewport","group":"traditionalSEO","category":"seo","title":"Viewport meta tag","severity":"pass","scoreMode":"scored","detail":"Viewport meta tag present.","why":"Mobile-first indexing penalises pages that do not declare a responsive viewport.","learnMoreUrl":"/methodology#viewport","scope":"page","order":8,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/"},{"id":"viewport","group":"traditionalSEO","category":"seo","title":"Viewport meta tag","severity":"pass","scoreMode":"scored","detail":"Viewport meta tag present.","why":"Mobile-first indexing penalises pages that do not declare a responsive viewport.","learnMoreUrl":"/methodology#viewport","scope":"page","order":8,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/services"},{"id":"viewport","group":"traditionalSEO","category":"seo","title":"Viewport meta tag","severity":"pass","scoreMode":"scored","detail":"Viewport meta tag present.","why":"Mobile-first indexing penalises pages that do not declare a responsive viewport.","learnMoreUrl":"/methodology#viewport","scope":"page","order":8,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/pricing"},{"id":"viewport","group":"traditionalSEO","category":"seo","title":"Viewport meta tag","severity":"pass","scoreMode":"scored","detail":"Viewport meta tag present.","why":"Mobile-first indexing penalises pages that do not declare a responsive viewport.","learnMoreUrl":"/methodology#viewport","scope":"page","order":8,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/about"},{"id":"viewport","group":"traditionalSEO","category":"seo","title":"Viewport meta tag","severity":"pass","scoreMode":"scored","detail":"Viewport meta tag present.","why":"Mobile-first indexing penalises pages that do not declare a responsive viewport.","learnMoreUrl":"/methodology#viewport","scope":"page","order":8,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/contact"},{"id":"internal-links","group":"traditionalSEO","category":"seo","title":"Internal linking","severity":"pass","scoreMode":"scored","detail":"Homepage links to 18 unique internal paths — good crawl surface for search and AI.","why":"Too few links starve both search and AI crawlers of a path to your content.","learnMoreUrl":"/methodology#internal-links","scope":"page","order":10,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/"},{"id":"canonical-host","group":"traditionalSEO","category":"seo","title":"Canonical host / redirects","severity":"pass","scoreMode":"scored","detail":"Canonical host aieo.fyi. http://aieo.fyi/ answered 200 from this vantage, but HSTS (max-age=31536000) enforces https in browsers; www.aieo.fyi → aieo.fyi 301 → 200.","why":"Duplicate reachable hosts split ranking and citation signals across \"the same\" site.","learnMoreUrl":"/methodology#canonical-host","scope":"site","order":13,"pointsRecoverable":0},{"id":"hard-404","group":"traditionalSEO","category":"seo","title":"Real 404 responses","severity":"pass","scoreMode":"informative","detail":"Unknown paths return a real 404.","why":"Soft-404s fool crawlers and well-known automated checkers alike.","learnMoreUrl":"/methodology#hard-404","scope":"site","order":14,"pointsRecoverable":0},{"id":"ai-bots","group":"aiDiscoverability","category":"aeo","title":"AI crawler access summary","severity":"info","scoreMode":"informative","detail":"Search: Googlebot allow*, bingbot allow*, OAI-SearchBot allow*, Claude-SearchBot allow*, PerplexityBot allow, DuckAssistBot allow*, Applebot allow*. User-fetchers: ChatGPT-User allow, Claude-User allow*, Perplexity-User allow*, meta-externalfetcher allow*, Google-Agent allow*. Training: GPTBot allow, ClaudeBot allow, Google-Extended allow, CCBot allow*, Bytespider allow*, Amazonbot allow*, meta-externalagent allow*, Applebot-Extended allow*. (* = inherits the wildcard group.)","why":"Shows parsed robots.txt rules for named agents, rather than verifying live access. User-triggered fetchers may behave differently.","learnMoreUrl":"/methodology#ai-bots","scope":"site","order":1,"pointsRecoverable":0},{"id":"crawl-delay","group":"aiDiscoverability","category":"aeo","title":"Crawl-delay","severity":"pass","scoreMode":"scored","detail":"No Crawl-delay directive.","why":"This directive can affect crawlers that support it; Google does not support crawl-delay.","learnMoreUrl":"/methodology#crawl-delay","scope":"site","order":2,"pointsRecoverable":0},{"id":"answer-ready","group":"aiDiscoverability","category":"aeo","title":"Answer-ready content","severity":"pass","scoreMode":"scored","detail":"Answer-ready paragraph after the first heading (168 characters, ~28 words).","why":"A clear summary helps readers and tools extract the main answer. This placement test does not predict citations.","learnMoreUrl":"/methodology#answer-ready","scope":"page","order":3,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/"},{"id":"answer-ready","group":"aiDiscoverability","category":"aeo","title":"Answer-ready content","severity":"pass","scoreMode":"scored","detail":"Answer-ready paragraph after the first heading (123 characters, ~21 words).","why":"A clear summary helps readers and tools extract the main answer. This placement test does not predict citations.","learnMoreUrl":"/methodology#answer-ready","scope":"page","order":3,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/services"},{"id":"answer-ready","group":"aiDiscoverability","category":"aeo","title":"Answer-ready content","severity":"pass","scoreMode":"scored","detail":"Answer-ready paragraph after the first heading (177 characters, ~30 words).","why":"A clear summary helps readers and tools extract the main answer. This placement test does not predict citations.","learnMoreUrl":"/methodology#answer-ready","scope":"page","order":3,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/pricing"},{"id":"answer-ready","group":"aiDiscoverability","category":"aeo","title":"Answer-ready content","severity":"pass","scoreMode":"scored","detail":"Answer-ready paragraph after the first heading (179 characters, ~30 words).","why":"A clear summary helps readers and tools extract the main answer. This placement test does not predict citations.","learnMoreUrl":"/methodology#answer-ready","scope":"page","order":3,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/about"},{"id":"answer-ready","group":"aiDiscoverability","category":"aeo","title":"Answer-ready content","severity":"pass","scoreMode":"scored","detail":"Answer-ready paragraph after the first heading (137 characters, ~23 words).","why":"A clear summary helps readers and tools extract the main answer. This placement test does not predict citations.","learnMoreUrl":"/methodology#answer-ready","scope":"page","order":3,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/contact"},{"id":"freshness","group":"aiDiscoverability","category":"aeo","title":"Content freshness signals","severity":"info","scoreMode":"notApplicable","detail":"No page dateModified, datePublished, article:modified_time or <time datetime> found. AI systems weight fresher content higher.","why":"Accurate dates describe publication or change. Freshness matters for some queries; a recent timestamp alone does not demonstrate increased AI citations.","learnMoreUrl":"/methodology#freshness","scope":"page","order":4,"pointsRecoverable":0,"fix":"Add dateModified to your page or article schema and update it when content changes.","pageUrl":"https://aieo.fyi/","pagesAffected":5},{"id":"freshness","group":"aiDiscoverability","category":"aeo","title":"Content freshness signals","severity":"info","scoreMode":"notApplicable","detail":"No page dateModified, datePublished, article:modified_time or <time datetime> found. AI systems weight fresher content higher.","why":"Accurate dates describe publication or change. Freshness matters for some queries; a recent timestamp alone does not demonstrate increased AI citations.","learnMoreUrl":"/methodology#freshness","scope":"page","order":4,"pointsRecoverable":0,"fix":"Add dateModified to your page or article schema and update it when content changes.","pageUrl":"https://aieo.fyi/services","pagesAffected":5},{"id":"freshness","group":"aiDiscoverability","category":"aeo","title":"Content freshness signals","severity":"info","scoreMode":"notApplicable","detail":"No page dateModified, datePublished, article:modified_time or <time datetime> found. AI systems weight fresher content higher.","why":"Accurate dates describe publication or change. Freshness matters for some queries; a recent timestamp alone does not demonstrate increased AI citations.","learnMoreUrl":"/methodology#freshness","scope":"page","order":4,"pointsRecoverable":0,"fix":"Add dateModified to your page or article schema and update it when content changes.","pageUrl":"https://aieo.fyi/pricing","pagesAffected":5},{"id":"freshness","group":"aiDiscoverability","category":"aeo","title":"Content freshness signals","severity":"info","scoreMode":"notApplicable","detail":"No page dateModified, datePublished, article:modified_time or <time datetime> found. AI systems weight fresher content higher.","why":"Accurate dates describe publication or change. Freshness matters for some queries; a recent timestamp alone does not demonstrate increased AI citations.","learnMoreUrl":"/methodology#freshness","scope":"page","order":4,"pointsRecoverable":0,"fix":"Add dateModified to your page or article schema and update it when content changes.","pageUrl":"https://aieo.fyi/about","pagesAffected":5},{"id":"freshness","group":"aiDiscoverability","category":"aeo","title":"Content freshness signals","severity":"info","scoreMode":"notApplicable","detail":"No page dateModified, datePublished, article:modified_time or <time datetime> found. AI systems weight fresher content higher.","why":"Accurate dates describe publication or change. Freshness matters for some queries; a recent timestamp alone does not demonstrate increased AI citations.","learnMoreUrl":"/methodology#freshness","scope":"page","order":4,"pointsRecoverable":0,"fix":"Add dateModified to your page or article schema and update it when content changes.","pageUrl":"https://aieo.fyi/contact","pagesAffected":5},{"id":"llms-txt","group":"aiDiscoverability","category":"aeo","title":"llms.txt","severity":"pass","scoreMode":"informative","detail":"llms.txt is well-formed: H1, Markdown links, 5957 characters, text/plain.","why":"Optional orientation for tools that consume it; not a general requirement for AI-search visibility.","learnMoreUrl":"/methodology#llms-txt","scope":"site","order":5,"pointsRecoverable":0},{"id":"pricing-md","group":"aiDiscoverability","category":"aeo","title":"pricing.md","severity":"pass","scoreMode":"informative","detail":"pricing.md exists — agents can read your pricing without executing JavaScript.","why":"A plain-text summary can help tools read your pricing without executing JavaScript.","learnMoreUrl":"/methodology#pricing-md","scope":"site","order":6,"pointsRecoverable":0},{"id":"ai-search-access","group":"aiDiscoverability","category":"aeo","title":"AI search-lane access","severity":"pass","scoreMode":"scored","detail":"All 7 search-lane bots may fetch / and the scanned pages (RFC 9309 evaluation).","why":"These rules affect crawler access; allowing a request does not guarantee indexing or a citation.","learnMoreUrl":"/methodology#ai-search-access","scope":"site","order":7,"pointsRecoverable":0},{"id":"ai-training-policy","group":"aiDiscoverability","category":"aeo","title":"AI training policy (core-3)","severity":"pass","scoreMode":"scored","detail":"GPTBot, ClaudeBot and Google-Extended are allowed. Extended list (informative): all allowed. Google-Extended governs Google's AI training/grounding only and does not affect Google Search.","why":"Training permissions are a policy choice and need to be distinguished from search access.","learnMoreUrl":"/methodology#ai-training-policy","scope":"site","order":8,"pointsRecoverable":0},{"id":"ai-user-fetchers","group":"aiDiscoverability","category":"aeo","title":"AI user-fetcher rules","severity":"info","scoreMode":"informative","detail":"No rules block user-triggered fetchers (they ignore robots.txt anyway). Dead legacy tokens present: Anthropic-AI.","why":"User-triggered fetchers can follow different rules from search and training crawlers; behaviour varies by provider.","learnMoreUrl":"/methodology#ai-user-fetchers","scope":"site","order":9,"pointsRecoverable":0,"fix":"Delete the Anthropic-AI group(s); no current crawler reads them."},{"id":"snippet-controls","group":"aiDiscoverability","category":"aeo","title":"Snippet controls","severity":"pass","scoreMode":"scored","detail":"No noindex, nosnippet or max-snippet restrictions.","why":"Google uses indexing and preview controls to limit search presentation and content used directly in AI Overviews and AI Mode.","learnMoreUrl":"/methodology#snippet-controls","scope":"page","order":11,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/"},{"id":"snippet-controls","group":"aiDiscoverability","category":"aeo","title":"Snippet controls","severity":"pass","scoreMode":"scored","detail":"No noindex, nosnippet or max-snippet restrictions.","why":"Google uses indexing and preview controls to limit search presentation and content used directly in AI Overviews and AI Mode.","learnMoreUrl":"/methodology#snippet-controls","scope":"page","order":11,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/services"},{"id":"snippet-controls","group":"aiDiscoverability","category":"aeo","title":"Snippet controls","severity":"pass","scoreMode":"scored","detail":"No noindex, nosnippet or max-snippet restrictions.","why":"Google uses indexing and preview controls to limit search presentation and content used directly in AI Overviews and AI Mode.","learnMoreUrl":"/methodology#snippet-controls","scope":"page","order":11,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/pricing"},{"id":"snippet-controls","group":"aiDiscoverability","category":"aeo","title":"Snippet controls","severity":"pass","scoreMode":"scored","detail":"No noindex, nosnippet or max-snippet restrictions.","why":"Google uses indexing and preview controls to limit search presentation and content used directly in AI Overviews and AI Mode.","learnMoreUrl":"/methodology#snippet-controls","scope":"page","order":11,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/about"},{"id":"snippet-controls","group":"aiDiscoverability","category":"aeo","title":"Snippet controls","severity":"pass","scoreMode":"scored","detail":"No noindex, nosnippet or max-snippet restrictions.","why":"Google uses indexing and preview controls to limit search presentation and content used directly in AI Overviews and AI Mode.","learnMoreUrl":"/methodology#snippet-controls","scope":"page","order":11,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/contact"},{"id":"ssr-content","group":"aiDiscoverability","category":"aeo","title":"Server-rendered content","severity":"pass","scoreMode":"scored","detail":"9467 characters of visible text present without executing JavaScript.","why":"Content in the initial HTML is accessible without JavaScript; crawler and browser-agent capabilities vary.","learnMoreUrl":"/methodology#ssr-content","scope":"page","order":12,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/"},{"id":"ssr-content","group":"aiDiscoverability","category":"aeo","title":"Server-rendered content","severity":"pass","scoreMode":"scored","detail":"1612 characters of visible text present without executing JavaScript.","why":"Content in the initial HTML is accessible without JavaScript; crawler and browser-agent capabilities vary.","learnMoreUrl":"/methodology#ssr-content","scope":"page","order":12,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/services"},{"id":"ssr-content","group":"aiDiscoverability","category":"aeo","title":"Server-rendered content","severity":"pass","scoreMode":"scored","detail":"4415 characters of visible text present without executing JavaScript.","why":"Content in the initial HTML is accessible without JavaScript; crawler and browser-agent capabilities vary.","learnMoreUrl":"/methodology#ssr-content","scope":"page","order":12,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/pricing"},{"id":"ssr-content","group":"aiDiscoverability","category":"aeo","title":"Server-rendered content","severity":"pass","scoreMode":"scored","detail":"2265 characters of visible text present without executing JavaScript.","why":"Content in the initial HTML is accessible without JavaScript; crawler and browser-agent capabilities vary.","learnMoreUrl":"/methodology#ssr-content","scope":"page","order":12,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/about"},{"id":"ssr-content","group":"aiDiscoverability","category":"aeo","title":"Server-rendered content","severity":"pass","scoreMode":"scored","detail":"1029 characters of visible text present without executing JavaScript.","why":"Content in the initial HTML is accessible without JavaScript; crawler and browser-agent capabilities vary.","learnMoreUrl":"/methodology#ssr-content","scope":"page","order":12,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/contact"},{"id":"bot-ua-blocked","group":"aiDiscoverability","category":"aeo","title":"AIEOBot response (origin view)","severity":"pass","scoreMode":"informative","detail":"AIEOBot received HTTP 200 from the homepage (origin view — a WAF may still treat other AI user-agents differently).","why":"Network and access controls can differ by identity or request. An AIEOBot response does not establish whether another provider can fetch the page.","learnMoreUrl":"/methodology#bot-ua-blocked","scope":"site","order":13,"pointsRecoverable":0},{"id":"schema-missing","group":"schemaCoverage","category":"aeo","title":"Structured data present","severity":"pass","scoreMode":"scored","detail":"1 JSON-LD block(s) found.","why":"Schema is how AI systems understand what a business or page actually is.","learnMoreUrl":"/methodology#schema-missing","scope":"page","order":1,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/"},{"id":"schema-missing","group":"schemaCoverage","category":"aeo","title":"Structured data present","severity":"pass","scoreMode":"scored","detail":"1 JSON-LD block(s) found.","why":"Schema is how AI systems understand what a business or page actually is.","learnMoreUrl":"/methodology#schema-missing","scope":"page","order":1,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/services"},{"id":"schema-missing","group":"schemaCoverage","category":"aeo","title":"Structured data present","severity":"pass","scoreMode":"scored","detail":"1 JSON-LD block(s) found.","why":"Schema is how AI systems understand what a business or page actually is.","learnMoreUrl":"/methodology#schema-missing","scope":"page","order":1,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/pricing"},{"id":"schema-missing","group":"schemaCoverage","category":"aeo","title":"Structured data present","severity":"pass","scoreMode":"scored","detail":"1 JSON-LD block(s) found.","why":"Schema is how AI systems understand what a business or page actually is.","learnMoreUrl":"/methodology#schema-missing","scope":"page","order":1,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/about"},{"id":"schema-missing","group":"schemaCoverage","category":"aeo","title":"Structured data present","severity":"pass","scoreMode":"scored","detail":"1 JSON-LD block(s) found.","why":"Schema is how AI systems understand what a business or page actually is.","learnMoreUrl":"/methodology#schema-missing","scope":"page","order":1,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/contact"},{"id":"schema-types","group":"schemaCoverage","category":"aeo","title":"Structured data types","severity":"pass","scoreMode":"scored","detail":"Found 4 item(s): Organization, WebSite, WebPage, FAQPage","why":"Untyped or unrecognised blocks provide no machine-readable meaning.","learnMoreUrl":"/methodology#schema-types","scope":"page","order":2,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/"},{"id":"schema-types","group":"schemaCoverage","category":"aeo","title":"Structured data types","severity":"pass","scoreMode":"scored","detail":"Found 3 item(s): Organization, WebSite, WebPage","why":"Untyped or unrecognised blocks provide no machine-readable meaning.","learnMoreUrl":"/methodology#schema-types","scope":"page","order":2,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/services"},{"id":"schema-types","group":"schemaCoverage","category":"aeo","title":"Structured data types","severity":"pass","scoreMode":"scored","detail":"Found 3 item(s): Organization, WebSite, WebPage","why":"Untyped or unrecognised blocks provide no machine-readable meaning.","learnMoreUrl":"/methodology#schema-types","scope":"page","order":2,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/pricing"},{"id":"schema-types","group":"schemaCoverage","category":"aeo","title":"Structured data types","severity":"pass","scoreMode":"scored","detail":"Found 3 item(s): Organization, WebSite, WebPage","why":"Untyped or unrecognised blocks provide no machine-readable meaning.","learnMoreUrl":"/methodology#schema-types","scope":"page","order":2,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/about"},{"id":"schema-types","group":"schemaCoverage","category":"aeo","title":"Structured data types","severity":"pass","scoreMode":"scored","detail":"Found 3 item(s): Organization, WebSite, WebPage","why":"Untyped or unrecognised blocks provide no machine-readable meaning.","learnMoreUrl":"/methodology#schema-types","scope":"page","order":2,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/contact"},{"id":"schema-broken-url","group":"schemaCoverage","category":"aeo","title":"Broken URL in schema","severity":"pass","scoreMode":"scored","detail":"No malformed URLs in structured data.","why":"A single malformed URL can make some consumers ignore the entire array.","learnMoreUrl":"/methodology#schema-broken-url","scope":"page","order":3,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/"},{"id":"schema-broken-url","group":"schemaCoverage","category":"aeo","title":"Broken URL in schema","severity":"pass","scoreMode":"scored","detail":"No malformed URLs in structured data.","why":"A single malformed URL can make some consumers ignore the entire array.","learnMoreUrl":"/methodology#schema-broken-url","scope":"page","order":3,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/services"},{"id":"schema-broken-url","group":"schemaCoverage","category":"aeo","title":"Broken URL in schema","severity":"pass","scoreMode":"scored","detail":"No malformed URLs in structured data.","why":"A single malformed URL can make some consumers ignore the entire array.","learnMoreUrl":"/methodology#schema-broken-url","scope":"page","order":3,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/pricing"},{"id":"schema-broken-url","group":"schemaCoverage","category":"aeo","title":"Broken URL in schema","severity":"pass","scoreMode":"scored","detail":"No malformed URLs in structured data.","why":"A single malformed URL can make some consumers ignore the entire array.","learnMoreUrl":"/methodology#schema-broken-url","scope":"page","order":3,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/about"},{"id":"schema-broken-url","group":"schemaCoverage","category":"aeo","title":"Broken URL in schema","severity":"pass","scoreMode":"scored","detail":"No malformed URLs in structured data.","why":"A single malformed URL can make some consumers ignore the entire array.","learnMoreUrl":"/methodology#schema-broken-url","scope":"page","order":3,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/contact"},{"id":"schema-faq","group":"schemaCoverage","category":"aeo","title":"FAQPage schema","severity":"pass","scoreMode":"informative","detail":"FAQPage schema present. FAQ rich results were retired in 2026; keep it only where the questions are visible on the page.","why":"FAQ rich results were retired; presence is a courtesy note rather than a requirement.","learnMoreUrl":"/methodology#schema-faq","scope":"page","order":4,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/"},{"id":"schema-faq","group":"schemaCoverage","category":"aeo","title":"FAQPage schema","severity":"info","scoreMode":"informative","detail":"No FAQPage schema on this page (not required).","why":"FAQ rich results were retired; presence is a courtesy note rather than a requirement.","learnMoreUrl":"/methodology#schema-faq","scope":"page","order":4,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/services","pagesAffected":4},{"id":"schema-faq","group":"schemaCoverage","category":"aeo","title":"FAQPage schema","severity":"info","scoreMode":"informative","detail":"No FAQPage schema on this page (not required).","why":"FAQ rich results were retired; presence is a courtesy note rather than a requirement.","learnMoreUrl":"/methodology#schema-faq","scope":"page","order":4,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/pricing","pagesAffected":4},{"id":"schema-faq","group":"schemaCoverage","category":"aeo","title":"FAQPage schema","severity":"info","scoreMode":"informative","detail":"No FAQPage schema on this page (not required).","why":"FAQ rich results were retired; presence is a courtesy note rather than a requirement.","learnMoreUrl":"/methodology#schema-faq","scope":"page","order":4,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/about","pagesAffected":4},{"id":"schema-faq","group":"schemaCoverage","category":"aeo","title":"FAQPage schema","severity":"info","scoreMode":"informative","detail":"No FAQPage schema on this page (not required).","why":"FAQ rich results were retired; presence is a courtesy note rather than a requirement.","learnMoreUrl":"/methodology#schema-faq","scope":"page","order":4,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/contact","pagesAffected":4},{"id":"schema-service","group":"schemaCoverage","category":"aeo","title":"Organization/Service schema","severity":"pass","scoreMode":"scored","detail":"Business entity present: Organization.","why":"AI systems use this to understand what the business does.","learnMoreUrl":"/methodology#schema-service","scope":"page","order":5,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/"},{"id":"schema-service","group":"schemaCoverage","category":"aeo","title":"Organization/Service schema","severity":"pass","scoreMode":"scored","detail":"Business entity present: Organization.","why":"AI systems use this to understand what the business does.","learnMoreUrl":"/methodology#schema-service","scope":"page","order":5,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/services"},{"id":"schema-service","group":"schemaCoverage","category":"aeo","title":"Organization/Service schema","severity":"pass","scoreMode":"scored","detail":"Business entity present: Organization.","why":"AI systems use this to understand what the business does.","learnMoreUrl":"/methodology#schema-service","scope":"page","order":5,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/pricing"},{"id":"schema-service","group":"schemaCoverage","category":"aeo","title":"Organization/Service schema","severity":"pass","scoreMode":"scored","detail":"Business entity present: Organization.","why":"AI systems use this to understand what the business does.","learnMoreUrl":"/methodology#schema-service","scope":"page","order":5,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/about"},{"id":"schema-service","group":"schemaCoverage","category":"aeo","title":"Organization/Service schema","severity":"pass","scoreMode":"scored","detail":"Business entity present: Organization.","why":"AI systems use this to understand what the business does.","learnMoreUrl":"/methodology#schema-service","scope":"page","order":5,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/contact"},{"id":"schema-valid","group":"schemaCoverage","category":"aeo","title":"Structured data validity","severity":"pass","scoreMode":"scored","detail":"All 1 block(s) parse with @context and @type; FAQPage questions match the visible text.","why":"A block that fails to parse, or marks up hidden text, is worse than no schema at all.","learnMoreUrl":"/methodology#schema-valid","scope":"page","order":6,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/"},{"id":"schema-valid","group":"schemaCoverage","category":"aeo","title":"Structured data validity","severity":"pass","scoreMode":"scored","detail":"All 1 block(s) parse with @context and @type.","why":"A block that fails to parse, or marks up hidden text, is worse than no schema at all.","learnMoreUrl":"/methodology#schema-valid","scope":"page","order":6,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/services"},{"id":"schema-valid","group":"schemaCoverage","category":"aeo","title":"Structured data validity","severity":"pass","scoreMode":"scored","detail":"All 1 block(s) parse with @context and @type.","why":"A block that fails to parse, or marks up hidden text, is worse than no schema at all.","learnMoreUrl":"/methodology#schema-valid","scope":"page","order":6,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/pricing"},{"id":"schema-valid","group":"schemaCoverage","category":"aeo","title":"Structured data validity","severity":"pass","scoreMode":"scored","detail":"All 1 block(s) parse with @context and @type.","why":"A block that fails to parse, or marks up hidden text, is worse than no schema at all.","learnMoreUrl":"/methodology#schema-valid","scope":"page","order":6,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/about"},{"id":"schema-valid","group":"schemaCoverage","category":"aeo","title":"Structured data validity","severity":"pass","scoreMode":"scored","detail":"All 1 block(s) parse with @context and @type.","why":"A block that fails to parse, or marks up hidden text, is worse than no schema at all.","learnMoreUrl":"/methodology#schema-valid","scope":"page","order":6,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/contact"},{"id":"org-entity","group":"schemaCoverage","category":"aeo","title":"Organization / LocalBusiness entity","severity":"warn","scoreMode":"informative","detail":"Organization entity is missing logo, sameAs (0 of 2+).","why":"Entity disambiguation is what AI systems primarily use business schema for.","learnMoreUrl":"/methodology#org-entity","scope":"page","order":7,"pointsRecoverable":0,"fix":"Add a logo of at least 112px and sameAs links to LinkedIn, Companies House or Wikidata so engines can disambiguate you.","pageUrl":"https://aieo.fyi/","pagesAffected":1},{"id":"webmcp","group":"agentInteraction","category":"agent","title":"WebMCP source evidence","severity":"pass","scoreMode":"scored","detail":"Static WebMCP-related source evidence found: 10 registerTool reference(s). References can include library definitions, comments or inactive code. JavaScript was not executed. Browser support, runtime registration, tool discovery and successful invocation were not verified. navigator.modelContext text was also found; check compatibility with the current document.modelContext draft. Scanned inline JavaScript plus 4 same-site script file(s) from 4 fetch attempt(s) (2 discovered by following bundle imports). The scan is limited to six files and 400,000 characters per fetched file; unavailable, generated or unvisited code can be missed.","why":"Source evidence can identify an integration to inspect. It does not verify browser support, runtime registration, discovery or successful invocation.","learnMoreUrl":"/methodology#webmcp","scope":"site","order":1,"pointsRecoverable":0},{"id":"webmcp-depth","group":"agentInteraction","category":"agent","title":"WebMCP registration references","severity":"info","scoreMode":"informative","detail":"10 registerTool text reference(s) found. This is not a count of distinct or registered tools: one loop can register several tools, while a library can contain unused references. Tool count and journey coverage require runtime discovery and task testing. This reference count does not contribute to the score.","why":"Loops, library definitions and inactive code make source-reference counts unsuitable for measuring tool coverage.","learnMoreUrl":"/methodology#webmcp-depth","scope":"site","order":2,"pointsRecoverable":0},{"id":"webmcp-declarative","group":"agentInteraction","category":"agent","title":"Declarative WebMCP form markup","severity":"info","scoreMode":"informative","detail":"No declarative WebMCP forms (toolname/tooldescription) found. Optional — runtime registerTool is the primary route.","why":"Declarative markup is a WebMCP route in supporting implementations. Source attributes do not establish runtime registration or successful form use.","learnMoreUrl":"/methodology#webmcp-declarative","scope":"page","order":3,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/","pagesAffected":1},{"id":"well-known-agent-manifests","group":"agentInteraction","category":"agent","title":"Agent capability manifests","severity":"info","scoreMode":"informative","detail":"None of /.well-known/mcp/server-card.json, /.well-known/agent-card.json, /.well-known/api-catalog, /openapi.json, /llms-full.txt is published (optional).","why":"A machine-readable capability manifest is a low-cost, high-signal declaration for agent tooling.","learnMoreUrl":"/methodology#well-known-agent-manifests","scope":"site","order":4,"pointsRecoverable":0,"fix":"Publish a machine-readable capability manifest such as /.well-known/mcp/server-card.json or /openapi.json."},{"id":"forms-labelled","group":"agentInteraction","category":"agent","title":"Form labelling","severity":"pass","scoreMode":"informative","detail":"100% of form controls are labelled (1/1).","why":"Unlabelled inputs are as opaque to agents as they are to screen readers.","learnMoreUrl":"/methodology#forms-labelled","scope":"page","order":5,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/"},{"id":"button-semantics","group":"agentInteraction","category":"agent","title":"Button semantics","severity":"pass","scoreMode":"informative","detail":"45 semantic control(s), 0 clickable div/span(s).","why":"Agents rely on semantic, keyboard-operable controls to act reliably.","learnMoreUrl":"/methodology#button-semantics","scope":"page","order":6,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/"},{"id":"link-text","group":"agentInteraction","category":"agent","title":"Descriptive link text","severity":"pass","scoreMode":"informative","detail":"0% of 42 links use generic text.","why":"Non-descriptive link text gives agents (and assistive tech) nothing to act on.","learnMoreUrl":"/methodology#link-text","scope":"page","order":7,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/"},{"id":"landmarks","group":"agentInteraction","category":"agent","title":"Page landmarks","severity":"pass","scoreMode":"informative","detail":"<main> and <nav> landmarks present.","why":"Landmarks let an agent navigate page structure without guessing from layout.","learnMoreUrl":"/methodology#landmarks","scope":"page","order":8,"pointsRecoverable":0,"pageUrl":"https://aieo.fyi/"},{"id":"spf","group":"security","category":"security","title":"SPF record","severity":"pass","scoreMode":"informative","detail":"SPF configured with strict -all.","why":"Without SPF, anyone can send email that appears to come from your domain.","learnMoreUrl":"/methodology#spf","scope":"site","order":1,"pointsRecoverable":0},{"id":"dmarc","group":"security","category":"security","title":"DMARC record","severity":"fail","scoreMode":"informative","detail":"DMARC p=none — monitoring only, no enforcement.","why":"DMARC turns SPF/DKIM alignment into an enforceable anti-spoofing policy.","learnMoreUrl":"/methodology#dmarc","scope":"site","order":2,"pointsRecoverable":0,"fix":"Upgrade from p=none to p=quarantine then p=reject."},{"id":"hsts","group":"security","category":"security","title":"HSTS header","severity":"pass","scoreMode":"informative","detail":"HSTS set (max-age=31536000, includeSubDomains, preload).","why":"Forces browsers to use https, closing a downgrade-attack window.","learnMoreUrl":"/methodology#hsts","scope":"site","order":3,"pointsRecoverable":0},{"id":"xcto","group":"security","category":"security","title":"X-Content-Type-Options","severity":"pass","scoreMode":"informative","detail":"X-Content-Type-Options: nosniff set.","why":"Stops browsers from guessing content types in a way attackers can abuse.","learnMoreUrl":"/methodology#xcto","scope":"site","order":4,"pointsRecoverable":0},{"id":"server-ver","group":"security","category":"security","title":"Server version disclosure","severity":"pass","scoreMode":"informative","detail":"Server header \"cloudflare\" discloses no version.","why":"Version strings hand attackers a head start on known exploits.","learnMoreUrl":"/methodology#server-ver","scope":"site","order":5,"pointsRecoverable":0},{"id":"csp","group":"security","category":"security","title":"Content-Security-Policy","severity":"warn","scoreMode":"informative","detail":"No Content-Security-Policy header.","why":"The single most effective header against injected-script attacks.","learnMoreUrl":"/methodology#csp","scope":"site","order":6,"pointsRecoverable":0,"fix":"Add a Content-Security-Policy, starting in report-only mode."},{"id":"referrer-policy","group":"security","category":"security","title":"Referrer-Policy","severity":"pass","scoreMode":"informative","detail":"Referrer-Policy: strict-origin-when-cross-origin.","why":"Controls how much of a visitor's browsing context leaks to third-party links.","learnMoreUrl":"/methodology#referrer-policy","scope":"site","order":7,"pointsRecoverable":0},{"id":"permissions-policy","group":"security","category":"security","title":"Permissions-Policy","severity":"pass","scoreMode":"informative","detail":"Permissions-Policy set.","why":"Reduces the attack surface exposed to embedded and third-party scripts.","learnMoreUrl":"/methodology#permissions-policy","scope":"site","order":8,"pointsRecoverable":0},{"id":"security-txt","group":"security","category":"security","title":"security.txt","severity":"pass","scoreMode":"informative","detail":"security.txt valid, expires 2027-09-05T00:00:00.000Z.","why":"Gives researchers a documented way to report vulnerabilities responsibly.","learnMoreUrl":"/methodology#security-txt","scope":"site","order":9,"pointsRecoverable":0},{"id":"dnssec","group":"security","category":"security","title":"DNSSEC","severity":"warn","scoreMode":"informative","detail":"DNSSEC is not enabled — DNS answers for the domain can be spoofed.","why":"Protects the domain's own DNS answers from being spoofed.","learnMoreUrl":"/methodology#dnssec","scope":"site","order":10,"pointsRecoverable":0,"fix":"Enable DNSSEC at your registrar and DNS host."}],"topFixes":[{"id":"dmarc","title":"DMARC record","severity":"fail","fix":"Upgrade from p=none to p=quarantine then p=reject.","group":"security","pointsRecoverable":0,"pagesAffected":1},{"id":"org-entity","title":"Organization / LocalBusiness entity","severity":"warn","fix":"Add a logo of at least 112px and sameAs links to LinkedIn, Companies House or Wikidata so engines can disambiguate you.","group":"schemaCoverage","pageUrl":"https://aieo.fyi/","pointsRecoverable":0,"pagesAffected":1},{"id":"csp","title":"Content-Security-Policy","severity":"warn","fix":"Add a Content-Security-Policy, starting in report-only mode.","group":"security","pointsRecoverable":0,"pagesAffected":1},{"id":"dnssec","title":"DNSSEC","severity":"warn","fix":"Enable DNSSEC at your registrar and DNS host.","group":"security","pointsRecoverable":0,"pagesAffected":1}],"rateLimit":{"limit":12,"remaining":10,"resetAt":"2026-09-25T09:00:00.000Z"}}