Tiempo medio en página por URL orgánica
Calcula el tiempo medio de engagement por página para sesiones orgánicas. Ayuda a identificar contenido que retiene al usuario y contenido que no genera interés.
-- Tiempo medio de engagement por página en sesiones orgánicas
-- Usa engagement_time_msec acumulado por cada evento de la página
SELECT
(SELECT value.string_value FROM UNNEST(event_params)
WHERE key = 'page_location') AS pagina,
COUNT(*) AS page_views,
ROUND(
AVG(
(SELECT value.int_value FROM UNNEST(event_params)
WHERE key = 'engagement_time_msec')
) / 1000, 2
) AS tiempo_medio_seg,
ROUND(
SUM(
(SELECT value.int_value FROM UNNEST(event_params)
WHERE key = 'engagement_time_msec')
) / 1000 / 60, 2
) AS tiempo_total_min
FROM
`your-project.analytics_XXXXXXXXX.events_*`
WHERE
_TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
AND traffic_source.medium = 'organic'
AND event_name = 'user_engagement'
GROUP BY
pagina
HAVING
page_views >= 10
ORDER BY
tiempo_medio_seg DESC
LIMIT 50
Explicación paso a paso
- 4 Extrae la URL de la página desde event_params.
- 7 Calcula el promedio de engagement_time_msec y lo convierte de milisegundos a segundos.
- 13 Calcula el tiempo total acumulado en minutos para contextualizar la relevancia de cada página.
- 25 Filtra por evento user_engagement, que es el que acumula tiempo de engagement en GA4.
- 28 Excluye páginas con menos de 10 vistas para evitar promedios engañosos.
- 30 Ordena de mayor a menor tiempo medio para ver primero el contenido más atractivo.
Ejemplo de resultado esperado
| pagina | page_views | tiempo_medio_seg | tiempo_total_min |
|---|---|---|---|
| https://ejemplo.com/guia-completa-seo | 1243 | 187.34 | 3881.29 |
| https://ejemplo.com/tutorial-bigquery | 876 | 142.18 | 2076.23 |
| https://ejemplo.com/blog/herramientas | 654 | 98.45 | 1073.10 |
Variaciones y adaptaciones
Para ver solo páginas con bajo engagement (candidatas a mejorar), cambiar ORDER BY a tiempo_medio_seg ASC. Para agrupar por directorio, usar REGEXP_EXTRACT(page_location, r'https?://[^/]+(/[^/]+)') AS directorio. Para ver la mediana en lugar del promedio, usar APPROX_QUANTILES(engagement_time_msec, 100)[OFFSET(50)].
Queries relacionadas
Funnel de conversión desde landing orgánica hasta evento clave
GA4 en BigQuery
Avanzado
Tráfico orgánico segmentado por tipo de contenido
GA4 en BigQuery
Avanzado
Search terms internos usados por visitantes orgánicos
GA4 en BigQuery
Intermedio
Páginas de salida más frecuentes en sesiones orgánicas
GA4 en BigQuery
Intermedio