Module reference

Robots.txt AEO for Magento 2 — module reference

Covers angeo/module-robots-txt-aeo 4.0.1 · Checked 16 October 2026 · MIT licensed

Robots.txt AEO adds rules for AI crawlers to your Magento 2 robots.txt. It does this at render time and keeps your own rules as they are. You tick which bots may read the store in the admin panel.

Since 4.0.0 it can also check if a crawler is real. A User-Agent: GPTBot header is one line anyone can send. A request signed by the vendor, or an address inside the vendor’s published IP range, is proof.

What it does

  • Adds a managed block of AI bot rules to robots.txt. Nothing is written to the database or the file system.
  • Ships a catalogue of AI bots: OAI-SearchBot, GPTBot, ChatGPT-User, OAI-AdsBot, PerplexityBot, Perplexity-User, Google-Extended, ClaudeBot, Claude-User, Claude-SearchBot, anthropic-ai, Applebot, Applebot-Extended, cohere-ai, Amazonbot, Meta-ExternalAgent, meta-externalfetcher, CCBot, Bytespider, MistralAI-User and DuckAssistBot.
  • Lets you set Allow, Disallow and Crawl-delay per bot.
  • Adds Sitemap: lines, from Magento’s sitemap or your own list.
  • Can write content-use signals (IETF Content-Usage, Cloudflare Content-Signal) and an RSL License: line.
  • Verifies bots by IP range and by RFC 9421 request signature (Web Bot Auth). It only reports. It never blocks.

Requirements

Magento2.4.x (Open Source, Mage-OS or Adobe Commerce) — magento/framework ^103.0
PHP8.2 – 8.5 — ~8.2.0||~8.3.0||~8.4.0||~8.5.0
PHP extensionsjson, sodium

PHP 8.1 was dropped in 4.0.0. If you are on PHP 8.1, stay on 3.0.x. The sodium extension ships with PHP and is needed for signature checks.

Installation

composer require angeo/module-robots-txt-aeo
bin/magento module:enable Angeo_RobotsTxtAeo
bin/magento setup:upgrade
bin/magento setup:di:compile                # production mode only
bin/magento setup:static-content:deploy     # production mode only
bin/magento cache:flush

The module is on by default. The mainstream AI bots are allowed. Lower-traffic bots and the six tokens added in 4.0.0 are in the catalogue but switched off.

How the block is added

A plugin on Magento\Robots\Model\Robots::getData() adds the AI block when robots.txt is rendered. Your own text under Content → Design → Configuration → Search Engine Robots stays untouched.

The AI block goes before your existing rules. Only lines the module owns are replaced. Your comments, spacing and rule order stay byte for byte. Running it again replaces the block. It never stacks.

# Angeo AEO — AI Crawler Rules
User-agent: OAI-SearchBot
Allow: /

User-agent: ClaudeBot
Allow: /
Disallow: /admin/
# End Angeo AEO block

User-agent: *
Disallow: /checkout/
... your own rules, unchanged

Replace mode

The module builds the whole file and keeps your custom Disallow rules from the wildcard group. Use it only if the module should own the full file.

Since 4.0.0, Replace mode will not open a closed site. If your file has User-agent: * with Disallow: / (common on staging), it is served unchanged and the admin says why.

Content-use signals and licensing

These settings are all off by default:

  • **IETF Content-Usage** — an aipref statement such as train-ai=n (no AI training).
  • **Cloudflare Content-Signal** — separate yes/no values for search, ai-train and ai-input.
  • **RSL License:** — a link to your RSL license XML file.

By default, signals go into the wildcard group, as Cloudflare’s managed robots.txt does. Set the placement to per bot for the 3.x layout.

Command line

# Show what would be added, without applying it
bin/magento angeo:robots:preview --store=1

# Fetch the live robots.txt and check the enabled bot rules are there
bin/magento angeo:robots:validate --store=1

# Is this address inside a published AI crawler range?
bin/magento angeo:robots:verify-bot-ip 203.0.113.10 --bot=GPTBot

# Was this request really signed by the vendor?
bin/magento angeo:robots:verify-bot-request --headers-file=/tmp/headers.txt \
    --authority=shop.example --path=/product.html --ip=203.0.113.10
