aeorank scan
Scan a website URL and generate an AEO score with a dimension breakdown and the 8 files the published CLI (aeorank-cli@0.1.1) actually writes.
aeorank scan <url> [options]Arguments
Section titled “Arguments”| Argument | Description |
|---|---|
<url> | The website URL to scan (required) |
Options
Section titled “Options”| Flag | Default | Description |
|---|---|---|
--format <type> | human | Output format: human (colored terminal) or json (machine-readable) |
--output <dir> | ./aeorank-output | Directory to write generated files |
--config <path> | — | Path to configuration file |
--max-pages <n> | 200 | Maximum pages to crawl |
--no-files | off | Skip writing generated files |
--overwrite | off | Replace existing output files |
--browser / -b | off | Use Playwright for JavaScript-rendered pages |
--pillar <name> | — | Filter dimensions to one pillar |
--page <path> | — | Show score for a specific page path |
--fail-on-crawler-block | off | Fail the PR if GPTBot is blocked. Exit 2 if GPTBot, ClaudeBot, PerplexityBot, or Google-Extended is disallowed in robots.txt. A missing robots.txt is unknown, not blocked. |
Examples
Section titled “Examples”Basic scan
Section titled “Basic scan”npx aeorank-cli scan https://example.comFail CI when an AI crawler is blocked
Section titled “Fail CI when an AI crawler is blocked”npx aeorank-cli scan https://example.com --fail-on-crawler-block --format json --no-filesExit codes:
| Code | Meaning |
|---|---|
0 | Scan succeeded (unknown crawlers do not fail) |
1 | Scan or I/O error |
2 | --fail-on-crawler-block and a gated bot is disallowed |
JSON output for CI
Section titled “JSON output for CI”npx aeorank-cli scan https://example.com --format json --no-filesThe JSON object is the contract the GitHub Action consumes next. Always present:
version— CLI version frompackage.json(one source of truth)score/gradedimensionCount—dimensions.length(currently 36)generatedFiles— names of files actually written (currently 8)crawlerAccess— per-bot map:allow|block|unknowncrawlerGate—{ checkedBots, blockedBots, unknownBots, failed, robotsTxt }failedistrueonly when a checked bot is disallowedrobotsTxt: "missing"means 404 / no file — status unknown, not blocked
npx aeorank-cli scan https://example.com --format json --no-files | jq '.crawlerAccess.GPTBot'Output
Section titled “Output”Human format (default)
Section titled “Human format (default)”- AI crawler table — GPTBot, ClaudeBot, PerplexityBot, Google-Extended → allow / block / unknown
- Overall AEO score (0–100) and letter grade, plus the true dimension and file counts
- 36-dimension breakdown grouped by pillar
- Actionable next-step recommendations
JSON format
Section titled “JSON format”See fields above. crawlerAccess uses allow / block / unknown (not allowed / disallowed) so Actions can consume it without remapping.
Honest claims
Section titled “Honest claims”Crawler allowlists plus a CI gate prevent GPTBot (and peers) from staying blocked. llms.txt is agent-docs hygiene, not a citation guarantee.