Framework tracking · Architettura

Dal click alla vendita: come tracciamo tutto

Documentazione dell'architettura completa per raccogliere, pulire e attribuire ogni dato: dagli UTM fino alle conversioni offline che diventano entrate reali.

Panoramica dell'architettura

Il sistema è organizzato su tre livelli. Il browser raccoglie UTM, click ID e stato del consenso e invia gli eventi a un container su un tuo sottodominio. Il server container deduplica, arricchisce con i dati del CRM, filtra il traffico non valido e inoltra. Le destinazioni (Meta, Google Ads, GA4, BigQuery, CRM) ricevono eventi completi e coerenti. Nessun dato personale viaggia in chiaro e nessun passaggio dipende da cookie di terze parti.

Schema in quattro blocchi collegati: raccolta, arricchimento, distribuzione alle piattaforme e archivio.
Il server raccoglie l'evento, lo arricchisce con i dati di prima parte, lo distribuisce alle piattaforme e lo archivia per le analisi.
LivelloRuoloComponenti
1 · BrowserCattura click ID e UTM, genera event_id, legge il consenso, invia al sottodominio first-partyGTM web, dataLayer, Consent Mode v2, cookie first-party, Pixel e tag GA4 (in parallelo)
2 · ServerRiceve gli eventi, scrive cookie HTTP di lunga durata, deduplica, hasha i dati, filtra, inoltraGTM server container (Stape o Cloud Run), client GA4, tag Meta CAPI, tag Google Ads, webhook dal CRM
3 · DestinazioniOttimizzazione campagne, reporting, storico e attribuzioneMeta Conversions API, Google Ads (Enhanced + OCI), GA4 Measurement Protocol, BigQuery, CRM, Looker Studio

1 · Struttura UTM e link tracking

L'attribuzione comincia dall'URL. Ogni link verso il sito, a pagamento o no, porta parametri UTM coerenti con una convenzione unica (foglio master versionato). Meta e Google li compilano con variabili dinamiche; i link in email, SMS, WhatsApp e bio passano da un redirect server che registra click, IP, dispositivo e orario prima di reindirizzare.

ParametroMeta AdsGoogle Ads (ValueTrack)Email / social / SMS
utm_sourcefacebook / instagramgoogleemail, instagram_bio, whatsapp
utm_mediumpaid_socialcpcnewsletter, bio, sms
utm_campaign{{campaign.name}}{campaign}nome campagna versionato (es. wuc_mar26)
utm_content{{ad.name}}{creative}variante del messaggio o posizione del link
utm_term{{adset.name}}{keyword} + device={device}segmento destinatario

Esempi di tagging

# Meta Ads · parametri URL dinamici a livello di annuncio
utm_source=facebook&utm_medium=paid_social
&utm_campaign={{campaign.name}}&utm_content={{ad.name}}&utm_term={{adset.name}}

# Google Ads · template di tracciamento con ValueTrack
utm_source=google&utm_medium=cpc
&utm_campaign={campaign}&utm_term={keyword}&utm_content={creative}&device={device}

# Link tracciati · redirect server (email, SMS, WhatsApp, bio)
https://trk.tuodominio.it/l/?src=email_wuc_mar26&uid={{contact_id}}&seq=followup_3

Cookie first-party e click ID

fbclid, gclid, gbraid/wbraid e msclkid vengono catturati al primo accesso e salvati in tre posti: localStorage, un cookie first-party di 180 giorni impostato dal server e il campo del contatto nel CRM al primo form. Così una conversione tardiva, anche dopo settimane o da un altro dispositivo, può essere ricondotta al click di origine.

// Sulla landing page, al primo accesso
fbclid  → localStorage → cookie first-party (180 gg, HTTP) → campo CRM "fbclid"
gclid   → stessa pipeline → campo CRM "gclid"
utm_*   → stessa pipeline → campi CRM "sorgente", "campagna", "contenuto"

2 · Eventi tracciati