CommandWhat it does
bin/magento angeo:robots:previewPreview the final robots.txt output after AI rule injection (no changes made)
bin/magento angeo:robots:validateValidate that AI crawler rules are present in the live robots.txt
bin/magento angeo:robots:verify-bot-ipVerify an IP address against vendor-published AI bot IP ranges
bin/magento angeo:robots:verify-bot-requestVerify a captured request against its Web Bot Auth signature

validate exits with a non-zero code when expected rules are missing. Use it as a smoke test after deploy.

Checking if a bot is real

A check returns one of four states:

StateMeaning
verifiedThe signature is valid, or the address is in the vendor’s range.
failedIt is not. Treat the request as fake.
unknownNo decision: the key directory was not reachable, or no IP was given. This is not the same as failed.
unsupportedThe vendor publishes no way to check this bot.

What vendors publish today:

VendorIP rangesSigned requests
OpenAIYes, three feedsYes, https://chatgpt.com
AnthropicYes, one shared feed for ClaudeBot, Claude-User and Claude-SearchBotNo
PerplexityYes, one feed per botNo
Google, Apple, Meta, ByteDance, Mistral, DuckDuckGoNoNo

A match in Anthropic’s shared feed proves the request came from Anthropic, but not which of its three bots sent it. The module says exactly that. The Signature-Agent header is never trusted alone. You can add new signing origins under Bot Verification when a vendor publishes one between releases.

Other modules can use the checks through Angeo\RobotsTxtAeo\Api\BotVerificationInterface, and read the effective file through Api\RobotsStatusInterface. AEO Audit uses the second one, so it needs no HTTP request when both modules are installed.

Configuration reference

All settings are under Stores → Configuration → Angeo → Robots.txt AEO. The table shows each field, its config path (for bin/magento config:set) and its default value.

