Export Report
OVERALL SCORE
Level 3, Bot-Aware
- AI Discoverability 69 out of 100
- Agent Ease of Use 59 out of 100
- Security & Trust 67 out of 100
- GEO, AIO and AEO 54 out of 100
- SEO 100 out of 100
- Performance 71 out of 100
- Accessibility 74 out of 100
What AI sees of your website
The Content Operating System for the AI era | Sanity
Sanity is the back-end built for AI content operations. Power web, mobile, and agentic applications at scale.
Next step
Turn this report into a fix workflow
2 failed checks are ready to move into MCP or CLI remediation. Generate a repair prompt, connect the scanner to your coding agent, or open the integration docs before your next rescan.
| Metric | Score | Status | Passed | Failed | Warning | Evidence |
|---|---|---|---|---|---|---|
| AI Discoverability | 69 | Needs work | 30 | 2 | 1 | View details |
| Discoverability | 100 | Strong | 10 | 0 | 0 | |
| Content Readiness | 51 | Needs work | 17 | 1 | 1 | View details |
| Bot Access Control | 58 | Needs work | 3 | 1 | 0 | View details |
| Agent Ease of Use | 59 | Needs work | 15 | 2 | 3 | View details |
| API | 78 | Mostly ready | 11 | 0 | 0 | |
| Skill Discovery | 48 | Priority fix | 1 | 2 | 3 | View details |
| Google Agentic Browsing | 100 | Strong | 3 | 0 | 0 | |
| GEO, AIO and AEO | 54 | Needs work | 5 | 0 | 0 | |
| GEO Readiness | Not Applicable | Not Applicable | 1 | 0 | 0 | |
| AIO Readiness | Not Applicable | Not Applicable | 2 | 0 | 0 | |
| AEO Readiness | Not Applicable | Not Applicable | 2 | 0 | 0 | |
| SEO | 100 | Strong | 10 | 0 | 0 | |
| SEO | 100 | Strong | 10 | 0 | 0 | |
| Security & Trust | 67 | Needs work | 14 | 0 | 0 | |
| Security & Trust | 67 | Needs work | 14 | 0 | 0 | |
| Performance | 71 | Needs work | 13 | 0 | 0 | |
| Performance | 71 | Needs work | 13 | 0 | 0 |
Prioritized recommendations
Issues ranked by score impact
3 items need attention
AI DiscoverabilityBot Access ControlEstablished
AI bot rules in robots.txt
AI bot rules in robots.txt failed at "Classify AI crawler rules".
69 Fail
AI DiscoverabilityBot Access ControlEstablished
AI bot rules in robots.txt
AI bot rules in robots.txt failed at "Classify AI crawler rules".
Needs attention
AI bot rules in robots.txt
Issue
No explicit User-agent rules were found for major AI crawler tokens.
Details
Why it matters
AI crawler product tokens have different meanings. Explicit robots.txt groups make training, search, and retrieval access policy auditable for compliant crawler operators.
Check name
AI bot rules in robots.txt
Score
31/100
Status
fail
Category
Bot Access Control
Maturity
Established
Goal
Declare deliberate robots.txt rules for major AI training, AI search, user-triggered, and dataset crawlers.
Result
AI bot rules in robots.txt failed at "Classify AI crawler rules".
Validation steps
Classify AI crawler rules
No explicit User-agent rules were found for major AI crawler tokens.
robots.txt lacks explicit AI crawler rules
Evidence log1 step · 6 lines
Classify AI crawler rules [fail]! No explicit User-agent rules were found for major AI crawler tokens.INFOClassify AI crawler rulesINFOParsing User-agent groups and Allow/Disallow records for known AI crawler tokens evaluatedPath="/"INFOEvaluating exact User-agent matches before wildcard fallback exactAiPolicyCount=0 totalCrawlerTokens=18FAILNo explicit AI crawler User-agent groups were found examplesExpected=["GPTBot","OAI-SearchBot","ClaudeBot","Google-Extended","CCBot"]FAILCompare explicit AI crawler coverage actual=0 expected="> 0 explicit non-search AI crawler policies" missingTokens=["GPTBot","OAI-SearchBot","ChatGPT-User","ClaudeBot","Claude-SearchBot","Claude-User","Google-Extended","Applebot-Extended","Amazonbot","Amzn-SearchBot","Amzn-User","PerplexityBot"]INFOResolved effective root-path policy for crawler tokens blocked=0 allowed=21 unspecified=0Agent Ease of UseSkill DiscoveryEmerging recommendation
Agent Skills index
Agent Skills index failed at "Validate discovery index schema".
60 Fail
Agent Ease of UseSkill DiscoveryEmerging recommendation
Agent Skills index
Agent Skills index failed at "Validate discovery index schema".
Needs attention
Agent Skills index
Issue
Agent Skills index must use $schema https://schemas.agentskills.io/discovery/0.2.0/schema.json.
Details
Why it matters
An Agent Skills index lets agents discover task-specific instructions through a small trusted index, then verify and load only the skill artifacts they need.
Check name
Agent Skills index
Score
40/100
Status
fail
Category
Skill Discovery
Maturity
Emerging recommendation
Goal
Publish an Agent Skills discovery index that advertises digest-pinned SKILL.md or archive artifacts.
Result
Agent Skills index failed at "Validate discovery index schema".
Validation steps
Validate discovery index schema
Agent Skills index must use $schema https://schemas.agentskills.io/discovery/0.2.0/schema.json.
Agent Skills discovery index schema is invalid
Top-level issues
- $schema must be https://schemas.agentskills.io/discovery/0.2.0/schema.json
Invalid skills
[ { "index": 0, "valid": false, "name": "Content Experimentation Best Practices", "type": "", "description": "Content experimentation and A/B testing guidance covering experiment design, hypotheses, metrics, sample size, statistical foundations, CMS-managed variants, and common analysis pitfalls.", "url": "https://github.com/sanity-io/agent-toolkit/tree/main/skills/content-experimentation-best-practices", "digest": "", "resolvedUrl": "https://github.com/sanity-io/agent-toolkit/tree/main/skills/content-experimentation-best-practices", "originClass": "external", "missing": [ "type", "digest" ], "invalid": [ "name must be lowercase alphanumeric plus hyphens, max 64 characters, with no leading/trailing or consecutive hyphen" ], "warnings": [ "description should explain when to use the skill", "artifact URL is cross-origin; clients must treat it as a separate trust boundary" ] }, { "index": 1, "valid": false, "name": "Content Modeling Best Practices", "type": "", "description": "Structured content modeling guidance for schema design, content architecture, content reuse, references versus embedded objects, separation of concerns, and taxonomies across Sanity and other headless CMSes.", "url": "https://github.com/sanity-io/agent-toolkit/tree/main/skills/content-modeling-best-practices", "digest": "", "resolvedUrl": "https://github.com/sanity-io/agent-toolkit/tree/main/skills/content-modeling-best-practices", "originClass": "external", "missing": [ "type", "digest" ], "invalid": [ "name must be lowercase alphanumeric plus hyphens, max 64 characters, with no leading/trailing or consecutive hyphen" ], "warnings": [ "artifact URL is cross-origin; clients must treat it as a separate trust boundary" ] }, { "index": 2, "valid": false, "name": "Portable Text Conversion", "type": "", "description": "Convert HTML and Markdown content into Portable Text blocks for Sanity. Covers @portabletext/markdown, @portabletext/block-tools, custom deserializers, and manual block construction.", "url": "https://github.com/sanity-io/agent-toolkit/tree/main/skills/portable-text-conversion", "digest": "", "resolvedUrl": "https://github.com/sanity-io/agent-toolkit/tree/main/skills/portable-text-conversion", "originClass": "external", "missing": [ "type", "digest" ], "invalid": [ "name must be lowercase alphanumeric plus hyphens, max 64 characters, with no leading/trailing or consecutive hyphen" ], "warnings": [ "artifact URL is cross-origin; clients must treat it as a separate trust boundary" ] }, { "index": 3, "valid": false, "name": "Portable Text Serialization", "type": "", "description": "Render and serialize Portable Text to React, Svelte, Vue, Astro, HTML, Markdown, and plain text. Covers custom serializers for non-standard block types and framework-specific rendering patterns.", "url": "https://github.com/sanity-io/agent-toolkit/tree/main/skills/portable-text-serialization", "digest": "", "resolvedUrl": "https://github.com/sanity-io/agent-toolkit/tree/main/skills/portable-text-serialization", "originClass": "external", "missing": [ "type", "digest" ], "invalid": [ "name must be lowercase alphanumeric plus hyphens, max 64 characters, with no leading/trailing or consecutive hyphen" ], "warnings": [ "artifact URL is cross-origin; clients must treat it as a separate trust boundary" ] }, { "truncated": true, "omittedCount": 2, "originalCount": 6 } ]Validate skill entries
One or more Agent Skills entries have invalid required fields.
One or more skill entries are invalid
Skill entry findings
[ { "index": 0, "valid": false, "name": "Content Experimentation Best Practices", "type": "", "description": "Content experimentation and A/B testing guidance covering experiment design, hypotheses, metrics, sample size, statistical foundations, CMS-managed variants, and common analysis pitfalls.", "url": "https://github.com/sanity-io/agent-toolkit/tree/main/skills/content-experimentation-best-practices", "digest": "", "resolvedUrl": "https://github.com/sanity-io/agent-toolkit/tree/main/skills/content-experimentation-best-practices", "originClass": "external", "missing": [ "type", "digest" ], "invalid": [ "name must be lowercase alphanumeric plus hyphens, max 64 characters, with no leading/trailing or consecutive hyphen" ], "warnings": [ "description should explain when to use the skill", "artifact URL is cross-origin; clients must treat it as a separate trust boundary" ] }, { "index": 1, "valid": false, "name": "Content Modeling Best Practices", "type": "", "description": "Structured content modeling guidance for schema design, content architecture, content reuse, references versus embedded objects, separation of concerns, and taxonomies across Sanity and other headless CMSes.", "url": "https://github.com/sanity-io/agent-toolkit/tree/main/skills/content-modeling-best-practices", "digest": "", "resolvedUrl": "https://github.com/sanity-io/agent-toolkit/tree/main/skills/content-modeling-best-practices", "originClass": "external", "missing": [ "type", "digest" ], "invalid": [ "name must be lowercase alphanumeric plus hyphens, max 64 characters, with no leading/trailing or consecutive hyphen" ], "warnings": [ "artifact URL is cross-origin; clients must treat it as a separate trust boundary" ] }, { "index": 2, "valid": false, "name": "Portable Text Conversion", "type": "", "description": "Convert HTML and Markdown content into Portable Text blocks for Sanity. Covers @portabletext/markdown, @portabletext/block-tools, custom deserializers, and manual block construction.", "url": "https://github.com/sanity-io/agent-toolkit/tree/main/skills/portable-text-conversion", "digest": "", "resolvedUrl": "https://github.com/sanity-io/agent-toolkit/tree/main/skills/portable-text-conversion", "originClass": "external", "missing": [ "type", "digest" ], "invalid": [ "name must be lowercase alphanumeric plus hyphens, max 64 characters, with no leading/trailing or consecutive hyphen" ], "warnings": [ "artifact URL is cross-origin; clients must treat it as a separate trust boundary" ] }, { "index": 3, "valid": false, "name": "Portable Text Serialization", "type": "", "description": "Render and serialize Portable Text to React, Svelte, Vue, Astro, HTML, Markdown, and plain text. Covers custom serializers for non-standard block types and framework-specific rendering patterns.", "url": "https://github.com/sanity-io/agent-toolkit/tree/main/skills/portable-text-serialization", "digest": "", "resolvedUrl": "https://github.com/sanity-io/agent-toolkit/tree/main/skills/portable-text-serialization", "originClass": "external", "missing": [ "type", "digest" ], "invalid": [ "name must be lowercase alphanumeric plus hyphens, max 64 characters, with no leading/trailing or consecutive hyphen" ], "warnings": [ "artifact URL is cross-origin; clients must treat it as a separate trust boundary" ] }, { "truncated": true, "omittedCount": 2, "originalCount": 6 } ]Verify advertised artifacts
No valid skill artifacts were available to verify.
Validate skill content
For skill-md artifacts, include valid YAML frontmatter with name and description followed by Markdown. For archives, include a safe root SKILL.md and no unsafe paths.
Review skill artifact security
Do not publish secrets or prompt-injection instructions in skill artifacts. Treat scripts, archives, and cross-origin artifacts as software supply-chain surfaces.
Evidence log5 steps · 24 lines
Validate discovery index schema [fail]! Agent Skills index must use $schema https://schemas.agentskills.io/discovery/0.2.0/schema.json.INFOValidate discovery index schemaINFOParse Agent Skills index JSON validJson=true contentTypeCompatible=trueFAILCompare $schema URI actual="https://agentskills.io/schemas/discovery/v0.2.0/config.json" expected="https://schemas.agentskills.io/discovery/0.2.0/schema.json"FAILCompare top-level schema issue count actual=1 expected=0FAILCompare unknown top-level field count actual=0 expected=0FAILAgent Skills index must use $schema https://schemas.agentskills.io/discovery/0.2.0/schema.json.Validate skill entries [fail]! One or more Agent Skills entries have invalid required fields.INFOValidate skill entriesFAILCompare advertised skill count actual=6 expected="> 0"FAILCompare valid skill entry count actual=0 expected="same as advertised skill count"FAILInvalid skill entry skill={"index":0,"valid":false,"name":"Content Experimentation Best Practices","type":"","description":"Content experimentation and A/B testing guidance covering experiment design, hypotheses, metrics, sample size, statistical foundations, CMS-managed variants, and common analysis pitfalls.","url":"https://github.com/sanity-io/agent-toolkit/tree/main/skills/content-experimentation-best-practices","digest":"","resolvedUrl":"https://github.com/sanity-io/agent-toolkit/tree/main/skills/content-experimentation-best-practices","originClass":"external","missing":["type","digest"],"invalid":["name must be lowercase alphanumeric plus hyphens, max 64 characters, with no leading/trailing or consecutive hyphen"],"warnings":["description should explain when to use the skill","artifact URL is cross-origin; clients must treat it as a separate trust boundary"]}FAILInvalid skill entry skill={"index":1,"valid":false,"name":"Content Modeling Best Practices","type":"","description":"Structured content modeling guidance for schema design, content architecture, content reuse, references versus embedded objects, separation of concerns, and taxonomies across Sanity and other headless CMSes.","url":"https://github.com/sanity-io/agent-toolkit/tree/main/skills/content-modeling-best-practices","digest":"","resolvedUrl":"https://github.com/sanity-io/agent-toolkit/tree/main/skills/content-modeling-best-practices","originClass":"external","missing":["type","digest"],"invalid":["name must be lowercase alphanumeric plus hyphens, max 64 characters, with no leading/trailing or consecutive hyphen"],"warnings":["artifact URL is cross-origin; clients must treat it as a separate trust boundary"]}FAILInvalid skill entry skill={"index":2,"valid":false,"name":"Portable Text Conversion","type":"","description":"Convert HTML and Markdown content into Portable Text blocks for Sanity. Covers @portabletext/markdown, @portabletext/block-tools, custom deserializers, and manual block construction.","url":"https://github.com/sanity-io/agent-toolkit/tree/main/skills/portable-text-conversion","digest":"","resolvedUrl":"https://github.com/sanity-io/agent-toolkit/tree/main/skills/portable-text-conversion","originClass":"external","missing":["type","digest"],"invalid":["name must be lowercase alphanumeric plus hyphens, max 64 characters, with no leading/trailing or consecutive hyphen"],"warnings":["artifact URL is cross-origin; clients must treat it as a separate trust boundary"]}FAILInvalid skill entry skill={"index":3,"valid":false,"name":"Portable Text Serialization","type":"","description":"Render and serialize Portable Text to React, Svelte, Vue, Astro, HTML, Markdown, and plain text. Covers custom serializers for non-standard block types and framework-specific rendering patterns.","url":"https://github.com/sanity-io/agent-toolkit/tree/main/skills/portable-text-serialization","digest":"","resolvedUrl":"https://github.com/sanity-io/agent-toolkit/tree/main/skills/portable-text-serialization","originClass":"external","missing":["type","digest"],"invalid":["name must be lowercase alphanumeric plus hyphens, max 64 characters, with no leading/trailing or consecutive hyphen"],"warnings":["artifact URL is cross-origin; clients must treat it as a separate trust boundary"]}FAILInvalid skill entry skill={"index":4,"valid":false,"name":"Sanity Best Practices","type":"","description":"Sanity development best practices for schema design, GROQ queries, TypeGen, Visual Editing, images, Portable Text, Studio structure, localization, migrations, Sanity Functions, Blueprints, and framework integrations including Next.js, Nuxt, Astro, Remix, SvelteKit, Angular, and Hydrogen.","url":"https://github.com/sanity-io/agent-toolkit/tree/main/skills/sanity-best-practices","digest":"","resolvedUrl":"https://github.com/sanity-io/agent-toolkit/tree/main/skills/sanity-best-practices","originClass":"external","missing":["type","digest"],"invalid":["name must be lowercase alphanumeric plus hyphens, max 64 characters, with no leading/trailing or consecutive hyphen"],"warnings":["artifact URL is cross-origin; clients must treat it as a separate trust boundary"]}FAILInvalid skill entry skill={"index":5,"valid":false,"name":"SEO & AEO Best Practices","type":"","description":"SEO and AEO best practices for metadata, Open Graph, sitemaps, robots.txt, hreflang, JSON-LD structured data, EEAT, and content optimized for search engines and AI answer surfaces like Google, ChatGPT, and Perplexity.","url":"https://github.com/sanity-io/agent-toolkit/tree/main/skills/seo-aeo-best-practices","digest":"","resolvedUrl":"https://github.com/sanity-io/agent-toolkit/tree/main/skills/seo-aeo-best-practices","originClass":"external","missing":["type","digest"],"invalid":["name must be lowercase alphanumeric plus hyphens, max 64 characters, with no leading/trailing or consecutive hyphen"],"warnings":["artifact URL is cross-origin; clients must treat it as a separate trust boundary"]}FAILOne or more Agent Skills entries have invalid required fields.Verify advertised artifacts [warning]! No valid skill artifacts were available to verify.INFOVerify advertised artifactsWARNCompare artifact fetch count actual=0 expected="> 0"WARNNo valid skill artifacts were available to verify.Validate skill content [warning]INFOValidate skill contentWARNAgent Skills step completed with warningsReview skill artifact security [warning]INFOReview skill artifact securityWARNCompare security finding count actual=0 expected=0WARNAgent Skills step completed with warnings
AI DiscoverabilityContent ReadinessEstablished
Author attribution
Author attribution is partially implemented.
45 Warning
AI DiscoverabilityContent ReadinessEstablished
Author attribution
Author attribution is partially implemented.
Needs attention
Author attribution
Issue
No named author or publisher identity could be extracted.
Details
Why it matters
Author attribution helps agents cite content responsibly, assess source credibility, and distinguish editorial pages from anonymous marketing copy.
Check name
Author attribution
Score
55/100
Status
warning
Category
Content Readiness
Maturity
Established
Goal
Identify content authors or publishers for trust and attribution.
Result
Author attribution is partially implemented.
Validation steps
Schema.org attribution
Schema.org attribution is incomplete or relies only on publisher/fallback evidence.
Schema.org author attribution is missing or incomplete
Author identity quality
No named author or publisher identity could be extracted.
Author identity quality is incomplete
Evidence log2 steps · 8 lines
Schema.org attribution [warning]! Schema.org attribution is incomplete or relies only on publisher/fallback evidence.INFOSchema.org attributionINFOChecking structured data for author, creator, and publisher contributorsWARNCheck named Schema.org author count actual=0 expected="> 0" authorCount=0 publisherCount=0 namedContributors=0 authors=[] publishers=[] formats=[]WARNSchema.org attribution is incomplete or fallback-only authorCount=0 publisherCount=0 authors=[] publishers=[]Author identity quality [fail]! No named author or publisher identity could be extracted.INFOAuthor identity qualityINFOChecking contributors for stable identity signalsFAILCheck identified contributor count actual=0 expected="> 0" namedContributors=0 identifiedContributors=[] unidentifiedContributors=[]FAILNo named contributor identity could be extracted
Sign in to see 35 other issues and the full report
Create a free account to unlock every issue, evidence details, exports, and higher free limits.
Fix with MCP or CLI
Use this report as the handoff into remediation. Generate a coding-agent prompt with the failing checks attached, or jump to the MCP and CLI setup docs before your next rescan.
Score history
Public scan score over time
Public reports for this website origin. Select any point or report link to open that canonical report.
| Scan date | Score | Readiness | Report |
|---|---|---|---|
| 65/100 | Level 3, Bot-Aware | Current report |