LLMs.txt & AEO Shopware — Komplettes Handbuch
LLMs.txt & AEO installieren, konfigurieren und betreiben: Endpoints llms.txt / llms-full.txt / robots-ai.txt, strukturierte Schema.org-Daten (FAQPage, HowTo, Speakable, angereichertes Product), AEO Custom Fields, CLI und PSR-6-Cache für Shopware 6.7.
Ü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-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.txtEndpoint 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)
- Laden Sie
DataFireflyLlmsAeo.zipaus Ihrem Kundenkonto herunter. - Shopware Administration → Erweiterungen → Meine Erweiterungen → Erweiterung hochladen.
- Klicken Sie auf Installieren, dann Aktivieren.
- 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 —
Disallowauf 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).
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 <head> 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_faqauf der Entität der Seite gefüllt ist. - HowTo — wenn das Feld
datafirefly_aeo_howtogefü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 — URL einer Produktseite einfügen.
- Google Rich Results Test.
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 mitdatafirefly_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
- Prüfen Sie, ob das Plugin aktiviert ist (nicht nur installiert).
- Leeren Sie den HTTP-Cache und den Anwendungs-Cache:
bin/console cache:clear. - 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) und erzwingen Sie einen Browser-Reload (Strg+Umschalt+R).
Die llms.txt ist leer oder unvollständig
- Prüfen Sie die Einbeziehungs-Toggles (CMS-Seiten / Kategorien / Marken / Produkte) in der Karte „llms.txt“.
- Prüfen Sie, dass das Produktlimit nicht auf 0 steht.
- Kontrollieren Sie das Feld
datafirefly_aeo_excludeauf den fehlenden Entitäten. - Invalidieren Sie den Cache und laden Sie neu.
Das JSON-LD erscheint nicht im Quellcode
- Prüfen Sie, dass „Modul aktivieren“ und die Schema.org-Toggles für den richtigen Sales-Channel aktiv sind.
- Wenn Ihr Theme
storefront/layout/meta.html.twigohne{{ 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.