PS PrestaShop Intermédiaire

Thin Content Detector — Documentation

Détection automatique de contenu pauvre, doublons et boilerplate sur votre catalogue PrestaShop avec suggestions d'enrichissement par IA. Installation, configuration des seuils, fournisseurs IA, scan cron et dépannage.

Mis à jour Version du module 1.0.0

DataFirefly Thin Content Detector scanne automatiquement vos produits, catégories et pages CMS dans toutes les langues actives de votre boutique. Il détecte trois patterns toxiques pour le SEO — contenu trop pauvre, descriptions dupliquées et pages dominées par du boilerplate — et génère des suggestions d’enrichissement par IA prêtes à coller. Ce guide couvre l’installation, la configuration, l’utilisation quotidienne, la planification cron et le dépannage.

Vue d’ensemble

Depuis le Helpful Content Update, Google déclasse activement les pages dont le contenu est trop court, trop similaire à d’autres pages, ou trop dominé par des éléments répétés. Sur un catalogue e-commerce, ce sont typiquement les fiches reprises du fournisseur, les catégories avec deux phrases génériques, ou les variantes qui partagent 95 % de leur description. Invisible à l’œil nu sur 500 produits — mais cumulé, c’est ce qui empêche votre site de ranker.

Les trois types de détection

  • Thin content — pages sous le seuil de mots configurable. Trois niveaux de sévérité selon l’écart au seuil (critique < 25 %, avertissement 25–75 %, notice 75–100 %).
  • Doublons — détection en deux passes : hash SHA1 pour les doublons exacts (sévérité 3), puis similarité Jaccard ≥ seuil configurable pour les quasi-doublons (sévérité 2).
  • Ratio template / contenu — identifie les tokens partagés avec les pages sœurs (même catégorie parent) et calcule le pourcentage de tokens uniques par page. Une page avec 200 mots mais 90 % de boilerplate est aussi toxique qu’une page de 30 mots.

Installation

  1. Téléversez le ZIP du module via Modules > Gestionnaire de modules > Téléverser un module.
  2. Cliquez sur Installer. Le module crée deux tables (ps_dfthincontent_issue et ps_dfthincontent_scan) et un onglet d’administration sous Catalogue.
  3. Accédez au module via Catalogue > Thin Content (DataFirefly).
Compatibilité. PrestaShop 8.0 – 9.x, PHP 7.4 – 8.3, MySQL 5.6+ / MariaDB 10.3+. Multi-boutique nativement supporté (la clé unique des problèmes inclut id_shop). Pas de dépendance Composer requise.

Configuration

Cliquez sur le bouton Configuration dans le bandeau du module. Trois panneaux sont disponibles.

Seuils de détection

  • Mots minimum produit — défaut 150. Tout produit dont la description longue + courte combinées contient moins de 150 mots sera signalé.
  • Mots minimum catégorie — défaut 100.
  • Mots minimum page CMS — défaut 250.
  • Seuil de similarité Jaccard — défaut 85 %. Au-delà, deux pages sont considérées comme quasi-doublons.
  • Ratio template minimum — défaut 30 %. En dessous, la page est considérée comme trop dominée par du boilerplate.
Pour quel seuil opter ? 150 mots produit est un bon point de départ pour la majorité des boutiques. Sur du textile ou des consommables, vous pouvez descendre à 100. Sur de l’électronique technique ou de la maison, montez à 250. Pour la similarité Jaccard, 85 % attrape les vrais doublons sans signaler chaque variante légitime ; passez à 75 % si vous avez beaucoup de variantes très proches à différencier.

Cibles de scan

  • Scanner les produits (ON par défaut).
  • Scanner les catégories (ON par défaut).
  • Scanner les pages CMS (ON par défaut).
  • Rescan automatique sur sauvegarde (OFF par défaut). Quand activé, chaque sauvegarde d’un produit, d’une catégorie ou d’une page CMS déclenche un retest ciblé de cet objet uniquement. Vous voyez en temps réel si votre réécriture suffit à dépasser les seuils.

Configuration IA

Les suggestions d’enrichissement utilisent un endpoint compatible OpenAI (chat completions). Cela inclut un large éventail de fournisseurs :

  • OpenAI — endpoint https://api.openai.com/v1/chat/completions, modèle gpt-4o-mini recommandé (≈ 0,001 € par suggestion).
  • Mistral AI — endpoint https://api.mistral.ai/v1/chat/completions, modèle mistral-small-latest.
  • Groq — endpoint https://api.groq.com/openai/v1/chat/completions, modèle llama-3.3-70b-versatile. Très rapide.
  • Ollama en local — endpoint http://localhost:11434/v1/chat/completions, n’importe quel modèle téléchargé. Coût zéro.
  • Anthropic via proxy compatible OpenAI.

