Tras activar la exportación de datos de Google Analytics 4 a BigQuery, una de las primeras dudas que suelen surgir al ver el schema del dataset generado es: ¿qué fuente de tráfico debo usar?
GA4 incorpora distintas estructuras (structs) que contienen información sobre origen, medio y campaña, pero cada una funciona de forma distinta y sirve para diferentes análisis.
En este artículo veremos las cuatro fuentes de tráfico que encontrarás en BigQuery, qué representan y cuándo deberías utilizarlas.
Contenidos
Entendiendo los distintos scopes de tráfico en GA4
Antes de pasar a hablar sobre las estructuras que Google Analytics 4 ofrece dentro de BigQuery, es importante entender porque sucede esto. GA4 utiliza distintos niveles o scopes de asignación del tráfico porque cada uno responde a una pregunta diferente sobre el comportamiento del usuario.
A nivel de usuario, GA4 intenta identificar cómo llegó un usuario por primera vez, lo cual es fundamental para medir la eficacia de las campañas de adquisición. Este dato permanece estable en el tiempo porque representa el “primer contacto” de ese usuario con la marca.
A nivel de sesión, GA4 identifica el origen concreto que generó la visita actual. Aquí lo importante no es el historial del usuario, sino qué canal provocó que iniciara esta sesión. Por eso la asignación sigue una lógica de último click no directo, que refleja mejor el comportamiento real de navegación y es el estándar para análisis de adquisición.
Por último, a nivel de evento, GA4 puede capturar información de tráfico en el momento exacto en que ocurre cada acción. Este nivel es más granular y muestra el contexto específico de cada evento (por ejemplo, UTMs presentes solo en ciertas páginas). Es especialmente útil para análisis detallados de funnels, debugging o situaciones donde sesiones y navegación incluyen múltiples redirecciones o contextos distintos.
Explorando las distintas columnas de origen del tráfico
Una vez entendido por qué Google Analytics 4 utiliza distintos scopes para definir el origen del tráfico, podemos centrarnos en cómo se refleja esta información dentro de la exportación a BigQuery. Aunque la lógica base es la misma, BigQuery organiza el tráfico en cuatro estructuras diferentes, cada una con un propósito concreto y un nivel de detalle distinto.
Adquisición de sesión desde los parámetros del evento
En BigQuery, una de las formas más antiguas y técnicas de identificar el origen de una sesión es a través de los parámetros de evento. Antes de que existieran estructuras específicas para el tráfico, la única forma de obtener valores como source, medium o campaign era extrayéndolos manualmente desde event_params. Estos valores solo se registran cuando el evento ocurre en un contexto donde hay UTMs, un referrer válido o cuando el evento marca el inicio de una sesión, por lo que no siempre están disponibles para todos los eventos.
Este enfoque tiene dos limitaciones clave: por un lado, es evento a evento, lo que hace que la información no sea consistente en toda la sesión; por otro, requiere realizar un UNNEST() para acceder a los parámetros, lo que añade complejidad y aumenta la probabilidad de errores. Además, GA4 no finaliza una sesión si el usuario regresa por un canal diferente dentro del periodo de inactividad de 30 minutos. Como consecuencia, una misma sesión puede contener múltiples valores de traffic source a nivel evento, reflejando el contexto real de navegación, pero complicando el análisis cuando se busca una visión consolidada.
Para obtener un origen unificado de sesión trabajando solo con event-scoped traffic source, suele aplicarse la lógica de extender el primer valor válido al resto de eventos de la sesión. Esto obliga a tomar una decisión explícita sobre qué evento recibirá el “crédito”, ya sea el primer click de la sesión, el último click, el primer valor no nulo, etc. Cada elección afecta a cómo se interpretan las métricas de adquisición y puede generar discrepancias entre analistas o herramientas.
Por todo ello, este método se utiliza hoy principalmente para periodos anteriores a mayo de 2023 o para análisis muy granulares donde es necesario conocer el valor exacto presente en cada evento. Para la mayor parte de los análisis de adquisición, GA4 ofrece estructuras más limpias, coherentes y fáciles de consultar, que veremos en los siguientes apartados.
Tráfico de usuario con traffic_source
El struct traffic_source contiene información sobre la fuente de adquisición del usuario. Cada evento incluye este struct, pero sus valores no cambian nunca, ya que reflejan la primera campaña o canal por el que llegó el usuario. Esto lo convierte en un dato estable y útil para analizar la adquisición inicial de usuarios o construir cohortes basadas en el primer contacto.
Es importante destacar que traffic_source no representa el tráfico a nivel sesión. Por ello, no es adecuado para análisis de rendimiento de sesiones, KPIs de tráfico diario o informes que buscan reflejar el comportamiento actual de la visita. Su valor reside principalmente en entender cómo llegaron los usuarios por primera vez a la propiedad y en estudios de adquisición a largo plazo.
Tráfico a nivel evento con collected_traffic_source
Introducido en mayo de 2023, el struct collected_traffic_source simplifica enormemente el acceso a la información de tráfico a nivel evento. A diferencia de event_params, que requiere hacer un UNNEST() para extraer los parámetros de atribución de la sesión, collected_traffic_source ofrece estos datos en un formato plano y accesible, listo para consultas SQL directas.
Este struct sigue siendo evento a evento, por lo que refleja el origen exacto de cada acción, pero elimina gran parte de la complejidad asociada a la extracción manual desde los parámetros. Además, concentra toda la información de tráfico en un solo lugar, facilitando análisis de funnels, debugging de UTMs o estudios detallados de recorridos dentro de la sesión.
Hoy en día, collected_traffic_source es la opción recomendada para cualquier análisis event-level, salvo que el rango temporal incluya datos anteriores a mayo de 2023, donde sería necesario utilizar los parámetros de evento. Esta estructura proporciona una forma consistente y eficiente de trabajar con la adquisición a nivel evento sin perder el detalle que antes solo era accesible a través de event_params.
Puedes utilizar la siguiente query para contar el número de sesiones por source, medium y campaign:
WITH prep AS (
SELECT
CONCAT(user_pseudo_id, (SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id')) AS session_id,
ARRAY_AGG(
STRUCT(
collected_traffic_source.manual_source AS source,
collected_traffic_source.manual_medium AS medium,
collected_traffic_source.manual_campaign_name AS campaign)
ORDER BY event_timestamp
)[OFFSET(0)] AS traffic_source
FROM
`bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_20251201`
WHERE
collected_traffic_source.manual_source IS NOT NULL
GROUP BY
session_id)
SELECT
traffic_source.source,
traffic_source.medium,
traffic_source.campaign,
COUNT(DISTINCT session_id) AS sessions
FROM
prep
GROUP BY
source,
medium,
campaign
ORDER BY
sessions DESCTráfico de sesión con session_traffic_source_last_click
El struct session_traffic_source_last_click contiene información de adquisición a nivel sesión, lo que significa que todos los eventos de una misma sesión tendrán los mismos valores. Esto permite obtener una visión consistente del tráfico por sesión, sin las variaciones que pueden aparecer en los datos a nivel evento.
La asignación sigue el modelo de último click / último click no directo que utiliza GA4, lo que hace que los valores de este struct sean muy similares a los que se observan en la interfaz de usuario de Google Analytics 4. Por ello, es la opción más adecuada para análisis de adquisición de sesiones, creación de dashboards y reportes que necesiten consistencia con los informes estándar de GA4.
Este struct simplifica notablemente el análisis de tráfico, ya que elimina la necesidad de propagar o unificar valores de event-level y permite trabajar directamente con métricas de sesión, facilitando decisiones sobre campañas, canales y performance de marketing.
Aunque session_traffic_source_last_click y collected_traffic_source contienen información de tráfico, la principal diferencia radica en el nivel de scope. Mientras collected_traffic_source es evento a evento, mostrando el origen exacto en cada acción, session_traffic_source_last_click consolida esa información a nivel de sesión, asignando un único valor a todos los eventos de la misma sesión según el modelo de último click no directo. Por tanto, si buscas análisis consistentes con métricas de sesión o dashboards que reflejen la interfaz de GA4, este struct es más apropiado. En cambio, para análisis detallados de eventos individuales o debugging de UTMs, collected_traffic_source sigue siendo la mejor opción.
A continuación, puedes encontrar una query que utiliza la estructura session_traffic_source_last_click para contar el número de sesiones:
WITH prep AS (
SELECT
CONCAT(user_pseudo_id, (SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id')) AS session_id,
ARRAY_AGG(
STRUCT(
session_traffic_source_last_click.manual_campaign.source AS source,
session_traffic_source_last_click.manual_campaign.medium AS medium,
session_traffic_source_last_click.manual_campaign.campaign_name AS campaign)
ORDER BY event_timestamp
)[OFFSET(0)] AS traffic_source
FROM
`bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_20251201`
WHERE
session_traffic_source_last_click.manual_campaign.source IS NOT NULL
GROUP BY
session_id)
SELECT
traffic_source.source,
traffic_source.medium,
traffic_source.campaign,
COUNT(DISTINCT session_id) AS sessions
FROM
prep
GROUP BY
source,
medium,
campaign
ORDER BY
sessions DESCGrupos de canales (Channel Groups) de Google Analytics 4 en BigQuery
El struct session_traffic_source_last_click incluye un registro llamado cross_channel_campaign, que proporciona información sobre las campañas que generan conversiones utilizando el modelo de atribución basado en datos de GA4. Dentro de este registro se encuentran los campos default_channel_group y primary_channel_group, que reflejan cómo GA4 clasifica los canales de manera predeterminada y coinciden bastante con lo que verías en la interfaz de usuario.
Estos grupos de canales funcionan de manera diferente a la información de collected_traffic_source. Mientras que este último captura el origen de cada evento sin aplicar ningún modelo de atribución, los grupos de canales predefinidos de GA4 reorganizan el tráfico según cómo se asigna crédito a cada canal, especialmente en conversiones. Esto puede generar diferencias importantes al comparar métricas con las construidas manualmente a partir de event-level traffic sources.
La elección entre usar los grupos de canales predefinidos o crear una agrupación personalizada depende del objetivo del análisis. Los predefinidos ofrecen resultados rápidos, consistentes y coherentes con la interfaz de GA4, mientras que una agrupación propia permite adaptar la categorización a necesidades específicas o estrategias de marketing más avanzadas.
Si decides construir tu propia agrupación de canales utilizando la estructura collected_traffic_source, la documentación de Google ofrece un artículo en el que se incluyen todas las reglas de clasificación que utiliza la herramienta para generar el grupo de canales prederminado y puede servirte como base para crear la nueva agrupación.
En resumen, Google Analytics 4 ofrece múltiples formas de capturar y analizar el tráfico, y BigQuery refleja esta información a través de distintas estructuras con diferentes niveles de alcance: usuario, sesión y evento. Cada struct, desde event_params y collected_traffic_source hasta traffic_source y session_traffic_source_last_click, tiene ventajas y limitaciones según el tipo de análisis que se quiera realizar, ya sea a nivel granular de evento, consolidado por sesión o enfocado en la adquisición inicial del usuario.

