# AEO Score - Definition, Signals and Calculation

> What an AEO score is, the 20 signals the angeo audit checks, how pass, warn and fail are weighted, and why the CLI audit and web scan differ.

Source: https://angeo.dev/aeo-score-definition/
Updated: 2026-09-26

Canonical definition

# 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.

**In one sentence**
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](https://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
```

**What the score does not measure**
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](https://angeo.dev/ai-readability-and-being-named/), four of these signals did not separate often-named shops from once-named ones. For that question, measure [AI share of voice](https://angeo.dev/ai-share-of-voice-definition/).

## 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-audit` 4.2.3, and 21 when `angeo/module-aeo-brand-visibility` is 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](https://angeo.dev/modules/aeo-audit/)

- [Free web scan](https://angeo.dev/ai-magento-audit/)

- [How to measure AI visibility](https://angeo.dev/measuring-ai-visibility/)

- [AI share of voice - definition](https://angeo.dev/ai-share-of-voice-definition/)

- [Magento 2 AEO guide](https://angeo.dev/magento-2-aeo-guide/)

- [Magento AEO - definition](https://angeo.dev/magento-aeo-definition/)

## Sources

- [angeo/module-aeo-audit on GitHub (checkers in etc/di.xml, scoring in Model/Report/AuditReport.php)](https://github.com/angeo-dev/module-aeo-audit)

- [angeo/module-aeo-brand-visibility on GitHub](https://github.com/angeo-dev/module-aeo-brand-visibility)

Checked 24 September 2026 against the source of angeo/module-aeo-audit 4.2.3 (20 checkers registered in etc/di.xml) and angeo/module-aeo-brand-visibility 4.0.1. Web scan signal count as listed on the scan page. Disclosure: we build both modules and the scan.

## More on this topic

- [Grounding in AI Answers - Definition](https://angeo.dev/grounding-definition/)
- [How to Track AI Search Traffic in Magento 2: GA4 + GSC Guide](https://angeo.dev/track-ai-search-traffic-magento-2/)
- [Magento AI Brand Visibility: Are You in ChatGPT?](https://angeo.dev/magento-2-ai-brand-visibility/)
- [AI Brand Visibility for Magento 2](https://angeo.dev/modules/aeo-brand-visibility/)
- [Magento 2 Audit 2026: Technical, SEO, Performance, AEO](https://angeo.dev/magento-2-audit/)
- [Magento SEO Audit 2026: 4-Layer Checklist with AI Search](https://angeo.dev/magento-seo-audit-2026/)
