<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ievgenii Gryshkun</title>
    <description>The latest articles on DEV Community by Ievgenii Gryshkun (@angeo).</description>
    <link>https://dev.to/angeo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3580569%2Fe36547f2-8587-41ac-a1fd-185e01ca2034.jpeg</url>
      <title>DEV Community: Ievgenii Gryshkun</title>
      <link>https://dev.to/angeo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/angeo"/>
    <language>en</language>
    <item>
      <title>Magento 2 AEO Guide: Make Your Store Visible in ChatGPT, Gemini and Perplexity (2026)</title>
      <dc:creator>Ievgenii Gryshkun</dc:creator>
      <pubDate>Wed, 29 Apr 2026 20:51:10 +0000</pubDate>
      <link>https://dev.to/angeo/magento-2-aeo-guide-make-your-store-visible-in-chatgpt-gemini-and-perplexity-2026-3mmo</link>
      <guid>https://dev.to/angeo/magento-2-aeo-guide-make-your-store-visible-in-chatgpt-gemini-and-perplexity-2026-3mmo</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR — 2-minute version
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Default Magento 2 stores are largely invisible to AI assistants (~25% AEO score)&lt;/li&gt;
&lt;li&gt;The biggest blockers: &lt;code&gt;robots.txt&lt;/code&gt; blocks AI bots, no &lt;code&gt;llms.txt&lt;/code&gt;, Product schema missing &lt;code&gt;offers.availability&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;You can audit your store in seconds: &lt;code&gt;bin/magento angeo:aeo:audit&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Most stores reach 80%+ AEO in ~90 minutes with basic fixes&lt;/li&gt;
&lt;li&gt;ChatGPT Shopping requires a separate merchant registration at &lt;code&gt;chatgpt.com/merchants&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff1digmqoprtksl5k3w0v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff1digmqoprtksl5k3w0v.png" alt="Magento 2 AEO Guide 2026 – optimize your store for ChatGPT, Gemini and Perplexity" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You've optimized your Magento store for Google. But when a shopper asks ChatGPT &lt;em&gt;"what's a good cast iron pan under $80?"&lt;/em&gt; — your store isn't in the answer.&lt;/p&gt;

&lt;p&gt;That's not an SEO problem. It's an AEO problem. And the fixes are completely different.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;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 &lt;a href="https://packagist.org/packages/angeo/" rel="noopener noreferrer"&gt;Packagist&lt;/a&gt;, but the signal framework applies to any Magento implementation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key terms
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AEO — AI Engine Optimization&lt;/strong&gt;&lt;br&gt;
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.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Q: Is AEO the same as GEO (Generative Engine Optimization)?&lt;/strong&gt;&lt;br&gt;
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.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;OAI-SearchBot&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://platform.openai.com/docs/bots" rel="noopener noreferrer"&gt;OpenAI's live search crawler&lt;/a&gt;. Used when ChatGPT answers real-time queries. Respects robots.txt. Must be explicitly allowed — default Magento robots.txt blocks it via wildcard.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Q: Is OAI-SearchBot the same as GPTBot?&lt;/strong&gt;&lt;br&gt;
No. OAI-SearchBot is for live query answering. GPTBot is for training data collection. Blocking GPTBot has no effect on ChatGPT Shopping visibility.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;ACP — Agentic Commerce Protocol&lt;/strong&gt;&lt;br&gt;
OpenAI's open standard for structured merchant product data. Defines a &lt;code&gt;.jsonl.gz&lt;/code&gt; feed format submitted at &lt;code&gt;chatgpt.com/merchants&lt;/code&gt; — required for ChatGPT product results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;llms.txt&lt;/strong&gt;&lt;br&gt;
A plain-text file at &lt;code&gt;yourstore.com/llms.txt&lt;/code&gt; — a structured map of your catalog for AI systems. Spec at &lt;a href="https://llmstxt.org/" rel="noopener noreferrer"&gt;llmstxt.org&lt;/a&gt;. Similar to &lt;code&gt;sitemap.xml&lt;/code&gt;, but optimized for AI consumption.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;offers.availability&lt;/strong&gt;&lt;br&gt;
A required field in &lt;a href="https://schema.org/Product" rel="noopener noreferrer"&gt;Product JSON-LD schema&lt;/a&gt;. Tells AI systems whether a product is in stock. Value: &lt;code&gt;https://schema.org/InStock&lt;/code&gt; or &lt;code&gt;https://schema.org/OutOfStock&lt;/code&gt;. Missing on most default Magento installations — its absence fails ChatGPT Shopping conformance checks.&lt;/p&gt;


&lt;h2&gt;
  
  
  AEO vs SEO: what's different
&lt;/h2&gt;

&lt;p&gt;SEO gets your store ranked in Google's link list. AEO gets your store cited in AI-generated answers.&lt;/p&gt;

&lt;p&gt;Google reads keywords, backlinks, and page authority. AI systems read:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;robots.txt&lt;/strong&gt; — can AI crawlers access your store at all?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;llms.txt&lt;/strong&gt; — is there a structured map of your catalog?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Product JSON-LD schema&lt;/strong&gt; — can AI read prices, availability, and product details?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ACP product feed&lt;/strong&gt; — have you registered with OpenAI's merchant program?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Q: Does a store with good SEO automatically have good AEO?&lt;/strong&gt;&lt;br&gt;
No. Most signals don't overlap. A store can rank on page one of Google and still score near zero on AI product feed and &lt;code&gt;llms.txt&lt;/code&gt; — because those signals didn't exist when the store was built.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;th&gt;Helps SEO&lt;/th&gt;
&lt;th&gt;Helps AEO&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;robots.txt AI bot access&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;llms.txt / llms.jsonl&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Product JSON-LD schema&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FAQPage schema&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ACP product feed&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sitemap.xml&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open Graph tags&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Canonical tags&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  The 9 AEO signals for Magento 2
&lt;/h2&gt;

&lt;p&gt;Run the free audit to see your current score:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require angeo/module-aeo-audit
bin/magento setup:upgrade
bin/magento angeo:aeo:audit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;About the weights below:&lt;/strong&gt; 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.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Signal #1 — robots.txt: AI Bot Access &lt;em&gt;(weight 1.0)&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;The most common reason for complete AI invisibility. Magento's default &lt;code&gt;robots.txt&lt;/code&gt; uses a wildcard rule (&lt;code&gt;User-agent: *&lt;/code&gt;) combined with restrictive &lt;code&gt;Disallow&lt;/code&gt; directives. Since AI crawlers like &lt;code&gt;OAI-SearchBot&lt;/code&gt;, &lt;code&gt;GPTBot&lt;/code&gt;, and &lt;code&gt;PerplexityBot&lt;/code&gt; aren't explicitly listed, they inherit those restrictions and get blocked unintentionally.&lt;/p&gt;

&lt;p&gt;Per &lt;a href="https://platform.openai.com/docs/bots" rel="noopener noreferrer"&gt;OpenAI's crawler documentation&lt;/a&gt;, stores that block OAI-SearchBot may significantly limit or prevent visibility in ChatGPT search results.&lt;/p&gt;

&lt;p&gt;This is the most frequently failing signal across all store sizes — and the cheapest to fix.&lt;/p&gt;

&lt;p&gt;Check your file at &lt;code&gt;yourstore.com/robots.txt&lt;/code&gt;. You need these entries, placed &lt;strong&gt;before&lt;/strong&gt; any wildcard block:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;OAI&lt;/span&gt;-&lt;span class="n"&gt;SearchBot&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;GPTBot&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;PerplexityBot&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;Google&lt;/span&gt;-&lt;span class="n"&gt;Extended&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;ClaudeBot&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quick fix — two options:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option A: edit &lt;code&gt;robots.txt&lt;/code&gt; manually&lt;/strong&gt; 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).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option B: install a module that injects and validates the rules:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require angeo/module-robots-txt-aeo
bin/magento setup:upgrade &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; bin/magento cache:flush
bin/magento angeo:robots:validate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ Adobe Commerce Cloud:&lt;/strong&gt; robots.txt is served via Fastly VCL. After any change — purge Fastly cache and verify the live file, not the admin config.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Signal #2 — llms.txt: AI Content Map &lt;em&gt;(weight 1.0)&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://angeo.dev/how-to-generate-llms-txt-for-magento-2-in-5-minutes/" rel="noopener noreferrer"&gt;&lt;code&gt;llms.txt&lt;/code&gt;&lt;/a&gt; is a plain-text file at &lt;code&gt;yourstore.com/llms.txt&lt;/code&gt; — a structured map of your catalog: categories, key products, CMS pages, currency, language. Defined at &lt;a href="https://llmstxt.org/" rel="noopener noreferrer"&gt;llmstxt.org&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Perplexity's background indexer actively reads it. For ChatGPT Shopping, it supplements the ACP product feed.&lt;/p&gt;

&lt;p&gt;You can hand-write &lt;code&gt;llms.txt&lt;/code&gt; for a small catalog (the format is just markdown), but for stores with hundreds+ of products it gets stale fast. A common automation approach:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require angeo/module-llms-txt
bin/magento setup:upgrade
bin/magento angeo:llms:generate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This also generates &lt;code&gt;llms.jsonl&lt;/code&gt; — the machine-readable sibling. Enable cron for automatic regeneration when your catalog changes.&lt;/p&gt;

&lt;p&gt;→ Deep dive: &lt;a href="https://angeo.dev/how-to-generate-llms-txt-for-magento-2-in-5-minutes/" rel="noopener noreferrer"&gt;How to generate llms.txt for Magento 2 in 5 minutes&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Signal #3 — Product JSON-LD Schema &lt;em&gt;(weight 1.0)&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Magento's default Luma theme outputs basic &lt;a href="https://schema.org/Product" rel="noopener noreferrer"&gt;Product schema&lt;/a&gt; but almost always omits &lt;code&gt;offers.availability&lt;/code&gt; — a key field for ChatGPT Shopping conformance. Submissions without it commonly fail validation.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Q: Does Hyvä theme fix the schema problem automatically?&lt;/strong&gt;&lt;br&gt;
Partially. Hyvä has better schema defaults than Luma but still requires explicit configuration for &lt;code&gt;offers.availability&lt;/code&gt; and variant-level data. Neither platform handles this out of the box — a dedicated module or theme override is required.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Quick check on any product page:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://yourstore.com/sample-product | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="s1"&gt;'"availability":"[^"]*"'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can fix this either via a custom theme override or with a module. Example using a module:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require angeo/module-rich-data
bin/magento setup:upgrade &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; bin/magento cache:flush
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This adds: &lt;code&gt;offers.availability&lt;/code&gt; (real-time stock), &lt;code&gt;aggregateRating&lt;/code&gt;, &lt;code&gt;BreadcrumbList&lt;/code&gt;. It also covers Signal #5 — FAQPage schema on CMS pages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The 4 most common schema failures I see (in order of frequency):&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Missing &lt;code&gt;offers.availability&lt;/code&gt;&lt;/strong&gt; — 90%+ of default Magento stores. Without it, ChatGPT Shopping conformance fails outright.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Variant-level data flattened&lt;/strong&gt; — configurable products lose &lt;code&gt;variesBy&lt;/code&gt; data when serialized. ChatGPT shows "out of stock" even when 6 of 8 variants are available.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hyvä strips microdata&lt;/strong&gt; — performance optimization removes JSON-LD entirely. Needs a layout XML override to re-inject.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wrong availability values&lt;/strong&gt; — using &lt;code&gt;"InStock"&lt;/code&gt; (string) instead of &lt;code&gt;"https://schema.org/InStock"&lt;/code&gt; (URI). Validators accept it, AI engines silently drop it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If your audit shows Signal #3 failing, run this diagnostic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Replace with any product URL from your store&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://yourstore.com/sample-product | &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-A&lt;/span&gt; 20 &lt;span class="s1"&gt;'application/ld+json'&lt;/span&gt; | &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s1"&gt;'availability|priceCurrency|sku'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If &lt;code&gt;availability&lt;/code&gt; is missing or doesn't start with &lt;code&gt;https://schema.org/&lt;/code&gt;, that's your problem.&lt;/p&gt;

