DataFirefly Cookie Consent — Guide complet
Installation, configuration du bandeau, Google Consent Mode v2, audit des trackers et journal CNIL/Garante du plugin WordPress DataFirefly Cookie Consent.
Présentation
DataFirefly Cookie Consent est un plugin WordPress et WooCommerce de gestion du consentement aux cookies. Il combine trois briques : un bandeau de consentement conforme RGPD/CNIL/Garante, l’émission native des signaux Google Consent Mode v2 avant tout tag Google, et un audit qui détecte les trackers réellement chargés sur votre site avec journal de preuve exportable.
Prérequis
- WordPress 6.2 ou supérieur
- PHP 8.0 ou supérieur
- WooCommerce 8.0+ (optionnel — le plugin fonctionne aussi sur WordPress seul, compatibilité HPOS déclarée)
- GTM ou GA4 déjà installé si vous voulez profiter du Consent Mode v2 (le plugin n’installe pas les tags Google à votre place)
Installation
- Téléchargez le fichier
df-cookie-consent.zipdepuis votre compte DataFirefly. - Dans l’admin WordPress, allez dans Extensions → Ajouter → Téléverser une extension, sélectionnez le ZIP puis cliquez sur Installer maintenant.
- Cliquez sur Activer. À l’activation, le plugin crée la table de journal
wp_dfcc_consent_log, génère un salt aléatoire pour le hash des IPs et programme deux tâches cron (purge quotidienne du journal et scan des trackers). - Un nouveau menu Cookie Consent apparaît dans la barre latérale de l’admin avec quatre pages : Tableau de bord, Réglages, Audit et Journal.
Le bandeau s’affiche immédiatement sur le frontend avec les réglages par défaut (layout barre en bas de page, thème clair, mode opt-in, les 4 catégories activées).
Configuration du bandeau
Tous les réglages se trouvent dans Cookie Consent → Réglages.
Comportement général
- Activer le bandeau : interrupteur global du plugin.
- Mode : opt-in (obligatoire en UE — aucun cookie non essentiel avant consentement) ou opt-out.
- Bouton Tout refuser au premier niveau : activé par défaut, conformément à la recommandation CNIL du 17 septembre 2020. Ne le désactivez pas si votre audience est européenne.
- Durée de vie du cookie de consentement : 180 jours par défaut. Le choix de l’utilisateur est stocké dans le cookie
dfcc_consent(encodé, first-party). - Version de la politique : incrémentez ce numéro quand votre politique cookies change de manière substantielle — le bandeau sera automatiquement re-présenté à tous les visiteurs et le journal enregistrera la nouvelle version.
Apparence
- Layout : barre pleine largeur, carte d’angle ou modal centrée.
- Position : haut ou bas de page (pour les layouts barre et carte).
- Thème : clair, sombre ou auto (suit la préférence système du visiteur via prefers-color-scheme).
- Couleur d’accent : personnalise la couleur du bouton principal.
Sur mobile (moins de 640 px), le bandeau passe automatiquement en plein écran pour rester lisible. Les animations respectent prefers-reduced-motion.
Catégories de cookies
Quatre catégories sont préconfigurées, chacune avec un libellé et une description modifiables :
- Nécessaires (necessary) — toujours actifs, non désactivables par le visiteur : panier, session, sécurité.
- Fonctionnels (functional) — préférences, langue, chat.
- Mesure d’audience (analytics) — Google Analytics, Matomo, etc.
- Publicité ciblée (marketing) — Google Ads, Meta Pixel, remarketing.
Textes et liens
Le titre du bandeau, le texte d’introduction et les libellés des quatre boutons (Tout accepter, Tout refuser, Personnaliser, Enregistrer mes choix) sont modifiables dans les réglages. Renseignez également les URLs de votre politique de confidentialité et de votre politique cookies — elles s’affichent en liens discrets sous les boutons. Tous les textes passent par les fonctions de traduction WordPress : le plugin est livré avec 5 catalogues (FR, EN, ES, DE, IT) et reste surchargeable via Loco Translate.
Google Consent Mode v2
C’est le cœur technique du plugin. Depuis mars 2024, Google exige que les sites européens émettent les 7 signaux Consent Mode v2 pour continuer à mesurer les conversions Google Ads et construire les audiences GA4.
Fonctionnement
Le plugin imprime un bloc gtag('consent', 'default', ...) dans le head HTML avec la priorité 1 de wp_head — c’est-à-dire avant tout container GTM ou tag GA4 chargé de manière standard. Les 7 signaux émis :
ad_storage,ad_user_data,ad_personalization— pilotés par la catégorie Publicité cibléeanalytics_storage— piloté par la catégorie Mesure d’audiencefunctionality_storage,personalization_storage— pilotés par la catégorie Fonctionnelssecurity_storage— toujours granted (recommandation Google)
Le mapping catégories → signaux est automatique : aucun paramétrage manuel n’est nécessaire. Quand le visiteur fait son choix, un gtag('consent', 'update', ...) est émis immédiatement et le choix est réappliqué comme état par défaut à chaque page suivante.
Réglages Consent Mode
- Région EEA : par défaut, le deny strict ne s’applique qu’aux 31 pays de l’EEE (plus Royaume-Uni et Suisse) via le paramètre region de gtag — le reste du monde reste en granted. Détection Cloudflare native via l’en-tête CF-IPCountry.
- url_passthrough : activé par défaut. Conserve les identifiants de clic gclid et dclid dans les URLs même en cas de refus, ce qui permet la mesure de conversions sans cookies.
- ads_data_redaction : activé par défaut. Censure les données utilisateur envoyées à Google quand ad_storage est denied.
- wait_for_update : 500 ms par défaut. Délai laissé aux tags Google pour attendre la mise à jour du consentement.
Vérifier que tout fonctionne
- Ouvrez votre site en navigation privée, ouvrez la console du navigateur et tapez
dataLayer: vous devez voir l’entrée consent default avant l’entrée gtm.js. - Dans Google Tag Assistant ou le mode Preview de GTM, l’onglet Consent doit afficher les 7 signaux avec leur état.
- Acceptez le bandeau puis retapez
dataLayer: une entrée consent update doit apparaître avec les nouveaux états.
Audit de conformité
La page Cookie Consent → Audit lance un scan qui va chercher votre page d’accueil et analyse le HTML réellement servi.
Ce que détecte le scan
- 23 trackers connus : Google Analytics 4, GTM, Meta Pixel, TikTok, LinkedIn, Pinterest, Snapchat, Twitter/X, Bing UET, Matomo, Microsoft Clarity, Hotjar, Mixpanel, Plausible, HubSpot, Intercom, Crisp, Tawk, YouTube, Vimeo, Stripe et autres — chacun classé dans sa catégorie de consentement attendue.
- 11 plugins WordPress à risque : MonsterInsights, Site Kit, PixelYourSite, Facebook/Pinterest/TikTok for WooCommerce, HubSpot, MC4WP et autres plugins qui injectent des trackers de leur côté.
- Cookies posés côté serveur : snapshot avec identification automatique du vendor (_ga, _fbp, _gcl, etc.).
Score et recommandations
Le scan produit un score de conformité de 0 à 100 basé sur l’écart entre vos catégories déclarées et les trackers réellement détectés. Les problèmes sont classés en trois niveaux — critical, warning, info — chacun avec une recommandation actionnable (par exemple : un tracker marketing détecté alors que la catégorie est désactivée dans le bandeau). Un scan automatique tourne aussi en tâche de fond via le cron dfcc_cron_scan_trackers.
Journal de consentement
La page Cookie Consent → Journal liste chaque événement de consentement enregistré dans la table dédiée wp_dfcc_consent_log.
Données enregistrées
- Horodatage UTC, UID anonyme persistant (traçabilité multi-événements d’un même visiteur)
- Type d’événement : accept_all, reject_all, custom, withdraw
- État complet par catégorie, version de la politique et du bandeau
- IP doublement protégée : hash SHA-256 avec le salt aléatoire généré à l’activation (irréversible), plus IP tronquée à /24 (IPv4) ou /64 (IPv6) pour analyse anonyme
- User agent, URL de la page, referer, région, langue, user_id WordPress si connecté
Filtres et export
Filtrez par période, type d’événement ou UID, puis exportez en CSV (BOM UTF-8, séparateur point-virgule — s’ouvre directement dans Excel français) ou en JSON pretty. Ces exports constituent votre preuve de consentement en cas de contrôle CNIL ou Garante.
Rétention
Par défaut, le journal est conservé 1825 jours (5 ans, durée recommandée par la CNIL). La purge automatique tourne chaque nuit via le cron dfcc_cron_purge_logs. La rétention est ajustable dans les réglages. À noter : la désactivation du plugin conserve les logs (preuve de consentement) ; seule la désinstallation complète via Extensions → Supprimer purge la table, les options et les crons.
Lien « Gérer mes cookies » dans le footer
La réglementation impose que le visiteur puisse modifier son choix à tout moment. Deux options :
- Shortcode : placez
Gérer mes cookiesdans un widget ou un menu de footer — il génère un lien qui rouvre la modal de personnalisation. - API JavaScript : appelez
window.dfcc.open()depuis n’importe quel élément de votre thème.
API pour les développeurs
API JavaScript
L’objet global window.dfcc expose :
dfcc.open()— ouvre la modal de personnalisationdfcc.accept()— accepte toutes les catégoriesdfcc.reject()— refuse toutes les catégories optionnellesdfcc.withdraw()— retire le consentement (événement withdraw journalisé)dfcc.getConsent()— retourne l’état complet du consentementdfcc.hasConsent('analytics')— vérifie une catégorie donnée (utile pour conditionner vos propres scripts)
Endpoint REST
Un endpoint POST est disponible sur wp-json/dfcc/v1/consent pour enregistrer un événement de consentement depuis votre propre code (protégé par nonce).
Hooks WordPress
dfcc_before_banner_render— action déclenchée avant le rendu du bandeau (pour le masquer sur certaines pages par exemple)dfcc_after_consent_logged— action déclenchée après chaque écriture dans le journal (pour synchroniser un CRM par exemple)dfcc_consent_mode_defaults— filtre sur les états par défaut des 7 signaux Consent Modedfcc_scan_trackers_patterns— filtre pour ajouter vos propres patterns de détection au scanner
Dépannage
- Les signaux Consent Mode n’apparaissent pas avant GTM : vérifiez qu’aucun plugin de performance ne déplace ou diffère les scripts du head. Le bloc dfcc-consent-mode-default doit rester inline et non différé.
- Le bandeau réapparaît à chaque visite : vérifiez qu’un système de cache ne sert pas une page figée avec un ancien cookie, et que la durée de vie du cookie n’est pas à 0.
- Le scan d’audit échoue : le serveur doit pouvoir faire une requête HTTP vers sa propre page d’accueil. Sur certains hébergements avec loopback bloqué, autorisez les requêtes locales ou vérifiez le pare-feu.
- Les IPs journalisées sont celles de Cloudflare : le plugin lit CF-Connecting-IP en priorité — si le problème persiste, vérifiez que votre configuration serveur transmet bien les en-têtes Cloudflare.