Análisis de Apache Access Log para SEO con PHP y Google Data Studio

Hace pocos días os escribía este post sobre automatización de informes en Google Data Studio y a los pocos días de esto Iñaki Huerta escribía otro genial artículo de análisis de logs con Google Big Query y Google Data Studio. Después de leerlo me pareció que es bastante complicada el procesamiento del fichero access log con Big query, al menos me ha resultado bastante complicado a mí que nunca he utilizado la herramienta.

Como es fundamental para la mejora del rastreo en grandes sitios he buscado un sistema más amigable para mi y… ¿cómo ha sido? pues como todo lo que suelo hacer: programando.

[-] Indice de contenidos
  • Phaser PHP para Apache Access Log
  • ¿Qué hacemos con el CSV generado desde el log de Apache?
  • Informe de Log SEO en Google Data Studio
  • Phaser PHP para Apache Access Log

    Si nos vamos al formato oficial de Apache para el log de acceso nos encontramos con un formato de este tipo: «%h %l %u %t \»%r\» %>s %b» que puede ser reconocido fácilmente en PHP con la genial función Preg_Match como os dejo en el siguiente código PHP:

    function normalizar_fecha($fecha)
    {
    return (str_replace("Apr","04",$fecha));
    }

    function log_to_csv ($log,$csv)
    {
    $file = fopen($log, «r»);
    while(!feof($file))
    {
    $linea=fgets($file);
    if (strpos($linea,»Googlebot/2.1″))
    {
    preg_match(«/^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] \»(\S+) (.*?) (\S+)\» (\S+) (\S+) (\».*?\») (\».*?\»)$/», $linea, $matches);
    fwrite($csv,'»‘.$matches[1].'»,’);
    fwrite($csv,'»‘.normalizar_fecha($matches[4]).'»,’);
    fwrite($csv,'»‘.$matches[7].'»,’);
    fwrite($csv,'»‘.$matches[8].'»,’);
    fwrite($csv,'»‘.$matches[9].'»,’);
    fwrite($csv,'»‘.$matches[10].'»,’);
    fwrite($csv,'»‘.$matches[11].'»,’);
    fwrite($csv,'»‘.str_replace(«\»»,»»,$matches[12]).'»,’.PHP_EOL);
    }
    }
    fclose($file);
    }

    $csv = fopen(«log.csv», «w»);
    fwrite($csv,'»Remote Host»,»Fecha»,»Metodo»,»URI»,»HTTP»,»Estado»,»Size»,»Referer»‘.PHP_EOL);
    log_to_csv(«log»,$csv);
    log_to_csv(«log1»,$csv);
    log_to_csv(«log2»,$csv);
    log_to_csv(«log3»,$csv);
    log_to_csv(«log4»,$csv);
    fclose($csv);

    Ahora cuento a grandes rasgos lo que hace:

    1. En resumen toma un fichero de logs y lo convierte en CSV.
    2. Lo hace sólo con los accesos de Google Bot para ahorrar mucho pero que mucho tiempo y recursos.
    3. Tomo solo los campos:Remote Host, Fecha, Metodo, URI, HTTP, Estado, Size y Referer para aligerar el peso del CSV resultante, ya que lo subiré a GDrive para continuar el tratamiento.
    4. Como lo normal es que el log venga partido en múltiples ficheros habrá que hacer varias llamadas a la function log_to_csv para completar el proceso, en el ejemplo son 4 llamadas.
    5. Uso también una función para normalizar la fecha (está sólo para abril de momento) ya que esa columna es muy importante que llegue bien a Google Data Studio.

    ¿Qué hacemos con el CSV generado desde el log de Apache?

    Una vez se genera un CSV similar a este:

    Log to CSV

    Lo usaremos como fuente de datos para Google data Studio, de forma similar a como lo explica Iñaki es su presentación. La fuente de datos al final queda así:

    Dónde he generado los siguientes campos calculados:

    1. Clusters de URI (URI Nx) para ver que carpetas están recibiendo más hits.
    2. Cuenta de Hits.
    3. Cuenta de Hits únicos por URI
    4. Accesos a URI únicas.

    Informe de Log SEO en Google Data Studio

    Con esto ya podemos creer un informe similar a este:

    informe de Logs en Data Studio

    Lo primero que vemos es que el robot de Google se está volviendo loco entre 301, 410, 404 y perdiendo un montón de tiempo en el acceso a utilidades Ajax. Además tengo otras tres páginas a continuación donde se detallan los estados de error para que el programador pueda solucionarlos.

    En fin ya puedo añadir a mis informes periódicos de clientes este de log que seguro que les va a venir muy bien y tú… ¿quieres que te haga uno para tu web? contacta ahora sin ningún compromiso.


    SEO Freelance


    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.