&lt;h4&gt;
  
  
  Example — Magento 2 store, home goods, ~2,400 SKUs
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;⚠️ Before — default install:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AEO score: &lt;strong&gt;23%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;✗ robots.txt — OAI-SearchBot blocked&lt;/li&gt;
&lt;li&gt;✗ llms.txt — not found&lt;/li&gt;
&lt;li&gt;✗ Product schema — no availability&lt;/li&gt;
&lt;li&gt;✗ AI product feed — not registered&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;✅ After — 90 minutes later:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AEO score: &lt;strong&gt;84%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;✓ robots.txt — 7 AI bots allowed&lt;/li&gt;
&lt;li&gt;✓ llms.txt — 2,400 products mapped&lt;/li&gt;
&lt;li&gt;✓ Product schema — availability live&lt;/li&gt;
&lt;li&gt;◷ Feed — submitted, pending approval&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;At this point — after signals #1, #2, and #3 — most stores jump from low-twenties into the 50–60% range.&lt;/strong&gt; Run the audit again to confirm your progress before continuing:&lt;/p&gt;


&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/magento angeo:aeo:audit
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Signal #4 — AI Product Feed / ChatGPT Shopping &lt;em&gt;(weight 1.0)&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;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 &lt;code&gt;.jsonl.gz&lt;/code&gt;, submitted to a private SFTP endpoint provided by OpenAI after approval, refreshed every 15 minutes.&lt;/p&gt;

&lt;p&gt;Building an ACP feed from scratch is doable but non-trivial — you need to handle JSONL streaming, gzip compression, SFTP auth, the &lt;code&gt;offers.availability&lt;/code&gt; mapping, and 15-minute refresh cron. Most teams either build it in-house or use a module:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require angeo/module-openai-product-feed &lt;span class="se"&gt;\&lt;/span&gt;
  angeo/module-openai-product-feed-api
bin/magento setup:upgrade
bin/magento angeo:aeo:feed:generate
bin/magento angeo:aeo:feed:validate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apply at &lt;code&gt;chatgpt.com/merchants&lt;/code&gt;. Currently US-only and waitlisted. After approval, set up 15-minute cron — stale availability data is the #1 reason for post-approval suppression.&lt;/p&gt;

&lt;p&gt;→ Deep dive: &lt;a href="https://angeo.dev/magento-2-chatgpt-shopping-registration/" rel="noopener noreferrer"&gt;How to Register Your Magento 2 Store for ChatGPT Shopping&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Does this actually move the needle?
&lt;/h2&gt;

&lt;p&gt;Fair question — and the honest answer is "yes, but unevenly across platforms."&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Perplexity&lt;/strong&gt; shows the fastest impact. Background re-indexing typically picks up &lt;code&gt;llms.txt&lt;/code&gt; and schema changes within days to a few weeks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ChatGPT&lt;/strong&gt; 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.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini&lt;/strong&gt; 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.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;




&lt;h3&gt;
  
  
  Signals #5–#9 — Supporting Signals
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;FAQPage schema&lt;/strong&gt; &lt;em&gt;(weight 0.5)&lt;/em&gt;&lt;br&gt;
Increases citation probability for answer-style AI queries. Injected automatically alongside Product schema on CMS pages. Verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; yourstore.com | &lt;span class="nb"&gt;grep &lt;/span&gt;FAQPage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;sitemap.xml&lt;/strong&gt; &lt;em&gt;(weight 0.8)&lt;/em&gt;&lt;br&gt;
AI crawlers use sitemap.xml to discover your full catalog. Enable in Magento admin: &lt;strong&gt;Stores → Config → Catalog → XML Sitemap&lt;/strong&gt;. Submit to Google Search Console — also surfaces to &lt;code&gt;Google-Extended&lt;/code&gt; (Gemini).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open Graph tags&lt;/strong&gt; &lt;em&gt;(weight 0.7)&lt;/em&gt;&lt;br&gt;
&lt;code&gt;og:title&lt;/code&gt;, &lt;code&gt;og:description&lt;/code&gt;, &lt;code&gt;og:image&lt;/code&gt; — used as content fallback when structured schema is absent. Most Magento themes include these by default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Canonical tags&lt;/strong&gt; &lt;em&gt;(weight 0.6)&lt;/em&gt;&lt;br&gt;
Prevents AI systems from indexing Magento's multiple URL variants. Enable: &lt;strong&gt;Stores → Config → Catalog → SEO → Use Canonical Link Meta Tag For Products/Categories&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: Magento has no canonical option for the homepage — this is expected.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;llms.jsonl&lt;/strong&gt; &lt;em&gt;(weight 0.75)&lt;/em&gt;&lt;br&gt;
Machine-readable catalog at &lt;code&gt;yourstore.com/llms.jsonl&lt;/code&gt;. One JSON object per product per line. Used by AI pipelines for vector indexing. Generated automatically by &lt;code&gt;angeo/module-llms-txt&lt;/code&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  ChatGPT vs Perplexity vs Gemini: how each AI discovers products
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ChatGPT&lt;/strong&gt; — hybrid approach: trained knowledge + live search via &lt;code&gt;OAI-SearchBot&lt;/code&gt; + ACP merchant product feed. Requires merchant registration. Feed is the authoritative source for product data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perplexity&lt;/strong&gt; — real-time answer engine. Always cites sources with links. &lt;code&gt;PerplexityBot&lt;/code&gt; actively reads &lt;code&gt;llms.txt&lt;/code&gt; — one of the few AI platforms where this has documented crawl value. No separate product feed required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemini&lt;/strong&gt; — operates on &lt;a href="https://blog.google/products/shopping/google-shopping-graph/" rel="noopener noreferrer"&gt;Google's Shopping Graph&lt;/a&gt; (50B+ products, updated 2B+ times per hour). Any product in Google Merchant Center is available to Gemini. &lt;code&gt;Google-Extended&lt;/code&gt; is the separate crawler for AI Overviews — allowing it does not affect regular Google Search rankings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cheat sheet — what each engine actually reads:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;ChatGPT&lt;/th&gt;
&lt;th&gt;Perplexity&lt;/th&gt;
&lt;th&gt;Gemini&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ACP product feed&lt;/td&gt;
&lt;td&gt;✅ primary&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OAI-SearchBot crawl&lt;/td&gt;
&lt;td&gt;✅ secondary&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;llms.txt&lt;/td&gt;
&lt;td&gt;⚠️ untested&lt;/td&gt;
&lt;td&gt;✅ documented&lt;/td&gt;
&lt;td&gt;⚠️ untested&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Product JSON-LD&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅ via Shopping Graph&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Merchant Center&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;✅ primary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open Graph tags&lt;/td&gt;
&lt;td&gt;✅ fallback&lt;/td&gt;
&lt;td&gt;✅ fallback&lt;/td&gt;
&lt;td&gt;✅ fallback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;robots.txt&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;OAI-SearchBot&lt;/code&gt;, &lt;code&gt;GPTBot&lt;/code&gt;, &lt;code&gt;ChatGPT-User&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PerplexityBot&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Google-Extended&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;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.&lt;/p&gt;


&lt;h2&gt;
  
  
  Score interpretation
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Label&lt;/th&gt;
&lt;th&gt;Typical situation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;0–25%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Needs Improvement&lt;/td&gt;
&lt;td&gt;Default Magento install. AI crawlers blocked.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;26–50%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Needs Improvement&lt;/td&gt;
&lt;td&gt;Some fixes applied. Schema or feed still missing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;51–75%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;Core signals in place. Feed not yet registered.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;76–90%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;td&gt;Strong foundation. Minor schema gaps.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;91–100%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Excellent&lt;/td&gt;
&lt;td&gt;Full compliance. Feed registered and live.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Free open-source modules — one per signal
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Module&lt;/th&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://packagist.org/packages/angeo/module-aeo-audit" rel="noopener noreferrer"&gt;&lt;code&gt;angeo/module-aeo-audit&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Diagnostic — checks all 9 signals, score trend dashboard&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://packagist.org/packages/angeo/module-robots-txt-aeo" rel="noopener noreferrer"&gt;&lt;code&gt;angeo/module-robots-txt-aeo&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Signal #1 — injects AI bot rules into robots.txt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://packagist.org/packages/angeo/module-llms-txt" rel="noopener noreferrer"&gt;&lt;code&gt;angeo/module-llms-txt&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Signals #2, #2b — generates llms.txt and llms.jsonl&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://packagist.org/packages/angeo/module-rich-data" rel="noopener noreferrer"&gt;&lt;code&gt;angeo/module-rich-data&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Signals #3, #5 — Product JSON-LD + FAQPage schema&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://packagist.org/packages/angeo/module-openai-product-feed" rel="noopener noreferrer"&gt;&lt;code&gt;angeo/module-openai-product-feed&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Signal #4 — ACP product feed for ChatGPT Shopping&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  90-minute implementation checklist
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Baseline audit:&lt;/strong&gt; &lt;code&gt;bin/magento angeo:aeo:audit&lt;/code&gt; — note your starting score&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix robots.txt:&lt;/strong&gt; &lt;code&gt;composer require angeo/module-robots-txt-aeo&lt;/code&gt; → validate with &lt;code&gt;angeo:robots:validate&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate llms.txt:&lt;/strong&gt; &lt;code&gt;composer require angeo/module-llms-txt&lt;/code&gt; → &lt;code&gt;angeo:llms:generate&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix Product schema:&lt;/strong&gt; &lt;code&gt;composer require angeo/module-rich-data&lt;/code&gt; → verify &lt;code&gt;offers.availability&lt;/code&gt; in page source&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enable sitemap:&lt;/strong&gt; Stores → Config → Catalog → XML Sitemap → Enable → submit to Search Console&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate product feed:&lt;/strong&gt; &lt;code&gt;composer require angeo/module-openai-product-feed angeo/module-openai-product-feed-api&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apply for ChatGPT Shopping:&lt;/strong&gt; configure seller name + policy URLs → apply at &lt;code&gt;chatgpt.com/merchants&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Final audit:&lt;/strong&gt; &lt;code&gt;bin/magento angeo:aeo:audit&lt;/code&gt; → target 80%+&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  Adobe Commerce Cloud: additional steps
&lt;/h2&gt;

