Audit any URL for AI crawler readiness. Get a 0-100 AEO score.
Agentic Engine Optimization (AEO) is the practice of making your website discoverable and accessible to AI agents and LLM-powered search engines. As AI crawlers like GPTBot, ClaudeBot, and PerplexityBot become major traffic sources, AEO ensures your content is structured, permitted, and optimized for these systems.
AEO-CLI checks how well a URL is prepared for AI consumption and returns a structured score.
- Robots.txt AI bot access — checks whether major AI crawlers are allowed or blocked
- llms.txt presence — detects the emerging standard for LLM-specific site instructions
- Schema.org JSON-LD — extracts and evaluates structured data markup
- Content density — measures useful content vs. boilerplate via markdown conversion
- Rich CLI output — formatted tables and scores via Rich
- JSON output — machine-readable results for pipelines
- MCP server — expose the audit as a tool for AI agents via FastMCP
- AEO Compiler — LLM-powered
llms.txtandschema.jsonldgeneration - CI/CD integration —
--fail-underthreshold,--fail-on-blocked-bots, GitHub Step Summary - GitHub Action — composite action for CI pipelines
pip install aeo-cliAEO-CLI uses a headless browser for content extraction. After installing, run:
crawl4ai-setupgit clone https://github.com/your-org/aeo-cli.git
cd aeo-cli
pip install -e ".[dev]"
crawl4ai-setupaeo-cli audit example.comThis runs a full audit and prints a Rich-formatted report with your AEO score.
Audit only the specified URL (skip multi-page discovery):
aeo-cli audit example.com --singleDiscover pages via sitemap/spider and audit up to 10 pages:
aeo-cli audit example.comaeo-cli audit example.com --max-pages 5Get structured JSON for CI pipelines, dashboards, or scripting:
aeo-cli audit example.com --jsonaeo-cli audit example.com --format csv
aeo-cli audit example.com --format markdownShow detailed per-pillar breakdown with scoring explanations:
aeo-cli audit example.com --single --verboseFail the build if the AEO score is below a threshold:
aeo-cli audit example.com --fail-under 60Fail if any AI bot is blocked:
aeo-cli audit example.com --fail-on-blocked-botsExit codes: 0 = pass, 1 = score below threshold, 2 = bots blocked.
When running in GitHub Actions, a markdown summary is automatically written to $GITHUB_STEP_SUMMARY.
Suppress output, exit code 0 if score >= 50, 1 otherwise:
aeo-cli audit example.com --quietUse --fail-under with --quiet to override the default threshold:
aeo-cli audit example.com --quiet --fail-under 70aeo-cli mcpLaunches a FastMCP stdio server exposing the audit as a tool for AI agents.
To use AEO-CLI as a tool in Claude Desktop, add this to your Claude Desktop config (claude_desktop_config.json):
{
"mcpServers": {
"aeo-cli": {
"command": "aeo-cli",
"args": ["mcp"]
}
}
}Once configured, Claude can call the audit_url tool directly to check any URL's AEO readiness.
Generate llms.txt and schema.jsonld files from any URL using LLM analysis:
pip install aeo-cli[generate]
aeo-cli generate example.comThis crawls the URL, sends the content to an LLM, and writes optimized files to ./aeo-output/.
The generate command auto-detects your LLM provider from environment variables:
| Priority | Env Variable | Model Used |
|---|---|---|
| 1 | OPENAI_API_KEY |
gpt-4o-mini |
| 2 | ANTHROPIC_API_KEY |
claude-3-haiku-20240307 |
| 3 | Ollama running locally | ollama/llama3.2 |
Override with --model:
aeo-cli generate example.com --model gpt-4oTailor the output with --profile:
aeo-cli generate example.com --profile saas
aeo-cli generate example.com --profile ecommerceAvailable: generic, cpg, saas, ecommerce, blog.
Use AEO-CLI in your CI pipeline:
- name: Run AEO Audit
uses: hanselhansel/aeo-cli@main
with:
url: 'https://your-site.com'
fail-under: '60'The action sets up Python, installs aeo-cli, and runs the audit. Outputs score and report-json for downstream steps. See docs/ci-integration.md for full documentation.
AEO-CLI returns a score from 0 to 100, composed of four pillars:
| Pillar | Max Points | What it measures |
|---|---|---|
| Content density | 40 | Quality and depth of extractable text content |
| Robots.txt AI bot access | 25 | Whether AI crawlers are allowed in robots.txt |
| Schema.org JSON-LD | 25 | Structured data markup (Product, Article, FAQ, etc.) |
| llms.txt presence | 10 | Whether a /llms.txt file exists for LLM guidance |
The weights reflect how AI search engines (ChatGPT, Perplexity, Claude) actually consume web content:
- Content density (40 pts) is weighted highest because it's what LLMs extract and cite when answering questions. Rich, well-structured content with headings and lists gives AI better material to work with.
- Robots.txt (25 pts) is the gatekeeper — if a bot is blocked, it literally cannot crawl. It's critical but largely binary (either you're blocking or you're not).
- Schema.org (25 pts) provides structured "cheat sheets" that help AI understand entities (products, articles, organizations). Valuable but not required for citation.
- llms.txt (10 pts) is an emerging standard. No major AI search engine heavily weights it yet, but it signals forward-thinking AI readiness.
AEO-CLI checks access rules for these AI crawlers:
- GPTBot
- ChatGPT-User
- Google-Extended
- ClaudeBot
- PerplexityBot
- Amazonbot
- OAI-SearchBot
# Install with dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Lint
ruff check src/ tests/MIT