The most comprehensive open-source technical AEO (Answer Engine Optimization) audit tool. Scores any website across 16 ranking factors that decide whether AI answer engines (ChatGPT, Perplexity, Gemini, Claude) will cite your content.
- Score any URL across 16 AEO factors: structured data,
llms.txt, E-E-A-T, extractability, snippet eligibility, and more. Scoring - Audit a whole site from its sitemap; per-page findings roll up into ranked fixes. Sitemap mode
- Audit built HTML offline in CI: a
next export/dist/outdirectory, no network. Static output - Detect the platform / CMS / framework: WordPress, Webflow, Shopify, Next.js, Vercel. Platform detection
- Opt in to Lighthouse, geographic, and agent-skill factors. Optional factors
text,json,markdown, andagentoutput with CI-friendly exit codes. CLI reference- Agent-native output: a versioned
schemaVersion, a slim--format agentdecision, ranked structured fixes, and stable finding codes so integrations key on codes, not prose. API - Use as a library (API) or from Claude Code via the
/aeoskill (skill).
Website: canonry.ai
npx @ainyc/aeo-audit https://example.comPrints a scored report. Common variations:
# Every page in the sitemap, site-wide issues only
npx @ainyc/aeo-audit https://example.com --sitemap --top-issues
# JSON for CI/CD (exit 1 when score < 70)
npx @ainyc/aeo-audit https://example.com --format json
# A built directory, offline
npx @ainyc/aeo-audit ./out --base-url https://example.comFull flag and mode reference: docs/cli.md.
The package ships a Claude Code / ClawHub skill. Install it, then:
/aeo audit https://example.com
Modes: audit, fix, schema, llms.txt, monitor. See the skill guide.
Drop the AEO Audit Guard action into any pipeline to fail a PR when its AEO score drops, a page stops auditing, or a new structural defect appears — measured against a committed baseline. It builds your site, audits the HTML offline (no deploy, no secrets), and posts a sticky PR comment with the per-factor diff.
# .github/workflows/aeo.yml
on:
pull_request: { branches: [main] }
permissions:
contents: read
pull-requests: write # for the sticky comment
jobs:
aeo-gate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
with: { version: 9 }
- uses: actions/setup-node@v4 # the engine needs Node >= 20
with: { node-version: 20, cache: pnpm }
- uses: Canonry/aeo-audit-action@v4
with:
build-command: "pnpm install --frozen-lockfile && pnpm run build"
target: "./out" # your built HTML (Next export / Astro dist / Hugo public)
base-url: "https://www.example.com"
baseline-path: ".aeo/baseline.default.json"The first run has no baseline, so it passes and tells you to seed one (npx @ainyc/aeo-audit@4 ./out --base-url https://www.example.com --format json > .aeo/baseline.default.json, then commit it). See the aeo-audit-action README for url/sitemap modes, baseline strategies, monorepos, tolerances, and every input.
| Doc | What's in it |
|---|---|
| CLI reference | Every flag, mode, and exit code |
| GitHub Action | The CI regression gate: inputs, baselines, monorepos |
| Scoring | The 16 factors, weights, score bands |
| Programmatic API | runAeoAudit, runSitemapAudit, runStaticAudit |
| Skill | /aeo modes and install |
| Changelog | Release history |
| Roadmap | What's planned |
git clone https://github.com/Canonry/aeo-audit.git && cd aeo-audit
pnpm install && pnpm run typecheck && pnpm run build && pnpm test && pnpm lintSee CONTRIBUTING.md.