Le suivi d'affiliation SaaS est une chaîne à cinq maillons — clic, cookie, conversion, attribution et webhook — dont chacun peut casser silencieusement.
Le tracking est en cause, pas la fraude.
Le suivi d'affiliation SaaS est une chaîne technique avec cinq maillons. Chaque maillon peut casser silencieusement, sans erreur visible dans votre dashboard. Comprendre comment cette chaîne fonctionne, et où elle se rompt, permet de récupérer des attributions perdues et de payer les bons affiliés pour le bon travail.
Comment le tracking fonctionne de bout en bout
Du clic au cookie
Un affilié partage un lien du type https://votre-site.com?ref=dupont. La redirection peut transporter cet alias public sans créer d'attribution. Le SDK navigateur le capture uniquement après que la CMP du marchand a transmis un accord pour l'attribution. Il échange alors l'alias contre une session opaque et écrit le cookie first-party _rc_sid. Un refus initial ne crée aucune session et un retrait la supprime.
La durée du cookie est un paramètre critique. Comparez-la au délai réellement observé entre le premier clic et le paiement ; toute conversion qui survient après la fenêtre sort mécaniquement de l'attribution par cookie.
De la session à l'essai
Quand le visiteur s'inscrit ou démarre un essai gratuit, votre application lit la session consentie et associe l'identifiant de l'affilié au compte créé. Cette association doit être stockée côté serveur, pas seulement dans le stockage du navigateur. Sinon, vous perdez l'attribution dès que l'utilisateur change de navigateur ou nettoie ses données.
De l'essai au paiement Stripe
C'est le maillon le plus critique. Quand un utilisateur passe d'un essai gratuit à un abonnement payant, Stripe déclenche un webhook customer.subscription.created. À ce moment, votre système doit :
- Retrouver l'identifiant de l'affilié associé au compte client
- Calculer la commission selon les règles de votre programme
- Créer un enregistrement de commission en attente
Si l'association affilié-client n'a pas été persistée correctement à l'étape précédente, ce webhook ne peut pas attribuer la conversion. La commission disparaît sans trace.
De la commission au paiement
La commission reste en état "en attente" pendant votre délai de remboursement standard, généralement 30 à 90 jours. Après validation, elle est marquée comme "approuvée" et intégrée au prochain cycle de paiement. Cette dernière étape est purement opérationnelle, mais un bug dans la réconciliation des statuts peut retarder des paiements légitimes et dégrader la relation avec vos affiliés.
Modeles d'attribution comparés
Le modèle d'attribution définit quel clic reçoit la commission quand un utilisateur a cliqué sur plusieurs liens d'affiliés avant de convertir.
| Modele | Logique | Cas d'usage adapté | Risque principal |
|---|---|---|---|
| Premier clic | 100% au premier affilié qui a introduit l'utilisateur | Programmes axés notoriété, niches de contenu | Ignore les affiliés qui ont converti |
| Dernier clic | 100% au dernier affilié avant la conversion | Programmes axés conversion directe | Favorise les affiliés de coupon/cashback |
| Multi-touch linéaire | Commission divisée entre tous les affiliés du parcours | Programmes matures avec plusieurs types d'affiliés | Complexité de calcul, difficulté d'explication |
| Basé sur la position | Plus de poids au premier et au dernier clic | Équilibre notoriété + conversion | Arbitraire sans données pour calibrer |
En SaaS B2B avec des cycles de vente de 30 à 90 jours, le modèle dernier clic est le plus courant. Il est simple à expliquer aux affiliés et facile à auditer. Le modèle premier clic convient mieux quand la majorité de vos affiliés sont des créateurs de contenu long format. Leur travail d'introduction mérite d'être récompensé même s'il ne déclenche pas directement la conversion.
Les 5 pannes qui font perdre des conversions
1. Safari ITP et les cookies tiers bloqués
Apple a introduit Intelligent Tracking Prevention (ITP) en 2017 et n'a cessé de le durcir depuis. Depuis Safari 14, les cookies third-party sont bloqués par défaut. Depuis ITP 2.1, les cookies first-party créés via JavaScript ont une durée de vie limitée à 7 jours, réduite à 1 jour dans certaines configurations (source : WebKit blog, "Intelligent Tracking Prevention 2.3", 2019).
L'impact dépend de la part de Safari et des autres navigateurs restrictifs dans votre propre audience. Mesurez ce mix au lieu d'appliquer une part de marché générale à votre programme.
2. Les bloqueurs de publicités
Certains bloqueurs comme uBlock Origin ou Brave peuvent bloquer des scripts de tracking. Testez votre script avec les bloqueurs utilisés par votre audience et surveillez l'écart entre paramètres de référence reçus côté serveur et clics enregistrés côté navigateur.
Quand le SDK ou sa requête de capture est bloqué, aucune session n'est créée, même après l'accord du visiteur. L'utilisateur peut visiter le site, s'inscrire et convertir sans attribution navigateur.
3. Le cross-device
Un utilisateur voit le contenu d'un affilié sur son téléphone, clique sur le lien d'affiliation. Le cookie est créé sur mobile. Il s'inscrit trois jours plus tard depuis son ordinateur de bureau. Le cookie n'existe pas sur ce device. La conversion n'est pas attribuée.
Ce scénario est facile à manquer en B2B, où la découverte et l'inscription peuvent avoir lieu sur des appareils différents. Comparez les clics anonymes et l'attribution liée au compte pour estimer l'écart dans votre programme.
4. L'expiration du cookie face aux cycles longs
Un fondateur configure son programme avec une durée de cookie de 30 jours parce que c'est la valeur par défaut. Son cycle de vente moyen, du premier contact à l'activation payante, est de 45 jours. Mécaniquement, toutes les conversions au-delà de 30 jours tombent hors attribution.
Construisez la distribution du délai entre premier clic et première transaction payante dans vos propres cohortes. Une fenêtre plus courte que cette distribution exclut mécaniquement les conversions tardives.
5. Les redirections qui cassent les paramètres
Un affilié partage un lien court, une URL passée par un outil de raccourcissement, ou une URL qui passe par une redirection 301. Si cette redirection ne préserve pas le paramètre public ref, le SDK ne peut rien capturer après consentement.
Ce problème touche aussi les redirections internes : si votre site redirige www. vers l'apex domain (ou inversement) et que votre script de tracking ne se charge qu'après la redirection finale, les paramètres peuvent être perdus en route.
Le tracking server-side comme solution
Pourquoi les métadonnées Stripe contournent les limitations
Le tracking server-side consiste à stocker l'identifiant de l'affilié directement dans les métadonnées de votre objet Stripe (sur le Customer ou la Subscription) au moment de l'inscription, pas au moment du paiement.
Quand Stripe déclenche le webhook de conversion, les métadonnées sont présentes dans le payload. Votre système n'a pas besoin de retrouver un cookie : l'information est dans Stripe.
{
"object": "customer",
"metadata": {
"affiliate_id": "dupont",
"affiliate_click_at": "2026-03-15T14:32:00Z",
"ref_source": "article-blog-saas"
}
}
Cette approche contourne les bloqueurs de publicités (le script qui écrit les métadonnées n'est pas bloqué car il s'exécute côté serveur), Safari ITP (pas de cookie client impliqué dans la persistance de l'attribution), et le cross-device (l'association est liée au compte, pas au navigateur).
Les risques supprimés par la persistance serveur
- Le tracking cookie seul reste exposé à l'expiration du stockage, au blocage du script et au changement d'appareil.
- La persistance server-side après inscription retire ces dépendances des événements de paiement ultérieurs, mais le clic initial doit toujours être capturé correctement.
Comment les deux approches se combinent
Le tracking robuste utilise trois couches :
- Couche consentement : la CMP transmet l'accord ou le refus ; seule l'acceptation permet au SDK d'échanger
refcontre une session first-party_rc_sid - Couche serveur : au checkout, le backend reçoit la session consentie et l'écrit dans les métadonnées Stripe
- Webhook Stripe : lit les métadonnées pour attribuer la commission sans dépendre du navigateur au moment du paiement
Sans session consentie, la couche serveur peut utiliser uniquement un signal connu indépendamment par le marchand, comme un coupon, un code de parrainage explicite ou un code affilié déjà rattaché à la commande. Le fingerprinting ne doit pas servir à contourner un refus de consentement.
C'est l'architecture que RefCampaign utilise par défaut. La comparaison avec Tapfiliate détaille les différences d'implémentation technique entre les deux plateformes.
Checklist de diagnostic en 10 points
Si vous suspectez des attributions perdues dans votre programme, parcourez cette liste avant d'investir dans une refonte.
Infrastructure de base
- Votre SDK passif est chargé sur chaque page et relié à la CMP pour l'accord, le refus, le rechargement et le retrait
- Votre cookie d'affiliation est un cookie first-party (domaine identique à votre application)
- La durée du cookie correspond à votre cycle de vente réel (pas la valeur par défaut de la plateforme)
- Les redirections (www/apex, HTTP/HTTPS) préservent les paramètres de tracking
Persistance de l'attribution
- La session consentie est transmise au backend au checkout, pas reconstruite depuis le paramètre public
ref - Les métadonnées Stripe contiennent
refcampaign_sessionsur l'objet de paiement ou la Subscription - Votre webhook Stripe lit ces métadonnées pour attribuer les commissions
Couverture des cas limites
- Vous avez testé le parcours depuis Safari (mode navigation privée inclus)
- Vous avez testé le parcours avec uBlock Origin ou Brave activé
- Vous avez testé un parcours cross-device (clic mobile, inscription desktop)
Si vous répondez "non" ou "je ne sais pas" à plus de trois points, votre programme perd probablement des attributions en ce moment.
Ce que perdre 20% des attributions signifie concrètement
Un programme qui génère 50 000 EUR de MRR attribué avec un taux de commission de 20% verse 10 000 EUR par mois à ses affiliés. Si 20% des conversions ne sont pas attribuées, le programme génère en réalité 60 000 EUR de MRR, mais 10 000 EUR d'acquisitions payées ne reçoivent pas de commission.
Ce n'est pas une économie. C'est une dette envers les affiliés qui ont fait le travail, et une incitation à quitter votre programme quand ils comparent leurs revenus déclarés avec le trafic qu'ils ont envoyé.
Les raisons d'échec des programmes d'affiliation SaaS placent les problèmes de tracking dans les trois premières causes d'abandon par les affiliés de qualité.
La comparaison avec Impact couvre les différences d'architecture de tracking entre une solution enterprise et une solution conçue pour les SaaS en croissance.
Comment démarrer
Si vous construisez votre programme d'affiliation et voulez partir sur une infrastructure de tracking fiable, la documentation de création d'un programme d'affiliation SaaS couvre la configuration initiale étape par étape.
Pour un audit de votre programme existant ou une migration depuis une plateforme avec des problèmes de tracking, consultez les tarifs ou contactez l'équipe directement. Un audit de tracking prend généralement moins de deux heures et identifie les attributions perdues récupérables.
Créez votre programme d'affiliation
Suivi, affiliés et paiements dans un seul outil.
Créer votre programmeObtenez un audit gratuit de votre programme d'affiliation