angeo / module-aeo-audit
Magento 2 AEO (AI Engine Optimization) audit โ scores your store across 15 technical signals for AI search and agentic commerce: robots.txt AI-bot policy, llms.txt, llms.jsonl, JSON-LD (Product, Organization, FAQ), merchant return + shipping policies, sitemap.xml, UCP profile, AI product feed, Open
Package info
github.com/angeo-dev/module-aeo-audit
Type:magento2-module
pkg:composer/angeo/module-aeo-audit
Requires
- php: ~8.2.0||~8.3.0||~8.4.0||~8.5.0
- magento/framework: ^103.0
- magento/module-backend: ^102.0
- magento/module-catalog: ^104.0
- magento/module-cms: ^104.0
- magento/module-config: ^101.2
- magento/module-store: ^101.1
- magento/module-ui: ^101.2
Requires (Dev)
- bitexpert/phpstan-magento: ^0.30 || ^0.40
- dealerdirect/phpcodesniffer-composer-installer: ^0.7 || ^1.0
- magento/magento-coding-standard: *
- phpstan/phpstan: ^1.10 || ^2.0
- phpunit/phpunit: ^10.5 || ^11.0 || ^12.0
- squizlabs/php_codesniffer: ^3.6
Suggests
- angeo/module-aeo-brand-visibility: Live AI visibility check across ChatGPT, Claude, Perplexity, Gemini
- angeo/module-llms-txt: Generate llms.txt and llms.jsonl
- angeo/module-openai-product-feed: ACP product feed for ChatGPT Shopping
- angeo/module-openai-product-feed-api: REST API endpoints for ACP feed
- angeo/module-rich-data: Product, Organization, FAQ JSON-LD and merchant policies
- angeo/module-robots-txt-aeo: Fix robots.txt AI bot access
- angeo/module-ucp: Universal Commerce Protocol profile (/.well-known/ucp) for Google AI Mode / Gemini
README
One CLI command that tells you exactly why ChatGPT, Gemini, Claude, and Perplexity aren't recommending your store โ and how to fix it.
- ๐ Project home: angeo.dev
- ๐ฆ Source: github.com/angeo-dev/module-aeo-audit
- ๐ Issues: github.com/angeo-dev/module-aeo-audit/issues
- ๐ Full guide: Magento 2 AEO Guide 2026
Compatibility
| Component | Version |
|---|---|
| Magento Open Source | 2.4.6, 2.4.7, 2.4.8, 2.4.9 |
| Adobe Commerce | 2.4.6, 2.4.7, 2.4.8, 2.4.9 |
| Adobe Commerce Cloud | All current versions |
| PHP | 8.2, 8.3, 8.4, 8.5 |
| Themes | Luma, Hyvรค |
Tested with: Magento Open Source 2.4.7-p3 + PHP 8.3 + Hyvรค 1.3.
What's new in v3.0.0
Major release โ see CHANGELOG.md for the breaking-change migration guide if you have custom checkers.
15 signals (up from 9), reflecting the actual AEO landscape of 2026: AI shopping integrations, merchant policies, agentic commerce, and structured-data quality.
6 new checkers:
merchant_policiesโMerchantReturnPolicy+OfferShippingDetailsโ required by Google AI Mode and ChatGPT Shopping since Jan 2026organization_schemaโ brand entity in AI knowledge graphsucp_profileโ Universal Commerce Protocol (/.well-known/ucp), with built-in security check that detects leaked JWK private keysjsonld_qualityโ three-page schema breadth audit (homepage / category / product),WebSite+SearchAction,BreadcrumbList,ItemListwell_knownโ discovery matrix for/.well-known/{ucp,ai-plugin.json,security.txt,mcp}core_web_vitalsโ LCP / INP / CLS via Google CrUX API (free, opt-in with API key)
Refactored architecture (this is the BC-break):
- Shared
Service\HttpCacheโ eliminates duplicate fetches across checkers (hundreds of redundant HTTP requests on multi-store audits before, dozens now) Service\StoreUrlSamplerโ single source of truth for product / category / CMS URL sampling- New
--categoryand--fail-on-severityCLI flags for CI workflows - Per-checker exception isolation โ slow or failing checkers no longer halt the audit run
Note on access-log monitoring: an
ai_bot_trafficchecker was prototyped during v3 development and excluded from the release after security review โ it encouraged broad read access on/var/log/nginx/, didn't work on Cloud/containerised hosting, and was dominated by false positives behind edge caches. AI-bot traffic is better measured at the edge (Fastly/Cloudflare Analytics) or via APM (New Relic, Datadog) than inside a PHP module. See CHANGELOG.md "Considered and rejected" for the full rationale. Thelive_signalcategory remains inCheckerInterfacefor third-party modules with secure live-signal sources โ notablyangeo/module-aeo-brand-visibility.
What it checks โ 15 signals
| # | Signal | Code | Weight | Category | What it validates |
|---|---|---|---|---|---|
| 1 | robots.txt โ AI bots | robots_txt |
1.0 | technical | 12 AI bots, syntax errors, versioned UAs, conflicting rules |
| 2 | llms.txt โ content map | llms_txt |
1.0 | technical | Spec compliance + store-locale + currency match + cross-host links |
| 3 | llms.jsonl โ catalog | llms_jsonl |
0.75 | technical | JSON Lines validity, required fields, eCommerce fields |
| 4 | sitemap.xml | sitemap |
0.8 | technical | XML, lastmod, .gz, catalog disproportion |
| 5 | Product schema | product_schema |
1.0 | technical | JSON-LD on real product, offers, Hyvรค detection |
| 6 | Merchant policies โ NEW | merchant_policies |
0.9 | technical | hasMerchantReturnPolicy, OfferShippingDetails, priceValidUntil, itemCondition |
| 7 | Organization schema โ NEW | organization_schema |
0.8 | technical | Organization / OnlineStore on homepage, sameAs, logo |
| 8 | UCP profile โ NEW | ucp_profile |
0.9 | technical | /.well-known/ucp, signing keys, leaked-private-key detection |
| 9 | AI product feed | ai_product_feed |
1.0 | feed | Feed file, /.well-known/ai-plugin.json, REST endpoint |
| 10 | JSON-LD quality โ NEW | jsonld_quality |
0.7 | technical | Breadcrumb, ItemList, WebSite+SearchAction, duplicate schemas |
| 11 | Canonical + hreflang | canonical |
0.7 | technical | Canonical agrees with og:url + JSON-LD url; hreflang on multi-store |
| 12 | Open Graph | open_graph |
0.7 | technical | All 5 OG tags, description length |
| 13 | FAQ schema | faq_schema |
0.5 | technical | FAQPage JSON-LD on homepage or sampled CMS page |
| 14 | Well-known matrix โ NEW | well_known |
0.5 | technical | ucp / ai-plugin.json / security.txt / mcp inventory |
| 15 | Core Web Vitals โ NEW | core_web_vitals |
0.5 | external_api | LCP / INP / CLS via Google CrUX (API key required) |
โ NEW = added in v3.0.0.
Installation
composer require angeo/module-aeo-audit bin/magento setup:upgrade bin/magento cache:flush
Official distribution channels
This module is distributed only through the following channels:
| Channel | URL |
|---|---|
| Composer / Packagist | packagist.org/packages/angeo/module-aeo-audit |
| Source code | github.com/angeo-dev/module-aeo-audit |
| Issue tracker | github.com/angeo-dev/module-aeo-audit/issues |
| All angeo packages | packagist.org/packages/angeo/ ยท github.com/angeo-dev |
No custom Composer repository is required. The composer require command above resolves the package directly from Packagist, which every Magento installation already trusts by default. If a third-party site instructs you to run composer config repositories.* ... before installing, that is not an official Angeo instruction โ the only supported sources are:
- Packagist โ https://packagist.org/packages/angeo/
- GitHub โ https://github.com/angeo-dev/
Third-party sites may mirror or index this package. Those listings are not maintained by Angeo, and any quality, test, or security ratings shown there are produced by third parties using undisclosed criteria. The authoritative build status is the CI badge at the top of this file, which runs PHPCS, PHPStan and PHPUnit against PHP 8.2โ8.4 on every commit.
For full coverage, install the companion modules:
composer require \ angeo/module-llms-txt \ angeo/module-rich-data \ angeo/module-openai-product-feed \ angeo/module-openai-product-feed-api \ angeo/module-ucp \ angeo/module-aeo-brand-visibility
CLI usage
# Audit all stores bin/magento angeo:aeo:audit # Specific store bin/magento angeo:aeo:audit --store=en_us # JSON output (for dashboards / CI) bin/magento angeo:aeo:audit --format=json # Markdown report to file bin/magento angeo:aeo:audit --format=markdown --output=/var/www/html/aeo-report.md # Fast technical-only checks (skip external APIs) bin/magento angeo:aeo:audit --category=technical # Run only external-API checks (Core Web Vitals + any third-party live signals) bin/magento angeo:aeo:audit --category=external_api,live_signal # Fail build if score below threshold bin/magento angeo:aeo:audit --fail-on=80 # Fail build if any critical-severity check fails bin/magento angeo:aeo:audit --fail-on-severity=critical # Run without saving to DB (CI / read-only environments) bin/magento angeo:aeo:audit --no-save
Sample output:
AEO Score: [โโโโโโโโโโโโโโโโโโโโ] 81% โ Good
โ Pass: 12 โ Warn: 3 โ Fail: 1
Critical fixes needed:
โ Install angeo/module-openai-product-feed and register at chatgpt.com/merchants
๐ก Fix with angeo modules:
composer require angeo/module-openai-product-feed angeo/module-openai-product-feed-api
composer require angeo/module-ucp
Configuration
Some checkers need configuration. All are accessed via: Stores โ Configuration โ Angeo AEO.
| Setting | Purpose |
|---|---|
| CrUX API Key | Required by core_web_vitals checker. Free key from console.cloud.google.com โ enable the Chrome UX Report API. Stored encrypted. |
Admin UI
- Marketing โ Angeo AEO โ AEO Audit Results โ full history grid
- Marketing โ Angeo AEO โ Score Trend โ line chart of AEO score over time
- โถ Run Audit Now button (on the Audit Results grid, Score Trend, and result
view pages) โ triggers an on-demand audit. Since 3.1.0 this is a POST action
protected by the admin form key and the dedicated
Angeo_AeoAudit::run_auditACL permission; the old GET menu entry was removed.
Score interpretation
| Score | Label | Typical situation |
|---|---|---|
| 0โ25% | Critical | Default Magento install. AI crawlers blocked. No schema. |
| 26โ50% | Needs Improvement | Some fixes applied. Feed or merchant policies missing. |
| 51โ75% | Needs Improvement | Core signals in place. UCP, ai-plugin.json, or hreflang missing. |
| 76โ90% | Good | Strong foundation. Minor gaps in well-known or CWV. |
| 91โ100% | Excellent | Full 2026 AEO compliance. |
Cron
Weekly audit every Monday at 03:00 server time. Results saved to DB, last 50 per store retained.
bin/magento cron:run --group=default
For fast daily checks (without external APIs or log scans), schedule an
additional cron job calling the audit with --category=technical.
Extending with custom checks
Implement Angeo\AeoAudit\Api\CheckerInterface (or extend
Angeo\AeoAudit\Model\Checker\AbstractChecker, which provides HTTP cache,
URL sampling and JSON-LD parsing), and register via di.xml:
<type name="Angeo\AeoAudit\Model\AuditRunner"> <arguments> <argument name="checkers" xsi:type="array"> <item name="my_check" xsi:type="object">Vendor\Module\Model\Checker\MyChecker</item> </argument> </arguments> </type>
v3 interface:
public function getName(): string; // "My Custom Check" public function getCode(): string; // "my_check" public function getWeight(): float; // 0.0โ1.0 public function getCategory(): string; // CheckerInterface::CATEGORY_* public function getSeverity(): string; // CheckerInterface::SEVERITY_* public function getFixCommand(): string; // "composer require vendor/fix-module" or "" public function check(\Magento\Store\Api\Data\StoreInterface $store): CheckResult;
Migrating from v2? See CHANGELOG.md for the migration guide.
Running tests
vendor/bin/phpunit -c app/code/Angeo/AeoAudit/phpunit.xml
v3 ships with unit tests covering all 15 checkers, both services
(HttpCache, StoreUrlSampler), the AuditRunner, and the report value
objects.
Code quality
# Magento Coding Standard vendor/bin/phpcs --standard=Magento2 \ --extensions=php,phtml --severity=10 \ app/code/Angeo/AeoAudit/ # PHPStan static analysis vendor/bin/phpstan analyse -l 5 app/code/Angeo/AeoAudit/
The Angeo AI Visibility Suite
| Module | Signal | Purpose |
|---|---|---|
angeo/module-aeo-audit |
โ | This module โ audit all 15 signals |
angeo/module-robots-txt-aeo |
#1 | Inject AI bot rules into robots.txt |
angeo/module-llms-txt |
#2, #3 | Generate llms.txt and llms.jsonl |
angeo/module-rich-data |
#5, #6, #7, #13 | Product, Organization, FAQ JSON-LD + merchant policies |
angeo/module-openai-product-feed |
#9 | ACP product feed for ChatGPT Shopping |
angeo/module-openai-product-feed-api |
#9 | REST API โ 6 ACP endpoints |
angeo/module-openai-instant-checkout |
โ | Agentic Commerce Protocol โ instant checkout from ChatGPT |
angeo/module-ucp |
#8 | Universal Commerce Protocol โ /.well-known/ucp |
angeo/module-aeo-brand-visibility |
(extends) | Live AI visibility across ChatGPT, Claude, Perplexity, Gemini, Groq |
Contributing
Issues and PRs welcome at github.com/angeo-dev/module-aeo-audit.
Before opening a PR:
- Run
vendor/bin/phpunit -c phpunit.xmlโ all tests must pass - Run
vendor/bin/phpcs --standard=Magento2โ no MCS violations - Add tests for any new checker
License
MIT โ see LICENSE
Made with care by Ievgenii Gryshkun โ open-source contributions to the Magento + AI commerce ecosystem.