Configurez l'attribution des revenus pour suivre les canaux marketing qui génèrent des ventes réelles. Guide d'implémentation étape par étape.
Prérequis
Avant de commencer :
- Script de suivi Zenovay installé
- Accès au code de paiement/achat
- Objectif de revenu activé
Configuration de base
Suivi simple des revenus
Suivez le revenu quand un achat se termine :
// On order confirmation page or in success callback
zenovay('revenue', 99.99, 'USD');
C'est tout pour le suivi de base !
Avec un nom d'objectif
Associez à un objectif spécifique :
zenovay('goal', 'purchase', {
value: 99.99
});
Implémentation complète
Objet de revenu complet
Incluez toutes les données pertinentes :
zenovay('revenue', 149.99, 'USD', {
// Recommended
order_id: 'ORD-12345',
// Optional - for detailed analysis
items: [
{
id: 'SKU-001',
name: 'Product Name',
price: 49.99,
quantity: 2,
category: 'Electronics'
},
{
id: 'SKU-002',
name: 'Accessory',
price: 50.00,
quantity: 1,
category: 'Accessories'
}
],
// Optional metadata
coupon: 'SAVE10',
shipping: 9.99,
tax: 12.50
});
Implémentation par plateforme
Shopify
Pour les boutiques Shopify :
- Allez à Paramètres → Paiement
- Ajoutez à la « Page de statut de la commande » :
{% if first_time_accessed %}
<script>
zenovay('revenue', {{ total_price | money_without_currency }}, '{{ currency }}', {
order_id: '{{ order_number }}',
items: [
{% for item in line_items %}
{
id: '{{ item.sku }}',
name: '{{ item.title | escape }}',
price: {{ item.final_price | money_without_currency }},
quantity: {{ item.quantity }}
}{% unless forloop.last %},{% endunless %}
{% endfor %}
]
});
</script>
{% endif %}
WooCommerce
Pour WordPress/WooCommerce :
- Ajoutez à la
functions.phpde votre thème ou à une extension :
add_action('woocommerce_thankyou', 'zenovay_track_revenue');
function zenovay_track_revenue($order_id) {
$order = wc_get_order($order_id);
?>
<script>
zenovay('revenue', <?php echo $order->get_total(); ?>, '<?php echo $order->get_currency(); ?>', {
order_id: '<?php echo $order_id; ?>'
});
</script>
<?php
}
React/Next.js
Dans votre composant de succès du paiement :
import { useEffect } from 'react';
function OrderConfirmation({ order }) {
useEffect(() => {
if (order && window.zenovay) {
window.zenovay('revenue', order.total, order.currency, {
order_id: order.id,
items: order.items.map(item => ({
id: item.sku,
name: item.name,
price: item.price,
quantity: item.quantity
}))
});
}
}, [order]);
return <div>Thank you for your order!</div>;
}
Suivi côté serveur
Enterprise PlanPour un suivi sécurisé côté serveur, utilisez le point de terminaison de suivi avec votre code de suivi :
// Node.js example - use the tracking endpoint directly
app.post('/api/order/complete', async (req, res) => {
const order = await processOrder(req.body);
await fetch('https://api.zenovay.com/e/YOUR_TRACKING_CODE', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Forwarded-For': req.headers['x-forwarded-for'] || req.socket.remoteAddress,
},
body: JSON.stringify({
type: 'revenue',
url: req.headers.referer || 'https://yoursite.com/checkout',
revenue: order.total,
order_id: order.id,
currency: 'USD'
}),
});
res.json({ success: true });
});
Configuration de l'attribution
Modèle d'attribution
Zenovay ne vous oblige pas à vous engager sur un modèle unique à l'avance. Ouvrez le tableau de bord de votre site web, allez à l'onglet Revenus, et changez le modèle directement sur la carte Attribution. Cinq modèles sont disponibles :
- Last Touch (par défaut)
- First Touch
- Linear
- Position-Based
- Time-Decay
Vous pouvez modifier le modèle à tout moment pour consulter les mêmes données sous un angle différent — il n'y a pas de paramètre « modèle par défaut » ou « fenêtre d'attribution » distinct à configurer en premier.
Choisir un modèle d'attribution
La carte Attribution de l'onglet Revenue vous permet de basculer entre cinq modèles par rapport. Choisissez celui qui correspond à votre question :
| Modèle | Quand l'utiliser |
|---|---|
| Last-Touch (par défaut) | Vous voulez savoir ce qui conclut les ventes |
| First-Touch | Vous voulez savoir ce qui génère la découverte |
| Linear | Vous voulez une répartition équilibrée et neutre sur le parcours |
| Position-Based | Vous voulez récompenser la découverte (40 %) et la conclusion (40 %) |
| Time-Decay | Vous avez des cycles de vente plus courts — les interactions récentes pèsent plus |
Le modèle choisi est enregistré dans l'URL, donc un rechargement le conserve. Si la plupart des conversions d'une période proviennent d'une seule session, les modèles multi-touch ressembleront beaucoup au Last-Touch — c'est attendu et cela se résout à mesure que des parcours multi-sessions s'accumulent. Pour une analyse plus détaillée de la différence entre les attributions first-touch et last-touch, consultez Attribution first-touch vs last-touch.
Pourquoi tous mes modèles d'attribution affichent-ils presque les mêmes chiffres ?
C'est normal et ce n'est pas un bug. Lorsque la plupart des conversions proviennent de visiteurs qui n'avaient qu'une seule session — ou qui sont restés sur un seul canal — avant de convertir, chaque modèle attribue 100 % du crédit à ce canal. C'est pourquoi Last-Touch, First-Touch, Linear, Position-Based et Time-Decay semblent presque identiques.
Les modèles commencent à diverger pour les visiteurs qui ont réellement traversé plusieurs canaux et sessions différents avant de convertir ; plus les parcours multi-sessions s'accumulent, plus les différences deviennent importantes.
Changer de modèle ne modifiera pas le canal IA — le trafic IA est toujours crédité à son propre canal quel que soit le modèle.
Conseil : pour voir les modèles diverger le plus, comparez First-Touch et Last-Touch — ils s'écartent dès que le premier et le dernier canal d'un visiteur sont différents.
Une conversion sans valeur monétaire compte tout de même dans l'attribution des conversions ; les chiffres de revenus n'apparaissent que lorsqu'un revenu est associé à l'objectif.
IA en tant que canal d'attribution
Zenovay présente IA comme un canal à part entière dans le panneau d'attribution, aux côtés de Direct, Organique, Payant, Social et Référent. Lorsqu'un visiteur qui convertit a été identifié comme trafic IA, cette conversion est créditée à IA au lieu d'être fondue dans Direct ou un canal UTM.
Dépliez la ligne IA pour la décomposer par produit d'IA :
- Produits identifiés — ChatGPT, Claude, Perplexity, Gemini, Copilot, DeepSeek et d'autres, lorsque la visite comportait un référent IA ou un paramètre UTM reconnaissable.
- Probable IA (non spécifiée) — visiteurs que l'heuristique Dark IA a identifiés comme provenant de l'IA même s'ils sont arrivés sans référent. Ils ne peuvent pas être rattachés à un produit précis, ils sont donc regroupés honnêtement sous ce libellé plutôt que devinés.
Gardez à l'esprit :
- Il s'agit d'une vue des conversions. Un produit IA qui envoie des visites mais aucune conversion attribuable sur la période sélectionnée n'apparaîtra pas ici — utilisez la vue Influence IA pour le trafic IA par produit.
- Ne voir que Probable IA (non spécifiée) est exact, et non une donnée manquante : cela signifie que les conversions IA de la période ont été détectées par heuristique sans référent identifié.
- L'attribution IA apparaît sur le tableau de bord authentifié ; elle n'est volontairement pas affichée sur les tableaux de bord publics ou partagés.
Attribution multi-appareils
Enterprise PlanSuivez sur les appareils :
- Identifiez les utilisateurs quand ils se connectent
- Le parcours est assemblé automatiquement
- Chemin complet visible
// When user logs in
zenovay('identify', userId);
Configuration des paramètres UTM
Suivi des campagnes
Assurez-vous que les paramètres UTM sont utilisés :
https://yoursite.com/?utm_source=google
&utm_medium=cpc
&utm_campaign=spring_sale
&utm_content=banner_1
Paramètres UTM
| Paramètre | Objet | Exemple |
|---|---|---|
| utm_source | Source de trafic | google, facebook |
| utm_medium | Moyen marketing | cpc, email |
| utm_campaign | Nom de la campagne | spring_sale |
| utm_content | Variante de l'annonce | banner_a |
| utm_term | Mots-clés | blue shoes |
Configuration du test
Mode debug
Activez la journalisation du debug :
zenovay('debug');
Effectuez ensuite un achat de test et vérifiez la console.
Achat de test
- Passez une commande de test
- Vérifiez la console du navigateur
- Vérifiez dans la vue en temps réel
- Confirmez dans le rapport de revenu
Liste de vérification de vérification
- Valeur du revenu correcte
- ID de commande enregistré
- Articles suivis (s'ils sont envoyés)
- Source attribuée correctement
- Devise correcte
Traitement des cas limites
Revenu récurrent
Pour les abonnements :
// Track initial purchase
zenovay('revenue', 29.99, 'USD', {
order_id: 'SUB-001',
type: 'subscription',
interval: 'monthly'
});
// Track renewals
zenovay('revenue', 29.99, 'USD', {
order_id: 'SUB-001-RENEWAL',
type: 'subscription_renewal',
original_order: 'SUB-001'
});
Remboursements
Traitez les remboursements correctement :
// Track refund
zenovay('revenue', -49.99, 'USD', {
order_id: 'REFUND-ORD-12345',
type: 'refund',
original_order: 'ORD-12345'
});
Expéditions partielles
Si le revenu est reconnu à l'expédition :
// Track each shipment
zenovay('revenue', 50.00, 'USD', {
order_id: 'ORD-12345-SHIP-1',
parent_order: 'ORD-12345'
});
Qualité des données
Prévenir les doublons
Assurez-vous que le revenu n'est pas suivi deux fois :
// Using localStorage to prevent duplicates
function trackOrderOnce(order) {
const tracked = localStorage.getItem(`tracked_${order.id}`);
if (tracked) return;
zenovay('revenue', order.total, 'USD', {
order_id: order.id
});
localStorage.setItem(`tracked_${order.id}`, 'true');
}
Valider avant d'envoyer
Vérifiez la qualité des données :
function trackRevenue(orderData) {
// Validate
if (!orderData.value || orderData.value <= 0) {
console.warn('Invalid order value');
return;
}
if (!orderData.order_id) {
console.warn('Missing order ID');
return;
}
// Track
zenovay('revenue', orderData.value, orderData.currency || 'USD', {
order_id: orderData.order_id
});
}
Dépannage
Le revenu n'apparaît pas
Si le revenu ne s'affiche pas :
-
Vérifiez que le suivi est activé
- Mode debug activé ?
- Erreurs de console ?
-
Vérifiez la configuration de l'objectif
- Objectif de revenu créé ?
- Objectif actif ?
-
Vérifiez le timing
- Après le chargement complet de la page ?
- Dans le bon callback ?
-
Validez les données
- La valeur est un nombre ?
- Pas 0 $ ?
Attribution manquante
Si la source n'est pas attribuée :
- Vérifiez la présence des paramètres UTM
- Vérifiez que le référent n'est pas bloqué
- Essayez un modèle d'attribution différent sur la carte Attribution de l'onglet Revenue
- Confirmez que la visite convertie a été enregistrée en premier lieu (vérifiez la vue en temps réel)
Les montants ne correspondent pas
Si les totaux diffèrent du compte :
- Comparez les plages de dates
- Vérifiez les remboursements
- Vérifiez la gestion des devises
- Cherchez les commandes manquantes
Considérations de sécurité
Limitations du suivi côté client
Soyez conscient que :
- Les valeurs peuvent être manipulées
- Pas pour les objectifs de facturation
- À titre d'analyse uniquement
Côté serveur pour la précision
Pour une précision critique :
- Mettez en œuvre le suivi côté serveur
- Vérifiez par rapport au backend
- Utilisez pour les rapports
Connecter un processeur de paiement (serveur à serveur)
Si vous traitez déjà des paiements via un processeur pris en charge, vous pouvez connecter votre compte à Zenovay au lieu de modifier votre code de paiement. Zenovay reçoit les webhooks du processeur, attribue chaque paiement encaissé à la session d'origine et alimente automatiquement le tableau de bord des revenus — sans appels zenovay('revenue', …) côté client.
L'onglet Paramètres Revenue vous permet de connecter Stripe, PayPal et Paddle. Chacun a un guide de configuration étape par étape :
| Processeur | Guide de configuration | Ce qui est suivi |
|---|---|---|
| Stripe | Intégration des revenus Stripe | Captures, remboursements, factures d'abonnement |
| PayPal | Intégration des revenus PayPal | Captures et remboursements |
| Paddle | Intégration des revenus Paddle | Captures et remboursements |
Choisissez votre processeur dans l'onglet Paramètres Revenue, collez vos identifiants, et Zenovay s'occupe du reste.
Quand préférer l'ingestion par webhook au suivi JS :
- Précision côté serveur — les charges utiles des webhooks sont signées par le processeur et ne peuvent pas être altérées par les navigateurs ou bloqueurs de publicité.
- Aucune modification du code de paiement — ouvrez le tableau de bord de votre site web, allez à l'onglet Revenus des paramètres, choisissez votre processeur, et collez vos identifiants.
- Les remboursements sont traités automatiquement — lorsqu'un remboursement est émis dans le tableau de bord de votre processeur, Zenovay l'enregistre.
Quand garder le suivi JS :
- Vous avez besoin de données au niveau des articles (
items[]) que le processeur n'inclut pas dans les webhooks. - Votre processeur ne figure pas dans la liste ci-dessus.
- Vous souhaitez que la commande apparaisse dans la vue des visiteurs en temps réel dès que le client atteint la page de succès (les webhooks arrivent quelques secondes plus tard).
Vous pouvez utiliser les deux approches sur le même site — Zenovay déduplique par order_id, donc la même commande n'est pas comptée deux fois.