CanAgentUse tools

UCP Suite

Validate Universal Commerce Protocol discovery, then test product search, carts, checkout links, and merchant handoff flows.

MCP Playground

Connect to remote MCP servers, inspect tools and resources, test prompts, auth, headers, notifications, and JSON-RPC responses.

A2A Playground

Inspect Agent Cards, validate advertised endpoints, and prepare safe requests for agent-to-agent workflows.

Agent Website Viewer

Enter a public URL and see the roles, names, landmarks, controls, and blockers that shape how AI agents understand the page.

SCANNED
Jun 18, 2026, 1:56 AM
VISIBILITY
Public
Rescan Report
Share Report
Copy Report Link
Export Report
47/100

OVERALL SCORE

Level 2, Agent-Limited

Priority improvements needed for AI agents
AIDiscoverability37%Agent Easeof Use42%Security& Trust85%GEO, AIO, AEO46%SEO91%Performance68%Accessibility10%
  • AI Discoverability 37 out of 100
  • Agent Ease of Use 42 out of 100
  • Security & Trust 85 out of 100
  • GEO, AIO and AEO 46 out of 100
  • SEO 91 out of 100
  • Performance 68 out of 100
  • Accessibility 10 out of 100

CAPTURED SCREENSHOT

Captured website desktop screenshot

What AI sees of your website

Avo: Guarantee event data quality upstream favicon

Avo: Guarantee event data quality upstream

Avo helps data and product teams guarantee event data quality upstream, so they can build great user experiences

Open Agent View

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.

Fix with MCP / CLI
Detailed report scores grouped by capability area
MetricScoreStatusPassedFailedWarningEvidence
AI Discoverability
37
Priority fix1520View details
Discoverability
47
Priority fix600
Content Readiness
27
Priority fix900
Bot Access Control
38
Priority fix020View details
GEO, AIO and AEO
46
Priority fix500
GEO Readiness
Not Applicable
Not Applicable200
AIO Readiness
Not Applicable
Not Applicable100
AEO Readiness
Not Applicable
Not Applicable200
SEO
91
Strong700
SEO
91
Strong700
Security & Trust
85
Mostly ready2522View details
Security & Trust
85
Mostly ready2522View details
Performance
68
Needs work1300
Performance
68
Needs work1300
Accessibility
10
Priority fix010View details
Accessibility
10
Priority fix010View details

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 "Fetch robots.txt".

100 Fail

Needs attention

AI bot rules in robots.txt

Failed check
01

Issue

No robots.txt content was available to inspect for AI bot rules.

02

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

0/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 "Fetch robots.txt".

Validation steps

  1. Fetch robots.txt

    No robots.txt content was available to inspect for AI bot rules.

  2. Classify AI crawler rules

    No explicit User-agent rules were found for major AI crawler tokens.

Evidence log2 steps · 10 lines
Fetch robots.txt [fail]! No robots.txt content was available to inspect for AI bot rules.INFOFetch robots.txtINFORequesting /robots.txt from the site originFAILCheck whether robots.txt content is available actual="no content" expected="content returned" length=0FAILNo robots.txt content was available to inspect for AI bot rules.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=0 unspecified=21

Security & TrustSecurity & TrustEstablished

Frame protection

Frame protection failed at "Validate CSP frame-ancestors".

72 Fail

Needs attention

Frame protection

Failed check
01

Issue

frame-ancestors contains invalid source expressions: http://localhost:1235/, https://*.avo-dev.app/, https://*.avo.app/, wss://*.intercom.io, https://canny.io/api/users/identify, https://firebaselogging-pa.googleapis.com/, https://*.posthog.com/.

02

Why it matters

Frame protection blocks hostile sites from embedding pages in deceptive frames, reducing clickjacking and UI redressing risk.

Check name

Frame protection

Score

28/100

Status

fail

Category

Security & Trust

Maturity

Established

Goal

Prevent unwanted framing with an enforcing CSP frame-ancestors directive or a valid X-Frame-Options fallback.

Result

Frame protection failed at "Validate CSP frame-ancestors".

