Engagement rate por landing page orgánica
Calcula la tasa de engagement por cada landing page orgánica. Permite identificar páginas que atraen tráfico pero no logran retener al usuario.
-- Engagement rate por landing page orgánica
-- Una sesión se considera engaged si session_engaged = '1'
WITH sesiones AS (
SELECT
(SELECT value.string_value FROM UNNEST(event_params)
WHERE key = 'page_location') AS landing_page,
CONCAT(
user_pseudo_id, '.',
CAST(
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id')
AS STRING)
) AS session_id,
MAX(
(SELECT value.string_value FROM UNNEST(event_params)
WHERE key = 'session_engaged')
) AS session_engaged
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 = 'session_start'
GROUP BY
landing_page, session_id
)
SELECT
landing_page,
COUNT(*) AS sesiones_totales,
COUNTIF(session_engaged = '1') AS sesiones_engaged,
ROUND(COUNTIF(session_engaged = '1') / COUNT(*) * 100, 2) AS engagement_rate
FROM
sesiones
GROUP BY
landing_page
HAVING
sesiones_totales >= 10
ORDER BY
engagement_rate ASC
LIMIT 50
Explicación paso a paso
- 3 El CTE 'sesiones' prepara una fila por sesión con su landing page y estado de engagement.
- 13 MAX sobre session_engaged para obtener el valor '1' si la sesión fue engaged en algún momento.
- 29 COUNTIF cuenta solo las sesiones donde session_engaged es '1' (duración mayor a 10 segundos, 2+ vistas de página o conversión).
- 30 Calcula el porcentaje de engagement dividiendo sesiones engaged entre totales.
- 36 HAVING filtra páginas con al menos 10 sesiones para evitar porcentajes engañosos con muestras pequeñas.
- 38 Ordena de menor a mayor engagement para detectar primero las páginas problemáticas.
Ejemplo de resultado esperado
| landing_page | sesiones_totales | sesiones_engaged | engagement_rate |
|---|---|---|---|
| https://ejemplo.com/pagina-antigua | 342 | 87 | 25.44 |
| https://ejemplo.com/404-redirect | 128 | 41 | 32.03 |
| https://ejemplo.com/guia-seo | 1893 | 1420 | 75.01 |
Variaciones y adaptaciones
Para ordenar por engagement de mayor a menor (páginas top), cambiar ORDER BY a engagement_rate DESC. Para añadir el bounce rate estimado, usar COUNTIF(session_engaged != '1') / COUNT(*) * 100. Para filtrar solo páginas de blog, añadir WHERE landing_page LIKE '%/blog/%' en la query exterior.
Queries relacionadas
Velocidad de página percibida por usuarios orgánicos
GA4 en BigQuery
Intermedio
Páginas de salida más frecuentes en sesiones orgánicas
GA4 en BigQuery
Intermedio
Performance por dispositivo (mobile, desktop, tablet)
GSC en BigQuery
Principiante
Window functions para ranking de URLs por categoría
SQL genérico
Avanzado