PS PrestaShop Intermédiaire

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).

Mis à jour Version du module 1.0.0

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.

À retenir : les LLM lisent ces fichiers pour comprendre votre boutique sans avoir à crawler chaque page produit. Mieux votre catalogue est exposé, mieux il sera cité et recommandé dans leurs réponses.

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

  1. Téléversez le ZIP dans Modules → Module Manager → Charger un module.
  2. Cliquez sur Installer.
  3. 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 .htaccess racine 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.txt et /llms-full.txt retournent 404 et les fichiers physiques sont supprimés.
  • Nom du site (multilingue, multishop) — Apparaît comme heading principal # Nom du site en 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 sortieMarkdown enrichi (recommandé, supporté par tous les LLM majeurs) ou Texte brut.
  • Générer aussi llms-full.txt — Si désactivé, seul /llms.txt est 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.
Astuce : pour trouver les IDs, allez dans la liste correspondante (Catalogue → Catégories, etc.) ; l’ID est dans la première colonne ou dans l’URL d’édition.

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.txt
  • https://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é.

X-Robots-Tag noindex : volontairement ajouté. 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 pour llms.txt au format ['title', 'url', 'description'].
  • getFullEntries() — Liste d’entrées pour llms-full.txt au 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_headers optionnel 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é :

  1. Permissions d’écriture — La racine de PrestaShop doit être writable par l’utilisateur PHP. Vérifiez avec ls -la. Si le fichier /llms.txt n’existe pas après une régénération, c’est presque toujours ça.
  2. Module désactivé — Vérifiez le toggle « Activer le module » en haut de la config.
  3. 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 :

  1. Vérifiez que le bloc # ~~ dfllmstxt-datafirefly start ~~ est présent dans le .htaccess racine de PrestaShop.
  2. Si absent : désinstallez puis réinstallez le module (cela force la réinsertion du bloc).
  3. Vérifiez avec curl -I https://votre-boutique.tld/llms.txt que la réponse contient Content-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 :

  1. Vérifiez que le fichier physique existe à la racine : ls -la /chemin/prestashop/llms.txt.
  2. S’il existe mais qu’Apache renvoie 404, c’est probablement un problème de .htaccess qui bloque les fichiers .txt. Vérifiez les règles du .htaccess racine.
  3. 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.txt et /llms-full.txt à la racine sont supprimés.
  • Le bloc .htaccess ajouté 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.txt et /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 .htaccess racine pour Content-Type UTF-8 et X-Robots-Tag.
  • Option pour désactiver la génération de llms-full.txt.
Cette page vous a-t-elle été utile ?

Toujours bloqué ? Contactez le support