Validation steps

  1. Validate CSP frame-ancestors

    frame-ancestors contains invalid source expressions: http://localhost:1235/, https://*.avo-dev.app/, https://*.avo.app/, wss://*.intercom.io, https://canny.io/api/users/identify, https://firebaselogging-pa.googleapis.com/, https://*.posthog.com/.

  2. Validate X-Frame-Options

    X-Frame-Options is not DENY or SAMEORIGIN.

  3. Review CSP and XFO interaction

    CSP frame-ancestors controls modern browser behavior, but the X-Frame-Options fallback is invalid or conflicting.

  4. Review observed browser responses

    One or more same-origin HTML documents observed by Chrome did not emit valid frame protection.

Evidence log4 steps · 16 lines
Validate CSP frame-ancestors [fail]! frame-ancestors contains invalid source expressions: http://localhost:1235/, https://*.avo-dev.app/, https://*.avo.app/, wss://*.intercom.io, https://canny.io/api/users/identify, https://firebaselogging-pa.googleapis.com/, https://*.posthog.com/.INFOValidate CSP frame-ancestorsINFORead CSP frame-ancestors signals enforcingHeaderPresent=true reportOnlyHeaderPresent=false metaFrameAncestors=false policyCount=1 duplicateDirectives=[]FAILCompare effective frame-ancestors directive actual={"values":["'self'","http://localhost:1235/","http://avo.localhost","https://*.avo-dev.app/","https://*.avo.app/","https://*.mixpanel.com","https://consent.iubenda.com","https://avo-web-app.appspot.com","https://api.avo.app","https://api.amplitude.com","https://*.algolia.net","https://api.segment.io","https://cdn.segment.com","https://*.fullstory.com","https://www.googleapis.com","https://firestore.googleapis.com","https://firebaselogging.googleapis.com","https://firebaseremoteconfig.googleapis.com","https://firebaseinstallations.googleapis.com","https://sentry.io","https://*.ingest.sentry.io","https://api-iam.intercom.io","https://uploads.intercomcdn.com","wss://*.intercom.io","https://*.intercom.io","https://*.intercomcdn.com","https://securetoken.googleapis.com","https://api.mixpanel.com","https://heapanalytics.com","https://firebasestorage.googleapis.com","https://www.google-analytics.com","https://hits-i.iubenda.com","https://canny.io/api/users/identify","https://webflow.com","https://cdn.dreamdata.cloud","https://firebaselogging-pa.googleapis.com/","https://*.posthog.com/"],"mode":"malformed","valid":false,"restrictive":false,"broadSources":[]} expected="valid restrictive enforcing frame-ancestors" issue="frame-ancestors contains invalid source expressions: http://localhost:1235/, https://*.avo-dev.app/, https://*.avo.app/, wss://*.intercom.io, https://canny.io/api/users/identify, https://firebaselogging-pa.googleapis.com/, https://*.posthog.com/."FAILframe-ancestors contains invalid source expressions: http://localhost:1235/, https://*.avo-dev.app/, https://*.avo.app/, wss://*.intercom.io, https://canny.io/api/users/identify, https://firebaselogging-pa.googleapis.com/, https://*.posthog.com/.Validate X-Frame-Options [fail]! X-Frame-Options is not DENY or SAMEORIGIN.INFOValidate X-Frame-OptionsINFORead X-Frame-Options fallback value="SAMEORIGIN SAMEORIGIN" parsedValues=["SAMEORIGIN SAMEORIGIN"] normalizedValues=["sameorigin sameorigin"]FAILCompare X-Frame-Options value actual="invalid" expected="DENY or SAMEORIGIN" valid=false obsoleteAllowFrom=false duplicateOrConflicting=false issue="X-Frame-Options is not DENY or SAMEORIGIN."FAILX-Frame-Options is not DENY or SAMEORIGIN.Review CSP and XFO interaction [warning]! CSP frame-ancestors controls modern browser behavior, but the X-Frame-Options fallback is invalid or conflicting.INFOReview CSP and XFO interactionINFOCompare modern CSP and legacy XFO behavior modernBrowserMechanism="csp-frame-ancestors" cspOverridesXfo=true cspMode="malformed"WARNCheck CSP/XFO policy alignment actual="aligned or single mechanism" expected="no conflicting framing policy" issue="CSP frame-ancestors controls modern browser behavior, but the X-Frame-Options fallback is invalid or conflicting."WARNCSP frame-ancestors controls modern browser behavior, but the X-Frame-Options fallback is invalid or conflicting.Review observed browser responses [warning]! One or more same-origin HTML documents observed by Chrome did not emit valid frame protection.INFOReview observed browser responsesINFOSample Chrome-observed same-origin responses observedResponseCount=65 sameOriginCount=1 htmlDocumentCount=1WARNCompare observed HTML frame protection actual={"missingOrInvalidFrameProtectionCount":1,"broadFrameAncestorsCount":0,"affected":[{"url":"https://www.avo.app/","status":200,"resourceType":"document","contentType":"text/html; charset=utf-8","contentSecurityPolicy":"base-uri https://*.avo.app; default-src 'self'; script-src 'self' 'nonce-b35ZEWRHBxRTaQWxbufecW02M63odmzN' 'strict-dynamic' https://cdn.avo.app https://www.googletagmanager.com https://*.googletagmanager.com https://cdn.segment.com https://*.mxpnl.com https://edge.fullstory.com https://rs.fullstory.","contentSecurityPolicyReportOnly":null,"xFrameOptions":"SAMEORIGIN SAMEORIGIN"}]} expected="0 missing/invalid or broad same-origin HTML responses" issue="One or more same-origin HTML documents observed by Chrome did not emit valid frame protection."WARNOne or more same-origin HTML documents observed by Chrome did not emit valid frame protection.

