Google Analytics: Capturar la posición en Google por keyword y landing.


El próximo 7 de Junio da comienzo en Zaragoza el Congreso Web 2013, uno de los más grandes eventos dedicados al mundo web que existen en España. En el mismo voy a dar una charla sobre el tema que llevo ya tiempo trabajando: el nuevo modelo de reporting y análisis SEO basado en landings y que ya inicié en el pasado eShow. Un sistema que va evolucionando poco a poco y al que espero dar un poco más de luz y acciones concretas para que todo el que quiera pueda empezar ya mismo a trabajar su SEO sin complicaciones.

Preparando esta charla he visto que iba a ser necesario poder profundizar en distintas técnicas y códigos de captura para Google Analytics por lo que he preferido crear con un poco de antelación el material necesario para realizar estas implementaciones.

La primera de ellas es la más conocida: la posibilidad que el sistema de Google Search nos da actualmente de capturar la posición del resultado en el que ha hecho click el usuario al llegar a nuestra web. Este es un sistema que se basa en una variable que envia Google en su referrer: «cd» y que precisamente contiene esa posición en el propio SERP (Search Engine Results Page). Esta variable es una maravilla pues nos brinda información realmente útil para el análisis de nuestras keywords y landings.

Esta peculariedad ha sido tratada por distintas personas dando lugar a distintas implementaciones, cada una con sus pros y sus contras. Entre las distintas fórmulas, sin duda la más potente es la de Justin Cutroni, que decidió capturar esta variable como evento de Analytics para poder sacar un concepto nuevo y revolucionario: La posición media.

Veamos la lógica de este sistema:

  • 1. Un usuario entra en nuestra web dede Google
  • 2. Muchas veces (pero no siempre) lleva asociado al referrer esa variable
  • 3. Nosotros la capturamos y lanzamos un evento que tiene por categoría la keyword con la que llega el usuario (si es que existe, si no, el tipico «not provided») y por etiqueta la url de la landing.
  • 4. Esto nos permite generar informes con la posición media de cada keyword y landing

El código de Cutroni está en su propio post, pero tiene un grave problema para nosotros: solo captura datos si la visita viene de Google.com. Además en su intento de hacer que el código fuese más legible por todos, separando cada paso del proceso, este se ha convertido en un fragmento demasiado pesado para un simple añadido a Analytics. Por último y como detalle, las variables que usa son demasiado genéricas por lo que podrían entrar en conflicto con alguna otra variable javascript que tu web ya usase.

Por ese motivo me gustaría presentaros mi propio código de captura. Realiza casi los mismos procesos y termina capturando estos mismos datos (uso incluso en el mismo evento que usa Cutroni). No intento venderos la moto, lo mio es una simple adaptación, todo el mérito es suyo. Pero bueno, croe que este código soluciona estos tres detalles que comentaba: es más corto, usa solo una variable muy descriptiva y captura datos de cualquier dominio regional de Google.

Aquí lo tenéis:

// by iñaki huerta: 
// inspired on justin cutroni post: http://cutroni.com/blog/2013/01/14/a-new-method-to-track-keyword-ranking-using-google-analytics/
if (document.referrer.match(/google\.[a-z]{2,4}(\.[a-z]{2,4})?\//gi) && document.referrer.match(/cd/gi)) {
  var RankTrackerKw = document.referrer.match(/q=(.*?)&/)[1];
  var RankTrackerKw = (RankTrackerKw.length > 0) ? decodeURI(RankTrackerKw) : '(not provided)';   
  _gaq.push(['_trackEvent', 'RankTracker', RankTrackerKw, document.location.pathname, parseInt( document.referrer.match(/cd=(.*?)&/)[1] ), true]);
}

O si ya estás usando el código de Universal Analytics, esta sería su versión:

// by iñaki huerta: 
// inspired on justin cutroni post: http://cutroni.com/blog/2013/01/14/a-new-method-to-track-keyword-ranking-using-google-analytics/
if (document.referrer.match(/google\.[a-z]{2,4}\//gi) && document.referrer.match(/cd/gi)) {
  var RankTrackerKw = document.referrer.match(/q=(.*?)&/)[1];
  var RankTrackerKw = (RankTrackerKw.length > 0) ? decodeURI(RankTrackerKw) : '(not provided)';
ga("send", "event", {
  eventCategory: "RankTracker",
  eventAction: RankTrackerKw,
  eventLabel: document.location.pathname,
  eventValue: parseInt( document.referrer.match(/cd=(.*?)&/)[1] ),
  nonInteraction: true
});
}

El sistema es muy simple: copiar y pegar bajo tu código de analytics y a partir de entonces empezarás a capturar como eventos las posiciones de llegada de tus usuarios.

Como usar estos nuevos datos capturados

Una vez capturados unos cuantos datos (recuerda que no es inmediato, analytics tiene un desfase de hasta 24h) podremos encontrarlos en Contenido > Eventos > Eventos Principales:

eventos

Con un click en el evento «RankTracker» y seleccionando como segunda dimensión «Etiqueta de evento» podrás ver el desglose de toda la nueva información que estás capturando.

evento-informe

De esta información nos interesa sobretodo la posibilidad de poder unir keywords + landing + posición media en la que han hecho click los usuarios, por lo que en este informe nos sobra mucha información. Vamos a crear uno mucho más adecuado, que limpie la información y que además nos permita ver distinta forma todos estos datos.

Puedes incorporar este informe a tu Google Analytics haciendo click en el siguiente link:

Este informe nos mostrará la siguiente información:

eventos-informe-pers

Que nos permite ver (escogiendo pestaña) el desglose de visitas, total de entradas desde Google (total de eventos) y posición media por Landings o por Keywords. Clickando además en cualquiera de estas landings o keywords veremos de que subdimensiones se componen estas landings o keywords (si vemos landings, al clickar sobre ellas veremos las distintas keywords con las que se accede a estas landings).

Por qué es tan interesante la posición media

Por lo general, en SEO se suele trabajar con posiciones one-shot. Es decir, yo mido la posición por una keyword cualquiera en Google una única vez cada cierto tiempo (un día, una semana), con un «navegador» sin cookies y lanzando siempre desde una misma IP o colección de IPs las mediciones.

Esto provoca que en muchos casos la información con la que trabajamos es simplemente falsa. Google altera sus SERPS por demasiados parametros como para que la búsqueda limpia represente realmente siempre la posición por la que están entrando los usuarios.

Por ese motivo resulta tan gratificante disponer de posiciones de entrada reales y la media de estas. Si comparamos estos datos con los sacados con nuestras herramientas de posiciones one-shot veremos que son muy similares, en algunos casos como los TOP1 y cercanos son casi exactas (esas posiciones tienen poca variación cuando están bien asentadas) pero en keywords más bajas empezaremos a ver realmente como nos encuentran y no como estaba el resultado cuando lo rastreamos. Sin duda es información más realista y por lo tanto más importante.

Problemas y cosas que hay que saber sobre este código

Sin embargo este sistema no es perfecto. La gente muchas veces no se conforma con que les regalen información nueva (y muy útil) sino que, al no poder hacer con esta información algunas acciones piensa que el sistema es malo o erróneo.

Por ese motivo creo que es importante que conozcas las limitaciones de este sistema:

No se recogen todos los datos, solo aquellos que están disponibles

Como con el propio (not provided) Google no envia siempre la variable cd en el referrer por lo que no siempre disponemos de las posiciones.

En consecuencia, lo normal es que veamos menos eventos lanzados que visitas reales SEO en nuestra web. Esto no debería sorprenderte, significa que no puedes tener en un mismo informe visitas exactas y posición media, pero sigue siendo perfectamente posible saber las posiciones medias de tus keywords y tus landings aproximadas.

Si, es posible que estés basando tu posición media en un 50% o menos del tráfico (dependiendo de tu tipología de usuarios) pero al final el dato será mucho más valido que las mediciones one-shot de las que disponías hasta ahora.

Los datos no se pueden cruzar con las dimensiones reales

Al lanzar estos eventos estamos intentando emular dos dimensiones que ya existen en Analytics: Keywords y Landings. Sin embargo, en realidad no estamos guardando los datos en esas dimensiones, sino en eventos sueltos (pues necesitamos la media de estos).

Por ese motivo resulta complejo poder ver estas posiciones medias asociadas al conjunto de dimensiones y métricas normal de analytics. Sencillamente como no hemos guardado los datos en este conjunto no podemos mezclarlos.

Eso significa que a priori no podremos pasar del informe que ya tenemos: keyword a keyword o landing a landing, saber su posición media.

¿No puedo hacer nada con estas posiciones?

No, eso tampoco es cierto, realmente puedes hacer muchas cosas con ellas, pero no directametne: debes cruzar los datos con los del resto de tu analítica. Para eso tienes dos opciones:

1) Sacar el dato de posición media con la API de analytics, sacar el resto de datos que quieras comparar usando como dimensiones Landings o Keywords y cruzar por coincidencia exacta ambas extracciones.

Para este tipo de operaciones quizás te venga bien alguno de estos dos posts:

2) Dar un paso más y ante cada nueva visita guardar como variable personalizada la posición media de la keyword la semana pasada. Eso te permitiría poder sacar consultas a todo analytics por ese valor de la variable personalizada, pero sin duda requiere involucrar al equipo técnico para realizar las extracciones de Analytics a una base de datos propia cada semana y poder imprimirla en las páginas detectando la landing o la keyword.

