TL;DR — 2-minute version
- Default Magento 2 stores are largely invisible to AI assistants (~25% AEO score)
- The biggest blockers:
robots.txtblocks AI bots, nollms.txt, Product schema missingoffers.availability - You can audit your store in seconds:
bin/magento angeo:aeo:audit - Most stores reach 80%+ AEO in ~90 minutes with basic fixes
- ChatGPT Shopping requires a separate merchant registration at
chatgpt.com/merchants
You've optimized your Magento store for Google. But when a shopper asks ChatGPT "what's a good cast iron pan under $80?" — your store isn't in the answer.
That's not an SEO problem. It's an AEO problem. And the fixes are completely different.
AI assistants are becoming a product discovery layer — not just a search tool. When a user asks for a recommendation, they've already formed intent. If your store isn't accessible to these systems, you're invisible at exactly that moment. That's a different problem from ranking fifth in Google — it's not being in the conversation at all.
This guide covers all 9 AEO signals for Magento 2, what each one means, and how to fix every gap — with exact CLI commands. The tooling referenced is open-source and on Packagist, but the signal framework applies to any Magento implementation.
Key terms
AEO — AI Engine Optimization
The practice of configuring a website so AI assistants — ChatGPT, Gemini, Perplexity — can discover, read, and recommend it. Different from SEO: targets AI-generated answers, not Google Search rankings. Relevant signals: robots.txt access, structured data, llms.txt, ACP product feeds.
Q: Is AEO the same as GEO (Generative Engine Optimization)?
Largely yes — both terms describe optimization for AI-generated results. AEO is used primarily in the eCommerce context; GEO is more common in content publishing. The underlying signals are the same.
OAI-SearchBot
OpenAI's live search crawler. Used when ChatGPT answers real-time queries. Respects robots.txt. Must be explicitly allowed — default Magento robots.txt blocks it via wildcard.
Q: Is OAI-SearchBot the same as GPTBot?
No. OAI-SearchBot is for live query answering. GPTBot is for training data collection. Blocking GPTBot has no effect on ChatGPT Shopping visibility.
ACP — Agentic Commerce Protocol
OpenAI's open standard for structured merchant product data. Defines a .jsonl.gz feed format submitted at chatgpt.com/merchants — required for ChatGPT product results.
llms.txt
A plain-text file at yourstore.com/llms.txt — a structured map of your catalog for AI systems. Spec at llmstxt.org. Similar to sitemap.xml, but optimized for AI consumption.
offers.availability
A required field in Product JSON-LD schema. Tells AI systems whether a product is in stock. Value: https://schema.org/InStock or https://schema.org/OutOfStock. Missing on most default Magento installations — its absence fails ChatGPT Shopping conformance checks.
AEO vs SEO: what's different
SEO gets your store ranked in Google's link list. AEO gets your store cited in AI-generated answers.
Google reads keywords, backlinks, and page authority. AI systems read:
- robots.txt — can AI crawlers access your store at all?
- llms.txt — is there a structured map of your catalog?
- Product JSON-LD schema — can AI read prices, availability, and product details?
- ACP product feed — have you registered with OpenAI's merchant program?
Most of these don't exist on a default Magento 2 install — not because Magento is broken, but because it was built before AI search existed.
Q: Does a store with good SEO automatically have good AEO?
No. Most signals don't overlap. A store can rank on page one of Google and still score near zero on AI product feed andllms.txt— because those signals didn't exist when the store was built.
| Signal | Helps SEO | Helps AEO |
|---|---|---|
| robots.txt AI bot access | — | ✅ |
| llms.txt / llms.jsonl | — | ✅ |
| Product JSON-LD schema | ✅ | ✅ |
| FAQPage schema | ✅ | ✅ |
| ACP product feed | — | ✅ |
| sitemap.xml | ✅ | ✅ |
| Open Graph tags | ✅ | ✅ |
| Canonical tags | ✅ | ✅ |
The 9 AEO signals for Magento 2
Run the free audit to see your current score:
composer require angeo/module-aeo-audit
bin/magento setup:upgrade
bin/magento angeo:aeo:audit
About the weights below: each signal has a weight (0.5–1.0) reflecting its relative impact on overall AEO score. Critical signals (robots.txt, schema, feed) are weight 1.0; supporting signals are lower. Failing a 1.0-weighted signal alone can drop you below the 50% threshold.
Signal #1 — robots.txt: AI Bot Access (weight 1.0)
The most common reason for complete AI invisibility. Magento's default robots.txt uses a wildcard rule (User-agent: *) combined with restrictive Disallow directives. Since AI crawlers like OAI-SearchBot, GPTBot, and PerplexityBot aren't explicitly listed, they inherit those restrictions and get blocked unintentionally.
Per OpenAI's crawler documentation, stores that block OAI-SearchBot may significantly limit or prevent visibility in ChatGPT search results.
This is the most frequently failing signal across all store sizes — and the cheapest to fix.
Check your file at yourstore.com/robots.txt. You need these entries, placed before any wildcard block:
User-agent: OAI-SearchBot
Allow: /
User-agent: GPTBot
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: Google-Extended
Allow: /
User-agent: ClaudeBot
Allow: /
Quick fix — two options:
Option A: edit robots.txt manually in your Magento admin (Stores → Configuration → Design → Search Engine Robots) or directly in the file. Make sure your edits actually persist (see the nginx warning below).
Option B: install a module that injects and validates the rules:
composer require angeo/module-robots-txt-aeo
bin/magento setup:upgrade && bin/magento cache:flush
bin/magento angeo:robots:validate
⚠️ Adobe Commerce Cloud: robots.txt is served via Fastly VCL. After any change — purge Fastly cache and verify the live file, not the admin config.
Signal #2 — llms.txt: AI Content Map (weight 1.0)
llms.txt is a plain-text file at yourstore.com/llms.txt — a structured map of your catalog: categories, key products, CMS pages, currency, language. Defined at llmstxt.org.
Perplexity's background indexer actively reads it. For ChatGPT Shopping, it supplements the ACP product feed.
You can hand-write llms.txt for a small catalog (the format is just markdown), but for stores with hundreds+ of products it gets stale fast. A common automation approach:
composer require angeo/module-llms-txt
bin/magento setup:upgrade
bin/magento angeo:llms:generate
This also generates llms.jsonl — the machine-readable sibling. Enable cron for automatic regeneration when your catalog changes.
→ Deep dive: How to generate llms.txt for Magento 2 in 5 minutes
Signal #3 — Product JSON-LD Schema (weight 1.0)
Magento's default Luma theme outputs basic Product schema but almost always omits offers.availability — a key field for ChatGPT Shopping conformance. Submissions without it commonly fail validation.
Q: Does Hyvä theme fix the schema problem automatically?
Partially. Hyvä has better schema defaults than Luma but still requires explicit configuration foroffers.availabilityand variant-level data. Neither platform handles this out of the box — a dedicated module or theme override is required.
Quick check on any product page:
curl -s https://yourstore.com/sample-product | grep -o '"availability":"[^"]*"'
You can fix this either via a custom theme override or with a module. Example using a module:
composer require angeo/module-rich-data
bin/magento setup:upgrade && bin/magento cache:flush
This adds: offers.availability (real-time stock), aggregateRating, BreadcrumbList. It also covers Signal #5 — FAQPage schema on CMS pages.
The 4 most common schema failures I see (in order of frequency):
-
Missing
offers.availability— 90%+ of default Magento stores. Without it, ChatGPT Shopping conformance fails outright. -
Variant-level data flattened — configurable products lose
variesBydata when serialized. ChatGPT shows "out of stock" even when 6 of 8 variants are available. - Hyvä strips microdata — performance optimization removes JSON-LD entirely. Needs a layout XML override to re-inject.
-
Wrong availability values — using
"InStock"(string) instead of"https://schema.org/InStock"(URI). Validators accept it, AI engines silently drop it.
If your audit shows Signal #3 failing, run this diagnostic:
# Replace with any product URL from your store
curl -s https://yourstore.com/sample-product | \
grep -A 20 'application/ld+json' | \
grep -E 'availability|priceCurrency|sku'
If availability is missing or doesn't start with https://schema.org/, that's your problem.
Example — Magento 2 store, home goods, ~2,400 SKUs
⚠️ Before — default install:
- AEO score: 23%
- ✗ robots.txt — OAI-SearchBot blocked
- ✗ llms.txt — not found
- ✗ Product schema — no availability
- ✗ AI product feed — not registered
✅ After — 90 minutes later:
- AEO score: 84%
- ✓ robots.txt — 7 AI bots allowed
- ✓ llms.txt — 2,400 products mapped
- ✓ Product schema — availability live
- ◷ Feed — submitted, pending approval
💡 At this point — after signals #1, #2, and #3 — most stores jump from low-twenties into the 50–60% range. Run the audit again to confirm your progress before continuing:
bin/magento angeo:aeo:audit
Signal #4 — AI Product Feed / ChatGPT Shopping (weight 1.0)
ChatGPT Shopping requires a registered ACP product feed. Without it, products are unlikely to appear in ChatGPT Shopping results regardless of other signals. The feed is .jsonl.gz, submitted to a private SFTP endpoint provided by OpenAI after approval, refreshed every 15 minutes.
Building an ACP feed from scratch is doable but non-trivial — you need to handle JSONL streaming, gzip compression, SFTP auth, the offers.availability mapping, and 15-minute refresh cron. Most teams either build it in-house or use a module:
composer require angeo/module-openai-product-feed \
angeo/module-openai-product-feed-api
bin/magento setup:upgrade
bin/magento angeo:aeo:feed:generate
bin/magento angeo:aeo:feed:validate
Apply at chatgpt.com/merchants. Currently US-only and waitlisted. After approval, set up 15-minute cron — stale availability data is the #1 reason for post-approval suppression.
→ Deep dive: How to Register Your Magento 2 Store for ChatGPT Shopping
Does this actually move the needle?
Fair question — and the honest answer is "yes, but unevenly across platforms."
-
Perplexity shows the fastest impact. Background re-indexing typically picks up
llms.txtand schema changes within days to a few weeks. - ChatGPT is gated by merchant approval. Technical fixes alone won't get you into Shopping results — you also need the feed registered and approved. Once approved, indexing is usually 48–72 hours.
- Gemini mostly piggybacks on Google Merchant Center. If you're already there, fixes propagate quickly. If not, getting into Merchant Center is the bigger lift than AEO itself.
AEO is not instant. But with these signals failing, visibility across all three engines is close to zero — fixing them is the floor, not the ceiling.
Signals #5–#9 — Supporting Signals
FAQPage schema (weight 0.5)
Increases citation probability for answer-style AI queries. Injected automatically alongside Product schema on CMS pages. Verify:
curl -s yourstore.com | grep FAQPage
sitemap.xml (weight 0.8)
AI crawlers use sitemap.xml to discover your full catalog. Enable in Magento admin: Stores → Config → Catalog → XML Sitemap. Submit to Google Search Console — also surfaces to Google-Extended (Gemini).
Open Graph tags (weight 0.7)
og:title, og:description, og:image — used as content fallback when structured schema is absent. Most Magento themes include these by default.
Canonical tags (weight 0.6)
Prevents AI systems from indexing Magento's multiple URL variants. Enable: Stores → Config → Catalog → SEO → Use Canonical Link Meta Tag For Products/Categories.
Note: Magento has no canonical option for the homepage — this is expected.
llms.jsonl (weight 0.75)
Machine-readable catalog at yourstore.com/llms.jsonl. One JSON object per product per line. Used by AI pipelines for vector indexing. Generated automatically by angeo/module-llms-txt.
ChatGPT vs Perplexity vs Gemini: how each AI discovers products
ChatGPT — hybrid approach: trained knowledge + live search via OAI-SearchBot + ACP merchant product feed. Requires merchant registration. Feed is the authoritative source for product data.
Perplexity — real-time answer engine. Always cites sources with links. PerplexityBot actively reads llms.txt — one of the few AI platforms where this has documented crawl value. No separate product feed required.
Gemini — operates on Google's Shopping Graph (50B+ products, updated 2B+ times per hour). Any product in Google Merchant Center is available to Gemini. Google-Extended is the separate crawler for AI Overviews — allowing it does not affect regular Google Search rankings.
Cheat sheet — what each engine actually reads:
| Source | ChatGPT | Perplexity | Gemini |
|---|---|---|---|
| ACP product feed | ✅ primary | — | — |
| OAI-SearchBot crawl | ✅ secondary | — | — |
| llms.txt | ⚠️ untested | ✅ documented | ⚠️ untested |
| Product JSON-LD | ✅ | ✅ | ✅ via Shopping Graph |
| Google Merchant Center | — | — | ✅ primary |
| Open Graph tags | ✅ fallback | ✅ fallback | ✅ fallback |
| robots.txt UA |
OAI-SearchBot, GPTBot, ChatGPT-User
|
PerplexityBot |
Google-Extended |
The pattern: ChatGPT prefers structured submissions (the feed), Perplexity prefers crawl-discoverable structure (llms.txt + schema), Gemini piggybacks on Google's existing pipelines (Shopping Graph + Merchant Center). Cover all three and you're visible across the major engines.
Score interpretation
| Score | Label | Typical situation |
|---|---|---|
| 0–25% | Needs Improvement | Default Magento install. AI crawlers blocked. |
| 26–50% | Needs Improvement | Some fixes applied. Schema or feed still missing. |
| 51–75% | Moderate | Core signals in place. Feed not yet registered. |
| 76–90% | Good | Strong foundation. Minor schema gaps. |
| 91–100% | Excellent | Full compliance. Feed registered and live. |
Free open-source modules — one per signal
Each AEO signal has a corresponding open-source Magento 2 module. MIT licensed. Install via Composer. Runs on your server — no external API calls, no data sent outside your infrastructure.
| Module | Signal |
|---|---|
angeo/module-aeo-audit |
Diagnostic — checks all 9 signals, score trend dashboard |
angeo/module-robots-txt-aeo |
Signal #1 — injects AI bot rules into robots.txt |
angeo/module-llms-txt |
Signals #2, #2b — generates llms.txt and llms.jsonl |
angeo/module-rich-data |
Signals #3, #5 — Product JSON-LD + FAQPage schema |
angeo/module-openai-product-feed |
Signal #4 — ACP product feed for ChatGPT Shopping |
90-minute implementation checklist
-
Baseline audit:
bin/magento angeo:aeo:audit— note your starting score -
Fix robots.txt:
composer require angeo/module-robots-txt-aeo→ validate withangeo:robots:validate -
Generate llms.txt:
composer require angeo/module-llms-txt→angeo:llms:generate -
Fix Product schema:
composer require angeo/module-rich-data→ verifyoffers.availabilityin page source - Enable sitemap: Stores → Config → Catalog → XML Sitemap → Enable → submit to Search Console
-
Generate product feed:
composer require angeo/module-openai-product-feed angeo/module-openai-product-feed-api -
Apply for ChatGPT Shopping: configure seller name + policy URLs → apply at
chatgpt.com/merchants -
Final audit:
bin/magento angeo:aeo:audit→ target 80%+
Adobe Commerce Cloud: additional steps
Adobe Commerce Cloud adds one complication — Fastly CDN. robots.txt is stored in pub/media/ and served via a Fastly VCL snippet. After any robots.txt change:
- Save in Magento admin
- Purge Fastly cache
- Verify the live file at
yourstore.com/robots.txt— not the admin config
Fastly also caches product pages. If availability changes but Fastly serves a stale page, OAI-SearchBot reads incorrect stock data — leading to product suppression after ChatGPT Shopping approval. Use the 15-minute cron for the ACP product feed as the authoritative source for availability.
Adobe Commerce vs Magento Open Source — AEO-relevant differences:
- Open Source: robots.txt is editable directly, cron is yours, no Fastly cache layer to invalidate. AEO setup is straightforward.
- Adobe Commerce Cloud: Fastly is mandatory, robots.txt is served via VCL, cron has timing constraints. Every AEO change needs an extra "purge Fastly" step.
- B2B Commerce on Adobe Commerce: customer-group pricing breaks ACP feed assumptions (the protocol expects single price per SKU). You'll need a separate "public" feed with B2C pricing for ChatGPT Shopping. Don't expose B2B pricing to AI engines.
If you're on Adobe Commerce Cloud, expect implementation to take 2-3x longer than vanilla Magento — most of the extra time is fighting Fastly cache TTLs, not AEO logic itself.
Frequently asked questions
Does AEO replace SEO for Magento stores?
No. They target different channels. SEO gets you ranked in Google Search. AEO gets you cited in AI-generated answers. A store with strong SEO can still score very low on AEO by default — because the signals are completely different.
Is ChatGPT Shopping free for merchants?
Product discovery is currently organic — no cost to appear in results. No transaction fees on purchases that start in ChatGPT as of April 2026. Onboarding is US-only and waitlisted.
How long before results are visible after fixing AEO?
Technical fixes take effect as AI crawlers re-index your pages: 1–3 weeks for Perplexity, 2–6 weeks for Google-Extended, 48–72 hours after ChatGPT Shopping approval for the feed layer.
What is GPTBot vs OAI-SearchBot?
GPTBot is OpenAI's training crawler. Blocking it opts your content out of GPT model training but has no effect on ChatGPT Shopping visibility. OAI-SearchBot is the live search crawler — this one must be allowed.
Does this work with Hyvä theme?
Yes. All Angeo modules are compatible with Magento Open Source and Adobe Commerce on both Luma and Hyvä themes. PHP 8.2+ required.
Start here
Run the audit:
bin/magento angeo:aeo:audit
If your score is below 50%, your store is likely invisible to AI assistants today. Fixing the first 3 signals (robots.txt, llms.txt, Product schema) usually gets you most of the way there.
- Install CLI Audit — MIT-licensed, runs on your server, no telemetry
- Free Web Self-Assessment — no install required, runs against your live site
Related posts in this series
- How to generate llms.txt for Magento 2 in 5 minutes
- How to Register Your Magento 2 Store for ChatGPT Shopping
- Product Schema FAIL in Magento 2 AEO Audit — How to Fix It (publishing soon)
- Perplexity vs ChatGPT vs Gemini: How Each AI Discovers Your Products (publishing soon)
- Adobe Commerce vs Magento Open Source: AI Visibility in 2026 (publishing soon)
Follow me here on DEV to get the next 3 deep-dives when they ship — or subscribe at angeo.dev for the full series.
What's your AEO score? Have you registered with ChatGPT Shopping yet? Drop a comment — I'll do a deeper dive on whichever signal trips up the most stores in the discussion.
If you're working on similar problems on other platforms (Shopware, WooCommerce, BigCommerce, custom storefronts), the framework here mostly transfers — the implementation details differ, but the 9 signals are platform-agnostic. Curious what the equivalents look like in your stack.
This article was originally published by DEV Community and written by Ievgenii Gryshkun.
Read original article on DEV Community