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-landing-organica.sql
-- 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_pagesesiones_totalessesiones_engagedengagement_rate
https://ejemplo.com/pagina-antigua3428725.44
https://ejemplo.com/404-redirect1284132.03
https://ejemplo.com/guia-seo1893142075.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.