Cálculo del CTR orgánico en Google por posiciones con datos de Google Search Console

Como obtener una gráfica del CTR según la posición en los resultados de búsqueda utilizado  RStudio y los datos de  Google Search Console (GSC).

¡Los promedios mienten y los datos de clics promedio no son muy útiles! Ya está dicho. Y por eso hoy vamos a ver como obtener una gráfica del CTR según la posición en los resultados de búsqueda utilizando RStudio y los datos de un dominio de Google Search Console (GSC).

Contenidos

El informe de rendimiento de Google Search Console

Los datos de las gráficas de Google Search Console son datos medios para todas las posiciones pero normalmente a los SEO lo que nos interesa conocer cual es el CTR por posición, ya que esto es un dato mucho más útil.
Con estas instrucciones podremos sacar los datos de GSC para visualizar el CTR por posición de las palabras clave.

Visualización de datos de CTR con R

¿Cómo obtener la gráfica del CTR por posiciones desde los datos de Google Search Console?

Esto son los pasos para obtener la gráfica del CTR de los últimos 90 días con datos de Google Search Console y visualización con RStudio:

  • Descarga e instala RStudio.
  • Si nunca has tenido instalado nada relacionado con R instala lo siguiente:
  • Abre RStudio y ejecuta estos comandos para instalar los paquetes necesarios:
    • install.packages ("googleAuthR")
    • install.packages ("searchConsoleR")
    • install.packages ("dplyr")
    • install.packages("ggplot2")
  • Descarga el siguiente script.r de Gist: google_search_console_ctr_curve.r (también está incluido al final del post) y personaliza los siguientes datos:
    • OBLIGATORIO adaptarlo:
      • Línea 21: Cambia «FULL DOMAIN PATH» por la URL completa del dominio dado de alta en Google Search Console y que se vaya a analizar (por ejemplo: website <- "https://www.apasionadosdelmarketing.es/").
    • RECOMENDABLE adaptarlo:
      • Línea 40: Excluye la(s) palabra(s) que forman parte de tu marca. Así obtienes la curva de CTR correcta para palabras clave que no son de marca (por ejemplo: dimensionFilterExp = c("query!~apasionados"),
    • OPCIONAL adaptarlo:
      • Línea 25: La gráfica se muestra para las posiciones 1 a 20 de los resultados. El número es la posición hasta la cual se realiza el análisis.
      • Línea 41: Este script está cogiendo 50.000 palabras clave para calcular la gráfica del CTR. Se puede aumentar ese límite. Si no hay 50.000 palabras tampoco hay problema que el script funciona de todas formas.
  • Ejecuta el script!
    • Si nunca has utilizado RStudio debes hacer lo siguiente: La primera vez que lo ejecutes, selecciona las líneas hasta la 16 y haz click en run:
Ejecutar la primera parte del código hasta la autenticación en GSC
Ejecutar la primera parte del código hasta la autenticación en GSC
    • Se te abrirá una ventana del navegador para que des permisos a RStudio para acceder a los datos de Google Search Console. Aceptas los permisos y obtienes el código que tienes que pegar en RStudio donde te dice en la ventana de la consola: «Enter authorization code:». El código es algo como: 8/XQTYbstPm8HOPeRVau1Tk89zK-8JH1_pLThtPJn6f-r0-BH1uvtmVVM
      • RStudio guarda ese código en el archivo sc.oauth que utiliza como caché para no tener que autenticar cada vez que usamos el script. Si queremos cambiar de cuenta simplemente eliminamos el archivo. El archivo se guarda en la misma carpeta donde tenemos el archivo google_search_console_ctr_curve.r.
Search Console R quiere acceder a tu cuenta de Google Search Console
Search Console R quiere acceder a tu cuenta de Google Search Console
Código para autenticar el acceso de Search Console R a Google Search Console
Código para autenticar el acceso de Search Console R a Google Search Console
    • Y ahora seleccionamos todos el código y volvemos a darle a RUN. Y ejecutará todo el análisis y obtendremos la gráfica en la parte derecha.
Resultado de la ejecución del código R en RStudio CTR Google Search Console
Resultado de la ejecución del código R en RStudio CTR Google Search Console

Y esta gráfica te da una mejor idea del CTR real del dominio según las posiciones de la palabra clave. Esto abre múltiples oportunidades de análisis.

Ejemplo de datos que se pueden obtener

Este es un ejemplo de datos de 90 días con un CTR medio de 5,4% que para las palabras clave posicionadas en primera posición es de 29,6% incluyendo las palabras clave de marca y de un 33,6% sin incluir las palabras clave de marca.

P.D. No son datos de este blog ni de niguna de nuestras webs importantes. Es de una web secundaria que usamos para hacer experimentos.

Ahí se ve que la marca no es muy conocida porque si la excluimos tenemos un CTR mayor en la primera posición:

Analisis CTR por posiciones Google Search Console: CTR medio 5,4%
Analisis CTR por posiciones Google Search Console: CTR medio 5,4%
Analisis CTR por posiciones con palabras clave de marca
Analisis CTR por posiciones con palabras clave de marca
Analisis CTR por posiciones sin palabras clave de marca
Analisis CTR por posiciones sin palabras clave de marca

Los datos de las dos gráficas generadas con RStudio son mucho más útiles que las de Google Search Console.

Créditos de esta movida en R con RStudio

Créditos de esta movida en R: Mark Edmondson con su publicación SEO keyword research using searchConsoleR and googleAnalyticsR, Tim Wilson con su documentación sobre el uso de R y la visualización de datos y finalmente Martijn Scheijbeler con su publicación Calculating Click Through Rates for SEO, based on Google Search Console Data (in R).

 

Y a partir de aquí a experimentar.

 

Script R usado para extraer los datos

## A script to retrieve Google Search Console data for the last 90 days and plot a graph for CTR%
## It will retrieve the data from the Google Search Console API and make sure that it can be plotted for a visual graph

## Version 2: March 1, 2019
## Author: Martijn Scheijbeler (https://www.martijnscheijbeler.com)

## All credits go to Mark Edmondson for creating: https://github.com/MarkEdmondson1234/searchConsoleR & https://code.markedmondson.me/search-console-google-analytics-r-keyword-research/ 

## Load the required libraries: googleAuthR, searchConsoleR, dplyr, ggplot2
## (Download them with install.packages("googleAuthR"), install.packages("searchConsoleR"), install.packages("dplyr") and install.packages("ggplot2") if necessary
library(searchConsoleR)
library(dplyr)
library(ggplot2)

## Set up and authenticate the user with access to Google Search Console
scr_auth()

## Set website to your Google Search Console siteURL property, including http:// or https://
## Set the dimensions that you want to trigger, default: page and query
## Filter the number of clicks being bigger than x, default: 0
website <- "FULL DOMAIN PATH"
dimensions <- c("page", "query")
filter_clicks <- 0
chart_title <- "Click Through Rate (CTR%) from Google Search Results"
chart_positions <- 20

## Data in Google Search Console can only be retrieved if it's ~3 days ago.
## Set the start date to -93 days because of that and the end date on 3 days ago.
start <- as.character(Sys.Date() - 92)
end <- as.character(Sys.Date() - 3)

# Running this to avoid having a stale OAuth token: https://github.com/MarkEdmondson1234/searchConsoleR/issues/31
list_websites()

## Retrieve the date from the Google Search Console API
gsc_data <- search_analytics(website,
                             startDate = start,
                             endDate = end,
                             dimensions = dimensions,
                             dimensionFilterExp = c("query!~share"),
                             rowLimit = 50000)

## Set the SERP based on the position data point
gsc_data$serp <- cut(gsc_data$position,
                     breaks = seq(1, 100, 10),
                     labels = as.character(1:9),
                     include.lowest = TRUE,
                     ordered_result = TRUE)

## Calculate the % of SEO traffic to each page per keyword
gsc_data <- gsc_data %>%
  group_by(page) %>%
  mutate(positionRound = round(position)) %>%
  mutate(clickP = clicks / sum(clicks)) %>%
  ungroup()

## Clean up the data, filter out the minimum clicks required and remove the page column
tidy_data <- gsc_data %>%
  filter(clicks > filter_clicks) %>%
  select(-page)

## Show the Plotted Graph for this data set
ctr_plot <- ggplot(tidy_data, aes(x = position,  y = ctr ))
ctr_plot <- ctr_plot + theme_minimal()
ctr_plot <- ctr_plot + coord_cartesian(xlim = c(1, chart_positions), ylim = c(0, 1))
ctr_plot <- ctr_plot + geom_point(aes(alpha = log(clicks), color = serp, size = clicks))
ctr_plot <- ctr_plot + geom_smooth(aes(weight = clicks), size = 0.2)
ctr_plot <- ctr_plot + scale_y_continuous(labels = scales::percent)
ctr_plot <- ctr_plot + ggtitle(chart_title)
ctr_plot <- ctr_plot + theme(plot.title = element_text(lineheight=.8, face="bold"))
ctr_plot

## Start parsing the data for another graph
## Set the click curve, grouped by position
click_curve <- tidy_data %>%
  group_by(positionRound) %>%
  summarise(CTRmean = mean(clicks) / mean(impressions),
            n = n(),
            click.sum = sum(clicks),
            impressions.sum = sum(impressions),
            sd = sd(ctr),
            E = poisson.test(click.sum)$conf.int[2] / poisson.test(impressions.sum)$conf.int[1],
            lower = CTRmean - E/2,
            upper = CTRmean + E/2) %>% ungroup()

## Add the % increase to position 1
click_curve <- click_curve %>% 
  mutate(CTR1 = CTRmean[1] / CTRmean,
         CTR1.upper = upper[1] / upper,
         CTR1.lower = lower[1] / lower)

## Show a Graph with the ribbons with the average CTR per position
hh <- ggplot(click_curve, aes(positionRound, CTRmean))
hh <- hh + theme_minimal()
hh <- hh + geom_line(linetype = 2) + coord_cartesian(xlim = c(1, chart_positions), ylim = c(0, 0.5))
hh <- hh + geom_ribbon(aes(positionRound, ymin = lower, ymax = upper), alpha = 0.2, fill = "orange")
hh <- hh + scale_y_continuous(labels = scales::percent)
hh <- hh + geom_point()
hh <- hh + geom_label(aes(label = scales::percent(CTRmean)))
hh <- hh + ggtitle(chart_title)
hh <- hh + theme(plot.title = element_text(lineheight=.8, face="bold"))
hh

## Write the data of the Click Curve to a CSV for later use.
# write.csv(click_curve, file = "~/ClickCurve.csv")

 

Descubre porqué somos Apasionados del Marketing

Mira también

Screaming Frog: herramientas SEO molonas

Screaming Frog: herramientas SEO molonas

El de consultor SEO es un trabajo que requiere estar en continua formación ya que …