← Blog 8 min de lecture

Savez-vous vraiment comment se comporte votre campagne marketing ?

Vous dépensez 200 € sur une campagne LinkedIn. Le tableau de bord publicitaire indique 4 300 impressions, 87 clics, 2,30 € de CPC. Bonne campagne ? Mauvaise ? Vous n'en avez aucune idée — et le tableau de bord ne peut pas vous le dire, parce qu'il s'arrête au clic. Voici comment mesurer la performance d'une campagne marketing de bout en bout avec un funnel et cinq événements personnalisés, pour que la prochaine question sur une campagne ait une vraie réponse.

Pourquoi les impressions et les clics ne disent pas si la campagne a marché

Les plateformes publicitaires optimisent sur les métriques qu'elles voient. Elles voient les impressions, les clics et (parfois) un pixel déclenché sur une page de remerciement. Ce qu'elles ne voient pas, c'est si les 87 personnes qui ont cliqué sont devenues des utilisateurs — encore moins des payants.

Cet écart est tout le jeu. Une campagne avec 87 clics et 4 conversions payantes est radicalement différente d'une campagne avec 870 clics et 0 conversion payante. Le tableau de bord publicitaire classera la deuxième mieux sur toutes les métriques qu'il vous montre. Et ce sera celle qui brûlera tranquillement votre runway.

La solution n'est pas une stack analytique plus grosse. La solution est d'étendre le funnel une étape à la fois, sur votre propre domaine, jusqu'à ce qu'il atteigne l'action qui paye vos factures.

Le funnel de campagne : cinq étapes, cinq événements

Prenons Inboxly, la petite SaaS qu'on utilise comme exemple récurrent. Cette semaine elle a lancé une nouvelle fonctionnalité "boîte d'équipe" avec une campagne LinkedIn ads à 200 €. Le funnel qui nous intéresse ressemble à ça :

clic sur l'annonce → vue de la landing → signup démarré → signup terminé → upgrade payant

Chaque flèche est un drop-off potentiel. Chaque étape est un événement personnalisé, déclenché au moment où elle se produit. Le tableau de bord publicitaire possède la première flèche. Nous possédons les quatre autres — et c'est là que la campagne réussit ou échoue vraiment.

Étape 1 — Taguez le clic sur votre propre domaine

Ne vous fiez pas qu'aux UTM de la plateforme publicitaire ; ils disparaissent à la deuxième navigation. À la place, routez l'annonce via un endpoint léger sur votre domaine qui marque la campagne et redirige :

// /go/li-team-inbox  → Cloudflare Worker
export async function handleAdClick(req) {
  return Response.redirect(
    'https://inboxly.app/team-inbox?c=li_team_inbox',
    302
  );
}

Le paramètre c=li_team_inbox est l'étiquette de campagne — courte, minuscule, préfixée par canal (li_ pour LinkedIn, gads_ pour Google, nl_ pour newsletter). Un préfixe par canal garde la liste d'événements rangée quand vous lancez plusieurs campagnes en parallèle.

Étape 2 — Déclenchez campaign_click sur la landing

Sur la landing, lisez l'étiquette de campagne et déclenchez un événement par campagne :

const c = new URLSearchParams(location.search).get('c');
if (c) {
  window.logly('event', 'campaign_click_' + c);
}

Chaque campagne reçoit son propre nom d'événement (campaign_click_li_team_inbox). Dans le panneau d'événements Logly ils se regroupent naturellement — classés par préfixe — donc vous pouvez comparer LinkedIn vs Google vs newsletter d'un coup d'œil.

Étape 3 — signup_started et signup_completed

Ces deux-là sont la paire workhorse du post sur les événements. Déclenchez signup_started quand le formulaire s'ouvre ou prend le focus, signup_completed quand l'API confirme la création du compte. Le ratio entre les deux est le drop-off du formulaire — le même pour chaque campagne, mais le compte absolu par campagne est ce qui vous dit si le canal nourrit vraiment le formulaire.

// quand le formulaire s'ouvre ou prend le focus pour la première fois
window.logly('event', 'signup_started');

// après que l'API confirme la création du compte
window.logly('event', 'signup_completed');

Étape 4 — paid_upgraded

La seule métrique qui paye vos factures. Déclenchez-la côté serveur depuis votre webhook de facturation (Stripe, Paddle, LemonSqueezy) pour qu'un remboursement ou un premier paiement raté ne la gonfle pas :

// handler du webhook Stripe, sur invoice.payment_succeeded (première facture uniquement)
if (invoice.billing_reason === 'subscription_create') {
  await sendLoglyEvent('paid_upgraded');
}

Les événements côté serveur utilisent la même forme window.logly('event', name) via un petit appel HTTP depuis votre Worker. Le payload complet est dans les docs.

Lire le funnel de campagne honnêtement

