Modèles d'attribution
Chaque visiteur dans Zenovay porte deux instantanés d'attribution : son canal first-touch (comment il vous a découvert) et son canal last-touch (canal de la session de conversion ou de la session la plus récente). Les deux sont stockés indépendamment — le first-touch est verrouillé à la toute première observation et n'est jamais écrasé.
Pourquoi deux instantanés
L'attribution marketing est une question de crédit. Si un visiteur arrive d'abord par recherche Google organique, revient trois semaines plus tard via une annonce LinkedIn payante, puis convertit en visite directe :
- Last-touch crédite direct. (Sous-estime souvent le marketing.)
- First-touch crédite organic search. (Surestime souvent le SEO.)
- Les modèles linéaire / position-based / time-decay répartissent le crédit sur chaque canal du parcours du visiteur — sélectionnables dans l'onglet Revenue (voir ci-dessous).
Zenovay commence simple : first-touch et last-touch sont stockés, et le tableau de bord permet de basculer entre les deux.
Ce que capture le first-touch
À la toute première observation d'un visiteur, Zenovay remplit ces colonnes :
| Colonne | Signification |
|---|---|
first_touch_channel | Canal — organic, direct, referral, social, email, paid, ai |
first_touch_utm_source | UTM source, si présent |
first_touch_utm_medium | UTM medium |
first_touch_utm_campaign | UTM campaign |
first_touch_utm_content | UTM content |
first_touch_utm_term | UTM term |
first_touch_referrer | URL de référent du document |
first_touch_landing_page | Première URL d'arrivée |
first_touch_at | Horodatage de la première observation |
Ces champs ne sont jamais écrasés lors des sessions ultérieures. Les colonnes non préfixées (channel, utm_*, referrer, landing_page) sont mises à jour à chaque session et représentent le last-touch.
Les visiteurs observés avant le 30/04/2026 ont des valeurs first-touch NULL. L'historique n'a pas été rétro-rempli.
Classification des canaux
Les canaux sont classés dans cet ordre de priorité :
- Click IDs (
gclid,fbclid,ttclid,msclkid) — toujours paid. utm_medium—cpc/ppc/paid/display/banner/cpm→ paid ;email→ email ;social→ social ;referral/affiliate→ referral ;organic→ organic.utm_sourcecomparé à des listes curées.- Hostname du référent — moteurs de recherche → organic ; plateformes sociales → social ; webmail → email ; sinon → referral.
- Détection de navigateur in-app (Discord, Facebook, Instagram, …) — social.
- Pas de référent + pas d'UTM → direct.
Un visiteur identifié par l'heuristique IA de Zenovay comme un bot est forcé sur ai quel que soit l'UTM.
Trafic email — le correctif référent vide
Les liens dans les emails n'ont généralement pas de header Referer. Sans UTM, ce trafic était auparavant mal classé en direct.
Zenovay capture cela de deux façons :
utm_medium=email→ canal email, peu importe le référent.- Pas de référent +
utm_sourcecorrespondant à un ESP connu (Mailchimp, Klaviyo, HubSpot, ActiveCampaign, Brevo, ConvertKit, MailerLite, Beehiiv, Customer.io, GetResponse, Omnisend, Substack, Drip, Intercom, Postscript, Attentive, Iterable, Braze, Resend, Loops, Marketo, Pardot, etc.) → canal email.
La liste complète des ESP est dans api-zenovay/src/constants/domains.ts (EMAIL_UTM_SOURCES). Pour que vos campagnes email soient bien classées :
<!-- Convention UTM recommandée pour tous les liens d\'email -->
<a href="https://votre-site.com/?utm_source=mailchimp&utm_medium=email&utm_campaign=launch">
Lire la suite
</a>
utm_medium=email OU un utm_source reconnu suffit — pas besoin des deux.
Lire l'attribution dans le tableau de bord
L'onglet Sources et la fiche détail visiteur permettent désormais de basculer entre first-touch et last-touch directement dans l'UI — plus besoin d'interroger la base.
Onglet Sources
La carte Sources du tableau de bord a un bouton First touch | Last touch dans son en-tête. La sélection persiste dans l'URL (?attribution=first ou ?attribution=last), donc le rechargement et la navigation arrière/avant préservent ton choix. Par défaut : last-touch (comme avant).
La carte a quatre vues de premier niveau :
| Onglet | Attribution par défaut | Ce qui est montré |
|---|---|---|
| Channel | Suit la bascule | Visiteurs ventilés en 9 buckets : Direct, Organic Search, Organic Social, Referral, Paid Search, Paid Social, Email, Affiliate, Display |
| Referrer | Suit la bascule | Top domaines référents avec favicons ; navigateurs in-app (ChatGPT, Snapchat, etc.) classés via utm_source |
| UTMs | Suit la bascule | Cinq sous-onglets : Source, Medium, Campaign, Content, Term. Un bucket (none) compte les visiteurs sans cette dimension |
| Keyword | Toujours last-touch | Depuis ta connexion Google Search Console ; la bascule ne s'applique pas |
En basculant sur First touch, les vues Channel / Referrer / UTM passent aux valeurs premier observées du visiteur. Les analytics importés (imports CSV Plausible) sont last-touch uniquement — ces lignes sont ignorées en vue first-touch pour préserver la cohérence du modèle.
Les tableaux de bord publics affichent toujours l'attribution last-touch. Le bouton est réservé à l'owner en V1 ; un défaut côté serveur par partage suivra.
Fiche détail visiteur
En cliquant sur un profil visiteur, la barre latérale affiche un panneau Attribution compact : first-touch (channel + utm_source + landing + date première vue) à gauche, last-touch (channel + utm_source + referrer + landing) à droite. Le panneau se masque pour les visiteurs antérieurs à FND-B (≈2% de l'historique) afin d'éviter une ligne de tirets.
Onglet Revenue
La carte Attribution de l'onglet Revenue propose un sélecteur de cinq modèles — Last-Touch (par défaut), First-Touch, Linear, Position-Based et Time-Decay. Le choix persiste dans l'URL (?model=), donc le rechargement et la navigation arrière/avant conservent le modèle choisi. Par défaut : last-touch.
Les cinq modèles d'attribution
Chaque modèle répond différemment à la question « quel canal reçoit le crédit de cette conversion ? » :
| Modèle | Ce qu'il crédite | Quand l'utiliser |
|---|---|---|
| Last-Touch | 100 % au dernier canal avant la conversion | Vous voulez savoir ce qui conclut les ventes |
| First-Touch | 100 % au canal qui a amené le visiteur en premier | Vous voulez savoir ce qui génère la découverte |
| Linear | Réparti équitablement sur chaque canal du parcours | Vous voulez une vue équilibrée et neutre |
| Position-Based | 40 % premier, 40 % dernier, 20 % réparti au milieu | Vous voulez récompenser découverte ET conclusion |
| Time-Decay | Plus de crédit aux canaux proches de la conversion | Vous avez des cycles de vente plus courts |
Time-Decay utilise une demi-vie de 7 jours : une interaction 7 jours avant la conversion reçoit la moitié du poids d'une interaction au moment de la conversion, et la pondération continue de se diviser par deux tous les 7 jours supplémentaires.
Note sur l'historique des données
Si la plupart des conversions d'une période proviennent d'une seule session, les modèles multi-touch (Linear, Position-Based, Time-Decay) ressembleront beaucoup au Last-Touch — il n'y a qu'un seul canal sur lequel répartir le crédit. C'est un comportement attendu, pas un bug, et cela se résout de soi-même à mesure que des parcours multi-sessions s'accumulent.
Comment chaque modèle lit vos données
Les cinq modèles ne puisent pas tous dans la même source :
- Last-Touch et First-Touch utilisent chacun un seul instantané. Last-Touch crédite le canal enregistré lors de la session de conversion ; First-Touch crédite le canal de la toute première session observée du visiteur. Aucune reconstruction de parcours n'est nécessaire.
- Linear, Position-Based et Time-Decay reconstruisent l'intégralité du parcours multi-sessions du visiteur, en récupérant chaque visite enregistrée avant la conversion et en répartissant le crédit sur les sessions trouvées.
Une conséquence de cette différence : sur les mêmes données brutes, les modèles peuvent se rejoindre complètement ou diverger sensiblement, selon le nombre de sessions distinctes et de canaux différents qu'un visiteur a traversés avant de convertir. Un visiteur avec un parcours en une seule session donnera la même réponse à tous les modèles. Un visiteur avec cinq sessions sur trois canaux produira des résultats mesurables différents selon chaque modèle.
Pourquoi vos modèles peuvent sembler presque identiques
Lorsque vous basculez entre les modèles d'attribution et que la répartition des canaux change à peine, les données se comportent correctement — ce n'est pas un problème d'affichage.
Si la plupart de vos conversions proviennent de visiteurs n'ayant eu qu'une seule session (ou ayant systématiquement utilisé un seul canal avant de convertir), chaque modèle attribue mathématiquement 100 % du crédit à ce canal. Last-Touch, First-Touch, Linear, Position-Based et Time-Decay parviennent tous au même résultat, car il n'y a rien à distribuer différemment. À mesure que votre audience croît et que davantage de visiteurs touchent plusieurs canaux sur plusieurs sessions avant de convertir, les modèles divergeront et la comparaison deviendra plus instructive.
Quelques points supplémentaires à garder à l'esprit lors de la comparaison des modèles :
- Le trafic IA est toujours crédité sur le canal dédié ai quel que soit le modèle d'attribution. La détection IA prend le dessus sur le chemin de touches, de sorte que la ligne IA reste constante lorsque vous changez de modèle.
- Une conversion sans valeur monétaire compte tout de même dans l'attribution des conversions. Les comparaisons pondérées par les revenus nécessitent qu'une valeur monétaire soit attachée à l'objectif — sans elle, ces conversions apparaissent dans les comptages mais ne contribuent pas aux totaux de revenus affichés par chaque modèle.
Dimensions UTM vides
La plupart des visiteurs n'ont pas tous les paramètres UTM. Dans les données Zenovay réelles aujourd'hui, utm_term est ≈100% null et utm_content ≈99,99% null. L'onglet Sources affiche un état vide avec un indice copiable (?utm_term=...) plutôt qu'une barre unique à 100% de (none).