Tool Agent Ready Audit
Test how easily AI agents can use your website. Scores your site on navigation, element discovery, and task completion.
Quick Start
npx cbrowser agent-ready-audit "https://example.com"
CLI Options
npx cbrowser agent-ready-audit "https://example.com" \
--html # Generate HTML report
--json # Output as JSON
--headless # Run without visible browser
--timeout 60000 # Page load timeout (ms)
MCP Tool
{
"tool": "agent_ready_audit",
"params": {
"url": "https://example.com"
}
}
Scoring Categories
Findability (35%)
Can AI agents find elements by intent?
Checks:
- Unlabeled buttons and inputs
- Generic button labels ("Submit" vs "Save Changes")
- Missing form associations
- Elements without accessible names
Stability (30%)
Will selectors still work after page changes?
Checks:
- Dynamic class names (e.g.,
css-abc123) - Hidden select inputs (custom dropdowns)
- Sticky overlays that block content
- Infinite scroll patterns
- Missing stable IDs (id, data-testid)
Accessibility (20%)
ARIA labels and semantic HTML quality.
Checks:
- Missing ARIA labels
- Poor heading hierarchy
- Non-semantic interactive elements
- Missing form labels
- Keyboard navigation issues
Semantics (15%)
Does the page have meaningful structure for AI parsing?
Checks:
- Missing JSON-LD structured data
- Missing OpenGraph metadata
- Missing llms.txt
- Poor heading structure
- Generic link text
Detection Functions
| Function | Category | Severity | Description |
|---|---|---|---|
detectUnlabeledElements |
Findability | High | Buttons/inputs without names |
detectGenericLabels |
Findability | Medium | Generic text like "Click here" |
detectHiddenInputs |
Stability | High | Custom dropdowns hiding native selects |
detectDynamicClasses |
Stability | Medium | Framework-generated class names |
detectStickyOverlays |
Stability | High | Fixed elements blocking content |
detectInfiniteScroll |
Stability | Medium | Endless pagination patterns |
detectMissingARIA |
Accessibility | High | Interactive elements without ARIA |
detectHeadingIssues |
Accessibility | Medium | Skipped or out-of-order headings |
detectMissingJSONLD |
Semantics | Medium | No structured data |
detectMissingOpenGraph |
Semantics | Low | No social metadata |
detectMissingLlmsTxt |
Semantics | Low | No llms.txt file |
detectGenericLinks |
Semantics | Low | Links with generic text |
detectFormAssociations |
Findability | High | Inputs without labels |
detectTouchTargets |
Accessibility | Medium | Touch targets under 44x44px |
detectColorContrast |
Accessibility | High | Low contrast text |
detectKeyboardTraps |
Accessibility | High | Elements that trap focus |
detectTimeouts |
Accessibility | Medium | Auto-advancing content |
Output Format
{
"url": "https://example.com",
"score": {
"overall": 71,
"findability": 70,
"stability": 85,
"accessibility": 65,
"semantics": 60
},
"grade": "C",
"summary": {
"totalIssues": 12,
"critical": 2,
"high": 4,
"medium": 4,
"low": 2
},
"topIssues": [
{
"category": "findability",
"severity": "high",
"issue": "5 buttons without accessible names",
"selector": "button.submit-btn",
"recommendation": "Add aria-label or visible text"
}
],
"topRecommendations": [
{
"issue": "Custom dropdown hiding native select",
"fix": "Use accessible combobox pattern",
"effort": "medium",
"impact": "high"
}
],
"duration": 3200
}
Severity Penalties
Based on Nielsen's Usability Severity Scale:
| Severity | Penalty | Description |
|---|---|---|
| Critical | -25 | Prevents task completion |
| High | -15 | Major obstacle, hard workaround |
| Medium | -8 | Minor problem, easy workaround |
| Low | -3 | Cosmetic issue, minimal impact |
Example: Fix Common Issues
Unlabeled Button
<!-- Before -->
<button><svg class="icon-search"/></button>
<!-- After -->
<button aria-label="Search">
<svg class="icon-search" aria-hidden="true"/>
</button>
Generic Link Text
<!-- Before -->
<a href="/pricing">Click here</a>
<!-- After -->
<a href="/pricing">View pricing plans</a>
Custom Dropdown
<!-- Before (hidden select) -->
<select style="display: none">...</select>
<div class="custom-dropdown">...</div>
<!-- After (accessible combobox) -->
<div role="combobox" aria-expanded="false" aria-haspopup="listbox">
<input aria-autocomplete="list">
<ul role="listbox">...</ul>
</div>
Related
- AI-Friendliness - AI-Friendliness overview
- Tool-Remediation - Get code patches for issues
- Tool-AI-Benchmark - Compare against competitors
- UX-Analysis-Suite - Full UX analysis suite
Copyright: (c) 2026 Alexa Eden.
License: MIT License