General (3)
SettingConfig pathDefault
Enable AI Bot Rulesangeo_robots_txt_aeo/general/enabledYes
Injection Modeangeo_robots_txt_aeo/general/modeinject
Custom robots.txt Content (Replace mode)angeo_robots_txt_aeo/general/custom_content—
AI Crawlers (21)
SettingConfig pathDefault
★ OAI-SearchBot (ChatGPT live search)angeo_robots_txt_aeo/bots/oai_searchbotYes
★ GPTBot (OpenAI training crawler)angeo_robots_txt_aeo/bots/gptbotYes
ChatGPT-User (ChatGPT browsing)angeo_robots_txt_aeo/bots/chatgpt_userYes
OAI-AdsBot (ChatGPT ads validation)angeo_robots_txt_aeo/bots/oai_adsbotNo
PerplexityBot (Perplexity index crawler)angeo_robots_txt_aeo/bots/perplexitybotYes
Perplexity-User (Perplexity real-time fetch)angeo_robots_txt_aeo/bots/perplexity_userYes
★ Google-Extended (Gemini / AI Overviews)angeo_robots_txt_aeo/bots/google_extendedYes
ClaudeBot (Anthropic Claude)angeo_robots_txt_aeo/bots/claudebotYes
anthropic-ai — DEPRECATED by Anthropicangeo_robots_txt_aeo/bots/anthropic_aiNo
Claude-User (Claude browsing agent)angeo_robots_txt_aeo/bots/claude_userYes
Claude-SearchBot (Claude search index)angeo_robots_txt_aeo/bots/claude_searchbotYes
Applebot (Apple Intelligence / Siri)angeo_robots_txt_aeo/bots/applebotYes
cohere-ai (Cohere training crawler)angeo_robots_txt_aeo/bots/cohere_aiNo
Amazonbot (Amazon Alexa AI)angeo_robots_txt_aeo/bots/amazonbotNo
Meta-ExternalAgent (Meta AI)angeo_robots_txt_aeo/bots/meta_external_agentNo
Applebot-Extended (Apple model training)angeo_robots_txt_aeo/bots/applebot_extendedNo
meta-externalfetcher (Meta AI user fetch)angeo_robots_txt_aeo/bots/meta_external_fetcherNo
CCBot (Common Crawl)angeo_robots_txt_aeo/bots/ccbotNo
Bytespider (ByteDance training)angeo_robots_txt_aeo/bots/bytespiderNo
MistralAI-User (Le Chat user fetch)angeo_robots_txt_aeo/bots/mistralai_userNo
DuckAssistBot (DuckDuckGo AI answers)angeo_robots_txt_aeo/bots/duckassistbotNo
AI Crawler Path Overrides (18)
SettingConfig pathDefault
Allow pathsangeo_robots_txt_aeo/bot_overrides/oai_searchbot/allow—
Disallow pathsangeo_robots_txt_aeo/bot_overrides/oai_searchbot/disallow—
Crawl-delay (seconds)angeo_robots_txt_aeo/bot_overrides/oai_searchbot/crawl_delay—
Allow pathsangeo_robots_txt_aeo/bot_overrides/gptbot/allow—
Disallow pathsangeo_robots_txt_aeo/bot_overrides/gptbot/disallow—
Allow pathsangeo_robots_txt_aeo/bot_overrides/chatgpt_user/allow—
Disallow pathsangeo_robots_txt_aeo/bot_overrides/chatgpt_user/disallow—
Crawl-delay (seconds)angeo_robots_txt_aeo/bot_overrides/chatgpt_user/crawl_delay—
Allow pathsangeo_robots_txt_aeo/bot_overrides/perplexitybot/allow—
Disallow pathsangeo_robots_txt_aeo/bot_overrides/perplexitybot/disallow—
Crawl-delay (seconds)angeo_robots_txt_aeo/bot_overrides/perplexitybot/crawl_delay—
Allow pathsangeo_robots_txt_aeo/bot_overrides/google_extended/allow—
Disallow pathsangeo_robots_txt_aeo/bot_overrides/google_extended/disallow—
Allow pathsangeo_robots_txt_aeo/bot_overrides/claudebot/allow—
Disallow pathsangeo_robots_txt_aeo/bot_overrides/claudebot/disallow—
Allow pathsangeo_robots_txt_aeo/bot_overrides/applebot/allow—
Disallow pathsangeo_robots_txt_aeo/bot_overrides/applebot/disallow—
Crawl-delay (seconds)angeo_robots_txt_aeo/bot_overrides/applebot/crawl_delay—
Sitemap Directive (2)
SettingConfig pathDefault
Sitemap sourceangeo_robots_txt_aeo/sitemap/modeauto
Custom sitemap URLsangeo_robots_txt_aeo/sitemap/custom_urls—
Content-Usage Signals (8)
SettingConfig pathDefault
Emit IETF Content-Usage directiveangeo_robots_txt_aeo/content_signals/ietf_enabledNo
Content-Usage preferenceangeo_robots_txt_aeo/content_signals/ietf_preferencetrain-ai=n
Emit Cloudflare Content-Signal directiveangeo_robots_txt_aeo/content_signals/cloudflare_enabledNo
search — build a search index, show links/snippetsangeo_robots_txt_aeo/content_signals/cf_searchyes
ai-train — train or fine-tune AI modelsangeo_robots_txt_aeo/content_signals/cf_ai_trainno
ai-input — use as input to AI answers (RAG/grounding)angeo_robots_txt_aeo/content_signals/cf_ai_inputunset
Where to write the signalsangeo_robots_txt_aeo/content_signals/placementwildcard
Include the short policy explanationangeo_robots_txt_aeo/content_signals/policy_commentYes
Bot Verification (1)
SettingConfig pathDefault
Additional trusted signing originsangeo_robots_txt_aeo/verification/trusted_signature_agents—
Content Licensing (RSL) (2)
SettingConfig pathDefault
Emit RSL License directiveangeo_robots_txt_aeo/licensing/rsl_enabledNo
RSL license file URLangeo_robots_txt_aeo/licensing/rsl_license_url—

All settings work per store view. The Live Preview group shows the block that will be added.

FAQ

Will it overwrite my robots.txt?

No, not in Inject mode, which is the default. It adds its own block and keeps your rules, comments and order exactly as they are.

Should I block GPTBot or ClaudeBot?

That is a licensing choice. These bots collect pages for training. Blocking them does not remove you from AI search. Search bots such as OAI-SearchBot, PerplexityBot and Claude-SearchBot are the ones that get you cited.

Does it block fake bots?

No. It only reports if a bot is verified, failed, unknown or unsupported. Blocking belongs in your WAF or CDN.

Why is my change not visible on the live site?

If Varnish, Fastly or another CDN caches robots.txt, purge it after you change the settings.

Does it work with Hyvä?

Yes. robots.txt is built on the server, so the theme does not matter.

This page was written from the README.md, composer.json and etc/*.xml files of tag 4.0.1, read on 16 October 2026. Settings, commands and defaults come straight from that code. If a newer release is out, the README on GitHub wins.