AccessibilityAccessibilityBrowser audit

Buttons must have discernible text

100 Fail

Check name

Buttons must have discernible text

Score

0/100

Status

fail

Device

desktop

Category

Accessibility

Fix guidance

Buttons must have discernible text

Evidence
{
  "ruleId": "button-name",
  "impact": "critical",
  "description": "Ensure buttons have discernible text",
  "tags": [
    "cat.name-role-value",
    "wcag2a",
    "wcag412",
    "section508",
    "section508.22.a",
    "TTv5",
    "TT6.a",
    "EN-301-549",
    {
      "truncated": true,
      "omittedCount": 4,
      "originalCount": 12
    }
  ],
  "affectedNodeCount": 5,
  "nodes": [
    {
      "target": [
        ".phone-left > .phone-frame > .phone-screen > .phone-header > .phone-header-back"
      ],
      "html": {
        "discarded": true,
        "reason": "[discarded fetched document data]",
        "originalType": "string",
        "originalLength": 186
      },
      "failureSummary": "Fix any of the following:\n  Element does not have inner text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element does not have an implicit (wrapped) <label>\n  Element does not have an explicit <label>\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
    },
    {
      "target": [
        ".phone-left > .phone-frame > .phone-screen > .phone-header > .phone-header-basket"
      ],
      "html": {
        "discarded": true,
        "reason": "[discarded fetched document data]",
        "originalType": "string",
        "originalLength": 187
      },
      "failureSummary": "Fix any of the following:\n  Element does not have inner text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element does not have an implicit (wrapped) <label>\n  Element does not have an explicit <label>\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
    },
    {
      "target": [
        ".phone-right > .phone-frame > .phone-screen > .phone-header > .phone-header-back"
      ],
      "html": {
        "discarded": true,
        "reason": "[discarded fetched document data]",
        "originalType": "string",
        "originalLength": 186
      },
      "failureSummary": "Fix any of the following:\n  Element does not have inner text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element does not have an implicit (wrapped) <label>\n  Element does not have an explicit <label>\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
    },
    {
      "target": [
        ".phone-right > .phone-frame > .phone-screen > .phone-header > .phone-header-basket"
      ],
      "html": {
        "discarded": true,
        "reason": "[discarded fetched document data]",
        "originalType": "string",
        "originalLength": 187
      },
      "failureSummary": "Fix any of the following:\n  Element does not have inner text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element does not have an implicit (wrapped) <label>\n  Element does not have an explicit <label>\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
    },
    {
      "target": [
        ".toggle-switch"
      ],
      "html": {
        "discarded": true,
        "reason": "[discarded fetched document data]",
        "originalType": "string",
        "originalLength": 94
      },
      "failureSummary": "Fix any of the following:\n  Element does not have inner text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element does not have an implicit (wrapped) <label>\n  Element does not have an explicit <label>\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
    }
  ]
}

Sign in to see 37 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.

Fix with MCP / CLI

Score history