&lt;p&gt;Adobe Commerce Cloud adds one complication — Fastly CDN. robots.txt is stored in &lt;code&gt;pub/media/&lt;/code&gt; and served via a Fastly VCL snippet. After any robots.txt change:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Save in Magento admin&lt;/li&gt;
&lt;li&gt;Purge Fastly cache&lt;/li&gt;
&lt;li&gt;Verify the live file at &lt;code&gt;yourstore.com/robots.txt&lt;/code&gt; — not the admin config&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Fastly also caches product pages. If availability changes but Fastly serves a stale page, &lt;code&gt;OAI-SearchBot&lt;/code&gt; 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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adobe Commerce vs Magento Open Source — AEO-relevant differences:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open Source:&lt;/strong&gt; robots.txt is editable directly, cron is yours, no Fastly cache layer to invalidate. AEO setup is straightforward.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adobe Commerce Cloud:&lt;/strong&gt; Fastly is mandatory, robots.txt is served via VCL, cron has timing constraints. Every AEO change needs an extra "purge Fastly" step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;B2B Commerce on Adobe Commerce:&lt;/strong&gt; 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.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;


&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Does AEO replace SEO for Magento stores?
&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;
&lt;h3&gt;
  
  
  Is ChatGPT Shopping free for merchants?
&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;
&lt;h3&gt;
  
  
  How long before results are visible after fixing AEO?
&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;
&lt;h3&gt;
  
  
  What is GPTBot vs OAI-SearchBot?
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;GPTBot&lt;/code&gt; is OpenAI's training crawler. Blocking it opts your content out of GPT model training but has no effect on ChatGPT Shopping visibility. &lt;code&gt;OAI-SearchBot&lt;/code&gt; is the live search crawler — this one must be allowed.&lt;/p&gt;
&lt;h3&gt;
  
  
  Does this work with Hyvä theme?
&lt;/h3&gt;

&lt;p&gt;Yes. All Angeo modules are compatible with Magento Open Source and Adobe Commerce on both Luma and Hyvä themes. PHP 8.2+ required.&lt;/p&gt;


&lt;h2&gt;
  
  
  Start here
&lt;/h2&gt;

&lt;p&gt;Run the audit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/magento angeo:aeo:audit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;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.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://packagist.org/packages/angeo/module-aeo-audit" rel="noopener noreferrer"&gt;Install CLI Audit&lt;/a&gt; — MIT-licensed, runs on your server, no telemetry&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://angeo.dev/ai-magento-audit/" rel="noopener noreferrer"&gt;Free Web Self-Assessment&lt;/a&gt; — no install required, runs against your live site&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Related posts in this series
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://angeo.dev/how-to-generate-llms-txt-for-magento-2-in-5-minutes/" rel="noopener noreferrer"&gt;How to generate llms.txt for Magento 2 in 5 minutes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://angeo.dev/magento-2-chatgpt-shopping-registration/" rel="noopener noreferrer"&gt;How to Register Your Magento 2 Store for ChatGPT Shopping&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Product Schema FAIL in Magento 2 AEO Audit — How to Fix It&lt;/em&gt; (publishing soon)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Perplexity vs ChatGPT vs Gemini: How Each AI Discovers Your Products&lt;/em&gt; (publishing soon)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Adobe Commerce vs Magento Open Source: AI Visibility in 2026&lt;/em&gt; (publishing soon)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Follow me here on DEV to get the next 3 deep-dives when they ship — or subscribe at &lt;a href="https://angeo.dev" rel="noopener noreferrer"&gt;angeo.dev&lt;/a&gt; for the full series.&lt;/p&gt;




&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

</description>
      <category>magento</category>
      <category>ai</category>
      <category>ecommerce</category>
      <category>webdev</category>
    </item>
    <item>
      <title>llms.txt for Magento 2: What It Is, Why It Matters, and How to Generate It in 5 Minutes</title>
      <dc:creator>Ievgenii Gryshkun</dc:creator>
      <pubDate>Fri, 24 Apr 2026 04:48:48 +0000</pubDate>
      <link>https://dev.to/angeo/llmstxt-for-magento-2-what-it-is-why-it-matters-and-how-to-generate-it-in-5-minutes-58fi</link>
      <guid>https://dev.to/angeo/llmstxt-for-magento-2-what-it-is-why-it-matters-and-how-to-generate-it-in-5-minutes-58fi</guid>
      <description>&lt;p&gt;Google has &lt;code&gt;robots.txt&lt;/code&gt;. Google has &lt;code&gt;sitemap.xml&lt;/code&gt;. Now AI assistants have &lt;code&gt;llms.txt&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you run a Magento 2 store and haven't heard of &lt;code&gt;llms.txt&lt;/code&gt; yet — this post is the 5-minute version of everything you need to know, plus the exact commands to generate it today.&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem: AI assistants don't crawl like Google does
&lt;/h2&gt;

&lt;p&gt;When Google indexes your store, its crawler visits thousands of pages and builds a picture of your catalog over weeks. It's slow, but it works.&lt;/p&gt;

&lt;p&gt;ChatGPT, Claude, and Perplexity operate differently. When a user asks &lt;em&gt;"what's a good blender under $150?"&lt;/em&gt;, the AI doesn't crawl your store in real time. It works from what it already knows — or from a structured snapshot it can parse in milliseconds.&lt;/p&gt;

&lt;p&gt;If you haven't given it that snapshot, it either ignores your store or gets the details wrong: outdated prices, discontinued products, categories that no longer exist.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;llms.txt&lt;/code&gt; is that snapshot.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is llms.txt?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;llms.txt&lt;/code&gt; is a plain-text file hosted at the root of your domain — &lt;code&gt;yourstore.com/llms.txt&lt;/code&gt; — that gives AI systems a structured, human-readable summary of your store.&lt;/p&gt;

&lt;p&gt;Think of it as a &lt;code&gt;README.md&lt;/code&gt; for your entire eCommerce site. It tells AI assistants:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What your store sells&lt;/li&gt;
&lt;li&gt;What categories exist&lt;/li&gt;
&lt;li&gt;Key product URLs and descriptions&lt;/li&gt;
&lt;li&gt;CMS pages (shipping, returns, about)&lt;/li&gt;
&lt;li&gt;Store metadata: name, currency, language&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A minimal example looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Store: Volta Equipment&lt;/span&gt;

&lt;span class="gu"&gt;## STORE&lt;/span&gt;
Name: Volta Equipment
URL: https://voltaequipment.com/
Currency: USD

&lt;span class="gu"&gt;### CATEGORIES ###&lt;/span&gt;
Category ID: 4
Name: Fitness Equipment
URL: https://voltaequipment.com/fitness
Description: Commercial and home gym equipment

&lt;span class="gu"&gt;### PRODUCTS ###&lt;/span&gt;
SKU: VE-KB32
Name: 32kg Kettlebell — Cast Iron
Price: 8900
URL: https://voltaequipment.com/32kg-kettlebell
Short Description: Competition-grade cast iron kettlebell, powder-coated finish

&lt;span class="gu"&gt;## CMS PAGES&lt;/span&gt;
TYPE: PAGE
TITLE: Shipping Policy
URL: https://voltaequipment.com/shipping
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Simple. No JSON schema. No special syntax. Just structured plain text that both AI systems and humans can read instantly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Does llms.txt actually work?
&lt;/h2&gt;

&lt;p&gt;Fair question — and the honest answer is: &lt;strong&gt;it depends on the AI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Some AI systems (Perplexity, some Claude configurations) actively read &lt;code&gt;llms.txt&lt;/code&gt; when crawling. Others, like GPTBot, primarily rely on the page content itself and Product schema JSON-LD. OpenAI has not yet published an official spec for &lt;code&gt;llms.txt&lt;/code&gt; consumption.&lt;/p&gt;

&lt;p&gt;So why generate it at all?&lt;/p&gt;

&lt;p&gt;Three reasons:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. It costs nothing to add.&lt;/strong&gt; One Composer command and it's live. There's no downside.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. It's a trust signal.&lt;/strong&gt; When a Magento developer or agency reviews your AEO setup, a present &lt;code&gt;llms.txt&lt;/code&gt; signals you're thinking about AI visibility — and it's one of the 8 signals checked by the &lt;a href="https://packagist.org/packages/angeo/module-aeo-audit" rel="noopener noreferrer"&gt;AEO audit module&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The standard is evolving fast.&lt;/strong&gt; OpenAI, Anthropic, and Google are all moving toward structured merchant data formats. Stores with &lt;code&gt;llms.txt&lt;/code&gt; already in place will require zero additional work when these systems formalize their specs. Stores without it will have to catch up.&lt;/p&gt;




&lt;h2&gt;
  
  
  llms.txt vs llms.jsonl — what's the difference?
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;angeo/module-llms-txt&lt;/code&gt; module generates both files. Here's when each matters:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;File&lt;/th&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;llms.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Plain text&lt;/td&gt;
&lt;td&gt;AI assistants reading store context, Perplexity, Claude&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;llms.jsonl&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;JSON Lines&lt;/td&gt;
&lt;td&gt;Structured product data, future ACP integrations, developers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;llms.jsonl&lt;/code&gt; is the machine-readable sibling — one JSON object per product, per line, compressed for fast parsing. If you're planning to integrate with OpenAI's ACP feed later, &lt;code&gt;llms.jsonl&lt;/code&gt; is the stepping stone.&lt;/p&gt;

&lt;p&gt;For now, generate both. They serve different consumers.&lt;/p&gt;




&lt;h2&gt;
  
  
  Installation: 3 commands
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require angeo/module-llms-txt
bin/magento setup:upgrade
bin/magento cache:flush
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. The module is MIT licensed, free on &lt;a href="https://packagist.org/packages/angeo/module-llms-txt" rel="noopener noreferrer"&gt;Packagist&lt;/a&gt;, and runs entirely on your server.&lt;/p&gt;




