Keywords con muchas impresiones y bajo CTR

Detecta keywords que aparecen frecuentemente en los resultados de búsqueda pero reciben pocos clics. Son oportunidades para mejorar títulos, meta descriptions o rich snippets.

keywords-impresiones-bajo-ctr.sql
-- Keywords con muchas impresiones pero bajo CTR
-- Oportunidades para mejorar títulos y meta descriptions
SELECT
  query AS keyword,
  SUM(impressions) AS impresiones,
  SUM(clicks) AS clics,
  ROUND(SAFE_DIVIDE(SUM(clicks), SUM(impressions)) * 100, 2) AS ctr,
  ROUND(SUM(sum_top_position + impressions) / SUM(impressions), 2) AS posicion_media
FROM
  `your-project.searchconsole.searchdata_site_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
HAVING
  -- Al menos 500 impresiones para que sea relevante
  impresiones >= 500
  -- CTR por debajo del 2%
  AND ctr < 2.0
  -- Posición media dentro del top 20 (tiene visibilidad real)
  AND posicion_media <= 20
ORDER BY
  impresiones DESC
LIMIT 50

Explicación paso a paso

  • 7 Calcula el CTR real dividiendo clics entre impresiones.
  • 8 Posición media con la fórmula correcta del export de GSC (0-indexed convertido a 1-indexed).
  • 18 Filtra keywords con al menos 500 impresiones para enfocarse en términos con volumen significativo.
  • 20 CTR menor al 2% indica que la keyword aparece mucho pero genera pocos clics.
  • 22 Limita a posiciones dentro del top 20 porque fuera de ese rango el bajo CTR es esperado.

Ejemplo de resultado esperado

keywordimpresionesclicsctrposicion_media
analisis de datos sql12340870.718.40
consultas bigquery ejemplos87651231.406.20
seo con sql6543981.5011.30

Variaciones y adaptaciones

Para ajustar los umbrales, modificar los valores de impresiones >= 500 y ctr < 2.0 según el volumen del sitio. Para ver también la URL que rankea, usar searchdata_url_impression y añadir url al SELECT y GROUP BY. Para priorizar por impacto potencial, añadir una columna calculada: impresiones * (benchmark_ctr - ctr_actual).