Une semaine après le lancement de la campagne LinkedIn, vous ouvrez la vue funnel dans Logly et empilez les cinq événements pour l'étiquette li_team_inbox. Vous obtenez quelque chose comme ça :

campaign_click_li_team_inbox     87
landing_team_inbox_viewed        82   (94%)
signup_started                   19   (23%)
signup_completed                 11   (58%)
paid_upgraded                     3   (27%)

Le chiffre du bas est 3 utilisateurs payants pour 200 € — 66 € par utilisateur. Si c'est bien dépend de votre LTV ; pour une SaaS de la taille d'Inboxly à 19 €/mois avec une durée de vie moyenne de 14 mois, c'est rentable. Mais le chiffre du bas est une vanity metric à lui seul. La lecture intéressante vit dans les deltas :

Remarquez qu'aucune de ces quatre observations n'est "dépensez plus sur LinkedIn" ou "dépensez moins sur LinkedIn". L'annonce a fait son boulot — elle a amené 87 personnes raisonnablement qualifiées sur une page à propos de la nouvelle fonctionnalité. Les fuites sont en aval, sur des surfaces que vous contrôlez et pouvez changer sans donner plus d'argent à LinkedIn.

Traitez l'étiquette de campagne comme la seule clé de join. li_team_inbox apparaît dans l'URL, dans le nom de l'événement et (si vous voulez) dans la ligne de votre base de données pour le signup. Partout où vous devez demander "qu'est-ce que cette campagne a vraiment fait", vous avez une seule chaîne à chercher.

Faire tourner plusieurs campagnes en parallèle

La même semaine, Inboxly a aussi envoyé une newsletter (nl_team_inbox) et posté organiquement sur LinkedIn avec un lien tagué (li_organic_team_inbox). Après 7 jours la comparaison ressemble à ça :

                              clic   signup_completed   paid_upgraded
li_team_inbox (paid ads)         87           11               3
nl_team_inbox (newsletter)      142           38              12
li_organic_team_inbox            54            7               2

La newsletter gagne sur toutes les métriques, à coût marginal zéro. LinkedIn payant produit trois clients pour 200 €. LinkedIn organique égale le taux de conversion du payant, mais avec un cinquième de la portée. Les actions s'écrivent toutes seules : continuez les newsletters pour les lancements, continuez à poster organiquement, et tuez la campagne LinkedIn payante ou changez la créa — ce que vous ne devez absolument pas faire, c'est ce que suggérerait le tableau de bord publicitaire, à savoir "augmenter le budget sur la campagne au CPC le plus bas".

Quoi faire chaque vendredi

La discipline est la même que pour l'attribution d'outreach : bloquez quinze minutes le vendredi matin pour regarder le funnel de chaque campagne taguée des deux dernières semaines. Trois décisions par campagne :

La raison pour laquelle la plupart des budgets marketing s'évaporent silencieusement, c'est que personne ne prend jamais aucune de ces trois décisions explicitement. Elles sont prises par inertie — en laissant le spend du trimestre précédent rouler, en optimisant pour le plus gros chiffre du tableau de bord publicitaire, sans jamais relier le clic à l'utilisateur payant. Un funnel de campagne construit avec cinq événements règle ça avec environ une heure de setup par canal et quinze minutes par semaine de lecture.

Variantes à connaître

Campagnes multi-touch. Si un prospect clique sur l'annonce, part, revient une semaine plus tard depuis une newsletter et convertit — ça fait deux campaign clicks pour un signup. Stockez l'étiquette de campagne du premier contact et gardez-la ; n'écrasez pas au deuxième clic. Le pattern COALESCE du post sur l'outreach marche identique ici.

Rétention par cohorte. Une fois paid_upgraded tagué par campagne, vous pouvez poser la question plus honnête trois mois plus tard : sur les trois utilisateurs payants de li_team_inbox, combien payent encore ? Une campagne qui produit trois clients qui churnent au mois deux est pire qu'une campagne qui produit un client qui reste un an.

Ne suivez pas les view-through conversions. Les plateformes publicitaires les adorent ; c'est surtout un tour comptable pour s'attribuer des conversions qui auraient eu lieu de toute façon. Restez sur les conversions par clic — les événements que vous déclenchez sur votre propre domaine sont intrinsèquement par clic, et c'est une fonctionnalité, pas une limitation.

Où ça s'inscrit dans le reste de la stack

C'est l'aboutissement naturel de l'arc analytique pour petites SaaS qu'on construit post après post. Les événements personnalisés nomment les moments qui comptent. Les funnels les enchaînent en séquence. Les étiquettes de campagne partitionnent cette séquence par source, pour que vous puissiez répondre à la seule question marketing qui compte vraiment : quel canal produit des clients qui payent et qui restent ?

Cinq événements. Un funnel. De vraies réponses sur votre campagne.

Les événements personnalisés et la vue funnel de Logly sont inclus dans tous les plans, y compris la version gratuite. API complète des événements dans les docs.

Commencez gratuitement →