&lt;h2&gt;
  
  
  Generate the files
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Option A — CLI (recommended)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/magento angeo:llms:generate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This generates both &lt;code&gt;llms.txt&lt;/code&gt; and &lt;code&gt;llms.jsonl&lt;/code&gt; at your store root and outputs the file paths.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option B — Magento Admin&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Go to &lt;strong&gt;Stores → Configuration → General → Angeo → LLMS&lt;/strong&gt; and trigger manual generation from the backend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option C — Cron (for automatic updates)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The module registers a Magento cron job. As long as your server cron is running, the files stay current:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/magento cron:run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For stores with frequently changing inventory — new products, price updates, seasonal categories — cron is the right default.&lt;/p&gt;




&lt;h2&gt;
  
  
  Verify it's live
&lt;/h2&gt;

&lt;p&gt;After generation, open &lt;code&gt;yourstore.com/llms.txt&lt;/code&gt; in a browser. You should see your store name, category list, and product entries.&lt;/p&gt;

&lt;p&gt;Then run the AEO audit to confirm it passes signal #2:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/magento angeo:aeo:audit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✓ PASS  robots.txt — OAI-SearchBot and GPTBot allowed
✓ PASS  llms.txt — store content map present
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If &lt;code&gt;llms.txt&lt;/code&gt; shows &lt;code&gt;FAIL&lt;/code&gt;, check that the file exists at &lt;code&gt;pub/llms.txt&lt;/code&gt; and that your web server is serving it correctly (not blocked by nginx or a CDN rule).&lt;/p&gt;




&lt;h2&gt;
  
  
  Multi-store support
&lt;/h2&gt;

&lt;p&gt;If you're running multiple store views or storefronts, the module generates separate &lt;code&gt;llms.txt&lt;/code&gt; files per store — each with the correct currency, language, and URL structure. No additional configuration needed.&lt;/p&gt;




&lt;h2&gt;
  
  
  What to do after llms.txt
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;llms.txt&lt;/code&gt; is AEO signal #2. To complete your AI visibility setup, the remaining signals are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;✅ &lt;code&gt;robots.txt&lt;/code&gt; — Allow OAI-SearchBot, GPTBot, ClaudeBot, and 4 others&lt;/li&gt;
&lt;li&gt;✅ &lt;code&gt;llms.txt&lt;/code&gt; — structured store map ← &lt;strong&gt;you are here&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;→ &lt;code&gt;Product Schema&lt;/code&gt; — JSON-LD with &lt;code&gt;offers.availability&lt;/code&gt; on every product page&lt;/li&gt;
&lt;li&gt;→ &lt;code&gt;AI Product Feed&lt;/code&gt; — ACP-compliant &lt;code&gt;.jsonl.gz&lt;/code&gt; for ChatGPT Shopping registration&lt;/li&gt;
&lt;li&gt;→ &lt;code&gt;FAQPage Schema&lt;/code&gt; — structured Q&amp;amp;A for policy pages&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Run &lt;code&gt;bin/magento angeo:aeo:audit&lt;/code&gt; to see your current score across all 8 signals.&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;llms.txt&lt;/code&gt; gives AI assistants a structured snapshot of your store&lt;/li&gt;
&lt;li&gt;It's served at &lt;code&gt;yourstore.com/llms.txt&lt;/code&gt; — same pattern as &lt;code&gt;robots.txt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;angeo/module-llms-txt&lt;/code&gt; module generates it automatically, with cron support&lt;/li&gt;
&lt;li&gt;It takes 3 commands and under 5 minutes to set up&lt;/li&gt;
&lt;li&gt;It's one of 8 AEO signals that determine your visibility in ChatGPT, Claude, and Perplexity&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Free modules used in this post:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://packagist.org/packages/angeo/module-llms-txt" rel="noopener noreferrer"&gt;&lt;code&gt;angeo/module-llms-txt&lt;/code&gt;&lt;/a&gt; — generates llms.txt and llms.jsonl&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://packagist.org/packages/angeo/module-aeo-audit" rel="noopener noreferrer"&gt;&lt;code&gt;angeo/module-aeo-audit&lt;/code&gt;&lt;/a&gt; — checks all 8 AEO signals via CLI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://angeo.dev/ai-magento-audit/" rel="noopener noreferrer"&gt;&lt;strong&gt;Run a free AEO audit on your store →&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>magento</category>
      <category>aeo</category>
      <category>ai</category>
      <category>ecommerce</category>
    </item>
    <item>
      <title>How to Register Your Magento 2 Store for ChatGPT Shopping (ACP Feed + Step-by-Step)</title>
      <dc:creator>Ievgenii Gryshkun</dc:creator>
      <pubDate>Mon, 20 Apr 2026 17:20:06 +0000</pubDate>
      <link>https://dev.to/angeo/how-to-register-your-magento-2-store-for-chatgpt-shopping-acp-feed-step-by-step-58gf</link>
      <guid>https://dev.to/angeo/how-to-register-your-magento-2-store-for-chatgpt-shopping-acp-feed-step-by-step-58gf</guid>
      <description>&lt;p&gt;ChatGPT now processes over &lt;strong&gt;50 million shopping queries per day&lt;/strong&gt;. Appearing in those results is not automatic — it requires a deliberate application process, a spec-compliant product feed, and passing OpenAI's conformance checks.&lt;/p&gt;

&lt;p&gt;This guide walks through the entire process: from the pre-check that determines if your store is ready, to the merchant application, to the ongoing cron setup that keeps your feed current.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Shopify and Etsy merchants&lt;/strong&gt; already have native integrations. This guide is for &lt;strong&gt;Magento 2 / Adobe Commerce&lt;/strong&gt; stores.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;🔗 Originally published on &lt;a href="https://angeo.dev/magento-2-chatgpt-shopping-registration/" rel="noopener noreferrer"&gt;angeo.dev&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn9qglgqzizrue23usaeu.png" alt="How to Prepare Your Magento 2 Store for ChatGPT Shopping" width="800" height="533"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Before You Apply: The Pre-Check
&lt;/h2&gt;

&lt;p&gt;OpenAI's conformance checks verify technical requirements before granting production access. Stores that fail the pre-check go into a review queue and receive vague rejection emails. Do the pre-check yourself first.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/magento angeo:aeo:audit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected output before you start:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✓ PASS  robots.txt — OAI-SearchBot and GPTBot allowed
✓ PASS  llms.txt — store content map present
✓ PASS  Product Schema — JSON-LD with offers.availability
✗ FAIL  AI Product Feed — no feed found
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Signal &lt;strong&gt;#5 (AI Product Feed)&lt;/strong&gt; will fail until Step 1 below. Signals &lt;strong&gt;#1, #2, and #3 must all PASS&lt;/strong&gt; before applying at chatgpt.com/merchants.&lt;/p&gt;

&lt;p&gt;If robots.txt is failing — most default Magento 2 installs have a &lt;code&gt;User-agent: *&lt;/code&gt; wildcard that silently blocks &lt;code&gt;OAI-SearchBot&lt;/code&gt;. Fix that first. It's a hard gate that invalidates everything else.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1 — Install the product feed modules
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require angeo/module-openai-product-feed &lt;span class="se"&gt;\&lt;/span&gt;
  angeo/module-openai-product-feed-api

bin/magento setup:upgrade
bin/magento cache:flush
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both modules are MIT licensed, free on Packagist. No license keys, no SaaS — runs entirely on your server.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2 — Configure seller information
&lt;/h2&gt;

