Páginas más vistas por usuarios orgánicos en una sola sesión

Muestra cuántas páginas ven en promedio los usuarios orgánicos por sesión y cuáles son las páginas más frecuentes en sesiones con alto número de vistas. Indica la profundidad de navegación del tráfico SEO.

paginas-por-sesion-organica.sql
-- Páginas más vistas en sesiones orgánicas y profundidad de navegación
WITH paginas_sesion AS (
  SELECT
    CONCAT(
      user_pseudo_id, '.',
      CAST(
        (SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id')
      AS STRING)
    ) AS session_id,
    (SELECT value.string_value FROM UNNEST(event_params)
      WHERE key = 'page_location') AS pagina
  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 = 'page_view'
)
SELECT
  pagina,
  COUNT(*) AS vistas_totales,
  COUNT(DISTINCT session_id) AS sesiones_con_pagina,
  ROUND(COUNT(*) * 1.0 / COUNT(DISTINCT session_id), 2) AS vistas_por_sesion
FROM
  paginas_sesion
GROUP BY
  pagina
ORDER BY
  vistas_totales DESC
LIMIT 50

Explicación paso a paso

  • 2 El CTE extrae la combinación de sesión y página vista para cada evento page_view orgánico.
  • 10 Extrae la URL de cada página vista dentro de la sesión.
  • 18 Filtra por page_view para contar solo vistas de página efectivas.
  • 22 Cuenta el total de vistas de cada página sumando todos los page_view.
  • 23 Cuenta en cuántas sesiones distintas apareció cada página.
  • 24 Calcula la ratio de vistas por sesión: valores altos indican que la página se recarga frecuentemente o aparece varias veces en la misma sesión.

Ejemplo de resultado esperado

paginavistas_totalessesiones_con_paginavistas_por_sesion
https://ejemplo.com/543242101.29
https://ejemplo.com/guia-seo387636541.06
https://ejemplo.com/blog234518901.24

Variaciones y adaptaciones

Para ver la profundidad media de navegación (páginas por sesión), usar un CTE que cuente pages por session_id y luego calcular AVG(). Para filtrar solo sesiones con más de 3 páginas vistas, añadir HAVING COUNT(*) > 3 en un CTE previo. Para ver las rutas de navegación más comunes, usar STRING_AGG(pagina, ' > ' ORDER BY event_timestamp) agrupado por session_id.