One Pixel Tracking en Français
Le pixel tracking : comprendre, implémenter et exploiter le suivi d’ouverture d’e-mail sous WordPress & Outlook
Sommaire
Résumé : ce guide détaille la technique du « pixel invisible », son intérêt marketing, sa mise en place côté WordPress (base de données, PHP, tableau de bord Elementor Pro) et l’intégration côté Outlook via une macro VBA. Chaque section est accompagnée d’un résumé rapide pour vous permettre d’avancer étape par étape sans rien oublier.
1. Qu’est-ce que le pixel tracking ?
Résumé : un image invisible de 1×1 px intégrée dans le corps d’un e-mail. Lorsque le destinataire ouvre le message, son client mail charge l’image depuis votre serveur : vous enregistrez date, IP, user-agent, localisation, device, etc.
- Poids : 43 octets (GIF base64)
- En-têtes HTTP : IP, UA, referer, accept-language
- Aucun cookie déposé côté destinataire
2. Pourquoi le mettre en place ?
Résumé : mesurer le taux d’ouverture réel, segmenter les actifs/inactifs, optimiser l’objet, le jour et l’heure d’envoi, détecter les fausses adresses, justifier l’intérêt légitime RGPD.
3. Schéma global d’implémentation
Résumé :
- Outlook → macro VBA → ajoute le pixel dans le HTML avant l’envoi
- Le pixel appelle https://votresite.com/email-tracker.php?email=…&sent_at=…
- email-tracker.php enregistre l’ouverture dans wp_email_tracking
- Page Elementor Pro lit les données via AJAX et affiche stats + délai d’ouverture
4. Préparer WordPress : table SQL & sécurité
Résumé : créer la table wp_email_tracking avec sent_at, opened_at, IP, UA, device, country, etc. Toujours préfixer avec $wpdb->prefix et utiliser $wpdb->prepare().
CREATE TABLE IF NOT EXISTS wp_email_tracking (
id bigint(20) NOT NULL AUTO_INCREMENT,
email_address varchar(255) NOT NULL,
email_subject varchar(500) DEFAULT NULL,
sent_at datetime DEFAULT NULL,
opened_at datetime DEFAULT NULL,
ip_address varchar(45) DEFAULT NULL,
user_agent text DEFAULT NULL,
device_type varchar(50) DEFAULT NULL,
os varchar(100) DEFAULT NULL,
browser varchar(100) DEFAULT NULL,
country varchar(100) DEFAULT NULL,
city varchar(100) DEFAULT NULL,
latitude float DEFAULT NULL,
longitude float DEFAULT NULL,
opened tinyint(1) DEFAULT 0,
email_id varchar(100) DEFAULT NULL,
PRIMARY KEY (id),
KEY email_address (email_address),
KEY opened_at (opened_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;5. Créer le fichier « pixel » PHP
Résumé : placer email-tracker.php à la racine de WordPress (au même niveau que wp-config.php). Inclure wp-load.php pour accéder aux fonctions WordPress et à $wpdb.
Extrait clé : récupérer $_GET['sent_at'] et insérer dans la base via $wpdb->insert() puis renvoyer le GIF 1×1 avec les bons headers anti-cache.
require_once 'wp-load.php';
$email = isset($_GET['email']) ? sanitize_email($_GET['email']) : '';
$sent_at = isset($_GET['sent_at']) ? sanitize_text_field($_GET['sent_at']) : null;
// ... récupération IP, UA, géoloc ...
$wpdb->insert($table, [
'email_address' => $email,
'sent_at' => $sent_at,
'opened_at' => current_time('mysql'),
// ...
]);
header('Content-Type: image/gif');
echo base64_decode('R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7');6. Short-code & envoi traqué depuis WordPress
Résumé : dans functions.php (ou plugin) créer un shortcode [tracking_pixel email="" subject="" id=""] et une fonction send_tracked_email($to,$subject,$message,$headers) qui ajoute le pixel avant .
7. Tableau de bord Elementor Pro (HTML + JS + AJAX)
Résumé :
- Créer une page « Email Tracking » avec Elementor Pro
- Glisser un widget HTML et coller le code fourni (stats-cards, filtres date, table responsive)
- Ajouter l’action AJAX dans functions.php :
wp_ajax_get_email_tracking_data - JavaScript côté widget :
fetch('/wp-admin/admin-ajax.php?action=get_email_tracking_data') - Fonction
getTimeElapsed(sent, opened)pour afficher « 2min » ou « 1j 3h »
8. Outlook : installer la macro VBA
Résumé :
- Ouvrir Outlook → Touche ALT + F11 (éditeur VBA)
- Dans « Project1 » → Microsoft Outlook Objects → ThisOutlookSession
- Coller la macro Application_ItemSend (voir section suivante)
- Enregistrer → fermer → redémarrer Outlook
- Autoriser les macros : Fichier → Options → Centre de gestion de la confidentialité → Paramètres des macros → Activer toutes les macros (temporairement) ou signer le projet
9. Détail ligne à ligne de la macro VBA
Résumé : la procédure se déclenche à chaque envoi (ItemSend), récupère le 1er destinataire, le sujet, génère un ID unique et l’heure d’envoi au format MySQL, puis injecte le pixel juste avant </body> uniquement si le format est HTML.
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim dest As String, sujet As String, id As String, sent As String, pixel As String
If Item.Recipients.Count = 0 Then Exit Sub
dest = Item.Recipients(1).Address
sujet = Replace(Item.Subject, " ", "+")
id = "email_" & Format(Now, "yyyymmddhhnnss")
sent = Format(Now, "yyyy-mm-dd hh:nn:ss") ' MySQL
pixel = "<img src=""https://pro-dig-it.com/email-tracker.php?email=" & dest & _
"&subject=" & sujet & "&id=" & id & "&sent_at=" & sent & """ width=""1"" height=""1"" " & _
"style=""display:block;border:0;"" alt="""" />"
If Item.BodyFormat = olFormatHTML Then
Item.HTMLBody = Replace(Item.HTMLBody, "</body>", pixel & "</body>")
End If
End Sub10. Conformité RGPD & bandeau info
Résumé :
- Base légale : intérêt légitime (art. 6.1.f) mais droit d’opposition clair
- Mentionner la pratique dans la politique de confidentialité (clause + durée 12 mois)
- Proposer un lien « refuser le tracking » (bloquer images par défaut) ou un bandeau si tu utilises un formulaire d’inscription
- Procédure de suppression sur demande (utiliser l’email ou l’ID généré)
11. Tester, déboguer, améliorer
Résumé :
- Envoyer un e-mail à une adresse Gmail/Outlook avec images autorisées
- Vérifier dans phpMyAdmin qu’une ligne apparaît (opened = 1)
- Rafraîchir la page Elementor → la ligne doit apparaître avec temps écoulé
- Si pixel non chargé : vérifier header Content-Type, rewrite rules, cache
- Pour debug VBA : ajouter MsgBox pixel avant Replace, ou utiliser le mode pas à pas (F8)