&lt;p&gt;Go to &lt;strong&gt;Stores → Configuration → Angeo → Product Feed API&lt;/strong&gt; and fill in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Seller name&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Target country&lt;/strong&gt; — ISO 3166 two-letter code (e.g. &lt;code&gt;US&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Policy URLs&lt;/strong&gt; — privacy policy, returns, shipping, terms of service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These populate &lt;code&gt;seller.links&lt;/code&gt; on every product record. They are merchant credibility signals in OpenAI's scoring. Missing policy URLs is a common reason for suppressed products after initial approval.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3 — Generate and validate the feed
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Generate the feed file&lt;/span&gt;
bin/magento angeo:aeo:feed:generate

&lt;span class="c"&gt;# Validate structure and required fields&lt;/span&gt;
bin/magento angeo:aeo:feed:validate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Confirm in the output:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each product has a &lt;code&gt;variants&lt;/code&gt; array&lt;/li&gt;
&lt;li&gt;Prices are in minor units (see the price format section below)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;availability.status&lt;/code&gt; is present on every product&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;seller.links&lt;/code&gt; has at least two policy URLs&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 4 — Verify promotions output
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/magento angeo:aeo:feed:validate &lt;span class="nt"&gt;--type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;promotions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Active Magento cart price rules should appear automatically as ACP promotions with &lt;code&gt;active_period&lt;/code&gt;, &lt;code&gt;benefits&lt;/code&gt;, and &lt;code&gt;status: "active"&lt;/code&gt;. If promotions are missing here, they won't appear in ChatGPT results either.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5 — Apply at chatgpt.com/merchants
&lt;/h2&gt;

&lt;p&gt;Submit your store URL and business details. OpenAI tests schema compliance, HTTP response codes, and feed integrity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Current status:&lt;/strong&gt; Onboarding is US-only and available to approved partners — expect a waitlist. Application review typically takes 1–2 weeks.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 6 — Receive SFTP endpoint and push the feed
&lt;/h2&gt;

&lt;p&gt;After approval, OpenAI provides a &lt;strong&gt;private SFTP endpoint&lt;/strong&gt; for your store. Push your &lt;code&gt;.jsonl.gz&lt;/code&gt; feed file to this endpoint.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ Do &lt;strong&gt;not&lt;/strong&gt; host the feed publicly on your website. The feed goes to the private SFTP endpoint OpenAI provides — not a public REST endpoint on your store. Submit a sample first; after it passes validation, push the full catalog.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Step 7 — Set up 15-minute cron
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# crontab — every 15 minutes&lt;/span&gt;
&lt;span class="k"&gt;*&lt;/span&gt;/15 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; /usr/bin/php /var/www/html/bin/magento angeo:aeo:feed:generate &lt;span class="nt"&gt;--push&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OpenAI accepts feed refreshes every 15 minutes. Full feed re-submission is required each time — there is currently no incremental update support.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Most common post-approval failure:&lt;/strong&gt; Stale availability data — out-of-stock products showing as available — is the #1 reason products get suppressed after initial approval. The 15-minute cron prevents this.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Feed Format: What OpenAI Actually Accepts
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Extension&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;JSON Lines&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.jsonl.gz&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Recommended. One product object per line. Handles nested variants cleanly.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CSV&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.csv.gz&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Works for flat catalogs. Variant structures need to be flattened.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; TSV and XML were in OpenAI's original spec announcement but have since been removed. Always check the &lt;a href="https://developers.openai.com/commerce/specs/feed/" rel="noopener noreferrer"&gt;official feed spec&lt;/a&gt; for the current list.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Price Format Trap
&lt;/h2&gt;

&lt;p&gt;This is the &lt;strong&gt;single most common implementation error&lt;/strong&gt; across all ACP integrations.&lt;/p&gt;

&lt;p&gt;Price must be sent in &lt;strong&gt;ISO 4217 minor units as an integer&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;❌&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Wrong&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;fails&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;validation&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;14.99&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"14.99"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;✅&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Correct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;integer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;minor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;units&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1499&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;€&lt;/span&gt;&lt;span class="mf"&gt;14.99&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;14900&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mf"&gt;149.00&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The module handles this automatically: &lt;code&gt;(int) round($price * 100)&lt;/code&gt;. But if you are building a custom integration or mapping from a Google Shopping feed — check this field first. The validation error message for a wrong price format is non-obvious.&lt;/p&gt;




&lt;h2&gt;
  
  
  What OpenAI's Conformance Check Validates
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;What it verifies&lt;/th&gt;
&lt;th&gt;Handled by&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Feed schema&lt;/td&gt;
&lt;td&gt;Required fields, correct data types, valid URIs&lt;/td&gt;
&lt;td&gt;ProductMapper&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Price format&lt;/td&gt;
&lt;td&gt;Integer minor units, ISO 4217 currency code&lt;/td&gt;
&lt;td&gt;ProductMapper&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Availability flags&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;enable_search&lt;/code&gt; and &lt;code&gt;availability.status&lt;/code&gt; present&lt;/td&gt;
&lt;td&gt;ProductMapper&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Promotion schema&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;benefits&lt;/code&gt; array with type, dates, &lt;code&gt;status: "active"&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;PromotionMapper&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seller links&lt;/td&gt;
&lt;td&gt;At least 2 policy URLs present&lt;/td&gt;
&lt;td&gt;Admin config → seller.links&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Product IDs&lt;/td&gt;
&lt;td&gt;Unique, stable, no duplicates across the feed&lt;/td&gt;
&lt;td&gt;ProductMapper&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  No Fees for Discovery
&lt;/h2&gt;

&lt;p&gt;Product discovery results in ChatGPT are currently &lt;strong&gt;organic and unsponsored&lt;/strong&gt;. There is no cost to submit a product feed or appear in shopping results.&lt;/p&gt;

&lt;p&gt;The 4% transaction fee announced with Instant Checkout applied only to completed in-chat purchases — and OpenAI is moving away from that model toward merchant-owned checkout. As of April 2026, &lt;strong&gt;there are no fees&lt;/strong&gt; on purchases that start in ChatGPT.&lt;/p&gt;

&lt;p&gt;After approval, the feed needs to be indexed — typically &lt;strong&gt;48–72 hours&lt;/strong&gt;. Products with complete Product JSON-LD schema, high availability accuracy, rich descriptions, and active promotions appear first.&lt;/p&gt;




&lt;h2&gt;
  
  
  Checklist Before Submitting
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;code&gt;bin/magento angeo:aeo:audit&lt;/code&gt; — robots.txt, llms.txt, Product schema all &lt;strong&gt;PASS&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Feed generates without errors and produces valid &lt;code&gt;.jsonl.gz&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Each product has &lt;code&gt;variants&lt;/code&gt;, correct prices in minor units, &lt;code&gt;availability.status&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Seller info complete: name, country (ISO 3166), at least 2 policy URLs&lt;/li&gt;
&lt;li&gt;[ ] Active promotions appear with &lt;code&gt;status: "active"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] 15-minute cron configured and tested&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;All four Angeo modules are free, MIT licensed, and available on Packagist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://packagist.org/packages/angeo/module-aeo-audit" rel="noopener noreferrer"&gt;&lt;code&gt;angeo/module-aeo-audit&lt;/code&gt;&lt;/a&gt; — AEO CLI audit, 8 signals&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://packagist.org/packages/angeo/module-llms-txt" rel="noopener noreferrer"&gt;&lt;code&gt;angeo/module-llms-txt&lt;/code&gt;&lt;/a&gt; — auto-generates llms.txt&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://packagist.org/packages/angeo/module-openai-product-feed" rel="noopener noreferrer"&gt;&lt;code&gt;angeo/module-openai-product-feed&lt;/code&gt;&lt;/a&gt; — ACP feed generator&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://packagist.org/packages/angeo/module-openai-product-feed-api" rel="noopener noreferrer"&gt;&lt;code&gt;angeo/module-openai-product-feed-api&lt;/code&gt;&lt;/a&gt; — REST API, 6 endpoints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://angeo.dev/ai-magento-audit/" rel="noopener noreferrer"&gt;&lt;strong&gt;Free AEO Self-Assessment →&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>magento</category>
      <category>chatgpt</category>
      <category>aeo</category>
      <category>ecommerce</category>
    </item>
    <item>
      <title>How to Fix robots.txt for ChatGPT and Gemini in Magento 2 (2026 Update)</title>
      <dc:creator>Ievgenii Gryshkun</dc:creator>
      <pubDate>Thu, 16 Apr 2026 20:41:06 +0000</pubDate>
      <link>https://dev.to/angeo/how-to-fix-robotstxt-for-chatgpt-and-gemini-in-magento-2-4e11</link>
      <guid>https://dev.to/angeo/how-to-fix-robotstxt-for-chatgpt-and-gemini-in-magento-2-4e11</guid>
      <description>&lt;p&gt;Your sitemap is configured. Your Core Web Vitals score is green. Your product catalog is perfectly structured. And yet when a user asks ChatGPT for products you sell, your store doesn't appear.&lt;/p&gt;

&lt;p&gt;Most of the time, the reason is a single file: &lt;code&gt;robots.txt&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Specifically — a &lt;code&gt;robots.txt&lt;/code&gt; written for Google in 2019 and never updated for the ten AI crawlers that now determine your visibility in ChatGPT, Gemini, Claude, and Perplexity.&lt;/p&gt;

&lt;p&gt;🔗 Originally published at &lt;a href="https://angeo.dev/magento-2-robots-txt-chatgpt-gemini-ai-bots/" rel="noopener noreferrer"&gt;angeo.dev/magento-2-robots-txt-chatgpt-gemini-ai-bots&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why robots.txt Is AEO Signal #1
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://packagist.org/packages/angeo/module-aeo-audit" rel="noopener noreferrer"&gt;angeo/module-aeo-audit&lt;/a&gt; checks robots.txt first and marks it Critical because it is a gate. Every other AEO signal — llms.txt, Product schema, AI product feed — is irrelevant if the AI crawler cannot enter your store.&lt;/p&gt;

&lt;p&gt;OpenAI states this without ambiguity:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Sites that are opted out of OAI-SearchBot will not be shown in ChatGPT search answers."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not "may not appear." &lt;strong&gt;Will not appear.&lt;/strong&gt; If &lt;code&gt;OAI-SearchBot&lt;/code&gt; is blocked — by an explicit Disallow or caught in a wildcard rule — your store is excluded from ChatGPT search answers regardless of everything else.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Three Types of AI Bots — Why the Difference Matters
&lt;/h2&gt;

&lt;p&gt;Before listing every bot, understand what each one actually does. Conflating them causes the most common robots.txt misconfiguration.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Examples&lt;/th&gt;
&lt;th&gt;Recommendation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Search &amp;amp; indexing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Builds the live index used when users ask AI questions. Cites sources, links back to your store.&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;OAI-SearchBot&lt;/code&gt;, &lt;code&gt;Claude-SearchBot&lt;/code&gt;, &lt;code&gt;PerplexityBot&lt;/code&gt;, &lt;code&gt;Google-Extended&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;✅ Always allow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;User-initiated&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fetches your page when a user asks AI to visit a specific URL. May cite your product page directly.&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;ChatGPT-User&lt;/code&gt;, &lt;code&gt;Claude-User&lt;/code&gt;, &lt;code&gt;Perplexity-User&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;✅ Always allow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Training crawlers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Collects content for model training. No attribution, no traffic back.&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;GPTBot&lt;/code&gt;, &lt;code&gt;ClaudeBot&lt;/code&gt;, &lt;code&gt;Applebot-Extended&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;⚠️ Your choice&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The most common mistake:&lt;/strong&gt; blocking &lt;code&gt;GPTBot&lt;/code&gt; (training) thinking it removes you from ChatGPT search results. It does not. &lt;code&gt;GPTBot&lt;/code&gt; and &lt;code&gt;OAI-SearchBot&lt;/code&gt; are entirely separate bots. Blocking training crawlers has zero effect on AI search visibility — but blocking search crawlers makes you invisible immediately.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Every AI Bot That Matters in 2026
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Bot&lt;/th&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Impact if blocked&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OAI-SearchBot&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ChatGPT&lt;/td&gt;
&lt;td&gt;Search index&lt;/td&gt;
&lt;td&gt;Invisible in all ChatGPT search answers. &lt;strong&gt;Most critical.&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GPTBot&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ChatGPT&lt;/td&gt;
&lt;td&gt;Training&lt;/td&gt;
&lt;td&gt;Excluded from future GPT training. No effect on current search.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ChatGPT-User&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ChatGPT&lt;/td&gt;
&lt;td&gt;User-initiated&lt;/td&gt;
&lt;td&gt;ChatGPT can't fetch your pages for users.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Claude-SearchBot&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Claude&lt;/td&gt;
&lt;td&gt;Search index&lt;/td&gt;
&lt;td&gt;Invisible in Claude's real-time web search answers.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ClaudeBot&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Claude&lt;/td&gt;
&lt;td&gt;Training&lt;/td&gt;
&lt;td&gt;Excluded from future Claude training data.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Claude-User&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Claude&lt;/td&gt;
&lt;td&gt;User-initiated&lt;/td&gt;
&lt;td&gt;Claude can't fetch your pages for users.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PerplexityBot&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Perplexity&lt;/td&gt;
&lt;td&gt;Search index&lt;/td&gt;
&lt;td&gt;Invisible in Perplexity answers and recommendations.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Perplexity-User&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Perplexity&lt;/td&gt;
&lt;td&gt;User-initiated&lt;/td&gt;
&lt;td&gt;Perplexity can't fetch your pages for users.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Google-Extended&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Gemini&lt;/td&gt;
&lt;td&gt;Search + training&lt;/td&gt;
&lt;td&gt;Not cited in Gemini AI Overviews or Google Shopping AI.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Applebot-Extended&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Apple Intelligence&lt;/td&gt;
&lt;td&gt;Training&lt;/td&gt;
&lt;td&gt;Excluded from Apple Intelligence training data.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;anthropic-ai&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;Deprecated&lt;/td&gt;
&lt;td&gt;Legacy name for ClaudeBot. Keep rules for backwards compatibility.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Anthropic expanded to three bots in early 2026.&lt;/strong&gt; Sites that only reference &lt;code&gt;ClaudeBot&lt;/code&gt; are now missing &lt;code&gt;Claude-SearchBot&lt;/code&gt; (live search) and &lt;code&gt;Claude-User&lt;/code&gt; (user-initiated fetching). If your robots.txt hasn't been updated since 2024, this almost certainly applies to your store.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Default Magento robots.txt Problem
&lt;/h2&gt;

