angeo / module-aeo-audit
Magento 2 AEO (AI Engine Optimization) Audit. v3 covers 15 signals โ robots.txt AI bots, llms.txt + llms.jsonl, Product / Organization / FAQ schema, merchant return + shipping policies, sitemap.xml, UCP profile, AI product feed, OG tags, canonical + hreflang, JSON-LD quality, well-known endpoint mat
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
- 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)
- magento/magento-coding-standard: ^33.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.0
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 |
| Adobe Commerce | 2.4.6, 2.4.7, 2.4.8 |
| Adobe Commerce Cloud | All current versions |
| PHP | 8.2, 8.3, 8.4 |
| 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
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
- Marketing โ Angeo AEO โ Run Audit Now โ trigger an on-demand audit
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.