Obtener datos de Search Console día a día con php

Publicado por Lino Uruñuela el 21 de agosto del 2015

El oto día Google anunció lo que muchos SEOs veníamos pidiendo desde hace años, una API decente para acceder a los datos que nos da Google Search Console.

Anteriormente se hacía la extracción de estos datos emulando un acceso normal de usuario y se extraían esos datos, pero era muy engorroso y muy poco práctico. Pero esto ha cambiado y Google por fin nos da acceso mediante una API.

Hoy vamos a ver cómo extraer esos datos mediante la API desde PHP y guardar esos datos en una base de datos, yo he usado MongoDB, y es que por fin estoy migrando todas mis herramientas de MySql a MongoDB, la diferencia es abismal :)

En este post no explicaré nada de MongoDB simplemente el cómo extraer los datos con PHP, así luego cualquiera podrá usarlo y guardarlos dónde y como quiera.

Limitaciones de la API

Una de las cosas que siempre echamos de menos en Google Search Console (GSC) es que solo nos ofrece 90 días de "consultas de búsqueda" y muchas veces esto puede ser una putada gran pega ya que para muchas cosas se nos queda corto este intervalo de tiempo.

Por ello mi primera recomendación es guardar los datos en nuestro propio sistema (en mi caso MongoDB) e ir actualizándolo día a día, de esta manera podremos tener un histórico completo.

Activar el uso de la API

Lo primero que debemos hacer crear un proyecto en la consola y después activar la API para ese proyecto desde la Consola de APIs de Google, dónde activaremos la API "Google Search Console"

API Google Search Console

El segundo paso una vez activada es elegir el tipo de acceso que queremos, en nuestro caso será una "cuenta de servicio" ya que lo que queremos es que pueda tener acceso sin presencia humana, es decir, sin tener que meter usuario y contraseña de Google para identificarnos cada vez que se ejecute, sino que pueda acceder sin ninguna intervención.

API Google Search Console


Y elegiremos como tipo de clave un fichero P12

API Google Search Console

Nos descargamos nuestro fichero y lo guardamos en la misma carpeta donde ejecutaremos el script.

Ahora veremos que nos ha creado un usuario de correo muy raro y largo

API Google Search Console

Este usuario tendremos que darle de alta en GSC y darle permiso de lectura en nuestro dominio dentro de GSC

API Google Search Console

Una vez tengamos esto hecho, ya podemos centrarnos en el código.

Código PHP

Como en otras APIs ofrecidas por Google haremos el acceso mediante la librería ofrecida por el propio Google y que te puedes descargar desde aquí. Y también nos ofrece una guía de cómo usarla.

Una vez la descarguemos tendremos que incluirla en nuestro código, si la descargamos en el mismo directorio del script sería

require_once 'google-api-php-client/src/Google/autoload.php';

Ahora vamos a obtener las credenciales para el acceso

$key_file_location ='Fichero-c36f200a8499.p12'; //Fichero P12 $service_account_name = 'Nombre del Proyecto'; //Nombre del Proyecto en la consola de APis de Google $client_id = 'XXXX-XCXXX.apps.googleusercontent.com';$Email_address = 'XXXX-XCXXX@developer.gserviceaccount.com'; $client = new Google_Client(); $client->setApplicationName("Nombre del Proyecto");$key = file_get_contents($key_file_location); $scopes ="https://www.googleapis.com/auth/webmasters.readonly"; $cred = new Google_Auth_AssertionCredentials( $Email_address, array($scopes), $key ); $client->setAssertionCredentials($cred);

Obtenidas ya las credenciales llamamos al servicio Webmasters que nos proporciona Google

$webmastersService = new Google_Service_Webmasters($client);$searchanalytics = $webmastersService->searchanalytics;$request = new Google_Service_Webmasters_SearchAnalyticsQueryRequest;

Ahora vamos a indicar de que fechas queremos obtener los datos, pensando en ejecutar este script día a día, la fecha final y la inicial serán la misma. Y teniendo en cuenta que GSC ofrece como datos más recientes los tres días a la fecha de hoy nos queda

$fecha_Inicial = date("Y-m-d",strtotime('-3 day',strtotime(date("Y-m-d"))));$fecha_Final = date("Y-m-d",strtotime('-3 day',strtotime(date("Y-m-d"))));

Recorremos cada uno de los resultados y los vamos introduciendo en nuestra base de datos, en mi caso en MongoDB

while ($fecha_Inicial<=$fecha_Final){$request->setStartDate($fecha_Inicial);$request->setEndDate($fecha_Inicial);$request->setDimensions(["date","query","page","country","device"]);$qsearch = $searchanalytics->query($miDominio, $request); $rows2 = $qsearch->getRows();foreach($rows2 as $fila){$kwFecha = $fila["keys"][0];$kwQuery = $fila["keys"][1];$kwPage = $fila["keys"][2];$kwCountry = $fila["keys"][3];$kwDevice = $fila["keys"][4];$kwClicks = $fila["clicks"];$kwCtr = round($fila["ctr"],2);$kwImpresiones = $fila["impressions"];$kwPosicion = round($fila["position"],2);$MongoFecha = new MongoDate(strtotime($kwFecha." 02:00:00"));$datos = array("GSCId"=>getNextSequence("GSCId"),"fecha"=>$MongoFecha,"kw"=>$kwQuery,"page"=>$kwPage,"impresiones"=>$kwImpresiones,"clicks"=>$kwClicks,"ctr"=>$kwCtr,"posicion"=>$kwPosicion,"country"=>$kwCountry,"device"=>$kwDevice);$collection->insert($datos);}$varFecha_Inicial = new DateTime($fecha_Inicial);$varFecha_Inicial=date_add($varFecha_Inicial, date_interval_create_from_date_string('1 days'));$fecha_Inicial=$varFecha_Inicial->format("Y-m-d");$contador_dias++;}

