# LLMs.txt & AEO Shopware — Komplettes Handbuch

> Überblick DataFirefly LLMs.txt & AEO ist ein Shopware 6.7 Plugin, das Ihren Shop für KI-Answer-Engines (ChatGPT, Claude, Perplexity, Gemini) sichtbar und verständlich macht. Es wirkt auf drei komplementären Ebenen: llms.txt…

- Seite: <https://www.datafirefly.com/de/documentation/df-llms-aeo/>
- Sprache: de
- Aktualisiert am: 2026-07-01
- Weitere Sprachen: [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), [it](https://www.datafirefly.com/it/documentation/df-llms-aeo/index.md), [pl](https://www.datafirefly.com/pl/documentation/df-llms-aeo/index.md), [nl](https://www.datafirefly.com/nl/documentation/df-llms-aeo/index.md), [pt](https://www.datafirefly.com/pt/documentation/df-llms-aeo/index.md)
- Index: <https://www.datafirefly.com/de/documentation/llms.txt>

## Überblick

DataFirefly LLMs.txt & AEO ist ein Shopware 6.7 Plugin, das Ihren Shop für KI-Answer-Engines (ChatGPT, Claude, Perplexity, Gemini) sichtbar und verständlich macht. Es wirkt auf drei komplementären Ebenen:

- **llms.txt / llms-full.txt** — zwei Dateien gemäß der [llmstxt.org](https://llmstxt.org)-Spezifikation, automatisch generiert im Root jedes Sales-Channels, in jeder aktiven Sprache.
- **Schema.org JSON-LD** — automatische Einbettung strukturierter Daten auf jeder Seite: Organization, angereichertes Product, BreadcrumbList, FAQPage, HowTo und Speakable.
- **KI-Crawler-Steuerung** — ein `/robots-ai.txt` Endpoint mit individueller Kontrolle über 9 Bots (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, Applebot-Extended, Bingbot, Meta-ExternalAgent, CCBot, cohere-ai).

**Voraussetzungen:** Shopware 6.7.0+, PHP 8.2+, MySQL 8.0+ oder MariaDB 10.6+. Das Plugin funktioniert mit dem Standard-Storefront und Custom Themes (Twig-Vererbung).

## Installation

### Via ZIP (empfohlen)

1. Laden Sie `DataFireflyLlmsAeo.zip` aus Ihrem Kundenkonto herunter.
2. Shopware Administration → **Erweiterungen → Meine Erweiterungen → Erweiterung hochladen**.
3. Klicken Sie auf **Installieren**, dann **Aktivieren**.
4. Cache leeren: **Einstellungen → System → Caches & Indizes**, oder via CLI:

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

### Via CLI

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

Bei der Aktivierung installiert das Plugin automatisch das Custom-Field-Set `datafirefly_aeo` auf Produkten, Kategorien, CMS-Seiten und Herstellern. Keine manuelle Migration erforderlich.

### Kompilierung der Administrations-Assets

Falls das Administrationsmodul nach der Aktivierung nicht unter Marketing erscheint:

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

## Konfiguration

Die Konfiguration befindet sich unter **Einstellungen → System → Erweiterungen → DataFirefly llms.txt & AEO**. Sie ist Sales-Channel-bezogen: Wählen Sie im oberen Selektor einen bestimmten Kanal, um die globalen Werte zu überschreiben.

### Karte „Allgemein"

- **Modul aktivieren** — globaler Schalter (pro Sales-Channel).
- **Website-Autor** — im llms.txt-Header verwendet.
- **Website-Beschreibung** — Header-Blockquote des llms.txt; beschreiben Sie Ihren Shop in 1-2 KI-orientierten Sätzen.
- **Cache-Lebensdauer** — TTL in Sekunden (Standard: 3600).

### Karte „llms.txt"

- **CMS-Seiten**, **Kategorien**, **Marken** und/oder **Produkte** einbeziehen.
- **Maximale Anzahl der Produkte** im Index.
- **Inaktive Produkte einbeziehen** — standardmäßig aus; in Produktion ausgeschaltet lassen.

### Karte „AEO & Schema.org"

- Individuelle Toggles: Organization, angereichertes Product, BreadcrumbList, FAQPage, HowTo, Speakable.
- **Logo und URL der Organisation** — überschreiben die Sales-Channel-Werte.
- **Telefon, Kontakt-E-Mail, Social-Profile** — speisen das Organization-Schema (`contactPoint`, `sameAs`).

### Karte „KI-Crawler"

Für jeden der 9 Bots drei Modi:

- **Erlaubt** — voller Zugriff (keine restriktive Direktive).
- **Abgelehnt** — `Disallow: /` für diesen Bot.
- **Selektiv** — `Disallow` auf den von Ihnen gelisteten Pfaden (einer pro Zeile, z. B. `/checkout/`, `/account/`).

Der Inhalt von `/robots-ai.txt` wird nicht automatisch in Ihre Haupt-`robots.txt` zusammengeführt. Kopieren Sie den Inhalt in Ihre robots.txt oder fügen Sie eine Server-Rewrite-Regel hinzu (siehe [robots.txt-Integration](#robots-integration)).

## Die drei Endpoints

| URL | Inhalt | Header |
| --- | --- | --- |
| `/llms.txt` | Synthetisches Inhaltsverzeichnis: Seiten, Kategorien, Marken, Produkte, Optional | `text/plain; charset=UTF-8`, `X-Robots-Tag: noindex`, Public Cache |
| `/llms-full.txt` | Vollinhalt: bereinigte Beschreibungen, SKU, EAN, Marke, gruppierte Eigenschaften, FAQ | ebenso |
| `/robots-ai.txt` | User-agent-Direktivenblock für die 9 KI-Crawler | ebenso |

Schnelle Überprüfung nach der Installation:

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

Jeder Sales-Channel stellt seine eigenen Dateien auf seiner eigenen Domain bereit, in jeder aktiven Sprache (lokalisierte URLs folgen der Domain-Konfiguration des Kanals).

## AEO Custom Fields

Das Set `datafirefly_aeo` ist auf **Produkten, Kategorien, CMS-Seiten und Herstellern** verfügbar, im Reiter Zusatzfelder jeder Entität.

| Feld | Typ | Verwendung |
| --- | --- | --- |
| `datafirefly_aeo_summary` | Text | 1-2-Satz-Zusammenfassung, im llms.txt anstelle der gekürzten Beschreibung verwendet |
| `datafirefly_aeo_faq` | JSON | Strukturierte FAQ, als FAQPage JSON-LD eingebettet |
| `datafirefly_aeo_howto` | JSON | Strukturiertes Tutorial, als HowTo JSON-LD eingebettet |
| `datafirefly_aeo_speakable` | Text | Kurzer Text für Sprachassistenten (30-40 sprechbare Wörter) |
| `datafirefly_aeo_exclude` | Boolean | Schließt die Entität aus llms.txt und llms-full.txt aus |

### Format des FAQ-Felds

```
[
  {
    "q": "Wie lange dauert die Lieferung?",
    "a": "Die Standardlieferung dauert 2 bis 4 Werktage."
  },
  {
    "q": "Wie lautet Ihre Rückgaberichtlinie?",
    "a": "Sie haben 30 Tage Zeit, ein unbenutztes Produkt zurückzugeben."
  }
]
```

### Format des HowTo-Felds

```
{
  "name": "So installieren Sie das Produkt",
  "totalTime": "PT15M",
  "steps": [
    { "name": "Vorbereitung", "text": "Packen Sie die Komponenten aus." },
    { "name": "Montage", "text": "Folgen Sie dem mitgelieferten Schema." },
    { "name": "Überprüfung", "text": "Testen Sie die Funktion." }
  ]
}
```

Shopware-Zusatzfelder sind übersetzbar: Füllen Sie die FAQ in jeder Sprache über den Sprachselektor der Produktseite aus. Das Plugin liest den Wert in der Sprache des Anfragekontexts.

## Strukturierte Schema.org-Daten

Das Plugin bettet JSON-LD in den `` ein, über das Template `storefront/layout/meta.html.twig` (Twig-Vererbung, kompatibel mit Custom Themes). Generierte Schemas:

- **Organization** — auf jeder Seite: Name, Logo, URL, `contactPoint`, `sameAs` (Social-Profile).
- **Angereichertes Product** — auf Produktseiten: `gtin13` (aus der EAN), `mpn`, `sku`, `brand` (Hersteller), `additionalProperty` (Eigenschaften gruppiert nach Eigenschaftsgruppen), `aggregateRating` (aus nativen Shopware-Bewertungen, falls vorhanden).
- **BreadcrumbList** — vollständiger Breadcrumb der aktuellen Seite.
- **FAQPage** — wenn das Feld `datafirefly_aeo_faq` auf der Entität der Seite gefüllt ist.
- **HowTo** — wenn das Feld `datafirefly_aeo_howto` gefüllt ist.
- **Speakable** — CSS-Selektoren `h1`, `.product-detail-name`, `.product-detail-description-text`, `.cms-element-text`, `[data-speakable]`, plus der Text des dedizierten Felds.

Empfohlene Validierung nach dem Go-Live:

- [Schema.org Validator](https://validator.schema.org/) — URL einer Produktseite einfügen.
- [Google Rich Results Test](https://search.google.com/test/rich-results).

## Administrationsmodul

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

- **Live-Vorschau** des llms.txt oder llms-full.txt in Monospace-Darstellung.
- **Sales-Channel-Selektor** — jeden Kanal unabhängig vorschauen.
- **Cache-Invalidierung** mit einem Klick (pro Kanal oder global).
- **Öffentliche URL öffnen** und **in die Zwischenablage kopieren**.

## CLI-Befehle und Automatisierung

### datafirefly:llms-txt:generate

```
# llms.txt eines Sales-Channels generieren (auf Standardausgabe)
bin/console datafirefly:llms-txt:generate --sales-channel=<id>

# Vollversion, in eine Datei geschrieben, ohne Cache
bin/console datafirefly:llms-txt:generate --sales-channel=<id> --full --output=/tmp/llms-full.txt --no-cache
```

### datafirefly:llms-txt:warm

```
# Cache für alle Sales-Channels x alle aktiven Sprachen vorwärmen
bin/console datafirefly:llms-txt:warm

# Regenerierung erzwingen, auch wenn der Cache noch gültig ist
bin/console datafirefly:llms-txt:warm --force

# Nur llms.txt vorwärmen (ohne llms-full.txt)
bin/console datafirefly:llms-txt:warm --skip-full
```

### Empfohlener Cron

```
# Tägliches Vorwärmen um 03:15 Uhr
15 3 * * * cd /var/www/shopware && php bin/console datafirefly:llms-txt:warm --quiet
```

Ein **Shopware Scheduled Task** wird ebenfalls bei der Aktivierung registriert: Wenn Ihr Messenger-Worker und der Scheduled Task Runner laufen, wärmt sich der Cache automatisch ohne System-Cron vor.

## robots.txt-Integration

Zwei Ansätze, um die KI-Direktiven in Ihrer Haupt-robots.txt bereitzustellen:

### Manuelle Kopie

Öffnen Sie `/robots-ai.txt`, kopieren Sie den generierten Block und fügen Sie ihn in Ihre bestehende robots.txt ein. Nach jeder Änderung der Bot-Konfiguration wiederholen.

### Server-Rewrite (empfohlen, wenn die robots.txt vollständig vom Plugin verwaltet wird)

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

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

Verwenden Sie das vollständige Rewrite nur, wenn Sie keine anderen robots.txt-Direktiven zu erhalten haben (Sitemap, bestehende SEO-Ausschlüsse). Im Zweifel bevorzugen Sie die manuelle Kopie des KI-Blocks.

## Cache und Performance

- **PSR-6**-Cache auf Shopwares `cache.object`-Pool, getaggt mit `datafirefly_llms_aeo`.
- Schlüssel bezogen auf **Sales-Channel + Sprache**: jede Kombination hat einen eigenen Eintrag.
- Konfigurierbare TTL (Standard 3600 s).
- Invalidierung: Admin-Button (pro Kanal oder global), Befehl `warm --force`, oder natürlicher Ablauf.
- Kompatibel mit Cluster-Cache (Redis): die tag-basierte Invalidierung funktioniert auf allen taggbaren Adaptern.

## Fehlerbehebung

### Die Endpoints liefern 404

1. Prüfen Sie, ob das Plugin **aktiviert** ist (nicht nur installiert).
2. Leeren Sie den HTTP-Cache und den Anwendungs-Cache: `bin/console cache:clear`.
3. Wenn Sie einen Reverse Proxy/CDN nutzen, purgen Sie diesen ebenfalls.

### Fehler „Attempted to call an undefined method named getHeader" auf Navigationsseiten

Bug behoben in **Version 1.0.1**: Auf einigen Shopware-6.7-Installationen stellt `NavigationPage` kein `getHeader()` bereit. Aktualisieren Sie auf 1.0.1 (defensive Extraktion der aktiven Kategorie). Falls Sie bereits auf 1.0.1 sind und den Fehler weiterhin sehen, leeren Sie den PHP-Opcode-Cache (`opcache_reset` oder PHP-FPM-Neustart).

### Das Admin-Modul erscheint nicht unter Marketing

Kompilieren Sie die Administrations-Assets (siehe [Installation](#installation-assets)) und erzwingen Sie einen Browser-Reload (Strg+Umschalt+R).

### Die llms.txt ist leer oder unvollständig

1. Prüfen Sie die Einbeziehungs-Toggles (CMS-Seiten / Kategorien / Marken / Produkte) in der Karte „llms.txt".
2. Prüfen Sie, dass das Produktlimit nicht auf 0 steht.
3. Kontrollieren Sie das Feld `datafirefly_aeo_exclude` auf den fehlenden Entitäten.
4. Invalidieren Sie den Cache und laden Sie neu.

### Das JSON-LD erscheint nicht im Quellcode

1. Prüfen Sie, dass „Modul aktivieren" und die Schema.org-Toggles für den richtigen Sales-Channel aktiv sind.
2. Wenn Ihr Theme `storefront/layout/meta.html.twig` ohne `{{ parent() }}` auf dem betroffenen Block überschreibt, geht die Einbettung verloren: stellen Sie den Parent-Aufruf wieder her.

## Changelog

### 1.0.1 — 2026-05-21

- Fix: defensive Extraktion der aktiven Kategorie auf Navigationsseiten (`getHeader()`-Fehler auf einigen 6.7-Installationen).

### 1.0.0 — 2026-05-21

- Erste Version: llms.txt + llms-full.txt, 6 JSON-LD-Schemas, robots-ai.txt (9 Bots), AEO Custom Fields, Vue 3 Admin-Modul, 2 CLI-Befehle, Scheduled Task, Snippets FR/EN/DE.
