Comparativa de posiciones GSC con tasa de conversión GA4

Analiza la relación entre la posición media en Google y la tasa de conversión por URL. Permite identificar si mejorar posiciones en determinadas páginas tendría un impacto real en conversiones.

posicion-vs-conversion.sql
-- Relación entre posición media en GSC y tasa de conversión en GA4
-- Agrupa por rangos de posición para ver la tendencia
WITH gsc_posiciones AS (
  SELECT
    url,
    SUM(clicks) AS clics_gsc,
    SUM(impressions) AS impresiones,
    ROUND(SUM(sum_top_position + impressions) / SUM(impressions), 2) AS posicion_media
  FROM
    `your-project.searchconsole.searchdata_url_impression`
  WHERE
    data_date BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 28 DAY) AND CURRENT_DATE()
    AND search_type = 'WEB'
  GROUP BY
    url
  HAVING
    clics_gsc >= 10
),
ga4_conv AS (
  SELECT
    REGEXP_EXTRACT(
      (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location'),
      r'(https?://[^?#]+)'
    ) AS url_normalizada,
    COUNT(
      DISTINCT CONCAT(
        user_pseudo_id, '.',
        CAST(
          (SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id')
        AS STRING)
      )
    ) AS sesiones,
    COUNTIF(
      event_name IN ('generate_lead', 'purchase', 'sign_up')
    ) AS conversiones
  FROM
    `your-project.analytics_XXXXXXXXX.events_*`
  WHERE
    _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 28 DAY))
      AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
    AND traffic_source.medium = 'organic'
  GROUP BY
    url_normalizada
)
SELECT
  CASE
    WHEN g.posicion_media <= 3 THEN '01. Top 3'
    WHEN g.posicion_media <= 5 THEN '02. Pos 4-5'
    WHEN g.posicion_media <= 10 THEN '03. Pos 6-10'
    WHEN g.posicion_media <= 20 THEN '04. Pos 11-20'
    ELSE '05. Pos 21+'
  END AS rango_posicion,
  COUNT(*) AS urls,
  SUM(g.clics_gsc) AS clics_totales,
  SUM(IFNULL(c.conversiones, 0)) AS conversiones_totales,
  ROUND(SAFE_DIVIDE(
    SUM(IFNULL(c.conversiones, 0)),
    SUM(g.clics_gsc)
  ) * 100, 2) AS tasa_conversion_global
FROM
  gsc_posiciones g
  LEFT JOIN ga4_conv c ON g.url = c.url_normalizada
GROUP BY
  rango_posicion
ORDER BY
  rango_posicion ASC

Explicación paso a paso

  • 3 El CTE gsc_posiciones calcula la posición media de cada URL con al menos 10 clics.
  • 19 El CTE ga4_conv cuenta sesiones y conversiones orgánicas por URL desde GA4.
  • 46 Clasifica las URLs en rangos de posición (Top 3, 4-5, 6-10, 11-20, 21+) para analizar la tendencia.
  • 52 Cuenta el número de URLs en cada rango para contextualizar los datos.
  • 55 Calcula la tasa de conversión global por rango dividiendo conversiones totales entre clics totales.
  • 61 LEFT JOIN para incluir URLs sin conversiones en el análisis.

Ejemplo de resultado esperado

rango_posicionurlsclics_totalesconversiones_totalestasa_conversion_global
01. Top 345123404563.70
02. Pos 4-56756781873.29
03. Pos 6-101233456872.52
04. Pos 11-202341234231.86
05. Pos 21+34545651.10

Variaciones y adaptaciones

Reemplazar los eventos de conversión según la configuración del sitio. Para ver el detalle por URL en lugar de por rango, eliminar el CASE y el GROUP BY por rango. Para añadir el valor monetario, incluir SUM(event_value) en el CTE de GA4 y calcular el revenue por rango.