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.
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
- Téléversez le ZIP du module via Modules > Gestionnaire de modules > Téléverser un module.
- Cliquez sur Installer. Le module crée deux tables (
ps_dfthincontent_issueetps_dfthincontent_scan) et un onglet d’administration sous Catalogue. - Accédez au module via Catalogue > Thin Content (DataFirefly).
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.
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èlegpt-4o-minirecommandé (≈ 0,001 € par suggestion). - Mistral AI — endpoint
https://api.mistral.ai/v1/chat/completions, modèlemistral-small-latest. - Groq — endpoint
https://api.groq.com/openai/v1/chat/completions, modèlellama-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.
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).
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.
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_equalspour résister aux attaques par timing.
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 viaMedia::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
- Ouvrez la console réseau du navigateur, cliquez sur Lancer un scan complet, regardez la requête AJAX vers
action=scanFull. - 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. - Si la réponse est 404, vérifiez que le contrôleur
AdminDfThinContentest bien enregistré (tableps_tab). - 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.
Ressources
- Page produit : datafirefly.com/product/dfthincontent/
- Support : support@datafirefly.com