Aller au contenu principal
Zenovay
Pro Plan15 minutesIntermédiaire

Configuration de l'attribution des revenus

Configurez le suivi et l'attribution des revenus — connectez les achats aux sources de trafic avec une implémentation étape par étape. Explorez la configuration des revenus et les bonnes pratiques.

revenueattributionsetuptracking
Dernière mise à jour :
Pro Plan

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 :

  1. Allez à Paramètres → Paiement
  2. 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 :

  1. Ajoutez à la functions.php de 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 Plan

Pour 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èleQuand l'utiliser
Last-Touch (par défaut)Vous voulez savoir ce qui conclut les ventes
First-TouchVous voulez savoir ce qui génère la découverte
LinearVous voulez une répartition équilibrée et neutre sur le parcours
Position-BasedVous voulez récompenser la découverte (40 %) et la conclusion (40 %)
Time-DecayVous 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 Plan

Suivez sur les appareils :

  1. Identifiez les utilisateurs quand ils se connectent
  2. Le parcours est assemblé automatiquement
  3. 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ètreObjetExemple
utm_sourceSource de traficgoogle, facebook
utm_mediumMoyen marketingcpc, email
utm_campaignNom de la campagnespring_sale
utm_contentVariante de l'annoncebanner_a
utm_termMots-clésblue 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

  1. Passez une commande de test
  2. Vérifiez la console du navigateur
  3. Vérifiez dans la vue en temps réel
  4. 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 :

  1. Vérifiez que le suivi est activé

    • Mode debug activé ?
    • Erreurs de console ?
  2. Vérifiez la configuration de l'objectif

    • Objectif de revenu créé ?
    • Objectif actif ?
  3. Vérifiez le timing

    • Après le chargement complet de la page ?
    • Dans le bon callback ?
  4. Validez les données

    • La valeur est un nombre ?
    • Pas 0 $ ?

Attribution manquante

Si la source n'est pas attribuée :

  1. Vérifiez la présence des paramètres UTM
  2. Vérifiez que le référent n'est pas bloqué
  3. Essayez un modèle d'attribution différent sur la carte Attribution de l'onglet Revenue
  4. 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 :

  1. Comparez les plages de dates
  2. Vérifiez les remboursements
  3. Vérifiez la gestion des devises
  4. 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 :

ProcesseurGuide de configurationCe qui est suivi
StripeIntégration des revenus StripeCaptures, remboursements, factures d'abonnement
PayPalIntégration des revenus PayPalCaptures et remboursements
PaddleIntégration des revenus PaddleCaptures 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.

Prochaines étapes

Cet article vous a-t-il aidé ?