Les tests A/B existent depuis des années, mais la plupart sont encore implémentés côté client. Voir notre guide sur Google Analytics et RGPD.
Ce tutoriel t’explique pas-à-pas comment implémenter un A/B test server-side complet, stable, mesurable, et optimisé pour GA4, sans utiliser d’outils payants. Voir notre guide sur tracking server-side.
1. Introduction — Pourquoi faire un test A/B server-side ?
Les tests A/B existent depuis des années, mais la plupart sont encore implémentés côté client : via JavaScript, Optimizely, AB Tasty ou Google Optimize (désormais fermé).
Problème : ces tests client-side sont exposés à toutes les limitations modernes :
Flicker effect (l’utilisateur voit la version A avant d’avoir B)
Blocage par les adblockers
Tracking cassé à cause des navigateurs (Safari ITP, Firefox ETP)
Perte de performance (FID/CLS)
Fiabilité réduite sur mobile
Incompatibilité progressive avec un web sans cookies
En 2025, la solution la plus robuste est claire :
👉 déplacer l’expérimentation côté serveur, directement dans Google Tag Manager Server-Side (sGTM).
C’est :
plus rapide,
plus fiable,
non bloqué par les navigateurs,
compatible RGPD,
adapté à l’attribution moderne,
et entièrement sous ton contrôle.
Ce tutoriel t’explique pas-à-pas comment implémenter un A/B test server-side complet, stable, mesurable, et optimisé pour GA4, sans utiliser d’outils payants.
2. Comprendre les concepts fondamentaux avant d’implémenter
Pour réussir un test A/B dans sGTM, il faut comprendre 4 notions :
assignation, variation, persistance, tracking.
2.1. A/B testing server-side : la différence majeure
Client-side
Le site charge A
JS modifie le DOM → affiche B
L’utilisateur voit un flash
Le tracking est parfois déclenché trop tôt
Mesure faussée
Server-side
La décision A/B est prise avant que la page ne soit servie
L’utilisateur charge directement la bonne variante
UX parfaite
Tracking cohérent
Résultats statistiquement plus fiables
2.2. Le rôle de GTM Server-Side
sGTM peut :
réceptionner les requêtes web
calculer la variante (A ou B)
renvoyer une réponse modifiée
fixer un cookie variant stable
envoyer les événements A/B à GA4, Google Ads, Meta CAPI
servir une API "ab-test" pour les apps mobile / SPA
Il devient un moteur d’expérimentation complet.
2.3. Quand faire un test A/B dans sGTM ?
Cas d’usage parfaits :
version alternative d’une landing page
test de paywall
test de pricing page
test d’un text hero
test d’un layout complet
test API (nouvel onboarding, nouvelle fonctionnalité)
test mobile → via endpoint JSON
3. Étape 1 — Définir ton test (base indispensable)
Avant de toucher sGTM, il te faut un plan clair.
3.1. Identifier le composant à tester
Quelques exemples SaaS :
nouvelle Landing Page (“Hero B”)
version alternative de la section pricing Voir notre guide sur Plan de Taggage.
un formulaire simplifié (variante B)
un nouveau paywall
activation d’une fonctionnalité via API
3.2. Définir tes variantes
Toujours garder les choses simples.
Variante |
Description |
A |
version actuelle (control) |
B |
nouvelle version / nouveau layout |
Tu peux aller jusqu’à 3 variantes, mais au-delà, la puissance statistique baisse.
3.3. Définir les KPIs du test
Un test server-side doit avoir 1 KPI principal, et éventuellement des KPIs secondaires.
Exemples :
3.4. Définir la règle d’assignation
Tu dois choisir comment répartir les utilisateurs.
Méthodes :
A. Hash basé sur le client_id (recommandé)
Stable, non aléatoire, sans fluctuation.
B. Randomisé à la première visite + cookie server-side
Utile si tu veux du pur aléatoire.
C. Hash du user_id (si login obligatoire)
Idéal pour un SaaS.
4. Étape 2 — Configurer la logique d’assignation dans GTM server-side
L’objectif : affecter A ou B, et stocker cette décision.
4.1. Créer une variable server-side pour identifier l’utilisateur
Tu dois récupérer un identifiant stable :
client_id de GA4
FPID
user_id si login
Dans sGTM → Variables → Google Analytics → “Client ID”.
4.2. Créer une variable “Randomizer Hash”
Une variable custom JS :
function hashString(str) {
let hash = 0;
if (!str) return 0;
for (let i = 0; i < str.length; i++) {
hash = (hash << 5) - hash + str.charCodeAt(i);
hash = hash & hash;
}
return Math.abs(hash);
}
const clientId = data.client.clientId;
return hashString(clientId) % 100;
Cela te donne un bucket 0 à 99, stable pour chaque utilisateur.
4.3. Créer la variable “Variant Selector”
Dans GTM SS :
Exemple :
const bucket = data.variable.randomBucket;
if (bucket < 50) return "A";
else return "B";
4.4. Persister la variante via un cookie server-side
Dans les paramètres de réponse → “Set-Cookie” :
Set-Cookie: experiment_variant=A; Max-Age=2592000; Path=/; SameSite=Lax; Secure;
ou :
experiment_variant=B
Durée recommandée : 30 jours.
Ainsi, un utilisateur reste dans la même variante.
5. Étape 3 — Servir les variantes depuis GTM Server-Side
Tu as 3 modèles d’implémentation. Choisis celui adapté à ton stack.
5.1. Méthode 1 — Réécriture HTML (reverse proxy)
Le cas parfait pour les sites SSR / sites marketing.
Fonctionnement :
L'utilisateur visite /landing
La requête arrive dans sGTM
sGTM lit le cookie ou calcule la variante
sGTM renvoie soit landing-original.html, soit landing-b.html
C’est simple et ultra propre.
5.2. Méthode 2 — Réponse JSON pour apps mobile / SPA
Tu exposes un endpoint :
https://sgtm.mondomaine.com/ab-test
La réponse :
{
"experiment_id": "exp_hero_v1",
"variant": "B"
}
L'app réagit en conséquence.
Méthode idéale pour React, Vue, Angular, iOS, Android.
5.3. Méthode 3 — Redirection URL
5.4. Vérifier le fonctionnement via sGTM Debug
Dans GTM SS :
Mode Preview → onglet "Event Data" → vérifier :
6. Étape 4 — Tracker le test A/B dans GA4 (indispensable)
Pour analyser correctement, GA4 doit recevoir :
6.1. Envoyer un event “experiment_assigned”
Dans un tag event GA4 (server-side ou client-side) :
event_name: experiment_assigned
parameters:
experiment_id: exp_hero_v1
variant: A
6.2. Ajouter un user_property “experiment_variant”
user_properties: {
experiment_variant: "B"
}
Cela permet :
segmentation propre
exploration GA4
retours cohérents
6.3. Associer la variante aux conversions
Tu dois propager l’information variant → sur tous les events de l’utilisateur.
Côté sGTM → injecter automatiquement :
variant: A
experiment_id: exp_hero_v1
dans :
purchase
generate_lead
sign_up
etc.
6.4. Gestion de la déduplication navigateur ↔ serveur
Tu dois envoyer un event_id unique dans :
Cela évite les doublons.
7. Étape 5 — Analyse des résultats (GA4 + BigQuery)
7.1 Dans GA4, crée deux segments :
Ensuite, compare :
taux de conversion
engagement
revenue
churn (si app)
scroll depth
clic CTA
7.2 Analyse avancée dans BigQuery
Requête type :
SELECT
variant,
COUNTIF(event_name = 'sign_up') / COUNT(*) AS conversion_rate
FROM `myproject.analytics.events_*`
WHERE experiment_id = 'exp_hero_v1'
GROUP BY variant;
Analyse complémentaire :
device_category
traffic_source
landing_page
cohorte temporelle
7.3 Calculer la significativité statistique
Tu peux calculer :
Z-test
Bayesian uplift
p-value
intervals de confiance
Ou utiliser un outil :
7.4. Décision finale
Un test robuste doit :
durer min 1 cycle marketing complet (7 à 14 jours)
représenter min 200 conversions
montrer un uplift stable
respecter la cohérence cross-device
Si les conditions sont remplies → publier la variante gagnante.
8. Étape 6 — Automatiser un framework A/B server-side complet
Pour passer à l’échelle, tu peux faire de sGTM un moteur d’expérimentation.
8.1. Stocker les expériences dans un fichier JSON
Exemple stocké dans Cloud Storage / Firestore :
{
"exp_hero_v1": {
"allocation": {
"A": 50,
"B": 50
},
"conditions": {
"path": "/landing"
},
"status": "active"
}
}
8.2. Gestion multi-expériences avec un “experiment registry”
Chaque visiteur peut participer à plusieurs tests si :
les expériences n’interfèrent pas
les conditions sont exclusives
l'ordre d'évaluation est défini
8.3. Ajouter des règles avancées
Exemples :
Tout peut être scripté.
8.4. Exports automatiques vers BigQuery & Looker Studio
Créer un dashboard :
9. Étape 7 — Bonnes pratiques & erreurs critiques à éviter
9.1. Bonnes pratiques
Minimiser les variantes (A/B suffit)
Toujours persister la variante via cookie
Versionner les tests
Logger toutes les assignations dans sGTM
Limiter la durée d’un test à 30 jours max
Toujours effectuer un smoke test avant lancement
Garder un audit trail des résultats
Isoler les tests sensibles du reste des scripts
9.2. Erreurs fréquentes
❌ Ne pas persister la variante → résultats invalides
❌ Mesurer uniquement côté client
❌ Ne pas envoyer experiment_id dans GA4
❌ Mélanger plusieurs tests sur la même page
❌ Début de test en plein pic marketing
❌ Oublier la déduplication server ↔ client
❌ Arrêter un test trop tôt
❌ Basculer gagnant sur un échantillon trop petit
10. Exemple complet d’implémentation (Flow)
Voici un flow très clair, utilisable dans tes formations :
UTILISATEUR → Requête HTTP → sGTM → Calcul variant → Cookie posé → Var A ou B servie
↓ ↓
GA4 <—— event experiment_assigned ————— (server-side)
↓
Conversions trackées avec variant
↓
BigQuery → Analyse → Significance → Décision finale
11. Conclusion — Le futur de l’A/B testing passe par le server-side
L’A/B testing server-side via GTM n’est pas seulement une alternative aux outils traditionnels (AB Tasty, Optimizely, VWO).
C’est une révolution méthodologique :
beaucoup plus fiable
nettement plus rapide
invisible pour l’utilisateur
compatible mobile / SPA / API
robuste face à l’ère cookieless
parfaitement mesurable et exportable
Le tout sans coût supplémentaire, simplement via GTM Server-Side et GA4.
C’est la méthode logique, moderne, et durable pour tester :
des pages
des prix
des UI
des flux d’onboarding
des paywalls
des API
des features backend
Si tu maîtrises l’assignation, la persistance, la variante server-side, et le tracking GA4/BigQuery… tu maîtrises tout le framework d’expérimentation moderne.