Integrazione Server-Side di Google Analytics 4 (GA4)

Perché passare al server-side tracking?
L’integrazione tradizionale con gtag.js
o Google Tag Manager
prevede l’invio degli eventi direttamente dal browser dell’utente. Tuttavia, sempre più aziende stanno adottando l’approccio server-side per:
- superare i limiti dei cookie bloccati dai browser
- mantenere il controllo dei dati per motivi di compliance (es. GDPR)
- inviare dati anche da sistemi backend non web (es. app mobile, IoT, ecc.)
- ottimizzare il tracciamento evitando JS lato client
L’integrazione server-side può anche essere usata contemporanemente all’integrazione cliet-side “gtag.js” e crea una soluzione “ibrida” che ha il grosso vantaggio di poter inviare in modo molto controllato e preciso eventi specifici, tipo login, purchase, aggiunta al carrello, etc…
Confronto: client-side, server-side e ibrido
Approccio | Vantaggi | Svantaggi |
---|---|---|
Client-Side (gtag.js) | Facile da implementare, visibile nel browser, supporta geolocalizzazione automatica | Bloccabile da adblock/cookie policy, poco controllo |
Server-Side | Massimo controllo, niente JS sul sito, integrabile in ambienti closed-source | Richiede gestione sessioni, user-agent, IP, niente geo/tech info automatica |
Ibrido | Combina i vantaggi dei due, fallback affidabile | Più complesso da orchestrare |
Come ottenere il Measurement ID e l’API Secret
- Accedi a Google Analytics
- Vai nella proprietà GA4 desiderata
- Nel menù di sinistra clicca su Amministrazione (in basso)
- In “Proprietà”, clicca su Stream di dati
- Seleziona lo stream attivo (ad esempio quello Web)
- Troverai il tuo Measurement ID in alto (formato:
G-XXXXXXX
) - Scorri verso il basso fino alla sezione Tagging tramite protocollo di misurazione oppure API secret di Measurement Protocol
- Clicca su API Secrets → Crea
- Assegna un nome (es.
xtumble-server
) e copia l’API Secret
Per maggiori dettagli, puoi consultare la documentazione ufficiale:
GA4 Measurement Protocol Developer Guide
Esempio chiamata CURL
Qui sotto un esempio reale di chiamata ad Analytics per inviare un evento (page_view):
curl -X POST 'https://www.google-analytics.com/mp/collect?measurement_id=G-XXXXXXXXXX&api_secret=YOUR_SECRET' \
-H 'Content-Type: application/json' \
-d '{
"client_id": "abc123-session-uid",
"user_id": "usr_45",
"events": [
{
"name": "page_view",
"params": {
"page_location": "https://xtumble.com/prod/145",
"page_title": "Dettaglio Prodotto",
"engagement_time_msec": "450"
}
}
]
}'
Esempio CURL: invio evento purchase
a GA4
Questo snippet mostra come inviare un evento di acquisto con i parametri minimi obbligatori (senza lista dettagliata degli item):
curl -X POST 'https://www.google-analytics.com/mp/collect?measurement_id=G-XXXXXXXXXX&api_secret=YOUR_SECRET' \
-H 'Content-Type: application/json' \
-d '{
"client_id": "abc123-session-uid",
"user_id": "usr_45",
"events": [
{
"name": "purchase",
"params": {
"transaction_id": "ORD123456789",
"currency": "EUR",
"value": 129.99
}
}
]
}'
Note:
transaction_id
: identificativo univoco dell’ordine (obbligatorio)currency
: codice ISO a 3 lettere, es. EUR, USDvalue
: valore totale dell’acquisto (può includere IVA e spedizione)- Items opzionali
Note importanti:
- client_id: deve essere stabile per sessione (può essere un hash SHA256 della session cookie)
- user_id: opzionale ma consigliato per utenti autenticati
- engagement_time_msec: migliora il tracciamento di sessioni attive
- Per testare, puoi usare l’endpoint
https://www.google-analytics.com/debug/mp/collect
Consigli finali
- Filtra i bot (user-agent) e le richieste asset (.css, .png, .js, ecc.)
- Verifica sempre il codice di risposta HTTP (204 = OK, ma silenzioso)
- Per monitorare utenti attivi, invia eventi con client_id coerente + engagement_time