Ogni evento ha un nome standard per Meta e per GA4, scatta in un punto preciso del funnel e porta parametri obbligatori: valore, valuta, identificativo univoco e dati di matching. Gli eventi web vengono inviati sia dal browser sia dal server con lo stesso event_id; quelli offline partono solo dal server.

MomentoEvento MetaEvento GA4 / Google AdsParametri chiaveFonte
Visita rilevantePageViewpage_viewURL, referrer, UTM, consensoBrowser + server
Pagina chiave (prezzi, programma)ViewContentview_itemcontent_id, content_nameBrowser + server
Form compilato / downloadLeadgenerate_leadem, ph hashati, fbclid/gclid, event_id, lead_idBrowser + server
Iscrizione evento confermataCompleteRegistrationsign_upevent_id, value del biglietto, currencyServer (webhook CRM)
Inizio acquistoInitiateCheckoutbegin_checkoutvalue carrello, currency, itemsBrowser + server
Acquisto corso / eventoPurchasepurchaseorder_id come event_id, value reale, currency=EUR, itemsBrowser + server
Contratto coaching firmatoPurchase (offline)Offline Conversion Importgclid/fbclid salvato, value o LTV stimato, conversion_timeServer, entro 24 h dalla firma
Chiamata da annuncioContactphone_callnumero dinamico, durata, campagnaCall tracking → server

3 · Deduplicazione con event_id

