AEO Score – Definition, Signals and Calculation
An AEO score is a weighted 0-100 measure of how ready an online store is for AI systems. The angeo audit checks 20 signals – crawler access, llms.txt, structured data, feeds, agent endpoints and real crawler visits – and gives each a weight. A pass earns the full weight, a warning half, a failure nothing.
One number for how well AI crawlers and shopping agents can reach, read and act on a store – not a prediction that an assistant will recommend it.
How the score is calculated
Each signal has a weight between 0.5 and 1.0. A check that passes earns its full weight, a warning earns half, and a failure earns nothing. The score is the earned weight divided by the total weight of the signals that ran, as a percentage.
score = round( sum(earned) / sum(weight) × 100 )
pass = 1.0 × weight
warn = 0.5 × weight
fail = 0
A signal you switch off for a store view is left out of both sides of the division, so it does not pull the score down. A signal that cannot finish is not skipped: Core Web Vitals without a CrUX API key returns a warning and counts half. Switch it off for the store view if you do not use CrUX.
| Score | Label |
|---|---|
| 85-100 | Excellent |
| 65-84 | Good |
| 40-64 | Needs Improvement |
| 0-39 | Critical |
Severity follows the weight unless a check sets its own: weight 0.8 or more is critical, 0.6 or more is important, the rest is informational.
The 20 signals
These are the checks registered in angeo/module-aeo-audit 4.2.3. With angeo/module-aeo-brand-visibility installed, a 21st live signal, brand_visibility (weight 1.0), joins the same score.
| # | Signal | Code | Weight | Category |
|---|---|---|---|---|
| 1 | robots.txt – AI bots | robots_txt | 1.0 | technical |
| 2 | llms.txt – content map | llms_txt | 1.0 | technical |
| 3 | llms.jsonl – catalog | llms_jsonl | 0.75 | technical |
| 4 | sitemap.xml | sitemap | 0.8 | technical |
| 5 | Product schema | product_schema | 1.0 | technical |
| 6 | Merchant policies | merchant_policies | 0.9 | technical |
| 7 | Organization schema | organization_schema | 0.8 | technical |
| 8 | UCP profile | ucp_profile | 0.9 | technical |
| 9 | AI product feed | ai_product_feed | 1.0 | feed |
| 10 | JSON-LD quality | jsonld_quality | 0.7 | technical |
| 11 | Canonical + hreflang | canonical | 0.7 | technical |
| 12 | Open Graph | open_graph | 0.7 | technical |
| 13 | FAQ schema | faq_schema | 0.5 | technical |
| 14 | Well-known matrix | well_known | 0.5 | technical |
| 15 | Core Web Vitals | core_web_vitals | 0.5 | external_api |
| 16 | WAF reality check | waf_reality | 0.9 | technical |
| 17 | AI crawler activity | ai_crawler_activity | 0.5 | live_signal |
| 18 | A2A Agent Card | agent_card | 0.6 | technical |
| 19 | llms.txt v2 link relations | link_relations | 0.7 | technical |
| 20 | agents.md | agents_md | 0.7 | technical |
Two ways to measure: inside and outside
| CLI audit (inside Magento) | Web scan (outside) | |
|---|---|---|
| Signals | 20 (21 with brand visibility) | 14 |
| Result | One score per store view | Two scores: AI Discovery and Agentic Readiness |
| Sees | Configuration, file freshness, real crawler visits in your logs, CrUX field data | What an AI crawler receives: redirects, 401 and 403 responses, WAF challenges |
| Runs | bin/magento angeo:aeo:audit | angeo.dev/ai-magento-audit, no install |
AI Discovery asks whether AI systems can find, fetch and read the store. Agentic Readiness asks whether a shopping agent can act on it: a UCP profile, a reachable MCP endpoint, the well-known files. The web scan keeps them apart because agentic adoption is still early; merged into one number, a near-universal zero would hide the discovery work that already pays off.
Where the two disagree on one signal, the outside view is usually right about what an agent experiences. A feed that looks installed from inside can return 401 to an anonymous caller.
Run it
composer require angeo/module-aeo-audit
bin/magento setup:upgrade
bin/magento angeo:aeo:audit # all store views
bin/magento angeo:aeo:audit --store=default --format=json
bin/magento angeo:aeo:audit --fail-on=80 # CI: exit 1 below 80%
bin/magento angeo:aeo:audit --fail-on-severity=critical # CI: exit 1 on any critical failure
It measures whether AI systems can read and act on a store. It does not measure whether an assistant names it. In our pre-registered study of 458 businesses, four of these signals did not separate often-named shops from once-named ones. For that question, measure AI share of voice.
Questions
- What is an AEO score?
- A weighted 0-100 score of how ready a store is for AI systems. The angeo audit checks 20 signals; a pass earns the full weight, a warning half, a failure nothing.
- How many signals does the AEO audit check?
- 20 in
angeo/module-aeo-audit4.2.3, and 21 whenangeo/module-aeo-brand-visibilityis installed. The web scan checks 14 from outside the store. - What is the difference between AI Discovery and Agentic Readiness?
- AI Discovery measures whether AI systems can find and read the store. Agentic Readiness measures whether a shopping agent can act on it, through a UCP profile, an MCP endpoint and the well-known files. The web scan reports them as two scores.
- Why does the CLI audit give a different score from the web scan?
- The CLI audit checks 20 signals and sees inside the store; the web scan checks 14 and sees what a crawler receives. They use the same weights, so a single signal means the same in both.
- What is a good AEO score?
- 65 or more is Good and 85 or more is Excellent. A default Magento install usually scores far lower, mostly because of robots.txt, missing llms.txt and incomplete product schema.
- Does a high AEO score mean ChatGPT will recommend my store?
- No. It means the store is readable and usable for AI systems. Whether an assistant names it also depends on price, reviews and coverage on other sites.
Related
- Module: AEO audit for Magento 2
- Free web scan
- How to measure AI visibility
- AI share of voice – definition
- Magento 2 AEO guide
- Magento AEO – definition