Depuis iOS 14.5, les pixels basés navigateur ne génèrent plus de signaux fiables. Quand le taux de perte d'événements du pixel Meta dépasse 30 %, l'algorithme de campagne fonctionne en aveugle. La Conversion API n'est donc pas optionnelle — sans flux d'événements côté serveur, le paid media moderne ne fonctionne pas. Le problème : la configuration est complexe. sGTM, déduplication, qualité des événements et mapping de paramètres doivent tous s'emboîter correctement. Sinon, les événements dupliqués dégradent les performances de l'algorithme ou l'optimisation échoue faute de signaux insuffisants.
Pourquoi la Conversion API est différente du pixel
Le pixel Meta s'exécute dans le navigateur. Safari ITP, Firefox ETP et le rejet des banneau de consentement bloquent les événements. Sur iOS Safari, la limite de cookies de 7 jours restreint la fenêtre d'attribution. Une analyse de 2025 montre que 27 % des navigateurs rejettent par défaut les cookies tiers (données Statcounter). Le pixel seul ne garantit plus une couverture d'événements de 100 %.
La Conversion API envoie des événements via HTTP POST depuis le serveur. Pas de limite navigateur. Le consentement utilisateur ne bloque techniquement pas l'envoi d'événements (tu garantis la conformité GDPR — ce document est technique). Les événements côté serveur sont fusionnés avec les événements de pixel via un identifiant de déduplication. L'algorithme Meta ne compte pas deux fois la même conversion, mais améliore la qualité du signal. Le score de qualité d'appariement d'événements (Event Match Quality, EMQ) provient de cette fusion — un EMQ élevé signifie un meilleur ciblage et un CPA plus bas.
La configuration côté serveur offre également le contrôle des données de première partie. Contrairement au pixel, tu peux ajouter des paramètres supplémentaires à l'objet user_data : external_id, client_user_agent, fbc (click ID), fbp (browser ID). Ce signal enrichi augmente la confiance en attribution. Selon la documentation Meta, quand le score EMQ dépasse 6/10, les performances de campagne s'améliorent de 15 à 25 %.
Calcul du score Event Match Quality
Le score EMQ de Meta examine ces paramètres :
| Paramètre | Poids | Format |
|---|---|---|
em (email) | Élevé | Hash SHA-256, minuscule, trim |
ph (téléphone) | Élevé | Format E.164 (+33... par exemple) |
fn, ln | Moyen | Hash SHA-256 |
client_ip_address | Moyen | IPv4/IPv6 brut |
client_user_agent | Moyen | Chaîne brute |
fbc, fbp | Élevé | Click ID/browser ID |
external_id | Critique | ID utilisateur CRM |
Si tu envoies tous les paramètres, EMQ se situe entre 8 et 10. Si tu envoies seulement em + client_ip_address, tu resteras entre 4 et 6. Chez les utilisateurs iOS, client_ip_address peut être proxifié — dans ce cas, external_id et fbc sont critiques.
Configuration de la CAPI via sGTM
Google Tag Manager côté serveur (sGTM) est l'architecture la plus courante pour la Conversion API. L'intégration backend directe est possible, mais sGTM offre ces avantages : collecte d'événements depuis le client web, gestion de l'ID de déduplication, un seul endpoint pour plusieurs plateformes (Meta, Google, TikTok).
Étapes de configuration :
- Déploie le container sGTM dans le cloud. Google Cloud Run ou App Engine recommandé. N'utilise pas d'hébergement partagé comme App Engine Taobao — la latence serait trop élevée.
- Envoie des événements depuis GTM côté client via
dataLayer.push. Exemple :
dataLayer.push({
'event': 'purchase',
'ecommerce': {
'transaction_id': 'T12345',
'value': 99.90,
'currency': 'EUR'
},
'user_data': {
'email_address': '[email protected]',
'phone_number': '+33612345678',
'address': {
'city': 'Paris',
'country': 'FR'
}
}
});
- Configure un tag Meta Conversion API dans sGTM. Event Name Mapping :
purchase→Purchase,add_to_cart→AddToCart. Pour chaque événement, synchronise le paramètreevent_idcôté client — c'est obligatoire pour la déduplication. - Génère l'
event_idcôté client dans GTM. Crée un ID unique (timestamp + chaîne aléatoire). Envoie le même ID au pixel et à sGTM :
const eventId = Date.now() + '-' + Math.random().toString(36).substr(2, 9);
// Événement pixel
fbq('track', 'Purchase', {value: 99.90, currency: 'EUR'}, {eventID: eventId});
// Événement sGTM
dataLayer.push({
'event': 'purchase',
'event_id': eventId,
...
});
- Mappe l'
event_idà la CAPI dans le tag sGTM. Dans le template de tag Meta, entre la variable{{Event ID}}dans le champ « Deduplication Event ID ».
Avec une configuration correcte, l'événement n'apparaît pas deux fois dans Meta Events Manager. Tu verras la fusion pixel + événement serveur dans la colonne « Matched Events ». Si le score EMQ est élevé, tu verras un badge « Good » ou « Great ».
Logique de déduplication et cas limites
La déduplication fonctionne par correspondance de event_id + event_time. Meta déduplique les événements portant le même event_id reçus dans les 48 heures. Des problèmes surviennent dans ces scénarios :
- Événement client en retard : Si un utilisateur quitte le checkout et revient 2 jours plus tard, l'événement navigateur peut être déclenché tardivement. L'événement serveur a déjà été envoyé, et l'événement pixel ne peut pas être dédupliqué. Solution : synchronise le paramètre
event_timeavec le timestamp de transaction. - Conversion hors ligne : Pour les ventes téléphoniques, tu dois envoyer manuellement un événement serveur. Configure
event_timeau moment réel de la transaction, et récupèreevent_iddepuis le CRM. - Instances serveur multiples : Dans une architecture microservices, plusieurs instances backend peuvent traiter la même transaction et envoyer des événements dupliqués. Solution : dérive l'
event_idde l'ID de transaction (hash déterministe), utilise-le comme clé d'idempotence.
La documentation Meta s'attend à ce que 95 % des événements arrivent dans les 5 minutes. Les événements dépassant 1 heure peuvent chuter hors de la fenêtre d'attribution. La latence des événements serveur est critique — sur Google Cloud Run, la latence médiane doit être inférieure à 200 ms.
Enrichissement des paramètres de données utilisateur
La puissance de la CAPI provient du détail dans l'objet user_data. La configuration minimale n'envoie que em + client_ip_address, mais le score EMQ restera bas. La configuration optimale :
| Paramètre | Source | Normalisation |
|---|---|---|
em | Entrée formulaire / CRM | Minuscule, trim, SHA-256 |
ph | Formulaire de paiement | Format E.164, SHA-256 |
fn, ln | Formulaire de facturation | Minuscule, trim, SHA-256 |
ct, st, zp, country | Données d'adresse | Minuscule, pas d'espaces |
external_id | ID utilisateur CRM | Texte brut ou hash |
client_ip_address | En-tête de requête | IPv4/IPv6 brut |
client_user_agent | En-tête de requête | Chaîne brute |
fbc | Paramètre URL fbclid | Chaîne brute |
fbp | Cookie _fbp | Chaîne brute |
external_id est particulièrement important : si tu envoies l'ID utilisateur unique du CRM, Meta peut effectuer une attribution multi-appareils. Si le même utilisateur clique sur mobile puis fait un achat sur desktop, external_id permet la correspondance.
Utilise correctement la fonction de hash :
// ❌ Faux
const emailHash = btoa(email); // Codage Base64, pas un hash
// ✅ Correct
const emailHash = sha256(email.trim().toLowerCase());
Meta effectue une normalisation automatique côté pixel via Advanced Matching, mais pour les événements côté serveur, TU dois garantir la normalisation.
Test et validation
Meta Events Manager dispose d'un outil « Test Events ». Quand tu envoies un événement test depuis sGTM, ajoute le paramètre test_event_code :
// Paramètres du tag sGTM
Test Event Code: TEST12345
Tu verras les événements test en temps réel dans Events Manager. Vérifie le score EMQ, les paramètres appariés et l'état de déduplication.
Avant de passer en production, une liste de contrôle :
- Au moins 1 événement purchase arrive-t-il depuis pixel + serveur de manière dédupliquée ?
- Le score EMQ dépasse-t-il 7/10 ?
-
event_timeest-il dans les 5 secondes du timestamp client ? - Les hash PII sont-ils au bon format ? (Valide avec l'outil de hash de Meta)
- La latence sGTM est-elle inférieure à 500 ms ? (Vérifie avec Cloud Monitoring)
Si tu ne combines pas la configuration de la CAPI avec une stratégie de performance marketing, la qualité du signal reste élevée mais la campagne ne s'optimise pas. La stratégie de bidding, la configuration des tests créatifs et la segmentation d'audience nécessitent une architecture séparée — la CAPI fournit seulement la base d'attribution.
Lift de conversion et fenêtre d'attribution
Les événements côté serveur n'allongent pas la fenêtre d'attribution, mais réduisent la perte de signaux. La fenêtre d'attribution par défaut de Meta est 7 jours pour les clics / 1 jour pour les vues. Chez les utilisateurs iOS, la probabilité que le pixel fournisse un signal sur 7 jours est faible — le cookie navigateur est supprimé. L'événement serveur capture la conversion dans tous les cas.
Mesure le lift de la CAPI avec un test d'incrémentalité. Dans le groupe témoin, utilise seulement le pixel ; dans le groupe test, active pixel + CAPI. Sur une période de test de 4 semaines, si le delta du taux de conversion est de 15 à 25 %, la CAPI fonctionne. Sans lift de conversion, un score EMQ élevé n'a pas de sens — si tu as un EMQ élevé mais un lift faible, tu as un autre problème (créatifs, offre, adéquation audience).
La mesure d'événements agrégés (AEM) de Meta impose une limite de 8 événements de conversion sur iOS. La CAPI n'élimine pas cette limite, mais compense la perte d'événements de pixel. Si la part des utilisateurs iOS dépasse 40 %, la CAPI est critique.
Quand l'infrastructure d'événements côté serveur est configurée correctement, l'algorithme de campagne reçoit des signaux fiables. Au-dessus d'un score EMQ de 8/10, le CPA baisse de 20 à 30 % (étude de cas interne Roibase, vertical e-commerce, Q4 2025). Même si la configuration semble complexe, c'est une infrastructure obligatoire en paid media moderne — pas une option.