LLMs.txt & AEO Shopware — Guide complet
Installer, configurer et exploiter LLMs.txt & AEO : endpoints llms.txt / llms-full.txt / robots-ai.txt, données structurées Schema.org (FAQPage, HowTo, Speakable, Product enrichi), champs personnalisés AEO, CLI et cache PSR-6 pour Shopware 6.7.
Présentation
DataFirefly LLMs.txt & AEO est un plugin Shopware 6.7 qui rend votre boutique visible et compréhensible par les moteurs de réponse IA (ChatGPT, Claude, Perplexity, Gemini). Il agit sur trois plans complémentaires :
- llms.txt / llms-full.txt — deux fichiers conformes à la spécification llmstxt.org, générés automatiquement à la racine de chaque sales-channel, dans chaque langue active.
- Schema.org JSON-LD — injection automatique de données structurées sur toutes les pages : Organization, Product enrichi, BreadcrumbList, FAQPage, HowTo et Speakable.
- Pilotage des crawlers IA — un endpoint
/robots-ai.txtavec contrôle individuel de 9 bots (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, Applebot-Extended, Bingbot, Meta-ExternalAgent, CCBot, cohere-ai).
Prérequis : Shopware 6.7.0+, PHP 8.2+, MySQL 8.0+ ou MariaDB 10.6+. Le plugin fonctionne sur le storefront standard et les thèmes personnalisés (héritage Twig).
Installation
Via ZIP (recommandé)
- Téléchargez
DataFireflyLlmsAeo.zipdepuis votre compte client. - Administration Shopware → Extensions → Mes extensions → Téléverser une extension.
- Cliquez sur Installer, puis Activer.
- Videz le cache : Paramètres → Système → Cache & index, ou en 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
À l’activation, le plugin installe automatiquement le set de champs personnalisés datafirefly_aeo sur les produits, catégories, pages CMS et fabricants. Aucune migration manuelle n’est nécessaire.
Compilation des assets administration
Si le module d’administration n’apparaît pas sous Marketing après activation :
bin/console bundle:dump
./bin/build-administration.sh
bin/console cache:clear
Configuration
La configuration se trouve dans Paramètres → Système → Extensions → DataFirefly llms.txt & AEO. Elle est scopée par sales-channel : sélectionnez un canal spécifique dans le sélecteur en haut pour surcharger les valeurs globales.
Carte « Général »
- Activer le module — interrupteur global (par sales-channel).
- Auteur du site — utilisé dans l’en-tête du llms.txt.
- Description du site — blockquote d’en-tête du llms.txt ; décrivez votre boutique en 1-2 phrases orientées IA.
- Durée du cache — TTL en secondes (défaut : 3600).
Carte « llms.txt »
- Inclure les pages CMS, catégories, marques et/ou produits.
- Nombre maximum de produits listés dans l’index.
- Inclure les produits inactifs — désactivé par défaut, à laisser désactivé en production.
Carte « AEO & Schema.org »
- Toggles individuels : Organization, Product enrichi, BreadcrumbList, FAQPage, HowTo, Speakable.
- Logo et URL de l’organisation — surchargent les valeurs du sales-channel.
- Téléphone, email de contact, profils sociaux — alimentent le schéma Organization (
contactPoint,sameAs).
Carte « Crawlers IA »
Pour chacun des 9 bots, trois modes :
- Autorisé — accès complet (aucune directive restrictive).
- Refusé —
Disallow: /pour ce bot. - Sélectif —
Disallowsur les chemins que vous listez (un par ligne, ex./checkout/,/account/).
Le contenu de /robots-ai.txt n’est pas fusionné automatiquement dans votre robots.txt principal. Copiez son contenu dans votre robots.txt, ou ajoutez une règle de réécriture serveur (voir la section Intégration robots.txt).
Les trois endpoints
| URL | Contenu | En-têtes |
|---|---|---|
/llms.txt |
Index synthétique : Pages, Catégories, Marques, Produits, Optional | text/plain; charset=UTF-8, X-Robots-Tag: noindex, cache public |
/llms-full.txt |
Contenu intégral : descriptions nettoyées, SKU, EAN, marque, caractéristiques groupées, FAQ | idem |
/robots-ai.txt |
Bloc de directives User-agent pour les 9 crawlers IA | idem |
Vérification rapide après installation :
curl -I https://votre-boutique.tld/llms.txt
curl -I https://votre-boutique.tld/llms-full.txt
curl -I https://votre-boutique.tld/robots-ai.txt
Chaque sales-channel expose ses propres fichiers sur son propre domaine, dans chaque langue active (les URL localisées suivent la configuration de domaine du canal).
Champs personnalisés AEO
Le set datafirefly_aeo est disponible sur les produits, catégories, pages CMS et fabricants, dans l’onglet Champs personnalisés de chaque entité.
| Champ | Type | Usage |
|---|---|---|
datafirefly_aeo_summary |
Texte | Résumé 1-2 phrases utilisé dans le llms.txt à la place de la description tronquée |
datafirefly_aeo_faq |
JSON | FAQ structurée, injectée en FAQPage JSON-LD |
datafirefly_aeo_howto |
JSON | Tutoriel structuré, injecté en HowTo JSON-LD |
datafirefly_aeo_speakable |
Texte | Texte court pour assistants vocaux (30-40 mots énonçables) |
datafirefly_aeo_exclude |
Booléen | Exclut l’entité du llms.txt et du llms-full.txt |
Format du champ FAQ
[
{
"q": "Combien de temps dure la livraison ?",
"a": "La livraison standard prend 2 à 4 jours ouvrés en France métropolitaine."
},
{
"q": "Quelle est votre politique de retour ?",
"a": "Vous disposez de 30 jours pour retourner un produit non utilisé."
}
]
Format du champ HowTo
{
"name": "Comment installer le produit",
"totalTime": "PT15M",
"steps": [
{ "name": "Préparation", "text": "Déballez les composants." },
{ "name": "Montage", "text": "Suivez le schéma fourni." },
{ "name": "Vérification", "text": "Testez le fonctionnement." }
]
}
Les champs personnalisés Shopware sont traduisibles : renseignez la FAQ dans chaque langue via le sélecteur de langue de la fiche produit. Le plugin lit la valeur dans la langue du contexte de la requête.
Données structurées Schema.org
Le plugin injecte du JSON-LD dans le <head> via le template storefront/layout/meta.html.twig (héritage Twig, compatible thèmes personnalisés). Schémas générés :
- Organization — sur toutes les pages : nom, logo, URL,
contactPoint,sameAs(profils sociaux). - Product enrichi — sur les fiches produit :
gtin13(depuis l’EAN),mpn,sku,brand(fabricant),additionalProperty(caractéristiques groupées par groupe de propriétés),aggregateRating(depuis les avis natifs Shopware si présents). - BreadcrumbList — fil d’Ariane complet de la page courante.
- FAQPage — si le champ
datafirefly_aeo_faqest renseigné sur l’entité de la page. - HowTo — si le champ
datafirefly_aeo_howtoest renseigné. - Speakable — sélecteurs CSS
h1,.product-detail-name,.product-detail-description-text,.cms-element-text,[data-speakable], plus le texte du champ dédié.
Validation recommandée après mise en production :
- Schema.org Validator — coller l’URL d’une fiche produit.
- Google Rich Results Test.
Module d’administration
Sous Marketing → DataFirefly llms.txt & AEO :
- Prévisualisation en direct du llms.txt ou du llms-full.txt, avec rendu monospace.
- Sélecteur de sales-channel — prévisualisez chaque canal indépendamment.
- Invalidation du cache en un clic (par canal ou globale).
- Ouverture de l’URL publique et copie dans le presse-papier.
Commandes CLI et automatisation
datafirefly:llms-txt:generate
# Générer le llms.txt d'un sales-channel (affiché en sortie standard)
bin/console datafirefly:llms-txt:generate --sales-channel=<id>
# Version complète, écrite dans un fichier, sans passer par le cache
bin/console datafirefly:llms-txt:generate --sales-channel=<id> --full --output=/tmp/llms-full.txt --no-cache
datafirefly:llms-txt:warm
# Réchauffer le cache de tous les sales-channels x toutes les langues actives
bin/console datafirefly:llms-txt:warm
# Forcer la régénération même si le cache est encore valide
bin/console datafirefly:llms-txt:warm --force
# Ne réchauffer que le llms.txt (sans le llms-full.txt)
bin/console datafirefly:llms-txt:warm --skip-full
Cron recommandé
# Réchauffement quotidien à 03h15
15 3 * * * cd /var/www/shopware && php bin/console datafirefly:llms-txt:warm --quiet
Une tâche planifiée Shopware est également enregistrée à l’activation : si votre worker Messenger et le scheduled task runner tournent, le cache se réchauffe automatiquement sans cron système.
Intégration robots.txt
Deux approches pour exposer les directives IA dans votre robots.txt principal :
Copie manuelle
Ouvrez /robots-ai.txt, copiez le bloc généré et collez-le dans votre robots.txt existant. À refaire après chaque changement de configuration des bots.
Réécriture serveur (recommandé si robots.txt entièrement géré par le plugin)
# nginx
location = /robots.txt {
rewrite ^ /robots-ai.txt last;
}
# Apache (.htaccess)
RewriteRule ^robots.txt$ /robots-ai.txt [L]
N’utilisez la réécriture complète que si vous n’avez pas d’autres directives robots.txt à préserver (sitemap, exclusions SEO existantes). Dans le doute, préférez la copie manuelle du bloc IA.
Cache et performances
- Cache PSR-6 sur le pool
cache.objectde Shopware, taguédatafirefly_llms_aeo. - Clés scopées par sales-channel + langue : chaque combinaison a sa propre entrée.
- TTL configurable (défaut 3600 s).
- Invalidation : bouton admin (par canal ou globale), commande
warm --force, ou expiration naturelle. - Compatible cache clusterisé (Redis) : l’invalidation par tags fonctionne sur tous les adaptateurs taggables.
Dépannage
Les endpoints renvoient 404
- Vérifiez que le plugin est bien activé (pas seulement installé).
- Videz le cache HTTP et le cache d’application :
bin/console cache:clear. - Si vous utilisez un reverse proxy/CDN, purgez-le également.
Erreur « Attempted to call an undefined method named getHeader » sur les pages de navigation
Bug corrigé en version 1.0.1 : sur certaines installations Shopware 6.7, NavigationPage n’expose pas getHeader(). Mettez à jour vers la 1.0.1 (extraction défensive de la catégorie active). Si vous êtes déjà en 1.0.1 et voyez encore l’erreur, videz le cache d’opcode PHP (opcache_reset ou redémarrage PHP-FPM).
Le module admin n’apparaît pas sous Marketing
Compilez les assets d’administration (voir Installation) puis forcez le rechargement du navigateur (Ctrl+Maj+R).
Le llms.txt est vide ou incomplet
- Vérifiez les toggles d’inclusion (pages CMS / catégories / marques / produits) dans la carte « llms.txt ».
- Vérifiez que la limite de produits n’est pas à 0.
- Contrôlez le champ
datafirefly_aeo_excludesur les entités absentes. - Invalidez le cache puis rechargez.
Le JSON-LD n’apparaît pas dans le code source
- Vérifiez que « Activer le module » et les toggles Schema.org sont actifs pour le bon sales-channel.
- Si votre thème surcharge
storefront/layout/meta.html.twigsans{{ parent() }}sur le block concerné, l’injection est perdue : rétablissez l’appel parent.
Changelog
1.0.1 — 2026-05-21
- Correctif : extraction défensive de la catégorie active sur les pages de navigation (erreur
getHeader()sur certaines installations 6.7).
1.0.0 — 2026-05-21
- Version initiale : llms.txt + llms-full.txt, 6 schémas JSON-LD, robots-ai.txt (9 bots), champs personnalisés AEO, module admin Vue 3, 2 commandes CLI, tâche planifiée, snippets FR/EN/DE.