LLMs.txt PrestaShop — Référencement IA pour ChatGPT, Claude & Perplexity
Génère automatiquement llms.txt et llms-full.txt pour exposer votre catalogue PrestaShop aux LLM (ChatGPT, Claude, Perplexity, Gemini).
Vue d’ensemble
LLMs.txt PrestaShop génère automatiquement les fichiers standards /llms.txt et /llms-full.txt à la racine de votre boutique, conformément à la spécification llmstxt.org. Ces fichiers exposent votre catalogue de manière structurée aux LLM (ChatGPT, Claude, Perplexity, Gemini) — c’est l’équivalent du sitemap.xml, mais pour l’IA générative.
Deux fichiers, deux usages
/llms.txt— Index condensé : titre + URL + description courte pour chaque entrée. Format Markdown, quelques centaines de Ko en général./llms-full.txt— Contenu intégral nettoyé de chaque entrée. Format Markdown enrichi, peut peser plusieurs Mo selon la taille du catalogue. Optionnel depuis la 1.0.0.
Installation
- Téléversez le ZIP dans Modules → Module Manager → Charger un module.
- Cliquez sur Installer.
- Cliquez sur Configurer pour ouvrir le tableau de bord.
À l’installation, le module :
- Crée 4 tables SQL : cache, sections personnalisées (+ lang + shop), logs.
- Ajoute 3 entrées dans le menu admin sous une catégorie cachée
AdminDfLlmsTxtParent. - S’enregistre sur les hooks catalogue (création/édition/suppression de produit, catégorie, CMS, fabricant, fournisseur) pour invalider le cache automatiquement.
- Ajoute un bloc dans le
.htaccessracine de PrestaShop pour servir les fichiers en UTF-8 avec les bons en-têtes. - Génère un token cron aléatoire de 32 caractères.
Configuration
L’écran de configuration est organisé en 5 sections.
1. Général
- Activer le module — Toggle global. Si désactivé, les URL
/llms.txtet/llms-full.txtretournent 404 et les fichiers physiques sont supprimés. - Nom du site (multilingue, multishop) — Apparaît comme heading principal
# Nom du siteen haut du fichier. - Description courte du site (multilingue, multishop) — 1–2 phrases résumant ce que propose la boutique. Affichée en blockquote
> ...juste sous le nom. - Introduction (multilingue, multishop) — Texte libre Markdown. Idéal pour donner du contexte additionnel aux LLM (politique de retours, livraison, valeurs de la marque).
- Format de sortie — Markdown enrichi (recommandé, supporté par tous les LLM majeurs) ou Texte brut.
- Générer aussi
llms-full.txt— Si désactivé, seul/llms.txtest généré. Permet d’économiser plusieurs Mo de stockage et plusieurs secondes de génération sur les gros catalogues.
2. Sources de contenu
- Inclure les pages CMS — Pages de contenu (À propos, FAQ, Conditions, etc.).
- Inclure les catégories — Liste des catégories actives avec leur description.
- Inclure les produits — Liste des produits actifs.
- Inclure les fabricants — Marques avec description.
- Inclure les fournisseurs — Liste des fournisseurs.
- Inclure le prix des produits — Formaté selon la locale courante.
- Inclure les caractéristiques produit — Features key/value.
- Inclure les déclinaisons — Combinaisons (taille, couleur, etc.) avec écart de prix.
- Inclure les produits en rupture — Désactivé par défaut.
- Champ description produit — Courte, longue, ou les deux.
- Limite produits — Nombre maximum d’entrées produits dans le fichier. 500 par défaut, monter selon la taille du catalogue (1000–5000 raisonnable).
3. Exclusions
Listes d’IDs séparés par virgule. Permet d’exclure des contenus spécifiques sans toucher au reste du catalogue.
- IDs catégories exclues — Ex : produits B2B, catégories internes, catégories obsolètes.
- IDs produits exclus — Produits en cours d’obsolescence, samples, gifts.
- IDs CMS exclus — Pages de service interne, brouillons.
4. Cache & Cron
- Durée de vie du cache (TTL en secondes) — 86400 (24 h) par défaut. Le cache est servi tant qu’il n’a pas expiré.
- Invalidation auto sur modifications catalogue — Quand vous modifiez/ajoutez/supprimez un produit, une catégorie, etc., le cache est invalidé et le fichier sera regénéré à la prochaine requête (ou au prochain cron).
- Token cron — Chaîne aléatoire 32 caractères. Régénérable depuis le tableau de bord ; les anciennes URL cron cessent immédiatement de fonctionner.
- URL cron prête à copier — Format :
https://votre-boutique.tld/index.php?fc=module&module=dfllmstxt&controller=cron&token=XXX
5. Avancé
- Rétention des logs — Nombre de jours pendant lesquels les logs de génération sont conservés. 30 par défaut.
- Respecter le robots.txt — Pour les usages avancés. Activé par défaut.
Configuration du cron
Le cron pré-génère le cache pour toutes les boutiques et toutes les langues actives en un seul appel. Idéal pour les gros catalogues pour éviter qu’un utilisateur final déclenche la régénération.
URL à appeler :
https://votre-boutique.tld/index.php?fc=module&module=dfllmstxt&controller=cron&token=VOTRE_TOKEN
Exemple de crontab (tous les jours à 4 h) :
0 4 * * * curl -s "https://votre-boutique.tld/index.php?fc=module&module=dfllmstxt&controller=cron&token=VOTRE_TOKEN" > /dev/null
Paramètres optionnels :
&id_shop=2— Limiter à une boutique précise.&id_lang=1— Limiter à une langue précise.
La réponse JSON détaille le résultat de chaque génération (succès, taille des fichiers, durée).
Sections personnalisées
Au-delà du catalogue brut, vous pouvez injecter du contenu libre dans les fichiers générés. Onglet LLMs.txt → Sections personnalisées dans le menu admin.
Cas d’usage typiques :
- Politique de retour résumée
- Valeurs et engagement de la marque
- FAQ courte
- Conditions de livraison
- Instructions spécifiques aux LLM (ex : « Ne pas comparer avec [marque concurrente] »)
Chaque section :
- A un titre et un contenu multilingue (Markdown supporté).
- Est multishop : vous choisissez sur quelles boutiques elle s’affiche.
- A un placement : avant les sources, après les sources, ou en pied de fichier.
- A une position ajustable par drag-and-drop.
- Peut être activée/désactivée sans suppression.
URL des fichiers générés
Les fichiers sont accessibles à la racine de votre boutique :
https://votre-boutique.tld/llms.txthttps://votre-boutique.tld/llms-full.txt(si l’option est activée)
Comment c’est servi
Pour la boutique par défaut dans sa langue par défaut, le module écrit un fichier physique à la racine de PrestaShop. Apache le sert ensuite directement, sans dépendre du dispatcher PrestaShop, des URL simplifiées ni du cache des routes. C’est la même mécanique que celle utilisée par le module officiel gsitemap pour /sitemap.xml.
Pour les autres boutiques d’un setup multishop (Host différent, racine partagée), les fichiers sont servis par le hook moduleRoutes qui passe le bon shop selon le Host header.
En-têtes HTTP
Le module ajoute automatiquement un bloc dans le .htaccess racine de PrestaShop pour forcer les bons en-têtes :
# ~~ dfllmstxt-datafirefly start ~~
<Files "llms.txt">
ForceType "text/plain; charset=utf-8"
<IfModule mod_headers.c>
Header set Content-Type "text/plain; charset=utf-8"
Header set X-Robots-Tag "noindex, follow"
</IfModule>
</Files>
<Files "llms-full.txt">
ForceType "text/plain; charset=utf-8"
<IfModule mod_headers.c>
Header set Content-Type "text/plain; charset=utf-8"
Header set X-Robots-Tag "noindex, follow"
</IfModule>
</Files>
# ~~ dfllmstxt-datafirefly end ~~
Ce bloc est placé en dehors du bloc PrestaShop # ~~ start ~~ ... # ~~ end ~~ et est donc préservé lors des régénérations automatiques par PrestaShop. Il est également auto-réparé à chaque régénération du cache (idempotent), au cas où il aurait été modifié.
llms.txt cible les crawlers IA, pas l’index Google. Les LLM lisent ces fichiers directement sans avoir besoin qu’ils apparaissent dans les SERP. Votre SEO classique n’est pas affecté.
Architecture extensible (pour les développeurs)
Le module expose un système de Content Providers que d’autres modules peuvent enrichir via un hook. Si vous avez un module de blog, de FAQ produit, de témoignages clients ou de glossaire, il peut publier son contenu dans le llms.txt sans modifier dfllmstxt.
Hook actionDfLlmsTxtRegisterProviders
Dans votre module externe :
public function hookActionDfLlmsTxtRegisterProviders($params)
{
require_once _PS_MODULE_DIR_ . 'monmodule/classes/MyBlogProvider.php';
$params['registry']->register(new MyBlogProvider());
}
Votre classe doit étendre DfLlmsTxtAbstractContentProvider (ou implémenter DfLlmsTxtContentProviderInterface) et fournir au minimum :
getKey()— Identifiant unique (ex :"blog").getSectionTitle()— Titre de section affiché dans le fichier (ex :"Blog").isEnabled()— Booléen indiquant si le provider doit produire des entrées.getShortEntries()— Liste d’entrées pourllms.txtau format['title', 'url', 'description'].getFullEntries()— Liste d’entrées pourllms-full.txtau format['title', 'url', 'body'].
Hooks de génération
Deux hooks vous permettent de filtrer ou d’enrichir le contenu juste avant qu’il ne soit servi :
actionDfLlmsTxtBeforeGenerate— Avant la génération. Permet de modifier la configuration ou les providers actifs.actionDfLlmsTxtAfterGenerate— Après la génération mais avant la mise en cache. Permet de transformer le contenu final.
Compatibilité
- PrestaShop 8.0.0 — 8.99.99 (PS 9 supporté à venir)
- PHP 7.4 minimum, 8.1+ recommandé
- MySQL 5.7+ / MariaDB 10.4+
- Multishop complet (configuration et cache scopés par boutique)
- Multilangue complet (toutes langues actives)
- Apache 2.x avec
mod_mime(universel).mod_headersoptionnel mais recommandé pour les en-têtes HTTP propres.
Dépannage
Le fichier n’apparaît pas à la racine
Trois causes possibles dans l’ordre de probabilité :
- Permissions d’écriture — La racine de PrestaShop doit être writable par l’utilisateur PHP. Vérifiez avec
ls -la. Si le fichier/llms.txtn’existe pas après une régénération, c’est presque toujours ça. - Module désactivé — Vérifiez le toggle « Activer le module » en haut de la config.
- Multishop avec racine partagée — Seule la boutique par défaut écrit à la racine. Les autres boutiques sont servies via
moduleRoutes(qui nécessite les URL simplifiées activées dans Préférences → Trafic & SEO).
Encodage cassé (caractères « é » au lieu de « é »)
Symptôme classique d’UTF-8 servi sans charset HTTP. Le module ajoute automatiquement les directives .htaccess nécessaires (voir section En-têtes HTTP plus haut). Si le problème persiste après une régénération :
- Vérifiez que le bloc
# ~~ dfllmstxt-datafirefly start ~~est présent dans le.htaccessracine de PrestaShop. - Si absent : désinstallez puis réinstallez le module (cela force la réinsertion du bloc).
- Vérifiez avec
curl -I https://votre-boutique.tld/llms.txtque la réponse contientContent-Type: text/plain; charset=utf-8.
Génération réussie mais URL en 404
Si la régénération réussit (taille des fichiers correcte dans les logs) mais que l’URL renvoie 404 :
- Vérifiez que le fichier physique existe à la racine :
ls -la /chemin/prestashop/llms.txt. - S’il existe mais qu’Apache renvoie 404, c’est probablement un problème de
.htaccessqui bloque les fichiers.txt. Vérifiez les règles du.htaccessracine. - S’il n’existe pas, c’est un problème de permissions d’écriture (voir plus haut).
Le cache reste obsolète après une modification produit
L’invalidation automatique est désactivée. Activez-la dans Cache & Cron → Invalidation auto sur modifications catalogue. Vous pouvez aussi forcer manuellement avec le bouton Vider le cache du tableau de bord.
Le fichier llms-full.txt fait plusieurs Mo, c’est trop
Désactivez l’option Générer aussi llms-full.txt dans la config Générale. Seul /llms.txt (généralement < 1 Mo) sera généré. Pour la plupart des cas d’usage IA, c’est suffisant : les LLM modernes savent suivre les URL et fetcher les pages individuelles quand ils en ont besoin.
Désinstallation
La désinstallation est propre :
- Les 4 tables SQL sont supprimées.
- Les fichiers physiques
/llms.txtet/llms-full.txtà la racine sont supprimés. - Le bloc
.htaccessajouté est retiré. - Toutes les variables de configuration
DFLLMS_*sont nettoyées. - Les onglets admin sont retirés.
Changelog
1.0.0 — Mai 2026
- Release initiale.
- Génération conforme à la spec llmstxt.org pour
/llms.txtet/llms-full.txt. - 5 Content Providers natifs : produits, catégories, CMS, fabricants, fournisseurs.
- Cache TTL avec invalidation automatique.
- Cron sécurisé par token.
- Sections personnalisées multilingues, multishop.
- Architecture extensible via hook.
- Auto-gestion du
.htaccessracine pour Content-Type UTF-8 et X-Robots-Tag. - Option pour désactiver la génération de
llms-full.txt.