SW Shopware 6 Intermédiaire

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.

Mis à jour Version du module 1.0.1

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.txt avec 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é)

  1. Téléchargez DataFireflyLlmsAeo.zip depuis votre compte client.
  2. Administration Shopware → Extensions → Mes extensions → Téléverser une extension.
  3. Cliquez sur Installer, puis Activer.
  4. 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électifDisallow sur 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_faq est renseigné sur l’entité de la page.
  • HowTo — si le champ datafirefly_aeo_howto est 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 :

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.object de 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

  1. Vérifiez que le plugin est bien activé (pas seulement installé).
  2. Videz le cache HTTP et le cache d’application : bin/console cache:clear.
  3. 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

  1. Vérifiez les toggles d’inclusion (pages CMS / catégories / marques / produits) dans la carte « llms.txt ».
  2. Vérifiez que la limite de produits n’est pas à 0.
  3. Contrôlez le champ datafirefly_aeo_exclude sur les entités absentes.
  4. Invalidez le cache puis rechargez.

Le JSON-LD n’apparaît pas dans le code source

  1. Vérifiez que « Activer le module » et les toggles Schema.org sont actifs pour le bon sales-channel.
  2. Si votre thème surcharge storefront/layout/meta.html.twig sans {{ 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.
Cette page vous a-t-elle été utile ?

Toujours bloqué ? Contactez le support