Paramètres à renseigner :

  • Endpoint — URL complète vers /v1/chat/completions.
  • Modèle — identifiant du modèle chez le fournisseur.
  • Clé API — Bearer token. Stockée chiffrée via le système de configuration PrestaShop.
  • Max tokens — défaut 600. Suffisant pour une suggestion d’enrichissement standard.
La clé API n’est pas obligatoire. La détection et le suivi des problèmes fonctionnent sans IA. Seules les suggestions d’enrichissement nécessitent un endpoint configuré. Vous pouvez très bien utiliser le module en pur mode audit.

Utilisation — Dashboard

Le dashboard est la page d’accueil du module. Il affiche :

  • Trois compteurs principaux — total des problèmes ouverts, corrigés, ignorés.
  • Répartition par type de problème — thin / duplicate / template.
  • Répartition par type d’objet — produit / catégorie / page CMS.
  • Seuils actuels — rappel des valeurs configurées.
  • 5 derniers scans — date, durée, nombre d’objets analysés.
  • Bouton « Lancer un scan complet » — déclenche un scan synchrone via AJAX. Une modale affiche la progression et le résumé en fin de scan.

Lancer un scan

Cliquez sur Lancer un scan complet. Le scan parcourt toutes les langues actives, applique les trois analyseurs sur les cibles activées, persiste les problèmes détectés dans ps_dfthincontent_issue, et marque comme fixed les problèmes qui ne sont plus détectés (par exemple si vous avez enrichi une fiche depuis le dernier scan).

Sur un gros catalogue (au-delà de 5 000 produits), préférez le scan via cron (voir plus bas). Le scan synchrone reste utilisable mais peut excéder la limite de temps PHP par défaut. Le scan via cron lève les limites set_time_limit(0) et memory_limit 512M automatiquement.

Utilisation — Liste des problèmes

Accessible via Voir les problèmes dans le bandeau. Affichage paginé (50 par page) avec filtres avancés :

  • Statut — ouvert / corrigé / ignoré.
  • Type de problème — thin / duplicate / template.
  • Type d’objet — produit / catégorie / CMS.
  • Langue — filtre sur l’une des langues actives.
  • Recherche libre — sur le nom de l’objet.

Chaque ligne montre la sévérité (pastille rouge / orange / bleue), le type de problème, le type d’objet avec icône, le nom, la langue, le nombre de mots, la métrique pertinente (% similarité ou % unicité) et trois boutons d’action :

  • Suggestion IA — ouvre une modale avec une suggestion d’enrichissement HTML générée à la demande (voir section suivante).
  • Marquer corrigé — passe le problème en statut fixed. Il restera dans l’historique mais ne polluera plus les compteurs.
  • Ignorer — passe le problème en statut ignored. Utile pour les pages volontairement courtes (par exemple une page CMS « Contact » courte mais légitime).

Export CSV

Le bouton Exporter CSV télécharge l’intégralité des problèmes du filtre courant. L’export est streamé en sortie (chunks de 500 lignes) pour gérer les gros catalogues sans saturation mémoire. Encodage UTF-8 avec BOM pour ouverture directe dans Excel. Délimiteur point-virgule.

Suggestions IA

Cliquez sur le bouton IA sur n’importe quelle ligne. Le module envoie une requête au endpoint configuré avec un prompt construit dynamiquement à partir du type de problème et du type d’objet :

  • Thin produit — enrichir avec USP, matériaux, usage, provenance, garanties.
  • Thin catégorie — enrichir avec USP de gamme, conseils d’achat, comparaison sous-catégories.
  • Thin CMS — développement éditorial, mise en contexte, exemples.
  • Doublon — différencier la fiche en se concentrant sur ce qui la rend unique par rapport à ses doublons.
  • Template — supprimer le boilerplate, ajouter des éléments uniques à cette page spécifique.

Le système message impose un retour en HTML propre : balises p, ul, li, h3 uniquement. Pas de markdown, pas de balises racine. Vous pouvez coller le résultat directement dans le champ description de TinyMCE sans nettoyage.

La suggestion est stockée en BDD. Si vous rouvrez la modale plus tard, elle s’affiche instantanément sans nouvel appel API.

Workflow recommandé. Filtrez par sévérité critique, générez les suggestions une par une, copiez chaque suggestion dans la fiche correspondante, sauvegardez. Si le rescan automatique est activé, le problème passe en fixed automatiquement dès que la sauvegarde fait dépasser les seuils.

Cron — Scans planifiés

Le module expose un endpoint cron sécurisé par token, idéal pour les scans nocturnes :