Browser e server inviano la stessa conversione. Per contarla una volta sola, entrambi portano lo stesso event_name e lo stesso event_id, generato una sola volta nel dataLayer (per gli acquisti coincide con l'ID ordine). Meta e Google riconoscono la coppia entro la finestra di deduplicazione e scartano il doppione.

RegolaDettaglioPerché
event_id univocoGenerato nel dataLayer, passato a Pixel, tag GA4 e server; per Purchase è l'order_idSenza ID condiviso le piattaforme contano due conversioni
Finestra di dedupStandard 48 ore; estesa fino a 7 giorni per eventi lenti come il coachingEventi offline arrivano con ritardo rispetto al browser
Stesso event_namePurchase da browser e Purchase da server, mai nomi diversiLa dedup funziona solo su eventi con lo stesso nome
Log dei duplicatiEventi scartati registrati in BigQuery per audit mensileTasso di duplicati target sotto il 5%
Test Event CodeAttivo solo in staging, mai in produzioneEvita che eventi di test contaminino l'ottimizzazione

Il consenso dell'utente governa tutto il flusso. Consent Mode v2 definisce quattro segnali che i tag Google leggono prima di scrivere cookie o inviare dati; il server container riceve lo stesso stato e lo applica anche agli eventi verso Meta. Di default tutto è denied; il banner (CMP) aggiorna i valori appena l'utente sceglie.

SegnaleCosa governaCon consenso negato
analytics_storageCookie e identificativi di GA4GA4 invia ping anonimi senza cookie; i report usano il behavioral modeling
ad_storageCookie pubblicitari (gclid, conversion linker)Nessun cookie ads; ping di conversione anonimi per il conversion modeling
ad_user_dataInvio di dati utente a Google per finalità pubblicitarieEnhanced Conversions e Customer Match non inviano dati hashati
ad_personalizationRemarketing e personalizzazione annunciL'utente non entra nelle liste di remarketing
// Prima di qualsiasi tag: default negato, in attesa del banner
gtag('consent', 'default', {
  ad_storage: 'denied',
  analytics_storage: 'denied',
  ad_user_data: 'denied',
  ad_personalization: 'denied',
  wait_for_update: 500
});
// La CMP aggiorna i segnali con la scelta dell'utente
gtag('consent', 'update', { ad_storage: 'granted', analytics_storage: 'granted',
  ad_user_data: 'granted', ad_personalization: 'granted' });

Il server container legge lo stato di consenso dall'evento in arrivo: se ad_user_data è negato, i tag Meta CAPI e Google Ads non includono email, telefono né click ID. Gli eventi aggregati restano disponibili per il reporting interno in forma anonima.

5 · GTM server container

Il cuore dell'architettura è un container Google Tag Manager lato server, pubblicato su un sottodominio first-party come trk.tuodominio.it, ospitato su Stape o Google Cloud Run. Il container web del sito invia tutti gli eventi lì, invece che direttamente a Meta e Google.

  • Cookie HTTP di lunga durata: i cookie _ga, _fbp e _fbc vengono riscritti dal server con scadenza fino a 2 anni, aggirando il limite di 7 giorni che Safari e iOS impongono ai cookie scritti da JavaScript.
  • Resistenza agli adblocker: le richieste vanno al tuo dominio, non a facebook.com o google-analytics.com, quindi non vengono bloccate dalle liste dei filtri.
  • Un evento, molte destinazioni: il client GA4 riceve l'evento dal browser e lo passa ai tag Meta CAPI, Google Ads, GA4 e BigQuery, ciascuno con il proprio formato.
  • Arricchimento: una variabile Firestore o un lookup sul CRM aggiunge email e telefono hashati, external_id e valore LTV all'evento prima dell'inoltro.
  • Filtri: IP interni, user agent di bot e richieste malformate vengono scartati o marcati come test prima di arrivare alle piattaforme.
  • Ingresso webhook: il CRM e il sistema di pagamento inviano al container gli eventi offline (contratto firmato, pagamento ricevuto) che il browser non può vedere.
ComponenteConfigurazione tipica
HostingStape (EU) o Cloud Run in europe-west; 2+ istanze in produzione, 1 in staging
Dominiotrk.tuodominio.it con record A/CNAME e certificato TLS; mappato anche per il caricamento di gtm.js first-party
ClientGA4 client (eventi web), Data Client per i webhook JSON dal CRM
TagMeta Conversions API, Google Ads Conversion (Enhanced), GA4, BigQuery insert, Slack webhook per alert
Variabilievent_id dal dataLayer, consenso, SHA-256 su em/ph/fn/ln, lookup CRM per external_id e LTV

6 · Meta Conversions API

La Conversions API (CAPI) è il canale server-to-server verso Meta. Ogni evento porta i dati di matching hashati, il click ID, IP e user agent dell'utente, l'event_id per la deduplicazione con il Pixel e l'action_source che distingue web da offline. L'obiettivo è un Event Match Quality alto, condizione per cui Meta attribuisca correttamente la conversione e ottimizzi la consegna.

ParametroContenutoNote
em, phEmail e telefono hashati SHA-256Email lowercase e trim; telefono in E.164 prima dell'hash
fn, ln, ct, zpNome, cognome, città, CAP hashatiAumentano il match quando l'email non è disponibile
external_idID contatto CRM hashatoChiave stabile cross-device
fbc, fbpClick ID (da fbclid) e browser IDRiscritti dal server con lunga scadenza
client_ip_address, client_user_agentIP e user agent dell'utenteObbligatori per eventi web; migliorano il matching
event_idIdentificativo univoco condiviso con il PixelPer Purchase coincide con l'order_id
action_sourcewebsite, phone_call, physical_store, otherGli eventi offline usano valori diversi da website
custom_datavalue, currency, content_ids, order_idValore reale o LTV stimato
POST https://graph.facebook.com/v21.0/{PIXEL_ID}/events
{
  "data": [{
    "event_name": "Purchase",
    "event_time": 1760000000,
    "event_id": "ORD-1042",
    "action_source": "website",
    "event_source_url": "https://tuodominio.it/grazie",
    "user_data": {
      "em": ["<sha256 email>"], "ph": ["<sha256 telefono>"],
      "external_id": ["<sha256 crm_id>"],
      "fbc": "fb.1.1759000000.AbCdEf", "fbp": "fb.1.1758000000.123456",
      "client_ip_address": "203.0.113.4", "client_user_agent": "Mozilla/5.0 ..."
    },
    "custom_data": { "currency": "EUR", "value": 1990, "order_id": "ORD-1042" }
  }]
}

Eventi inviati: PageView, ViewContent, Lead (email hashata + fbclid + IP per attribuzione certa), CompleteRegistration (iscrizione evento confermata dal CRM), Purchase con valore reale, order_id e currency, Purchase offline per il coaching inviato entro 24 ore dalla firma con LTV stimato. Target di Event Match Quality: oltre 7/10; match rate su email hashata oltre il 70%.

7 · GA4 Measurement Protocol

Il Measurement Protocol è l'API con cui il server invia eventi a GA4. Serve per registrare in analytics ciò che accade fuori dal browser (contratto firmato, pagamento ricevuto, rimborso) e per completare gli eventi web con dati che il client non ha. Ogni chiamata richiede measurement_id, api_secret e un client_id esistente (dal cookie _ga) oppure uno user_id, altrimenti l'evento non viene associato a nessun utente.

POST https://www.google-analytics.com/mp/collect?measurement_id=G-XXXXXXX&api_secret=***
{
  "client_id": "1234567890.1759000000",
  "user_id": "crm_8812",
  "timestamp_micros": 1760000000000000,
  "consent": { "ad_user_data": "GRANTED", "ad_personalization": "GRANTED" },
  "events": [{
    "name": "purchase",
    "params": {
      "transaction_id": "ORD-1042", "value": 1990, "currency": "EUR",
      "items": [{ "item_id": "corso-marketing", "item_name": "Corso Marketing", "price": 1990, "quantity": 1 }],
      "session_id": "1759000000", "engagement_time_msec": 100
    }
  }]
}
  • Il client_id viene salvato sul contatto CRM al primo form, così gli eventi offline tornano nella stessa sessione utente di GA4.
  • Il Measurement Protocol non crea nuovi utenti né sessioni complete: va usato per integrare, non per sostituire il tag web.
  • I dati arrivano in BigQuery con l'export giornaliero o in streaming, dove vengono uniti a costi e CRM per la dashboard.

Lato Google Ads lavoriamo su tre livelli: le Enhanced Conversions for web arricchiscono le conversioni del sito con email e telefono hashati; le Enhanced Conversions for leads e l'Offline Conversion Import portano in Google Ads le vendite chiuse fuori dal sito; Customer Match carica liste hashate per audience, lookalike ed esclusioni.

MeccanismoChiave di matchingQuandoTempistica
Enhanced Conversions for webEmail, telefono, indirizzo hashati SHA-256 + gclidgenerate_lead, purchase sul sitoIn tempo reale dal server container
Enhanced Conversions for leadsEmail o telefono hashati del leadIl lead diventa cliente nel CRMEntro 63 giorni dal click
Offline Conversion Import (OCI)gclid, gbraid o wbraid salvato sul leadContratto firmato, pagamento ricevutoEntro 90 giorni dal click, via API o import schedulato
Customer MatchListe di email e telefoni hashatiSegmenti RFM settimanaliSync automatico ogni settimana
// Pipeline offline → Google Ads
CRM: il lead firma il contratto
  → webhook al server container
  → estrae gclid (o gbraid/wbraid), data di conversione, valore reale
  → Offline Conversion Import via Google Ads API (entro 90 gg dal click)
  → Google ottimizza le aste su chi compra davvero, non su chi compila un form

9 · Pipeline nurturing: dal lead alla vendita tracciata

Ogni tappa del funnel invia un evento server-side. Le piattaforme imparano da tutto il percorso, non solo dal primo click, e il CRM mantiene punteggio, sorgente e click ID aggiornati. Volumi di esempio, struttura reale.

TappaVolumePassaggioEventi inviati
1 · Lead freddo10.000100% (top of funnel)CAPI Lead · CRM: contatto creato · fbclid/gclid salvati · UTM registrati
2 · Lead caldo3.20032%Apre 3+ email · CAPI ViewContent · CRM score > 50 · retargeting attivato
3 · Iscritto evento1.10034% dai lead caldiCAPI CompleteRegistration · offline conversion Meta · sequenza pre-evento · score aggiornato
4 · Primo acquisto32029% dagli iscrittiCAPI Purchase con valore reale · Google OCI · audience "clienti"
5 · Cliente ricorrente14545% upsellCAPI Purchase ×2 · LTV stimato inviato · lookalike sugli acquirenti · pipeline coaching

10 · Pulizia e qualità del dato

Deduplicazione eventi Critico

  • event_id univoco su ogni evento: Pixel e CAPI mandano lo stesso ID, Meta e Google deduplicano.
  • Finestra di dedup configurata fino a 7 giorni per eventi lenti come il coaching.
  • Log degli eventi duplicati per l'audit mensile.
  • Test Event Code attivo in staging, mai in produzione.

Normalizzazione contatti Critico

  • Email sempre lowercase, trim e validazione regex prima dell'hashing.
  • Telefono normalizzato in formato E.164 (+39…).
  • Merge automatico dei duplicati nel CRM su email e telefono.
  • Flag "test interno" sui contatti del team per escluderli dalle metriche.

Filtro del traffico non valido Importante

  • IP interni e del team in blacklist su GA4, Meta e Google Ads.
  • Filtro bot attivo su GA4 e Cloudflare Turnstile sui form.
  • Monitoraggio anomalie: picchi improvvisi di CTR o click generano un alert.
  • Esclusione dal remarketing dei clienti già attivi.

Stitching cross-device Importante

  • Email come chiave univoca che unifica sessioni mobile e desktop.
  • fbclid e gclid collegati al contact_id del CRM dal primo click.
  • Continuità di sessione: lo stesso utente che torna dopo 30 giorni viene riconosciuto dal CRM.
  • Finestra di attribuzione configurata: 7 giorni click / 1 giorno view per Meta.

Validazione UTM e tagging Importante

  • Foglio master UTM: ogni campagna ha un codice unico e versionato.
  • Alert automatico se arrivano sessioni senza UTM da canali a pagamento.
  • Regex per rilevare UTM malformati o duplicati nel naming.
  • Revisione mensile degli UTM orfani (click senza conversioni).

Data quality score Avanzato

  • Score mensile automatico per ogni fonte: percentuale di eventi con email matchata.
  • Match rate CAPI target oltre il 70%; sotto il 60% è un problema di qualità dei dati.
  • Dashboard separata di data health, visibile solo internamente.
  • Alert su Slack quando il match rate scende sotto la soglia critica.

11 · Obiettivi di qualità del dato

I target mensili che monitoriamo e riportiamo nel report di data health.

MetricaTargetCome la misuriamo
CAPI match rate (email hashata)> 70%Events Manager, per evento e per settimana
Sessioni paid con UTM completo> 95%GA4 + BigQuery: sessioni con medium cpc/paid_social senza campaign
Tasso di eventi duplicati CAPI< 5%Log di dedup in BigQuery
Lead con email valida nel CRM> 98%Validazione regex e bounce al primo invio
Conversioni offline importate entro 90 giorni100%Confronto CRM vs Google Ads OCI e Meta offline
gclid/fbclid salvato su ogni lead> 85%Campi CRM non vuoti sui lead da canali paid
Traffico bot e test nei report< 2%Sessioni marcate "invalid" vs totale

12 · Funzionalità avanzate

Quello che si costruisce sopra un dato affidabile. Per il dettaglio orientato al business vedi la fase 05 del framework.

FunzionalitàCome funzionaImpatto
Time-to-purchase attributionGiorni tra primo click e vendita per ogni prodotto, da BigQueryFinestre di attribuzione e budget tarati sul ciclo reale
LTV predittivo a 12 mesiModello sullo storico ordini; il valore stimato sostituisce il primo ordine negli eventiLe piattaforme ottimizzano verso chi spende di più
Audience RFM dinamicheRecency, Frequency, Monetary ricalcolati ogni settimana e sincronizzati con Meta e GoogleWin-back automatico, esclusioni, upsell premium
Anomaly detectionSoglie su CPL, conversioni, budget, CAPI fermo; notifica Slack/email con causa probabileZero budget sprecato in silenzio
Tracking senza cookie di terze partiIdentità first-party, server-side, Consent Mode v2Funziona con iOS, Safari e normative future
Attribuzione multi-touchAnalisi delle sequenze di touchpoint (es. Google → blog → email → retargeting Meta) in BigQueryBudget allocato sulla sequenza che converte
Call tracking + CRM matchNumero dinamico per campagna; la chiamata che diventa vendita è importata come conversione offlineAttribuzione anche delle vendite telefoniche
Report AI settimanaleOgni lunedì: confronto settimana precedente, anomalie, 3 insight, 3 azioniZero ore di reporting manuale

13 · Stack tecnologico tipico

Gli strumenti cambiano in base a quello che usi già; l'architettura resta la stessa.

Meta Conversions API Google Ads Enhanced + OCI GA4 + Measurement Protocol BigQuery GTM server-side (Stape / Cloud Run) CRM: HubSpot, GoHighLevel, Salesforce Make / n8n / Zapier Looker Studio / dashboard custom Alert su Slack, email, Telegram Cloudflare (filtro IP, Turnstile)
Domande frequenti

Domande tecniche frequenti

Perché il GTM server container deve stare su un sottodominio first-party?
Perché così i cookie vengono impostati dal tuo dominio (es. trk.tuodominio.it) via header HTTP e non da uno script di terze parti. Safari e iOS limitano a 7 giorni i cookie scritti da JavaScript, mentre quelli impostati dal server durano fino a 2 anni. In più le richieste verso il tuo dominio non vengono bloccate dagli adblocker come quelle verso facebook.com o google-analytics.com.
Come funziona la deduplicazione tra Pixel e Conversions API?
Entrambi inviano lo stesso evento con lo stesso nome (event_name) e lo stesso identificativo univoco (event_id), per esempio l'ID ordine. Meta riceve due eventi, riconosce la coppia e ne conta uno solo. Perché funzioni, l'event_id deve essere generato una volta sola (nel dataLayer) e passato sia al pixel sia al server; il tasso di duplicati residuo si controlla in Events Manager.
Cos'è Consent Mode v2 e cosa cambia se l'utente rifiuta i cookie?
È il meccanismo con cui i tag Google adattano il comportamento al consenso: quattro segnali (ad_storage, analytics_storage, ad_user_data, ad_personalization) impostati a denied di default e aggiornati dal banner. Con consenso negato i tag non scrivono cookie e inviano solo ping anonimi, su cui Google applica il conversion modeling. Il server container riceve lo stato e lo propaga anche agli eventi verso Meta.
Qual è la differenza tra GA4 Measurement Protocol ed Enhanced Conversions?
Il Measurement Protocol è l'API con cui invii eventi a GA4 dal server, agganciandoli a un client_id o user_id esistente: serve per registrare eventi offline o completare quelli web. Le Enhanced Conversions riguardano Google Ads: arricchiscono la conversione con email o telefono hashati per migliorare il matching con l'utente che ha cliccato, anche quando il gclid non è disponibile.
Come importate le conversioni offline in Google Ads e Meta?
Dal CRM: quando un lead diventa cliente, un webhook estrae gclid (o gbraid/wbraid), data della conversione e valore e li invia a Google Ads tramite Offline Conversion Import entro 90 giorni dal click. Verso Meta inviamo lo stesso evento via Conversions API con action_source offline e dati di matching hashati. Le vendite al telefono vengono così attribuite alla campagna di origine.
Setup in 14 giorni

Vuoi un tracking che funziona davvero?

Implementiamo l'intera architettura, UTM, server container, CAPI, deduplicazione e data quality, così ogni euro speso in advertising è tracciato fino alla vendita reale.

Nessun impegno Match rate target oltre il 70% Zero cookie di terze parti