GA4 via le serveur
Objectif : que plus aucun hit GA4 ne parte du navigateur vers Google. Tout transite par sgtm.monsite.fr, où vous gardez la main sur les données avant de les relayer à GA4.
Le principe
Le flux se décompose en trois temps :
- Le tag Google (GA4) du conteneur web envoie ses hits
/g/collectvers votre endpoint first-party au lieu degoogle-analytics.com. - Le client GA4 du conteneur serveur revendique ces requêtes et les transforme en événements.
- Le tag GA4 serveur relaie (et éventuellement enrichit/filtre) les événements vers Google Analytics.
Étape 1 — Côté conteneur web
Dans votre tag Google Tag (conteneur web), ajoutez le paramètre de configuration :
| Paramètre | Valeur |
|---|---|
server_container_url | https://sgtm.monsite.fr |
first_party_collection | true (recommandé) |
Équivalent en gtag.js pur, si le site n'utilise pas GTM web :
<script async src="https://sgtm.monsite.fr/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){ dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'G-XXXXXXXXXX', {
server_container_url: 'https://sgtm.monsite.fr'
});
</script>
src du script : le conteneur serveur sait aussi servir la librairie gtag.js elle-même. Un bloqueur qui filtre googletagmanager.com ne bloquera pas ce chargement first-party.Étape 2 — Le client GA4 serveur
Dans le conteneur serveur, le client « GA4 » est présent par défaut. Vérifiez dans Clients → GA4 :
- Priorité : laissez la valeur par défaut, sauf clients multiples en conflit.
- Cookies et identification : activez la gestion des cookies via le serveur (option server-managed) pour bénéficier du cookie
FPIDHttpOnly — voir le tuto cookies first-party.
Étape 3 — Le tag GA4 serveur
Créer le tag
Tags → Nouveau → Google Analytics : GA4. Par défaut il hérite des champs de l'événement entrant : inutile de re-mapper quoi que ce soit pour un simple relais.
Déclencheur
Ajoutez un déclencheur personnalisé : Client Name = GA4. Ainsi, tout événement revendiqué par le client GA4 est relayé.
Enrichir ou filtrer (optionnel)
C'est ici que le server-side prend sa valeur : supprimer un paramètre sensible, réécrire une URL, ajouter une donnée CRM via une variable Firestore, etc. Exemple courant : retirer les PII d'une page_location.
Étape 4 — Événements e-commerce
Les événements e-commerce GA4 transitent tels quels : c'est le format du dataLayer web qui compte. Exemples à réutiliser dans vos démos :
dataLayer.push({ ecommerce: null }); // on vide l'objet précédent
dataLayer.push({
event: "view_item",
ecommerce: {
currency: "EUR",
value: 89.90,
items: [{
item_id: "SKU_TSHIRT_BLEU",
item_name: "T-shirt Sirdata Blue",
item_brand: "Sirdata",
item_category: "Vêtements",
price: 89.90,
quantity: 1
}]
}
});
dataLayer.push({ ecommerce: null });
dataLayer.push({
event: "purchase",
ecommerce: {
transaction_id: "T-2026-0042",
currency: "EUR",
value: 159.80,
tax: 26.63,
shipping: 4.99,
coupon: "DEMO10",
items: [
{
item_id: "SKU_TSHIRT_BLEU",
item_name: "T-shirt Sirdata Blue",
item_brand: "Sirdata",
price: 89.90,
quantity: 1
},
{
item_id: "SKU_HOODIE_VERT",
item_name: "Hoodie ABconsent Green",
item_brand: "Sirdata",
price: 69.90,
quantity: 1
}
]
}
});
🧪 À rejouer en démo : le playground contient tout le funnel e-commerce (view_item → add_to_cart → begin_checkout → purchase).
Étape 5 — Vérifier & déboguer
- Network : les requêtes
/g/collectdoivent partir verssgtm.monsite.fr, avec un statut 204. - Preview serveur : chaque hit apparaît avec le client GA4 en « claiming client » et le tag GA4 en « fired ».
- DebugView GA4 : ajoutez
debug_mode: trueà un événement pour le voir en temps réel dans GA4.
dataLayer.push({
event: "demo_debug",
debug_mode: true,
demo_label: "visible dans GA4 DebugView"
});
analytics_storage. La suite logique est le tuto Consent Mode v2 & CMP Sirdata.