Indice dei Contenuti
I report standard di GA4 (“Esplorazioni Percorso”) soffrono di campionamento aggressivo e mancanza di granularità. Se vuoi capire davvero come gli utenti navigano nel tuo sito—ad esempio, per vedere esattamente quali pagine visitano prima di convertire e quanto tempo passano su ciascuna—devi scendere nel livello dei dati grezzi (Raw Data) su BigQuery.
Lavorare con l’export di GA4 richiede un cambio di mentalità: i dati non sono tabelle piatte, ma strutture annidate (RECORD type) ottimizzate per la scalabilità, non per la leggibilità immediata.
La Struttura event_params e UNNEST
Ogni riga in BigQuery è un evento. Ma i dettagli (URL pagina, ID sessione, Click Text) sono nascosti dentro il campo ripetuto event_params. Per estrarli, usiamo la funzione UNNEST.
Ecco lo scheletro di base per “appiattire” i dati e renderli leggibili:
SELECT
user_pseudo_id,
event_name,
event_timestamp,
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') as session_id,
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location') as page_url
FROM
`tuo_progetto.analytics_123456.events_202512*`
WHERE
event_name = 'page_view'
Ricostruire la Sequenza (Pathing)
Per analizzare il journey, dobbiamo ordinare gli eventi cronologicamente per ogni utente e sessione. Usiamo le Window Functions di SQL (ROW_NUMBER, LEAD, LAG).
Vogliamo rispondere alla domanda: “Qual è la pagina successiva più comune dopo aver letto un post del blog?”
WITH user_path AS (
SELECT
user_pseudo_id,
session_id,
page_url as current_page,
event_timestamp,
-- Trova la pagina successiva nella stessa sessione
LEAD(page_url) OVER (PARTITION BY user_pseudo_id, session_id ORDER BY event_timestamp) as next_page,
-- Calcola il tempo speso sulla pagina corrente (in secondi)
(LEAD(event_timestamp) OVER (PARTITION BY user_pseudo_id, session_id ORDER BY event_timestamp) - event_timestamp) / 1000000 as time_on_page_sec
FROM
( -- Subquery di appiattimento vista sopra -- )
)
SELECT
current_page,
next_page,
COUNT(*) as transitions,
AVG(time_on_page_sec) as avg_time
FROM
user_path
WHERE
current_page LIKE '%/blog/%' -- Filtra solo partenze dal blog
GROUP BY
1, 2
ORDER BY
transitions DESC
Analisi Avanzata: Pattern di Attribuzione
Con SQL, puoi andare oltre il pathing sequenziale. Puoi creare segmenti complessi retroattivi: “Mostrami tutti gli utenti che hanno visitato la pagina ‘Prezzi’ almeno 3 volte in 7 giorni ma non hanno convertito.”
Questi segmenti possono essere reimmessi in Google Ads (tramite Data Activation) per campagne di remarketing iper-specifiche, o usati per personalizzare l’esperienza on-site se usi un motore di personalizzazione server-side. Il raw data è complesso, ma è l’unica fonte di verità non filtrata che possiedi.