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.