Para este tipo de implementaciones, si programas en PHP puede servirte este otro post:

Esta sería la situación ideal, pero no nos engañemos, el coste de tu tiempo para realizar la opción (1) no es comparable al tiempo que tardaría tu equipo técnico en realizar la opción (2) por lo que no puedo aconsejarla salvo casos muy claros y con departamentos técnicos muy activos en el negocio de la web.

Conclusión

A pesar de todas las explicaciones y consideraciones que he incluido en este post, realmente, obtener la posición media de nuestras landings o keywords es un proceso muy simple que podemos realizar con dos sencillos pasos:

1) Copiar y pegar el código en nuestra web

2) Importar el informe personalizado a tus perfiles de analytics.

Con lo sencillo que es, resulta difícil encontrar un motivo para no capturar desde ya estos datos. Los problemas que podamos tener luego para cruzar los datos o darles credibilidad son otro tema. El mundo no es perfecto, pero no hay que agobiarse, veamos las cosas como son: hemos avanzado, nuestros datos son más creibles y aun estando sueltos están más unidos al resto de lo que lo estaban con las típicas herramientas oneShot que todos usamos…

Ha llegado el momento de dejar de pagar estas herramientas?

En absoluto, pensemos solo en este detalle para responder a esta pregunta: Podremos en analytics saber las posiciones por las que aparece nuestra competencia? La respuesta es un NO rotundo, por lo que estas herramientas siguen siéndonos tremendamente útiles.

Con esto acabo mi primer post sobre implementaciones en analytics para conseguir seguir el modelo de reporting basado en landings.


4 respuestas a “Google Analytics: Capturar la posición en Google por keyword y landing.”

  1. Buenas Iñaki.

    No soy un gran especialista en Analytics pero hace poco @kicoes comento una herramienta online para realizar lo que dices de obtener la posición media en buscadores, pégale un vistazo aunque todavía está en fase beta:

    http://myhappyanalytics.com/

    • Suena interesante, pero de momento es solo lo que ellos dicen… habrá que ver de donde sacan ese dato al final 😉

  2. Hola Iñaki,

    Creo que la expresión regular no matchea si el usuario viene por ejemplo de google como el de méxico cuyo dominio es .com.mx.

    Argentina también es .com.ar y no cumpliría la expresión.

    Por lo demás, genial el post!

    • Tienes toda la razón Manuel,

      He actualizado el código añadiendo ahora dominios de segundo nivel: google.xxx.xxx

      Gracias por el aviso.