PHPackages                             angeo/module-llms-txt - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. angeo/module-llms-txt

ActiveMagento2-module[Utility &amp; Helpers](/categories/utility)

angeo/module-llms-txt
=====================

Magento 2 module for AI Engine Optimization (AEO). Generates spec-compliant llms.txt and llms-full.txt per llmstxt.org standard, plus streaming JSONL for vector indexing. Multi-store, multi-website, CLI, cron, async admin UI, Page Builder-aware sanitization, customer-group pricing, atomic writes, ETag/Cache-Control, .md mirrors.

3.0.0(3w ago)1203↑333.3%4MITPHPPHP ~8.2.0||~8.3.0||~8.4.0

Since Mar 18Pushed 2w agoCompare

[ Source](https://github.com/angeo-dev/module-llms-txt)[ Packagist](https://packagist.org/packages/angeo/module-llms-txt)[ Docs](https://angeo.dev/)[ RSS](/packages/angeo-module-llms-txt/feed)WikiDiscussions main Synced 3w ago

READMEChangelogDependencies (19)Versions (10)Used By (0)

Angeo LLMs.txt — Magento 2 Module
=================================

[](#angeo-llmstxt--magento-2-module)

**AI Engine Optimization (AEO) for Magento 2 / Adobe Commerce.** Generates spec-compliant `llms.txt`, `llms-full.txt`, and JSONL files so ChatGPT, Claude, Gemini, Perplexity, and other LLM-powered crawlers can ingest your catalog efficiently.

![Magento](https://camo.githubusercontent.com/03ffff62f4f10a09e1af799ace5335ffcdfd62a57acbd810f6631a4216196122/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d6167656e746f2d322e342e372532422d6f72616e6765)![PHP](https://camo.githubusercontent.com/50b13d3d01778282febe11a92c7166976ae637e4ee8ffe64bce210549ed5e096/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e32253230253743253230382e33253230253743253230382e342d626c7565)![License](https://camo.githubusercontent.com/f8df3091bbe1149f398a5369b2c39e896766f9f6efba3477c63e9b4aa940ef14/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e)

---

What this module does
---------------------

[](#what-this-module-does)

After install, your storefront serves:

URLWhat it is`https://shop/llms.txt`Spec-compliant llmstxt.org file (compact markdown)`https://shop/llms-full.txt`Same structure, full sanitized descriptions inline`https://shop/llms.jsonl`One JSON record per line, for vector indexing`https://shop/{url-key}.md`On-the-fly Markdown mirror of any product/category/CMS pageGeneration happens via cron (daily by default), CLI, or the admin "Generate Now" button. The output is streamed to disk with bounded memory, atomically renamed on completion, and served with proper `ETag` / `Cache-Control` headers.

---

Why this module exists
----------------------

[](#why-this-module-exists)

LLM crawlers can ingest a typical Magento storefront — full theme, JS, image sprites, navigation chrome — but that's wasteful for everyone. The [llmstxt.org](https://llmstxt.org) standard defines a clean text format optimized for AI ingestion: stable links, structured headings, descriptions in their natural prose form rather than buried in product cards.

This module produces that format for Magento, with care taken for the things Magento makes hard: multi-store layout, Page Builder content, CMS directive resolution, customer-group pricing, and very large catalogs.

---

Installation
------------

[](#installation)

```
composer require angeo/module-llms-txt:^3.0
bin/magento module:enable Angeo_LlmsTxt
bin/magento setup:upgrade
bin/magento setup:di:compile      # only in production mode
bin/magento setup:static-content:deploy adminhtml   # only in production mode
bin/magento cache:flush
```

Then generate your first batch:

```
bin/magento angeo:llms:generate
```

Visit `https://your-store.tld/llms.txt`.

---

Configuration reference
-----------------------

[](#configuration-reference)

All settings live at **Stores → Configuration → Angeo → LLMs.txt**.

### General

[](#general)

FieldDefaultNotes**Enable**YesMaster switch.**Exclude This Scope**NoAvailable at website + store scope. Skips generation for this scope.**Store Summary**—One-line summary used as the spec-compliant blockquote. If empty, falls back to *Design → HTML Head → Default Description*.### Content

[](#content)

FieldDefaultNotes**Include Categories**Yes**Include CMS Pages**Yes**Include Products**Yes**Products under `## Optional`**YesRecommended. Lets context-budget-constrained AI clients drop products without losing categories / pages.**Product Limit**50000 = unlimited.**Exclude Out-of-Stock Products**No**CMS Identifiers to Exclude**`no-route, enable-cookies, privacy-policy-cookie-restriction-mode`Comma- or newline-separated.**Customer Group for Pricing**NOT LOGGED INWhich group's final price (with special / group prices) is exposed.### Output formats

[](#output-formats)

FieldDefaultNotes**Generate llms.txt**Yes**Generate llms-full.txt**No5–50× larger; enable only if you actually want it.**Generate JSONL**YesOne record per line; embeds-ready.**Serve `/url-key.md` Mirrors**NoPer-entity Markdown rendering; on-the-fly, no disk.### Content sanitization

[](#content-sanitization)

FieldDefaultNotes**Resolve CMS Directives**YesRenders `{{widget}}`, `{{block}}`, `{{var}}` via Magento's frontend filter.**Page Builder Strategy**ExcludeSee below.**Excluded Content-Types**`products, banner, slider, slide, video, map, buttons, button-item, block, dynamic-block, divider, spacer`Used under *Exclude* strategy.**Allowed Content-Types**`text, heading, html, tabs, tab-item, row, column, column-group`Used under *Allow* strategy.#### Page Builder strategies

[](#page-builder-strategies)

StrategyEffect**Preserve**Keep all Page Builder content; only strip wrapper attributes.**Exclude**Drop elements whose `data-content-type` is in the excluded list. **Default.****Allow**Drop everything EXCEPT `data-content-type` in the allowed list.**Strip**Drop ALL elements that carry a `data-content-type` attribute.The filter parses content with `DOMDocument` (not regex), so nested Page Builder containers are handled correctly. Known content-types include: `row`, `column-group`, `column`, `tabs`, `tab-item`, `text`, `heading`, `html`, `image`, `video`, `map`, `divider`, `spacer`, `buttons`, `button-item`, `banner`, `slider`, `slide`, `products`, `block`, `dynamic-block`.

### Performance

[](#performance)

FieldDefaultNotes**Collection Page Size**1000Lower if hitting memory limits on shared hosting.### HTTP caching

[](#http-caching)

FieldDefaultNotes**Cache-Control TTL (s)**3600Sent as `public, max-age=…` on the served files.### Cron

[](#cron)

FieldDefaultNotes**Cron Expression**`0 2 * * *`Daily at 02:00 server time.---

CLI commands
------------

[](#cli-commands)

```
# Generate everything for all eligible stores
bin/magento angeo:llms:generate

# Single store, skip JSONL
bin/magento angeo:llms:generate --store=default --no-jsonl

# Per-store/per-format last-run status
bin/magento angeo:llms:status

# Lint generated files for spec compliance
bin/magento angeo:llms:validate
```

---

Extending — custom providers
----------------------------

[](#extending--custom-providers)

Drop a new section into `llms.txt` (e.g. a "Brands" list, a "Recent Posts" section, etc.) by implementing `Angeo\LlmsTxt\Api\ProviderInterface` and registering it via `di.xml`.

```
namespace Vendor\Module\Provider\Llms;

use Angeo\LlmsTxt\Api\OutputContextInterface;
use Angeo\LlmsTxt\Model\Provider\AbstractProvider;

class BrandsProvider extends AbstractProvider
{
    public function provide(OutputContextInterface $context): iterable
    {
        yield "## Brands\n\n";
        foreach ($this->brandRepo->getList($context->getStore()->getId()) as $brand) {
            $label = $this->escapeMarkdown($brand->getName());
            yield "- [{$label}]({$brand->getUrl()})\n";
        }
        yield "\n";
    }
}
```

```

            Vendor\Module\Provider\Llms\BrandsProvider

```

The base class gives you `escapeMarkdown()`, `encodeJsonl()`, `isJsonl()`, `isFullTxt()`, and `isApplicable()` overridable to opt out per-format.

---

Extending — custom sanitizer filters
------------------------------------

[](#extending--custom-sanitizer-filters)

Insert your own filter between Page Builder and HTML stripping (e.g. to remove `` data attributes, redact phone numbers, etc.) by implementing `Angeo\LlmsTxt\Api\SanitizerFilterInterface` and re-declaring the pipeline in `di.xml`.

```

            Angeo\LlmsTxt\Model\Sanitizer\Filter\CmsDirectiveFilter
            Angeo\LlmsTxt\Model\Sanitizer\Filter\PageBuilderFilter
            Vendor\Module\Sanitizer\Filter\PiiRedactionFilter
            Angeo\LlmsTxt\Model\Sanitizer\Filter\HtmlFilter
            Angeo\LlmsTxt\Model\Sanitizer\Filter\WhitespaceFilter

```

---

Events
------

[](#events)

Hook in via observers — three events are dispatched per store/format pass:

EventData`angeo_llms_generation_before``store`, `format`, `context``angeo_llms_generation_after``store`, `format`, `file`, `bytes`, `items`, `duration``angeo_llms_generation_failed``store`, `format`, `error`---

Migrating from 2.x
------------------

[](#migrating-from-2x)

- Old files in `media/llms/` can be deleted (output now lives in `media/angeo/llms/`).
- Any custom `ProviderInterface` implementations must change from returning a `string` to yielding `iterable`. See *Extending — custom providers*.
- Drop any reverse-proxy / Nginx rewrites pointing at the old paths.
- Re-run *Stores → Configuration → Angeo → LLMs.txt* to set the new fields (Page Builder strategy, customer group, etc.).
- External tooling that called the GET `/admin/angeo_llms/generate/index` URL must switch to the CLI command (the admin endpoint is now POST + CSRF).

---

License
-------

[](#license)

MIT — see [LICENSE](./LICENSE).

Support
-------

[](#support)

- GitHub Issues:
- Email:

###  Health Score

48

—

FairBetter than 94% of packages

Maintenance95

Actively maintained with recent releases

Popularity20

Limited adoption so far

Community5

Small or concentrated contributor base

Maturity57

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~9 days

Total

9

Last Release

25d ago

Major Versions

1.1.2 → 2.0.02026-04-16

2.1.4 → 3.0.02026-05-29

PHP version history (3 changes)2.0.0PHP &gt;=8.2

2.1.0PHP &gt;=8.1

3.0.0PHP ~8.2.0||~8.3.0||~8.4.0

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/557748?v=4)[angeo](/maintainers/angeo)[@angeo](https://github.com/angeo)

---

Tags

aeoai-searchllms-txtmagentomagento2perplexityGeminiclaudemagento2ChatGptperplexitypage buildermagento moduleangeoaeollms.txtai-commerceai-searchllms-full.txt

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/angeo-module-llms-txt/health.svg)

```
[![Health](https://phpackages.com/badges/angeo-module-llms-txt/health.svg)](https://phpackages.com/packages/angeo-module-llms-txt)
```

###  Alternatives

[run-as-root/magento2-prometheus-exporter

Magento2 Prometheus Exporter

68353.9k](/packages/run-as-root-magento2-prometheus-exporter)[mollie/magento2

Mollie Payment Module for Magento 2

1121.8M12](/packages/mollie-magento2)[loki/magento2-components

Core module for defining Alpine.js components with advanced AJAX features

1010.0k22](/packages/loki-magento2-components)[mage-os/module-inventory-reservations-grid

Add a grid with the list of inventory reservations.

1512.6k](/packages/mage-os-module-inventory-reservations-grid)[dotdigital/dotdigital-magento2-extension

Dotdigital for Magento 2

50390.4k20](/packages/dotdigital-dotdigital-magento2-extension)[opengento/module-category-import-export

This module add the capability to import and export the categories from the back-office.

1310.2k1](/packages/opengento-module-category-import-export)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
