DataFirefly All in One SEO — Documentation complète
Module SEO premium tout-en-un pour PrestaShop 8 et 9 : méta dynamiques, schémas JSON-LD, sitemap multilingue, redirections, 404, robots.txt intelligent, tracking et analyseur de contenu.
Suite SEO premium tout-en-un pour PrestaShop 8 et 9 : templates de méta dynamiques, schémas JSON-LD complets, sitemap XML multilingue, redirections, monitoring 404, Open Graph et Twitter Cards, GA4 et GTM, robots.txt intelligent avec blocage des crawlers IA et analyseur de contenu — tout dans un seul module.
Prérequis
- PrestaShop : 8.0 à 9.x
- PHP : 8.1 ou supérieur (8.2 et 8.3 recommandés)
- MySQL : 5.7+ ou MariaDB 10.3+
- Module productcomments (officiel PrestaShop) : optionnel, requis uniquement pour AggregateRating sur les produits
- mod_rewrite activé sur le serveur Apache (ou équivalent Nginx) pour les URL réécrites
id_shop. Vous pouvez avoir des configurations totalement différentes par boutique.Installation
- Téléchargez le fichier
dfallinoneseo-vX.Y.Z.zipdepuis votre compte client DataFirefly. - Connectez-vous à votre back-office PrestaShop.
- Allez dans Modules → Module Manager.
- Cliquez sur Installer un module en haut à droite.
- Glissez-déposez le fichier ZIP ou cliquez sur Sélectionner un fichier.
- L’installation crée automatiquement les 11 tables SQL, enregistre les hooks et ajoute le menu Améliorer → DataFirefly SEO.
Premier paramétrage en 10 minutes
Ce parcours rapide vous permet de configurer l’essentiel avant la première crawl Google.
- Réglages → Général : activez le module, renseignez le nom du site et le libellé « Accueil » pour le fil d’Ariane.
- Méta & templates : définissez au minimum un template Produit et un template Catégorie (voir section dédiée).
- Schema → Identité de l’organisation : renseignez logo, téléphone, email, adresse et URLs des réseaux sociaux (
sameAs). - Sitemap : activez le sitemap et cliquez sur Régénérer maintenant.
- Tracking : ajoutez votre GA4 Measurement ID et/ou GTM ID.
- Tracking → Vérifications : collez la valeur de vérification Google Search Console.
- Robots.txt : cliquez sur Charger les défauts (PS + blocage AI) pour partir d’une base saine.
Templates de méta
Le module remplace la saisie manuelle de meta_title et meta_description par des templates dynamiques par type d’entité. À l’enregistrement d’une fiche dont les méta sont vides, le template correspondant est appliqué automatiquement.
Types d’entités supportés
- Produit : fiches produit (tous types confondus, y compris virtuels et pack)
- Catégorie : pages catégorie
- Page CMS : pages de contenu statique
- Marque / Fabricant : pages fabricant
- Fournisseur : pages fournisseur
- Accueil : page d’accueil de la boutique
- Pages génériques :
/contact,/sitemap, etc.
Tokens disponibles
Les tokens sont remplacés par les valeurs réelles au rendu de la page. Tous les tokens ne sont pas disponibles sur tous les types d’entité.
{shop_name}— nom de la boutique{sep}— séparateur (par défaut|){product_name}— nom du produit (langue courante){product_reference}— référence interne{product_sku}— alias de référence{product_ean13}— code-barres EAN13{product_brand},{brand}— marque/fabricant{category}— catégorie par défaut (produit) ou nom de la catégorie (page catégorie){category_parent}— nom de la catégorie parente{category_description}— description courte (160 car. max){short_description}— description courte du produit (160 car. max){price}— prix TTC formaté avec devise{price_tax_excl}— prix HT formaté{title}— titre de la page CMS{summary}— extrait du contenu CMS (160 car. max)
Blocs conditionnels
Pour ne pas afficher un token vide, utilisez la syntaxe conditionnelle :
{?product_brand}{product_brand} | {/?}{product_name} - {shop_name}
Si product_brand est vide (produit sans marque), tout le bloc entre {?token} et {/?} est supprimé. Sinon, son contenu est rendu et les tokens à l’intérieur sont remplacés normalement.
Exemples de templates recommandés
Produit :
Title : {?product_brand}{product_brand} {/?}{product_name} - {category} | {shop_name}
Description : Découvrez {product_name}{?product_brand} signé {product_brand}{/?}. {short_description} Livraison rapide sur {shop_name}.
Catégorie :
Title : {category} - {?category_parent}{category_parent} - {/?}{shop_name}
Description : Tous les produits de la catégorie {category} sur {shop_name}. {category_description}
Accueil :
Title : {shop_name} - Boutique en ligne
Description : Bienvenue sur {shop_name}. Découvrez notre catalogue, livraison rapide, paiement sécurisé.
Surcharge par entité
Pour surcharger une fiche spécifique (par exemple un produit phare), cliquez sur l’icône Surcharge méta dans le menu Édition en masse ou utilisez l’URL :
?controller=AdminDfSeoMeta&entity=product&entity_id=42
La page de surcharge permet de définir meta_title, meta_description, la directive robots (noindex,follow par exemple) et un canonical custom par langue.
Schémas JSON-LD
Le module génère un bloc @graph unique regroupant tous les schémas de la page courante, validé Google Rich Results Test.
Schémas générés automatiquement
- Organization — sur toutes les pages, identité de la société
- WebSite — sur l’accueil, avec
SearchActionpour activer le sitelinks search box - LocalBusiness — si une adresse physique est renseignée
- BreadcrumbList — fil d’Ariane
- Product — sur les fiches produit, avec
offers,priceValidUntil,gtin13/isbn/mpn - AggregateRating — agrégée depuis le module productcomments officiel
- Article — sur les pages CMS
- FAQPage — depuis les blocs FAQ produit ou page
Identité de l’organisation
Onglet Schema → Identité de l’organisation. Champs à renseigner :
- Type : Organization, Corporation, LocalBusiness, Store, OnlineStore, OnlineBusiness
- Logo : URL absolue (recommandé 600×60 minimum, ratio carré ou paysage)
- Téléphone, Email : utilisés dans
contactPoint - Adresse postale : rue, code postal, ville, pays (ISO-2)
- sameAs : une URL par ligne (Facebook, Instagram, LinkedIn, Twitter/X, etc.)
Validité des offres produit
Le champ Validité des offres produit (jours) contrôle la valeur de priceValidUntil dans Product.offers. Par défaut : 60 jours. Google exige ce champ pour afficher le prix dans les résultats enrichis.
Schémas personnalisés
Onglet Schema → Schémas personnalisés. Permet d’ajouter des blocs JSON-LD sur mesure (HowTo, Recipe, Event, JobPosting, VideoObject, Course, etc.) sur une portée précise :
- global : toutes les pages
- home : accueil uniquement
- product : toutes les pages produit
- product_id : un produit spécifique (utilise le champ ID)
- category, category_id : idem catégorie
- cms, cms_id : idem page CMS
Variables disponibles dans le JSON personnalisé : {shop_name}, {base_url}, {entity_id}, {entity_type}.
@graph. Validez-le avec le Rich Results Test avant publication. Un JSON invalide est rejeté silencieusement.Sitemap XML
Le module génère un sitemap XML conforme à la spécification sitemaps.org, avec hreflang sur chaque URL et support des images. Architecture : un sitemap index par boutique, puis un sitemap par type d’entité × langue, découpé en chunks.
Configuration
Onglet Sitemap. Activez le sitemap puis cochez le contenu à inclure :
- Produits (par défaut tous les produits actifs)
- Catégories
- Pages CMS
- Marques / Fabricants
- Fournisseurs
- Images (ajoute
image:imageà chaque URL produit) - Vidéos (si présentes dans les fiches)
Options supplémentaires :
- Exclure les ruptures : retire les produits en out-of-stock
- Gzip : génère aussi les variantes
.xml.gz(réduit 5 à 10x la taille téléchargée par les crawlers) - URLs par fichier : taille de chunk (recommandé 5000-10000, max 50000 par spec XML)
Régénération
La régénération est manuelle depuis l’admin pour éviter toute charge serveur imprévue. Cliquez sur Régénérer maintenant.
Pour automatiser, planifiez un cron qui appelle le script suivant (toutes les 6 ou 12 heures selon la fréquence de mise à jour de votre catalogue) :
0 */6 * * * php /var/www/html/index.php fc=module&module=dfallinoneseo&controller=sitemap&action=rebuild
Soumission aux moteurs
Cliquez sur Pinger les moteurs pour notifier Google et Bing (endpoints legacy mais toujours actifs). Pour Google Search Console, soumettez l’URL du sitemap index une fois pour toutes dans GSC → Sitemaps. GSC re-crawl automatiquement à chaque modification.
URL du sitemap index : https://votre-boutique.com/sitemap.xml
Sitemap HTML public
Un sitemap HTML lisible par les humains est généré automatiquement à /plan-du-site. Il agrège catégories (arbre), pages CMS, marques, fournisseurs et les 200 derniers produits. Utile pour le maillage interne et l’accessibilité.
Redirections
Le module gère les redirections HTTP 301 (permanent), 302 (temporaire), 307, 308 et 410 (Gone) avec trois types de match.
Types de match
- Exact : l’URL source doit correspondre exactement (sans query string)
- Préfixe : l’URL source est un préfixe de l’URL demandée. Le suffixe est conservé dans la destination si Conserver query string est coché. Utile pour migrer des dossiers entiers (
/ancien-dossier/→/nouveau-dossier/). - Regex : expression régulière PHP (mode
~...~isensible/insensible). Les groupes de capture sont disponibles dans la destination via$1,$2, etc.
Création manuelle
Onglet Redirections → Nouvelle redirection. Champs :
- URL source : chemin sans le domaine (ex:
/ancienne-page) - URL destination : chemin ou URL absolue. Laisser vide pour un code 410.
- Type de match, Code HTTP, Conserver query string
Import / export CSV
Format CSV attendu (avec header) :
source,destination,type,code
/ancien-produit,/nouveau-produit,exact,301
/ancien-dossier/,/nouveau-dossier/,prefix,301
/old-(.*),/new-$1,regex,301
L’export CSV reprend les redirections actuellement filtrées dans la liste.
Redirection automatique au changement de slug
Si l’option Réglages → Monitoring → Redirection 301 auto en cas de changement d’URL est cochée, le module crée une 301 automatiquement quand vous modifiez le slug d’un produit, d’une catégorie, d’une page CMS, d’une marque ou d’un fournisseur. Le created_by est alors marqué auto:urlchange pour distinction.
Monitoring 404
Onglet Monitor 404. Capture toutes les URLs en erreur 404 servies par PrestaShop, avec déduplication, comptage des hits, détection des bots et hash des adresses IP (sel COOKIE_KEY de PrestaShop pour conformité RGPD).
Filtres disponibles
- Non résolues : URLs sans redirection couvrante (vue par défaut)
- Résolues : URLs pour lesquelles une redirection a été créée a posteriori
- Bots : hits venant de user-agents identifiés comme bots
- Toutes
Créer une redirection en un clic
Sur chaque ligne, le bouton Rediriger ouvre un formulaire inline qui pré-remplit la source. Saisissez la destination, choisissez le code HTTP, validez. La 404 est automatiquement marquée comme résolue.
Purge et maintenance
Le menu Réglages → Monitoring expose un seuil Nombre maximum d’entrées 404 conservées (par défaut 5000). Au-delà, le bouton Purger les vieux 404 supprime les entrées non résolues les plus anciennes.
Robots.txt dynamique
Le module sert un fichier /robots.txt généré dynamiquement à chaque requête, basé sur les règles définies dans Robots.txt.
Préréglages PrestaShop + blocage AI
Le bouton Charger les défauts (PS + blocage AI) écrase toutes les règles actuelles et charge un préréglage sain qui :
- Bloque les répertoires sensibles PrestaShop (
/admin*/,/cache/,/classes/, etc.) - Bloque les pages techniques (
/cart,/order,/my-account, etc.) - Bloque les principaux crawlers IA non respectueux : GPTBot, ClaudeBot, CCBot, Google-Extended, anthropic-ai
- Pointe vers le sitemap (
Sitemap: /sitemap.xml)
Règles personnalisées
Chaque règle a un user-agent, une directive (Allow, Disallow, Crawl-delay), une valeur et une position (ordre dans le fichier). Activez/désactivez une règle sans la supprimer via la pastille ON/OFF.
Aperçu live
Le bloc Aperçu du fichier généré en bas de page rend le robots.txt tel qu’il sera servi, avant publication.
Fichier llms.txt natif
Le module sert un fichier /llms.txt conforme à la spécification llmstxt.org. Ce fichier liste, en markdown, les sections principales du site pour les crawlers IA respectueux qui souhaitent une vue structurée plutôt que de scraper l’intégralité du HTML.
Aucune configuration n’est requise — le module génère automatiquement le fichier depuis votre arborescence de catégories, pages CMS et marques.
Open Graph et Twitter Cards
Onglet Social. Le module injecte les balises og:* et twitter:* sur toutes les pages.
Réglages
- Activer Open Graph et Twitter Cards : master switch
- og:locale automatique : calculé depuis la langue du contexte (ex:
fr_FR) - Image OG par défaut : URL absolue d’une image 1200×630 (utilisée quand la page n’a pas d’image dédiée)
- og:site_name, og:type par défaut
- Twitter @handle et type de carte (
summaryousummary_large_image) - fb:app_id : Facebook App ID
Tracking : GA4, GTM, pixels
GA4 et Enhanced Ecommerce
Champ GA4 Measurement ID : format G-XXXXXXXXXX. Validation automatique du format.
Cochez Enhanced Ecommerce pour activer les événements view_item, view_item_list, add_to_cart, remove_from_cart, begin_checkout, add_payment_info, purchase.
Cochez Respecter Consent Mode v2 pour anonymiser les hits jusqu’au consentement explicite (compatible avec les CMP standards).
Google Tag Manager
Champ GTM ID : format GTM-XXXXXXX. Le module injecte le snippet GTM dans le head et le fallback noscript juste après l’ouverture du body.
Pixels publicitaires
- Facebook Pixel ID : 15 chiffres
- TikTok Pixel ID : alphanumérique
Si Consent Mode v2 est actif, ces pixels ne se déclenchent qu’après consentement.
Vérifications de propriété
Collez les valeurs des balises de vérification (sans la balise meta complète, uniquement le contenu de l’attribut content) :
- Google Search Console
- Bing Webmaster Tools
- Yandex Webmaster
- Baidu
Code personnalisé head et body-end
Deux champs libres acceptent du HTML/JS arbitraire :
- Code injecté dans head : pour scripts tiers, méta complémentaires
- Code injecté juste avant la fermeture du body : idéal pour widgets de chat, retargeting tardif, scripts asynchrones
Analyseur de contenu
Onglet Analyseur. Soumettez un produit, une catégorie, une page CMS ou du HTML brut à l’analyseur pour obtenir un score SEO global et un détail des métriques.
Métriques calculées
- Score SEO global (0-100) — pondération weighted des checks
- Lisibilité Flesch — approximation multilingue (vowel-group syllable count)
- Nombre de mots, nombre de phrases
- Densité du mot-clé principal (en %)
- Liens internes / externes / nofollow
- Images sans attribut alt
- Structure des titres H1 à H6
- Présence du mot-clé dans slug et premier paragraphe
Vérifications (checks)
L’analyseur retourne une liste de checks avec statut good / warn / bad :
- Longueur du title (50-60 caractères)
- Longueur de la meta description (140-160 caractères)
- Présence et longueur du slug
- Longueur du corps (mini 300 mots)
- Présence d’au moins une image avec alt
- Mot-clé dans le title, dans le premier paragraphe, dans le slug
- Densité du mot-clé entre 0,5 % et 2,5 %
- Au moins un H1 et plusieurs H2/H3
Édition en masse
Onglet Édition en masse. Grille paginée (30 entrées/page) avec filtres pour modifier rapidement meta_title, meta_description et link_rewrite sur produits, catégories ou pages CMS.
Filtres disponibles
- Toutes
- Sans title : seules les entrées avec meta_title vide
- Sans description : seules les entrées avec meta_description vide
- Recherche par nom
Appliquer les templates en masse
Le bouton Appliquer les templates applique automatiquement le template défini pour le type d’entité courant aux fiches correspondant aux filtres. Cochez Appliquer uniquement aux champs vides pour éviter d’écraser les méta déjà saisies.
Métabox SEO sur la fiche produit
Sur la page d’édition d’un produit en back-office, un encart DataFirefly SEO est ajouté avec :
- Un score SEO live (7 checks : longueur title, description, slug, body, image, EAN13, marque)
- Un aperçu SERP Google rendu fidèlement
- Le mot-clé principal détecté
Réglages avancés
Indexation
Onglet Réglages → Indexation :
- hreflang multilingue : génère les balises
link rel="alternate"sur toutes les pages - Stratégie x-default : Langue par défaut (recommandé), Anglais, ou Désactivé
- URL canonical : injecte
link rel="canonical" - Canonical sur les paginations : Sur la page courante (recommandé), Toujours sur la page 1, ou Pas de canonical
- noindex automatiques : pages /search, panier, mon compte, nouveautés, meilleures ventes, promos, facettes
- Canonical vers la page mère sur facettes : évite le duplicate content de la navigation à facettes
Images
- Génération automatique des attributs alt : à l’enregistrement d’une image sans alt, applique le template
- Template alt : par défaut
{product_name} - {shop_name} - Lazyload images natif : ajoute
loading="lazy"etdecoding="async"à toutes les images, avec fallback IntersectionObserver pour les imagesdata-src
Maintenance
- Vider le cache : purge le cache Smarty + cache PrestaShop
- Purger les vieux 404 : applique le seuil configuré
- Exporter toutes les données (JSON) : télécharge un fichier JSON avec toutes les tables SEO de la boutique courante (utile pour migration entre environnements ou backup avant désinstallation)
Multi-boutique
Toutes les fonctionnalités sont scopées par id_shop. En passant d’une boutique à une autre via le sélecteur de contexte PrestaShop, vous voyez et modifiez uniquement les données de cette boutique.
Cas particuliers à connaître :
- Templates : un template par couple (type d’entité, boutique). Définissez explicitement les templates pour chaque boutique.
- Sitemap : un sitemap_index distinct par boutique, accessible à
https://boutique-1.com/sitemap.xml,https://boutique-2.com/sitemap.xml, etc. - Robots.txt : règles par boutique, servies sur le domaine correspondant
- Redirections : par boutique
- Schémas personnalisés : par boutique
Dépannage
Le sitemap ne se génère pas
- Vérifiez que le dossier
modules/dfallinoneseo/sitemaps/est accessible en écriture par PHP - Vérifiez les permissions :
chmod 755 modules/dfallinoneseo/sitemaps/ - Augmentez
max_execution_timedans php.ini si vous avez plus de 50 000 produits
Les schémas JSON-LD n’apparaissent pas
- Vérifiez que le module est activé (Réglages → Général)
- Vérifiez que le type de schéma concerné est activé (Schema → Types de schémas générés)
- Videz le cache PrestaShop
- Inspectez la source HTML : les schémas sont injectés dans un bloc
script type="application/ld+json"
Les redirections 301 ne fonctionnent pas
- Vérifiez que le module est installé et activé
- Vérifiez que les redirections sont marquées actives (pastille ON)
- Pour les regex, testez votre expression sur regex101.com en mode PCRE
- L’ordre de priorité est : exact → préfixe → regex (par
hit_countdécroissant)
GA4 / GTM ne s’injecte pas
- Vérifiez le format de l’ID (
G-XXXXXXXouGTM-XXXXXXX) - Si Consent Mode v2 est actif, le snippet est en mode « denied » par défaut jusqu’au consentement. Vérifiez la couche CMP.
- Inspectez le
headde la page : le snippet GA4/GTM est injecté juste avant la fermeture
Le robots.txt ne change pas
- Vérifiez qu’aucun fichier
robots.txtstatique n’existe à la racine du site (il prendrait priorité sur le module). Supprimez-le. - Le module sert le robots.txt via une route PrestaShop — vérifiez que les URL réécrites sont activées
Erreur lors de la création des tables SQL à l’installation
- Vérifiez que l’utilisateur MySQL a les droits
CREATEetALTER - Vérifiez l’encodage : MySQL doit supporter
utf8mb4avec collationutf8mb4_unicode_ci - Si le préfixe de table custom de PrestaShop dépasse 5 caractères, certains noms d’index peuvent dépasser la limite MySQL de 64 caractères. Contactez le support.
Référence technique
Hooks utilisés
Le module enregistre 18 hooks :
displayHeader— injection des balises méta, canonical, hreflang, OG, Twitter, JSON-LD, GA4/GTM, vérificationsdisplayBeforeBodyClosingTag— injection GTM noscript, FB Pixel noscript, custom body-end codedisplayBackOfficeHeader— CSS/JS du back-officedisplayAdminProductsExtra— métabox SEO sur la fiche produitactionDispatcherBefore,actionDispatcherAfter— routing des redirections et capture 404actionObjectProductAddAfter,actionObjectProductUpdateAfter— auto-fill méta + auto-301actionObjectCategoryAddAfter,actionObjectCategoryUpdateAfter— idem catégorieactionObjectCmsAddAfter,actionObjectCmsUpdateAfter— idem CMSactionObjectManufacturerUpdateAfter,actionObjectSupplierUpdateAfter— auto-301 sur changement de slugactionAdminControllerSetMedia,actionFrontControllerSetMedia— assets CSS/JSdisplayProductExtraContent— réservé pour usages futursmoduleRoutes— routes/sitemap.xml,/plan-du-site,/robots.txt,/llms.txt
Tables SQL ajoutées
Toutes les tables utilisent le préfixe df_seo_, charset utf8mb4, collation utf8mb4_unicode_ci :
df_seo_meta,df_seo_meta_lang— surcharges méta par entitédf_seo_template,df_seo_template_lang— templates par typedf_seo_redirect— redirections 301/302/307/308/410df_seo_404— journal des 404df_seo_score— snapshots de score (analyseur)df_seo_keyword— focus keywordsdf_seo_robots_rule— règles robots.txtdf_seo_schema_custom— schémas JSON-LD personnalisésdf_seo_log— log diagnostic interne
Désinstallation
La désinstallation supprime les hooks et les onglets back-office, mais conserve les tables SQL et les données. Pour purger complètement :
DROP TABLE ps_df_seo_meta, ps_df_seo_meta_lang, ps_df_seo_template, ps_df_seo_template_lang,
ps_df_seo_redirect, ps_df_seo_404, ps_df_seo_score, ps_df_seo_keyword,
ps_df_seo_robots_rule, ps_df_seo_schema_custom, ps_df_seo_log;
DELETE FROM ps_configuration WHERE name LIKE 'DFSEO_%';
Mises à jour et support
- Mises à jour : 12 mois inclus dès l’achat. Renouvellement annuel optionnel à 49 €.
- Support : 12 mois par email, réponse sous 48h ouvrées.
- Changelog et téléchargement des dernières versions sur votre compte client DataFirefly.