Y con esto ya estaremos metiendo los datos que nos da la API del día más reciente a hoy, es decir, los datos de hace tres días.

API Google Search Console


Como vemos obtenemos todas las dimensiones posibles,  para que los datos sean los más exactos posibles. Luego ya en nuestro sistema podremos hacer las consultas tal como queramos en cada momento, agrupando, sumando lo que queramos.

En próximos posts veremos como dar todavía más valor a estos datos :)

 


Comentarios

Jordi Rosellhace Hace más de 2 años y 25 días

No sólo eso. En magento tengo un plugin cron diario para vincular datos dia a dia de GA organico de google con GSC :)

Pedro J. Garcimartínhace Hace más de 2 años y 4 días

Hola.
Estoy intentando descargar +1000 errores de GSC y he obtenido un código en php (creo) para obtener todas las urls rotas.

¿Dónde pongo ese código?

Gracias.

Errioxahace Hace más de 1 años y 364 días

@Pedro J. Garcimartín ¿te refieres a dónde lo pones en tu web para hacerlo? ¿o quieres compartirlo con el resto?

si me lo envías por mail lo publico aquí mismo ;)

Javier Lorente Murillohace Hace más de 1 años y 328 días

Publica algo más sencillito, con una orden tipo PUT https://www.googleapis.com/webmasters/v3/sites/www.tuweb.com%2Fen%2FResults%2BStatistics?key={APIKEY} para agregar sitios :-)

O como descargar errores, con la consola.

Gracias!

David Gironahace 325 días

Existe algún programa o plugin de wordpress que haga precisamente esto?
Conectar con SC sincronizar y analizar los datos en el tiempo?
Gracias!

David Gironahace 325 días

Existe algún programa o plugin de wordpress que haga precisamente esto?
Conectar con SC sincronizar y analizar los datos en el tiempo?
Gracias!

Deja un comentario


Posts anteriores en WebmasterTools


  • 0000-00-00 00:00:00

Publicado el 11 de marzo del 2014 by Lino UruñuelaErrioxa Hace tiempo que no escribo con frecuencia, pero eso está cambiando! Para motivarme voy a comenzar una serie de post donde explicar cómo usar distintas APIs de Google, y hoy vamos a comenzar con la API de Webmaster Too

Seguir leyendo
  • 0000-00-00 00:00:00

Publicado el 10 de enero del 2014 by Lino Uruñuela Como ayer comenté, en WMT ha habido algún cambio en cuanto a la exactitud de los datos que nos arroja sobre nuestra web, concretamente sobre las Consu

Seguir leyendo
  • 0000-00-00 00:00:00

Publicado el 9 de enero del 2014 by Lino Uruñuela   Ayer cuando me reconecté después de mi mes sabático una de las cosas que hice fue ir a WMT para comprobar si había ocurrido algo en alguno de los sites. Cuando fui a "Consultas de búsqueda&qu

Seguir leyendo

Datos de contacto
  • 637167218
  • wachynaky@gmail.com

Dónde encontrarme

FunnelPunk.com


Blog Seo de Lino Uruñeula
Co-Fundador



Lánzate y pregunta!

Nos gustan los robots, pero no tanto
7 + 3

Últimos posts

Últimos comentarios


Luis Salazar Jurado

Buenas Lino He hecho un test en mi site: www.seotecnico.com y tras hacer test en Iphone, Chrome y Firefow parece que funciona Sería a
Post: Cómo cargar css y js y no bloquear la carga de contenido

Luis Salazar Jurado

Gracias Lino por avisar. Solo he aplicado las mejoras de CSS y va como un tiro. Debido a que la web en la que lo he implementado cargo
Post: Cómo cargar css y js y no bloquear la carga de contenido

Tomás

...la línea ---?php wp_head()--- Gracias.
Post: Cómo cargar css y js y no bloquear la carga de contenido

Tomás

Hola Lino. En WordPress, ¿de qué manera se podría editar una línea de código CSS y JS para añadir las modificaciones en verde que menc
Post: Cómo cargar css y js y no bloquear la carga de contenido

Juan M.

Para mí, esa forma de cargar los estilos donde todo se ve sin estilo y los carga a los segundos me da una muy mala sensación del site. Tan
Post: Cómo cargar css y js y no bloquear la carga de contenido

Errioxa

@Luis actualizado! Si te da algún problema avisa!
Post: Cómo cargar css y js y no bloquear la carga de contenido

Luis Salazar Jurado

Lo he implementado y va como la seda Espero la actualización que has comentado en Twitter para ver el Javascript, pero solo con el CSS y
Post: Cómo cargar css y js y no bloquear la carga de contenido

Errioxa

@Antonio solo Google sabe si se pasa o no lj con nofollow, en principio la url de destino no se vería beneficiada porque no lo contaría, p
Post: ¿Cómo ejecuta, interpreta e indexa Google el contenido cargado mediante javascript?

Antonio José Soler Morillas

Uff, que buen curro, una duda, "si quieres evitar pasarle linkjuice ponle nofollow" No pasas LJ si usas nofollow para los anuncios cargad
Post: ¿Cómo ejecuta, interpreta e indexa Google el contenido cargado mediante javascript?

Martin Maqueira

Seguro que guarda la URL original. Así ahorra volver a crawlearla. Pero a efectos de calificarla la cuenta como una destino final. Es decir
Post: Intentando comprender Googlebot y los 301

Categorias