# LLMs.txt en AEO voor Shopware: complete gids

> Overzicht DataFirefly LLMs.txt & AEO is een Shopware 6.7-plugin die uw shop zichtbaar en begrijpelijk maakt voor AI-antwoordmachines (ChatGPT, Claude, Perplexity, Gemini). Hij werkt op drie complementaire vlakken: llms.txt /…

- Pagina: <https://www.datafirefly.com/nl/documentation/df-llms-aeo/>
- Taal: nl
- Bijgewerkt op: 2026-08-19
- Andere talen: [fr](https://www.datafirefly.com/documentation/df-llms-aeo/index.md), [en](https://www.datafirefly.com/en/documentation/df-llms-aeo/index.md), [es](https://www.datafirefly.com/es/documentation/df-llms-aeo/index.md), [de](https://www.datafirefly.com/de/documentation/df-llms-aeo/index.md), [it](https://www.datafirefly.com/it/documentation/df-llms-aeo/index.md), [pl](https://www.datafirefly.com/pl/documentation/df-llms-aeo/index.md), [pt](https://www.datafirefly.com/pt/documentation/df-llms-aeo/index.md)
- Index: <https://www.datafirefly.com/nl/documentation/llms.txt>

## Overzicht

DataFirefly LLMs.txt & AEO is een Shopware 6.7-plugin die uw shop zichtbaar en begrijpelijk maakt voor AI-antwoordmachines (ChatGPT, Claude, Perplexity, Gemini). Hij werkt op drie complementaire vlakken:

- **llms.txt / llms-full.txt**: twee bestanden conform de specificatie [llmstxt.org](https://llmstxt.org), automatisch gegenereerd in de wortel van elk sales channel, in elke actieve taal.
- **Schema.org JSON-LD**: automatische invoeging van gestructureerde gegevens op alle pagina's: Organization, verrijkte Product, BreadcrumbList, FAQPage, HowTo en Speakable.
- **Aansturing van AI-crawlers**: een endpoint `/robots-ai.txt` met individuele controle over 9 bots (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, Applebot-Extended, Bingbot, Meta-ExternalAgent, CCBot, cohere-ai).

**Vereisten:** Shopware 6.7.0+, PHP 8.2+, MySQL 8.0+ of MariaDB 10.6+. De plugin werkt op de standaard storefront en op aangepaste thema's (Twig-overerving).

## Installatie

### Via ZIP (aanbevolen)

1. Download `DataFireflyLlmsAeo.zip` vanuit uw klantaccount.
2. Shopware-administration → **Extensies → Mijn extensies → Extensie uploaden**.
3. Klik op **Installeren** en daarna op **Activeren**.
4. Leeg de cache: **Instellingen → Systeem → Cache en index**, of via de CLI:

```
bin/console cache:clear
```

### Via de CLI

```
unzip DataFireflyLlmsAeo.zip -d custom/plugins/
bin/console plugin:refresh
bin/console plugin:install --activate DataFireflyLlmsAeo
bin/console cache:clear
```

Bij de activering installeert de plugin automatisch de set aangepaste velden `datafirefly_aeo` op producten, categorieën, CMS-pagina's en fabrikanten. Er is geen handmatige migratie nodig.

### Compilatie van de administratie-assets

Als de administratiemodule na de activering niet onder Marketing verschijnt:

```
bin/console bundle:dump
./bin/build-administration.sh
bin/console cache:clear
```

## Configuratie

De configuratie staat onder **Instellingen → Systeem → Extensies → DataFirefly llms.txt & AEO**. Ze is per sales channel in te stellen: kies bovenaan een specifiek kanaal in de kiezer om de globale waarden te overschrijven.

### Kaart "Algemeen"

- **Module activeren**: globale schakelaar (per sales channel).
- **Auteur van de site**: gebruikt in de koptekst van het llms.txt.
- **Beschrijving van de site**: blockquote in de koptekst van het llms.txt; beschrijf uw shop in 1 tot 2 zinnen, gericht op AI.
- **Cacheduur**: TTL in seconden (standaard 3600).

### Kaart "llms.txt"

- **CMS-pagina's**, **categorieën**, **merken** en/of **producten** opnemen.
- **Maximum aantal producten** in de index.
- **Inactieve producten opnemen**: standaard uitgeschakeld, laat dit in productie uit staan.

### Kaart "AEO en Schema.org"

- Afzonderlijke schakelaars: Organization, verrijkte Product, BreadcrumbList, FAQPage, HowTo, Speakable.
- **Logo en URL van de organisatie**: overschrijven de waarden van het sales channel.
- **Telefoon, contact-e-mail, sociale profielen**: voeden het Organization-schema (`contactPoint`, `sameAs`).

### Kaart "AI-crawlers"

Voor elk van de 9 bots zijn er drie modi:

- **Toegestaan**: volledige toegang (geen beperkende richtlijn).
- **Geweigerd**: `Disallow: /` voor die bot.
- **Selectief**: `Disallow` op de paden die u opsomt (één per regel, bijvoorbeeld `/checkout/`, `/account/`).

De inhoud van `/robots-ai.txt` wordt niet automatisch samengevoegd met uw hoofdbestand `robots.txt`. Kopieer de inhoud ervan in uw robots.txt, of voeg een herschrijfregel op de server toe (zie het hoofdstuk [Integratie met robots.txt](#robots-integration)).

## De drie endpoints

| URL | Inhoud | Headers |
| --- | --- | --- |
| `/llms.txt` | Beknopte index: pagina's, categorieën, merken, producten, Optional | `text/plain; charset=UTF-8`, `X-Robots-Tag: noindex`, publieke cache |
| `/llms-full.txt` | Volledige inhoud: opgeschoonde beschrijvingen, SKU, EAN, merk, gegroepeerde kenmerken, FAQ | idem |
| `/robots-ai.txt` | Blok met User-agent-richtlijnen voor de 9 AI-crawlers | idem |

Snelle controle na de installatie:

```
curl -I https://uw-shop.tld/llms.txt
curl -I https://uw-shop.tld/llms-full.txt
curl -I https://uw-shop.tld/robots-ai.txt
```

Elk sales channel biedt zijn eigen bestanden aan op zijn eigen domein, in elke actieve taal (de gelokaliseerde URL's volgen de domeinconfiguratie van het kanaal).

## Aangepaste AEO-velden

De set `datafirefly_aeo` is beschikbaar op **producten, categorieën, CMS-pagina's en fabrikanten**, op het tabblad Aangepaste velden van elke entiteit.

| Veld | Type | Gebruik |
| --- | --- | --- |
| `datafirefly_aeo_summary` | Tekst | Samenvatting van 1 tot 2 zinnen die in het llms.txt de afgekapte beschrijving vervangt |
| `datafirefly_aeo_faq` | JSON | Gestructureerde FAQ, ingevoegd als FAQPage JSON-LD |
| `datafirefly_aeo_howto` | JSON | Gestructureerde handleiding, ingevoegd als HowTo JSON-LD |
| `datafirefly_aeo_speakable` | Tekst | Korte tekst voor spraakassistenten (30 tot 40 uitspreekbare woorden) |
| `datafirefly_aeo_exclude` | Boolean | Sluit de entiteit uit van het llms.txt en het llms-full.txt |

### Formaat van het FAQ-veld

```
[
  {
    "q": "Hoe lang duurt de levering?",
    "a": "Standaardlevering duurt 2 tot 4 werkdagen in Nederland en België."
  },
  {
    "q": "Wat is uw retourbeleid?",
    "a": "U hebt 30 dagen om een ongebruikt product terug te sturen."
  }
]
```

### Formaat van het HowTo-veld

```
{
  "name": "Hoe u het product installeert",
  "totalTime": "PT15M",
  "steps": [
    { "name": "Voorbereiding", "text": "Pak de onderdelen uit." },
    { "name": "Montage", "text": "Volg het meegeleverde schema." },
    { "name": "Controle", "text": "Test de werking." }
  ]
}
```

Aangepaste velden van Shopware zijn vertaalbaar: vul de FAQ in elke taal in via de taalkiezer van de productkaart. De plugin leest de waarde in de taal van de aanvraagcontext.

## Gestructureerde gegevens Schema.org

De plugin voegt JSON-LD in de head-tag in via het template `storefront/layout/meta.html.twig` (Twig-overerving, compatibel met aangepaste thema's). Gegenereerde schema's:

- **Organization**: op alle pagina's: naam, logo, URL, `contactPoint`, `sameAs` (sociale profielen).
- **Verrijkte Product**: op de productpagina's: `gtin13` (uit de EAN), `mpn`, `sku`, `brand` (fabrikant), `additionalProperty` (kenmerken gegroepeerd per eigenschappengroep), `aggregateRating` (uit de native reviews van Shopware indien aanwezig).
- **BreadcrumbList**: volledig kruimelpad van de huidige pagina.
- **FAQPage**: als het veld `datafirefly_aeo_faq` op de entiteit van de pagina is ingevuld.
- **HowTo**: als het veld `datafirefly_aeo_howto` is ingevuld.
- **Speakable**: CSS-selectors `h1`, `.product-detail-name`, `.product-detail-description-text`, `.cms-element-text`, `[data-speakable]`, plus de tekst uit het specifieke veld.

Aanbevolen validatie na de livegang:

- [Schema.org Validator](https://validator.schema.org/): plak de URL van een productpagina.
- [Google Rich Results Test](https://search.google.com/test/rich-results).

## Administratiemodule

Onder **Marketing → DataFirefly llms.txt & AEO**:

- **Live voorbeeld** van het llms.txt of het llms-full.txt, met monospace-weergave.
- **Sales channel-kiezer**: bekijk elk kanaal afzonderlijk.
- **Cache ongeldig maken** met één klik (per kanaal of globaal).
- **De publieke URL openen** en **naar het klembord kopiëren**.

## CLI-commando's en automatisering

### datafirefly:llms-txt:generate

```
# Het llms.txt van een sales channel genereren (weergegeven op de standaarduitvoer)
bin/console datafirefly:llms-txt:generate --sales-channel=<id>

# Volledige versie, weggeschreven naar een bestand, zonder de cache te gebruiken
bin/console datafirefly:llms-txt:generate --sales-channel=<id> --full --output=/tmp/llms-full.txt --no-cache
```

### datafirefly:llms-txt:warm

```
# De cache van alle sales channels maal alle actieve talen opwarmen
bin/console datafirefly:llms-txt:warm

# Hergeneratie forceren, ook als de cache nog geldig is
bin/console datafirefly:llms-txt:warm --force

# Alleen het llms.txt opwarmen (zonder het llms-full.txt)
bin/console datafirefly:llms-txt:warm --skip-full
```

### Aanbevolen cron

```
# Dagelijkse opwarming om 03.15 uur
15 3 * * * cd /var/www/shopware && php bin/console datafirefly:llms-txt:warm --quiet
```

Bij de activering wordt ook een **geplande taak van Shopware** geregistreerd: als uw Messenger-worker en de scheduled task runner draaien, warmt de cache automatisch op zonder systeemcron.

## Integratie met robots.txt

Er zijn twee manieren om de AI-richtlijnen in uw hoofdbestand robots.txt beschikbaar te stellen:

### Handmatig kopiëren

Open `/robots-ai.txt`, kopieer het gegenereerde blok en plak het in uw bestaande robots.txt. Herhaal dit na elke wijziging van de botconfiguratie.

### Herschrijving op de server (aanbevolen als robots.txt volledig door de plugin wordt beheerd)

```
# nginx
location = /robots.txt {
    rewrite ^ /robots-ai.txt last;
}

# Apache (.htaccess)
RewriteRule ^robots.txt$ /robots-ai.txt [L]
```

Gebruik de volledige herschrijving alleen als u geen andere richtlijnen in robots.txt hoeft te behouden (sitemap, bestaande SEO-uitsluitingen). Kies bij twijfel voor het handmatig kopiëren van het AI-blok.

## Cache en prestaties

- **PSR-6**-cache op de pool `cache.object` van Shopware, getagd met `datafirefly_llms_aeo`.
- Sleutels per **sales channel en taal**: elke combinatie heeft haar eigen invoer.
- Instelbare TTL (standaard 3600 s).
- Ongeldig maken: knop in de admin (per kanaal of globaal), commando `warm --force`, of natuurlijke vervaltijd.
- Compatibel met een geclusterde cache (Redis): het ongeldig maken op tags werkt op alle adapters die tags ondersteunen.

## Probleemoplossing

### De endpoints geven een 404 terug

1. Controleer of de plugin daadwerkelijk **geactiveerd** is (niet alleen geïnstalleerd).
2. Leeg de HTTP-cache en de applicatiecache: `bin/console cache:clear`.
3. Gebruikt u een reverse proxy of CDN, leeg die dan ook.

### Fout "Attempted to call an undefined method named getHeader" op de navigatiepagina's

Bug opgelost in **versie 1.0.1**: op sommige Shopware 6.7-installaties biedt `NavigationPage` geen `getHeader()`. Werk bij naar 1.0.1 (defensieve extractie van de actieve categorie). Als u al op 1.0.1 zit en de fout blijft optreden, leeg dan de PHP-opcodecache (`opcache_reset` of PHP-FPM herstarten).

### De adminmodule verschijnt niet onder Marketing

Compileer de administratie-assets (zie [Installatie](#installation-assets)) en forceer daarna het herladen van de browser (Ctrl+Shift+R).

### Het llms.txt is leeg of onvolledig

1. Controleer de schakelaars voor het opnemen van CMS-pagina's, categorieën, merken en producten in de kaart "llms.txt".
2. Controleer of de productlimiet niet op 0 staat.
3. Controleer het veld `datafirefly_aeo_exclude` op de ontbrekende entiteiten.
4. Maak de cache ongeldig en herlaad daarna.

### De JSON-LD verschijnt niet in de broncode

1. Controleer of "Module activeren" en de Schema.org-schakelaars actief zijn voor het juiste sales channel.
2. Als uw thema `storefront/layout/meta.html.twig` overschrijft zonder `{{ parent() }}` op het betreffende block, gaat de invoeging verloren: herstel de aanroep van de parent.

## Changelog

### 1.0.1, 21-05-2026

- Correctie: defensieve extractie van de actieve categorie op de navigatiepagina's (fout `getHeader()` op sommige 6.7-installaties).

### 1.0.0, 21-05-2026

- Eerste versie: llms.txt en llms-full.txt, 6 JSON-LD-schema's, robots-ai.txt (9 bots), aangepaste AEO-velden, adminmodule in Vue 3, 2 CLI-commando's, geplande taak, snippets FR/EN/DE.
