Keywords que generan conversiones reales en GA4

Cruza las keywords de GSC con las conversiones registradas en GA4 para la misma URL. Permite identificar qué términos de búsqueda realmente generan acciones de valor en el sitio.

keywords-que-convierten.sql
-- Keywords que generan conversiones reales: cruce GSC + GA4
-- El matching se realiza por URL (GSC) vs page_location (GA4)
WITH gsc_data AS (
  SELECT
    query AS keyword,
    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'
    AND is_anonymized_query = FALSE
  GROUP BY
    keyword, url
  HAVING
    clics_gsc >= 5
),
ga4_conversiones AS (
  SELECT
    -- Normalizar page_location: extraer solo scheme + host + path sin parámetros
    REGEXP_EXTRACT(
      (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location'),
      r'(https?://[^?#]+)'
    ) AS url_normalizada,
    COUNT(*) 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'
    AND event_name IN ('generate_lead', 'purchase', 'sign_up')
  GROUP BY
    url_normalizada
)
SELECT
  g.keyword,
  g.url,
  g.clics_gsc,
  g.impresiones,
  g.posicion_media,
  c.conversiones,
  ROUND(SAFE_DIVIDE(c.conversiones, g.clics_gsc) * 100, 2) AS tasa_conversion
FROM
  gsc_data g
  INNER JOIN ga4_conversiones c ON g.url = c.url_normalizada
WHERE
  c.conversiones > 0
ORDER BY
  c.conversiones DESC
LIMIT 50

Explicación paso a paso

  • 3 El CTE gsc_data obtiene keywords y URLs con sus métricas de GSC.
  • 21 El CTE ga4_conversiones cuenta conversiones por URL desde GA4, filtrando tráfico orgánico.
  • 24 REGEXP_EXTRACT normaliza page_location eliminando parámetros de query string y fragmentos para que coincida con las URLs de GSC.
  • 35 Reemplazar los nombres de eventos por los eventos clave configurados en el sitio.
  • 46 Calcula la tasa de conversión dividiendo conversiones GA4 entre clics GSC por keyword.
  • 49 INNER JOIN cruza solo URLs que existen en ambas fuentes.

Ejemplo de resultado esperado

keywordurlclics_gscimpresionesposicion_mediaconversionestasa_conversion
herramienta seo gratishttps://ejemplo.com/herramientas876123453.20455.14
consultas sql para analyticshttps://ejemplo.com/guia-sql43267894.10235.32
bigquery ga4 tutorialhttps://ejemplo.com/tutorial23445675.50125.13

Variaciones y adaptaciones

Reemplazar los eventos de conversión en el CTE ga4_conversiones según los eventos clave del sitio. Para ver keywords que llevan tráfico pero no convierten, cambiar INNER JOIN por LEFT JOIN y filtrar WHERE c.conversiones IS NULL. Para ponderar por valor monetario, añadir SUM(event_value) en el CTE de GA4.