https://votre-boutique.com/modules/dfthincontent/cron.php?token=VOTRE_TOKEN

Le token est généré aléatoirement à l’installation et affiché dans le panneau de configuration. Conservez-le confidentiel — il donne accès au déclenchement d’un scan complet.

Exemple crontab (scan quotidien à 4h)

0 4 * * * curl -s "https://votre-boutique.com/modules/dfthincontent/cron.php?token=VOTRE_TOKEN" > /dev/null 2>&1

Caractéristiques du scan cron

  • set_time_limit(0) — pas de limite de temps PHP.
  • memory_limit 512M — défini automatiquement.
  • Retour JSON contenant le nombre d’objets analysés, le nombre de problèmes détectés et la durée totale.
  • Validation par hash_equals pour résister aux attaques par timing.
Régénérer le token. Si vous suspectez une fuite du token, désinstallez puis réinstallez le module — un nouveau token sera généré. Vous pouvez aussi modifier directement la valeur DFTHIN_CRON_TOKEN dans la table ps_configuration.

Architecture technique

Structure des tables

  • ps_dfthincontent_issue — un enregistrement par problème détecté. Clé unique : (id_object, object_type, id_lang, id_shop, issue_type). Champs notables : severity (1-3), word_count, content_hash (SHA1), metric_value (% similarité ou unicité), metric_data (JSON avec détail), ai_suggestion, status, object_name, object_url.
  • ps_dfthincontent_scan — historique des scans. Date début / fin, durée, items analysés par type, statut.

Hooks utilisés

  • actionAdminControllerSetMedia — chargement CSS / JS et exposition de l’URL AJAX via Media::addJsDef.
  • actionProductUpdate — rescan du produit modifié si auto-rescan activé.
  • actionObjectCategoryUpdateAfter — idem pour les catégories.
  • actionObjectCmsUpdateAfter — idem pour les pages CMS.

Limites de performance

La détection de doublons est intrinsèquement O(n²) — chaque page est comparée à toutes les autres pages de même type / langue / boutique. Pour éviter une explosion sur les très gros catalogues, le module applique deux protections :

  • Plafond de sécurité à 1 500 items par groupe (type + langue + boutique). Au-delà, la détection de doublons est désactivée pour ce groupe — un avertissement est journalisé.
  • Pré-filtrage par nombre de mots — la similarité Jaccard n’est calculée qu’entre items dont le nombre de mots est dans une fenêtre de ±50 %. Cela élimine la grande majorité des comparaisons inutiles.

Dépannage

Le scan ne se lance pas

  1. Ouvrez la console réseau du navigateur, cliquez sur Lancer un scan complet, regardez la requête AJAX vers action=scanFull.
  2. Si la réponse est HTML au lieu de JSON, c’est un fatal PHP côté serveur — regardez les logs PrestaShop (var/logs/) et PHP.
  3. Si la réponse est 404, vérifiez que le contrôleur AdminDfThinContent est bien enregistré (table ps_tab).
  4. Si la réponse est 403, le token CSRF a expiré — rafraîchissez la page et réessayez.

Les suggestions IA renvoient une erreur

  • Vérifiez que la clé API est correcte et active chez votre fournisseur.
  • Vérifiez que le serveur peut joindre l’URL de l’endpoint (firewall sortant, DNS).
  • Si vous utilisez Ollama en local, vérifiez que le service tourne (ollama serve) et que le modèle est téléchargé (ollama pull llama3.3).
  • Consultez les logs PrestaShop — le module y journalise les erreurs cURL et les codes HTTP non-200.

Le cron retourne 401 ou 403

Le token transmis ne correspond pas. Récupérez le bon token dans le panneau de configuration et remplacez-le dans votre crontab. Pas d’espace, pas de retour à la ligne dans la valeur.

Des doublons légitimes sont signalés

C’est le cas typique des variantes très proches (tailles d’un même modèle, couleurs). Trois options :

  • Marquer les problèmes comme ignorés un par un.
  • Augmenter le seuil de similarité Jaccard à 95 % ou plus.
  • Désactiver le scan des produits et ne garder que catégories + CMS si votre cas d’usage ne nécessite pas le scan produit.

Désinstallation

Désinstallez via Modules > Gestionnaire de modules > Désinstaller. Le module supprime proprement les deux tables BDD, l’onglet d’administration et toutes les clés de configuration. Aucune trace résiduelle.

Sauvegardez l’export CSV avant désinstallation si vous voulez conserver l’historique des suggestions IA générées. Une fois les tables supprimées, les suggestions sont perdues.

Ressources

Cette page vous a-t-elle été utile ?

Toujours bloqué ? Contactez le support