&lt;p&gt;Magento's default &lt;code&gt;robots.txt&lt;/code&gt; starts with a wildcard:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: *
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;index&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt;/
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /*?
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;checkout&lt;/span&gt;/
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;app&lt;/span&gt;/
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This wildcard establishes a baseline that every bot inherits. If your deployment script, hosting provider, or a staging migration has added &lt;code&gt;Disallow: /&lt;/code&gt; anywhere — AI bots are caught in it silently, with no error logged anywhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check this right now.&lt;/strong&gt; Open &lt;code&gt;https://yourstore.com/robots.txt&lt;/code&gt; and look for &lt;code&gt;Disallow: /&lt;/code&gt; on its own line. If it exists without an explicit &lt;code&gt;Allow: /&lt;/code&gt; for each AI bot listed above it — every one of those bots is blocked.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Quick check — if this returns output, you have a problem&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://yourstore.com/robots.txt | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="s2"&gt;"^Disallow: /$"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Where Magento Serves robots.txt — Two Scenarios
&lt;/h2&gt;

&lt;p&gt;Before editing, identify which method your store uses. Editing the wrong one has no effect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario A: Magento Admin (most common)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check if Magento manages robots.txt&lt;/span&gt;
bin/magento config:show design/search_engine_robots/default_robots
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If it returns a value, edit via: &lt;strong&gt;Content → Design → Configuration → [Store view] → Edit → Search Engine Robots → Edit custom instruction of robots.txt&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario B: Static file in pub/&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check if a static file exists and is being served&lt;/span&gt;
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-la&lt;/span&gt; /var/www/html/pub/robots.txt
curl &lt;span class="nt"&gt;-I&lt;/span&gt; https://yourstore.com/robots.txt
&lt;span class="c"&gt;# If no X-Magento headers appear, the file is served statically&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Edit &lt;code&gt;pub/robots.txt&lt;/code&gt; directly, or remove it to let Magento Admin take over.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Multi-store:&lt;/strong&gt; Each store view can have its own robots.txt. If you run multiple stores on different domains, configure each store view separately in Admin → Design → Configuration.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Complete robots.txt for Magento 2
&lt;/h2&gt;

&lt;p&gt;Paste this as your full configuration. AI bot entries must appear &lt;strong&gt;before&lt;/strong&gt; the wildcard &lt;code&gt;User-agent: *&lt;/code&gt; block.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="c"&gt;# ============================================================
# AI SEARCH &amp;amp; INDEXING BOTS — Always allow
# Blocking these makes your store invisible in AI search answers.
# ============================================================
&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;OAI&lt;/span&gt;-&lt;span class="n"&gt;SearchBot&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;Claude&lt;/span&gt;-&lt;span class="n"&gt;SearchBot&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;PerplexityBot&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;Google&lt;/span&gt;-&lt;span class="n"&gt;Extended&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="c"&gt;# ============================================================
# USER-INITIATED FETCHERS — Always allow
# ============================================================
&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;ChatGPT&lt;/span&gt;-&lt;span class="n"&gt;User&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;Claude&lt;/span&gt;-&lt;span class="n"&gt;User&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;Perplexity&lt;/span&gt;-&lt;span class="n"&gt;User&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="c"&gt;# ============================================================
# TRAINING CRAWLERS — your choice
# Blocking does NOT affect search visibility.
# Change Allow to Disallow to opt out of training data collection.
# ============================================================
&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;GPTBot&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;ClaudeBot&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;anthropic&lt;/span&gt;-&lt;span class="n"&gt;ai&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;Applebot&lt;/span&gt;-&lt;span class="n"&gt;Extended&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="c"&gt;# ============================================================
# TRADITIONAL SEARCH ENGINES
# ============================================================
&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;Googlebot&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;Bingbot&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="c"&gt;# ============================================================
# ALL OTHER BOTS — standard Magento rules
# AI bots above are explicitly allowed before this wildcard.
# ============================================================
&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: *
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="c"&gt;# Magento paths — block from all crawlers
&lt;/span&gt;&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;admin&lt;/span&gt;/
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;adminhtml&lt;/span&gt;/
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;api&lt;/span&gt;/
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;rest&lt;/span&gt;/
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;graphql&lt;/span&gt;
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;cron&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt;
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;var&lt;/span&gt;/
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;lib&lt;/span&gt;/
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;dev&lt;/span&gt;/
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;index&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt;/
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /*?&lt;span class="n"&gt;SID&lt;/span&gt;=
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /*?&lt;span class="err"&gt;___&lt;/span&gt;&lt;span class="n"&gt;store&lt;/span&gt;=
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;checkout&lt;/span&gt;/
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;customer&lt;/span&gt;/
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;wishlist&lt;/span&gt;/
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;review&lt;/span&gt;/

&lt;span class="c"&gt;# ============================================================
# SITEMAPS
# ============================================================
&lt;/span&gt;&lt;span class="n"&gt;Sitemap&lt;/span&gt;: &lt;span class="n"&gt;https&lt;/span&gt;://&lt;span class="n"&gt;yourstore&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;/&lt;span class="n"&gt;sitemap&lt;/span&gt;.&lt;span class="n"&gt;xml&lt;/span&gt;
&lt;span class="n"&gt;Sitemap&lt;/span&gt;: &lt;span class="n"&gt;https&lt;/span&gt;://&lt;span class="n"&gt;yourstore&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;/&lt;span class="n"&gt;llms&lt;/span&gt;.&lt;span class="n"&gt;txt&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Order is not optional.&lt;/strong&gt; robots.txt uses first-match semantics per crawler. If &lt;code&gt;User-agent: *&lt;/code&gt; with &lt;code&gt;Disallow: /&lt;/code&gt; appears before the AI bot entries, those AI bots are permanently blocked — the rules below are never reached.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Four Mistakes That Block AI Bots
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ❌ Mistake 1 — Disallow: / left on from staging
&lt;/h3&gt;

&lt;p&gt;Many Magento stores use &lt;code&gt;Disallow: /&lt;/code&gt; on staging. This is frequently copied to production and never removed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common sources:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Magento Admin: Stores → Configuration → General → Design → Search Engine Robots&lt;/li&gt;
&lt;li&gt;Manually edited &lt;code&gt;pub/robots.txt&lt;/code&gt; copied from staging&lt;/li&gt;
&lt;li&gt;CI/CD pipelines that sync the full staging filesystem to production&lt;/li&gt;
&lt;li&gt;Managed hosts (Hypernode, Nexcess, Cloudways) applying restrictive defaults on new environments&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ❌ Mistake 2 — Wildcard block placed before AI bot rules
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="c"&gt;# ❌ WRONG — wildcard fires first, AI bot rules below it are ignored
&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: *
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;OAI&lt;/span&gt;-&lt;span class="n"&gt;SearchBot&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /  &lt;span class="c"&gt;# ← never reached, bot already matched the wildcard above
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="c"&gt;# ✅ CORRECT — explicit AI rules appear before the wildcard
&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;OAI&lt;/span&gt;-&lt;span class="n"&gt;SearchBot&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: *
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;checkout&lt;/span&gt;/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ❌ Mistake 3 — Using outdated Anthropic bot names
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="c"&gt;# Deprecated — no longer reflect Anthropic's bot infrastructure
&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;Claude&lt;/span&gt;-&lt;span class="n"&gt;Web&lt;/span&gt;     &lt;span class="c"&gt;# retired 2024
&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;Anthropic&lt;/span&gt;-&lt;span class="n"&gt;AI&lt;/span&gt;   &lt;span class="c"&gt;# retired 2024
&lt;/span&gt;
&lt;span class="c"&gt;# Current names (2026)
&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;ClaudeBot&lt;/span&gt;        &lt;span class="c"&gt;# training
&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;Claude&lt;/span&gt;-&lt;span class="n"&gt;SearchBot&lt;/span&gt; &lt;span class="c"&gt;# live search index ← missing from most configs
&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;Claude&lt;/span&gt;-&lt;span class="n"&gt;User&lt;/span&gt;      &lt;span class="c"&gt;# user-initiated fetching ← missing from most configs
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ❌ Mistake 4 — robots.txt served from cache or static file
&lt;/h3&gt;

&lt;p&gt;Some hosting setups bypass Magento when serving &lt;code&gt;robots.txt&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Nginx static rule&lt;/strong&gt; serves &lt;code&gt;pub/robots.txt&lt;/code&gt; before Magento handles the request&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CDN caching&lt;/strong&gt; — Cloudflare or Fastly caches the old file with long TTLs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Varnish&lt;/strong&gt; returns cached response without hitting the application
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Diagnosis — if no X-Magento headers, file is served statically&lt;/span&gt;
curl &lt;span class="nt"&gt;-I&lt;/span&gt; https://yourstore.com/robots.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Fix for Nginx&lt;/strong&gt; — ensure this location block is present:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;/robots.txt&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;try_files&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt;&lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="n"&gt;/index.php&lt;/span&gt;&lt;span class="nv"&gt;$is_args$args&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Fix for Cloudflare&lt;/strong&gt; — purge cache for &lt;code&gt;/robots.txt&lt;/code&gt; via dashboard, or add a Cache Rule to bypass caching for that path.&lt;/p&gt;




&lt;h2&gt;
  
  
  Verify the Fix
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check all critical AI search bots have Allow: /&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://yourstore.com/robots.txt | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-A1&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"OAI-SearchBot|Claude-SearchBot|PerplexityBot|Google-Extended"&lt;/span&gt;

&lt;span class="c"&gt;# Check server logs to confirm bots are actually crawling&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-Ei&lt;/span&gt; &lt;span class="s2"&gt;"OAI-SearchBot|Claude-SearchBot|PerplexityBot"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  /var/log/nginx/access.log | &lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-20&lt;/span&gt;

&lt;span class="c"&gt;# Via AEO audit module — checks all bots + validates rule order&lt;/span&gt;
composer require angeo/module-aeo-audit
bin/magento setup:upgrade
bin/magento angeo:aeo:audit

&lt;span class="c"&gt;# ✓ PASS  robots.txt — AI Bot Access&lt;/span&gt;
&lt;span class="c"&gt;#         OAI-SearchBot ✓  Claude-SearchBot ✓  ChatGPT-User ✓&lt;/span&gt;
&lt;span class="c"&gt;#         ClaudeBot ✓  Claude-User ✓&lt;/span&gt;
&lt;span class="c"&gt;#         PerplexityBot ✓  Google-Extended ✓&lt;/span&gt;

&lt;span class="c"&gt;# Multi-store — run per store view&lt;/span&gt;
bin/magento angeo:aeo:audit &lt;span class="nt"&gt;--store&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;de
bin/magento angeo:aeo:audit &lt;span class="nt"&gt;--store&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;fr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  After robots.txt — What's Next
&lt;/h2&gt;

&lt;p&gt;Fixing robots.txt is the access layer. Once AI bots can reach your store, the signals that determine whether you actually appear in AI answers are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;llms.txt&lt;/strong&gt; — machine-readable index of your catalog that AI assistants parse in seconds → &lt;a href="https://packagist.org/packages/angeo/module-llms-txt" rel="noopener noreferrer"&gt;angeo/module-llms-txt&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Product JSON-LD schema&lt;/strong&gt; — structured markup that tells AI exactly what your products cost and where to buy them → checked by &lt;a href="https://packagist.org/packages/angeo/module-aeo-audit" rel="noopener noreferrer"&gt;angeo/module-aeo-audit&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI product feed&lt;/strong&gt; — structured feed required for ChatGPT Shopping eligibility → &lt;a href="https://packagist.org/packages/angeo/module-openai-product-feed" rel="noopener noreferrer"&gt;angeo/module-openai-product-feed&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# See all 8 AEO signals and your complete score&lt;/span&gt;
bin/magento angeo:aeo:audit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: Does blocking GPTBot affect ChatGPT recommendations?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No — but blocking &lt;code&gt;OAI-SearchBot&lt;/code&gt; does. These are separate bots. &lt;code&gt;GPTBot&lt;/code&gt; collects training data; &lt;code&gt;OAI-SearchBot&lt;/code&gt; builds the index ChatGPT uses for search answers. Blocking &lt;code&gt;GPTBot&lt;/code&gt; has no effect on whether your store appears in ChatGPT results. Blocking &lt;code&gt;OAI-SearchBot&lt;/code&gt; removes you from ChatGPT search answers entirely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What is OAI-SearchBot and why does it matter more than GPTBot?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;OAI-SearchBot&lt;/code&gt; is OpenAI's crawler that powers ChatGPT real-time search results and product recommendations. It determines whether your store appears in ChatGPT answers today. &lt;code&gt;GPTBot&lt;/code&gt; collects training data for future model versions — its effects are long-term and indirect. Both should be allowed, but &lt;code&gt;OAI-SearchBot&lt;/code&gt; is the one that determines your current search visibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How do I check which AI bots are blocked in Magento 2?&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://yourstore.com/robots.txt | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s1"&gt;'searchbot\|gptbot\|claude\|perplexity\|google-extended'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If nothing appears, bots may be blocked by a wildcard &lt;code&gt;Disallow: /&lt;/code&gt; rule. The fastest automated check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require angeo/module-aeo-audit
bin/magento setup:upgrade
bin/magento angeo:aeo:audit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It checks all bots, validates rule order, and reports exact status for each one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Should I allow training bots like GPTBot and ClaudeBot?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For most ecommerce stores, yes. Allowing training crawlers means your product descriptions and category content contribute to how AI models understand and describe products in your category — which indirectly improves recommendation quality over time. If you have legal or privacy reasons to opt out, block only the training bots (&lt;code&gt;GPTBot&lt;/code&gt;, &lt;code&gt;ClaudeBot&lt;/code&gt;, &lt;code&gt;Applebot-Extended&lt;/code&gt;) — your search visibility is not affected.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Check all AI bots and 7 other AEO signals in one command — free, MIT licensed:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;📦 &lt;a href="https://packagist.org/packages/angeo/module-aeo-audit" rel="noopener noreferrer"&gt;Install AEO Audit Module&lt;/a&gt;&lt;br&gt;
🌐 &lt;a href="https://angeo.dev/ai-magento-audit/" rel="noopener noreferrer"&gt;Free Web Self-Assessment&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://angeo.dev/magento-2-robots-txt-chatgpt-gemini-ai-bots/" rel="noopener noreferrer"&gt;angeo.dev&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>magento</category>
      <category>aeo</category>
      <category>chatgpt</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How to Check If Your Magento Store Is Visible to ChatGPT — Free AEO Audit Module</title>
      <dc:creator>Ievgenii Gryshkun</dc:creator>
      <pubDate>Tue, 14 Apr 2026 20:35:57 +0000</pubDate>
      <link>https://dev.to/angeo/how-to-check-if-your-magento-store-is-visible-to-chatgpt-free-aeo-audit-module-4hkm</link>
      <guid>https://dev.to/angeo/how-to-check-if-your-magento-store-is-visible-to-chatgpt-free-aeo-audit-module-4hkm</guid>
      <description>&lt;p&gt;&lt;em&gt;Part 2 of the &lt;a href="https://dev.to/angeo"&gt;AEO for Magento 2 series&lt;/a&gt;. Part 1: &lt;a href="https://dev.to/angeo/what-is-llmsljson-and-why-ecommerce-needs-it-a2a"&gt;What is llms.ljson and why eCommerce needs it&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Most Magento developers spend hours manually checking robots.txt, schema markup, and sitemap configurations. Then they wonder why their store still doesn't appear in ChatGPT or Gemini recommendations.&lt;/p&gt;

&lt;p&gt;There is now a faster way.&lt;br&gt;
🔗 This article was originally published on &lt;a href="https://angeo.dev/magento-aeo-audit-module-chatgpt-visibility/:" rel="noopener noreferrer"&gt;https://angeo.dev/magento-aeo-audit-module-chatgpt-visibility/:&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fza2526qx3fgjv3g1lce9.png" alt="Alt text" width="800" height="533"&gt;
&lt;/h2&gt;
&lt;h2&gt;
  
  
  The problem: no standard AEO checklist for Magento
&lt;/h2&gt;

&lt;p&gt;SEO has Lighthouse. SEO has Search Console. SEO has audit tools built into every CI pipeline.&lt;/p&gt;

&lt;p&gt;AEO — AI Engine Optimization — has almost nothing.&lt;/p&gt;

&lt;p&gt;Magento developers who want to know whether their store is AI-visible have to check manually:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is &lt;code&gt;GPTBot&lt;/code&gt; allowed in &lt;code&gt;robots.txt&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;Does the store have a &lt;code&gt;llms.txt&lt;/code&gt; file?&lt;/li&gt;
&lt;li&gt;Is Product JSON-LD schema present on PDP pages?&lt;/li&gt;
&lt;li&gt;Is there an AI-readable product feed for ChatGPT Shopping?&lt;/li&gt;
&lt;li&gt;Does the homepage have FAQPage schema for answer-box eligibility?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This takes time, requires domain knowledge, and produces no consistent score to track over time.&lt;/p&gt;


&lt;h2&gt;
  
  
  Introducing: angeo/module-aeo-audit
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;angeo/module-aeo-audit&lt;/code&gt; is a free, open-source Magento 2 CLI module that runs a complete AEO audit with one command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require angeo/module-aeo-audit
bin/magento setup:upgrade
bin/magento angeo:aeo:audit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The module checks 8 signal categories, scores your store from 0–100, and tells you exactly what to fix — with specific commands.&lt;/p&gt;




&lt;h2&gt;
  
  
  What it checks
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;What it looks for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;robots.txt — AI Bot Access&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;td&gt;GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;llms.txt — AI Content Map&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;td&gt;Spec-compliant llms.txt at /llms.txt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Product JSON-LD Schema&lt;/td&gt;
&lt;td&gt;Important&lt;/td&gt;
&lt;td&gt;@type Product with offers.price and offers.availability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FAQPage Schema&lt;/td&gt;
&lt;td&gt;Important&lt;/td&gt;
&lt;td&gt;FAQPage schema on homepage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI Product Feed&lt;/td&gt;
&lt;td&gt;Important&lt;/td&gt;
&lt;td&gt;Feed file at expected paths&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sitemap.xml&lt;/td&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;sitemap_index.xml or sitemap.xml&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open Graph&lt;/td&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;og:title, og:description, og:image&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Canonical Tags&lt;/td&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;rel=canonical on all pages&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  What the output looks like
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;╔══════════════════════════════════════════════════════════╗
║  Angeo AEO Audit — Store: default                        ║
╚══════════════════════════════════════════════════════════╝

✓ PASS  robots.txt — All 7 AI bots are permitted.
✗ FAIL  llms.txt — /llms.txt not found (404).
✓ PASS  sitemap.xml — found (1,243 URLs).
✓ PASS  Product Schema — Product JSON-LD found.
⚠ WARN  FAQPage Schema — No FAQPage schema on homepage.
✗ FAIL  AI Product Feed — No AI-readable product feed found.
✓ PASS  Open Graph — All required OG tags found.
✓ PASS  Canonical Tags — Canonical tag found.

AEO Score: [████████████░░░░░░░░] 50% — Needs Improvement
✓ Pass: 5   ⚠ Warn: 1   ✗ Fail: 2

Critical fixes needed:
→ composer require angeo/module-llms-txt
→ bin/magento angeo:llms:generate
→ composer require angeo/module-openai-product-feed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every failed check includes a specific command. Not "fix your schema" — but exactly what to run.&lt;/p&gt;




&lt;h2&gt;
  
  
  Three output formats
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Default — readable table in terminal&lt;/span&gt;
bin/magento angeo:aeo:audit

&lt;span class="c"&gt;# JSON — for dashboards or automated processing&lt;/span&gt;
bin/magento angeo:aeo:audit &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;json &lt;span class="nt"&gt;--output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/tmp/aeo-report.json

&lt;span class="c"&gt;# Markdown — for Notion, docs, or sharing with clients&lt;/span&gt;
bin/magento angeo:aeo:audit &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;markdown

&lt;span class="c"&gt;# Specific store only&lt;/span&gt;
bin/magento angeo:aeo:audit &lt;span class="nt"&gt;--store&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;en_gb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  CI pipeline integration
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;--fail-on&lt;/code&gt; flag exits with code 1 if the score drops below a threshold:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Fail the build if AEO score drops below 80&lt;/span&gt;
bin/magento angeo:aeo:audit &lt;span class="nt"&gt;--fail-on&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add this to your GitHub Actions or GitLab CI pipeline — if a deploy breaks AI visibility, the build fails. Same way &lt;code&gt;phpstan&lt;/code&gt; or &lt;code&gt;phpcs&lt;/code&gt; works for code quality.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# .github/workflows/aeo.yml&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;AEO Audit&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bin/magento angeo:aeo:audit --fail-on=80&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  How it fits the Angeo suite
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;module-aeo-audit&lt;/code&gt; is the diagnostic layer. It tells you what's missing. The other free modules fix those gaps:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Fix signal 2 — llms.txt&lt;/span&gt;
composer require angeo/module-llms-txt
bin/magento angeo:llms:generate

&lt;span class="c"&gt;# Fix signal 5 — AI product feed&lt;/span&gt;
composer require angeo/module-openai-product-feed

&lt;span class="c"&gt;# Re-run audit to verify&lt;/span&gt;
bin/magento angeo:aeo:audit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;Requirements: PHP 8.2+, Magento 2.4+, Magento Open Source or Adobe Commerce Cloud.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require angeo/module-aeo-audit
bin/magento setup:upgrade
bin/magento cache:flush
bin/magento angeo:aeo:audit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No admin configuration. No database changes. One CLI command registered.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this exists
&lt;/h2&gt;

&lt;p&gt;ChatGPT referral traffic converts at 4–5× the rate of standard organic search. Most Magento stores have at least 2–3 critical AEO issues they don't know about — a &lt;code&gt;robots.txt&lt;/code&gt; that blocks &lt;code&gt;OAI-SearchBot&lt;/code&gt;, a product page with no JSON-LD schema, no &lt;code&gt;llms.txt&lt;/code&gt; while competitors already have one.&lt;/p&gt;

&lt;p&gt;The audit takes 30 seconds. The fixes usually take less than an hour.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Next in series:&lt;/strong&gt; The Complete AEO Checklist for Magento 2 — 8 Signals, 90 Minutes — the step-by-step fix guide for every signal the audit checks.&lt;/p&gt;

&lt;p&gt;Module on Packagist: &lt;a href="https://packagist.org/packages/angeo/module-aeo-audit" rel="noopener noreferrer"&gt;packagist.org/packages/angeo/module-aeo-audit&lt;/a&gt;&lt;/p&gt;

</description>
      <category>magento</category>
      <category>aeo</category>
      <category>chatgpt</category>
      <category>opensource</category>
    </item>
    <item>
      <title>What is llms.jsonl and why eCommerce needs it</title>
      <dc:creator>Ievgenii Gryshkun</dc:creator>
      <pubDate>Sun, 12 Apr 2026 08:10:18 +0000</pubDate>
      <link>https://dev.to/angeo/what-is-llmsljson-and-why-ecommerce-needs-it-a2a</link>
      <guid>https://dev.to/angeo/what-is-llmsljson-and-why-ecommerce-needs-it-a2a</guid>
      <description>&lt;p&gt;&lt;strong&gt;AI assistants don't read your website the way customers do.&lt;/strong&gt; They need structured, machine-readable data — and that's exactly what &lt;code&gt;llms.jsonl&lt;/code&gt; provides.&lt;/p&gt;

&lt;p&gt;If you already know about &lt;code&gt;llms.txt&lt;/code&gt;, think of &lt;code&gt;llms.jsonl&lt;/code&gt; as its structured, data-rich sibling — purpose-built for eCommerce product catalogs.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🔗 This article was originally published on &lt;a href="https://angeo.dev/what-is-llms-jsonl-and-why-ecommerce-needs-it/" rel="noopener noreferrer"&gt;https://angeo.dev/what-is-llms-jsonl-and-why-ecommerce-needs-it/&lt;/a&gt;:  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcsgltg29wg0gy2r1nihf.png" alt=" " width="800" height="533"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  What Is llms.jsonl?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;llms.jsonl&lt;/code&gt; stands for &lt;strong&gt;LLM-optimized Line-delimited JSON&lt;/strong&gt;. It is a file where each line contains a complete, self-contained JSON object representing a single entity — a product, a category, or a CMS page.&lt;/p&gt;

&lt;p&gt;Unlike a regular JSON array (which wraps everything in brackets and requires loading the whole file at once), JSONL is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Streamable&lt;/strong&gt; — AI agents can read it line by line&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalable&lt;/strong&gt; — stores with 50,000 SKUs don't need one giant file&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parseable&lt;/strong&gt; — each line is valid JSON independently&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  A Single Product Line in llms.jsonl
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"product"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"sku"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"WB-004"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Alpine Hiking Jacket"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;189.99&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"USD"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"https://angeo.test/alpine-jacket"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Outerwear"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"short_description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Waterproof 3-layer shell for alpine conditions"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"in_stock"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"attributes"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Navy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"size_options"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"M"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"L"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"XL"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nl"&gt;"material"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Gore-Tex"&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every product — one line. Every line — complete context for an AI to understand and recommend that product.&lt;/p&gt;




&lt;h2&gt;
  
  
  llms.txt vs llms.jsonl — What Is the Difference?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;llms.txt&lt;/th&gt;
&lt;th&gt;llms.jsonl&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Format&lt;/td&gt;
&lt;td&gt;Markdown (human-readable)&lt;/td&gt;
&lt;td&gt;Line-delimited JSON (machine-readable)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for&lt;/td&gt;
&lt;td&gt;Store overview, pages, categories&lt;/td&gt;
&lt;td&gt;Full product catalog data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI use case&lt;/td&gt;
&lt;td&gt;Context &amp;amp; navigation&lt;/td&gt;
&lt;td&gt;Product recommendations &amp;amp; queries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scalability&lt;/td&gt;
&lt;td&gt;Up to ~500 items&lt;/td&gt;
&lt;td&gt;Unlimited (streamed line by line)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Attributes&lt;/td&gt;
&lt;td&gt;Basic (name, URL, price)&lt;/td&gt;
&lt;td&gt;Full (variants, stock, specs)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Both files work together. &lt;code&gt;llms.txt&lt;/code&gt; tells AI &lt;em&gt;what your store is&lt;/em&gt;. &lt;code&gt;llms.jsonl&lt;/code&gt; tells AI &lt;em&gt;what your store sells&lt;/em&gt; — in full detail.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Does eCommerce Specifically Need llms.jsonl?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. AI Agents Need Structured Product Data
&lt;/h3&gt;

&lt;p&gt;When a user asks ChatGPT or Claude "recommend a waterproof jacket under $200," the AI needs structured, queryable product data — not HTML product pages. &lt;code&gt;llms.jsonl&lt;/code&gt; provides exactly that: a clean feed of every product with its attributes, price, stock status, and URL.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. HTML Product Pages Are Noise for AI
&lt;/h3&gt;

&lt;p&gt;A typical Magento 2 product page contains navigation menus, cookie banners, review widgets, upsell carousels, and footer links. The actual product data is buried inside this noise. AI context windows are limited, and parsing messy HTML wastes them. &lt;code&gt;llms.jsonl&lt;/code&gt; gives AI only signal, zero noise.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Product Catalogs Are Too Large for llms.txt
&lt;/h3&gt;

&lt;p&gt;A store with 5,000 SKUs cannot fit them all meaningfully into a single &lt;code&gt;llms.txt&lt;/code&gt; file. &lt;code&gt;llms.jsonl&lt;/code&gt; handles any catalog size because AI systems can stream and process it line by line — one product at a time.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Variants, Stock, and Pricing Change Daily
&lt;/h3&gt;

&lt;p&gt;Unlike static blog content, product data changes constantly. A configurable product might have 12 size/color combinations. Stock goes in and out. Prices change with promotions. &lt;code&gt;llms.jsonl&lt;/code&gt; is generated fresh by cron and always reflects the current state of your catalog.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Does a Full llms.jsonl File Look Like?
&lt;/h2&gt;

&lt;p&gt;Each line is an independent JSON object. Here is a multi-entity example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{"type":"store","code":"angeo_en","name":"EN","url":"https:\/\/angeo.test\/","currency":"USD","locale":en}
{"type":"category","store":"angeo_nl","id":"4","name":"Sale","parent_id":"2","url":"https:\/\/angeo.test\/sale.html","description":"","embedding_text":"Sale "}
{"type":"product","store":"angeo_en","id":"4","sku":"product_sku","title":"product name","price":"123.00","currency":"USD","short_description":"","description":"test descriprtion","url":"https:\/\/angeo.test\/product-name.html","embedding_text":"product name  test descriprtion"}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An AI agent processing this file can instantly answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"What waterproof jackets do you have under $300?" → WB-001&lt;/li&gt;
&lt;li&gt;"Do you have merino base layers?" → WB-002&lt;/li&gt;
&lt;li&gt;"Is the 3-in-1 jacket in stock?" → No (&lt;code&gt;in_stock: false&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How to Generate llms.jsonl for Magento 2
&lt;/h2&gt;

&lt;p&gt;The open-source module &lt;a href="https://packagist.org/packages/angeo/module-llms-txt" rel="noopener noreferrer"&gt;&lt;strong&gt;angeo/module-llms-txt&lt;/strong&gt;&lt;/a&gt; generates both &lt;code&gt;llms.txt&lt;/code&gt; and &lt;code&gt;llms.jsonl&lt;/code&gt; automatically for your Magento 2 store.&lt;/p&gt;

&lt;p&gt;Install in 3 commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require angeo/module-llms-txt
bin/magento setup:upgrade
bin/magento cache:flush
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After installation, navigate to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Stores → Configuration → General → Angeo → LLMS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Generate manually or let cron handle scheduled updates. Both files are created at your store root:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;https://yourstore.com/llms.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://yourstore.com/llms.jsonl&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The module supports multi-store and multi-language Magento 2 setups, includes unit tests for both file types, and is MIT licensed.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://packagist.org/packages/angeo/module-llms-txt" rel="noopener noreferrer"&gt;Packagist&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Bigger Picture: AI Commerce Infrastructure
&lt;/h2&gt;

&lt;p&gt;We are entering a phase where AI agents don't just recommend products — they initiate purchase flows on behalf of users. For an AI agent to recommend &lt;em&gt;your&lt;/em&gt; products, it must be able to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Understand what you sell&lt;/li&gt;
&lt;li&gt;Filter by price, attributes, stock status&lt;/li&gt;
&lt;li&gt;Navigate to a product URL and initiate checkout&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Steps 1 and 2 are solved by &lt;code&gt;llms.jsonl&lt;/code&gt;. Step 3 is the next frontier — but without steps 1 and 2, step 3 is impossible.&lt;/p&gt;

&lt;p&gt;Stores that generate structured AI feeds today will be the ones AI agents recommend tomorrow.&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;llms.jsonl&lt;/code&gt; is a line-delimited JSON file that exposes your full product catalog to AI systems&lt;/li&gt;
&lt;li&gt;It complements &lt;code&gt;llms.txt&lt;/code&gt; — together they give AI both context and structured data&lt;/li&gt;
&lt;li&gt;For Magento 2, the open-source &lt;code&gt;angeo/module-llms-txt&lt;/code&gt; generates both files automatically&lt;/li&gt;
&lt;li&gt;Implementation takes under 5 minutes and requires no custom development&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The AI commerce era is not coming — it is already here.&lt;/strong&gt; Structured product feeds are the foundation that makes your store visible to the systems that are replacing traditional search.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have questions about llms.jsonl for Magento 2? Drop a comment below or check the module on &lt;a href="https://packagist.org/packages/angeo/module-llms-txt" rel="noopener noreferrer"&gt;Packagist&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>magento</category>
      <category>ai</category>
      <category>seo</category>
      <category>ecommerce</category>
    </item>
  </channel>
</rss>
