Tiempo en caché de navegador del script analytics.js para PageSpeed

¿Se puede cachear el script analytics.js en el navegador?

Si quieres mejorar el posicionamiento orgánico de tu web, acabarás utilizando Google PageSpeed Insights para evaluar su rendimiento y usabilidad. Con su informe, optimizarás el sitio web para mejorar la evaluación… hasta que tropiezas con analytics.js, que siempre genera un error por su corto tiempo de caché de navegador. Veamos cómo evitarlo.


Guía de hosting WordPress y mejores optimizaciones


Una de las paradojas de la herramienta PageSpeed Insights de Google es que algunos errores son producidos por incorporar algunos de sus servicios en nuestro sitio web, como AdSense o Analytics, a través de scripts que nos sirve la propia Google. Es decir, ni siquiera Google pasa su propio examen…

Mensaje de error de PageSpeed por la caché de navegador del script analytics.js

 

El problema con este error es que el script analytics.js está almacenado en los servidores de Goggle: el código que insertamos en nuestras páginas lo descarga y ejecuta. Por tanto, no tenemos forma de especificar su tiempo de caché, que sólo se puede hacer a nivel de servidor.

¿Significa esto que debemos rendirnos y aceptar, con una mezcla de resignación y rabia, que nunca podremos reparar este error?

Bien, pues tenemos dos noticias. Una buena y una mala. La buena es que…¡sí!, podemos evitar este error. La mala… bueno, observad que he dicho “evitar”, no “reparar”: en realidad, no se puede reparar este error, sino evitar que PageSpeed Insights dé este mensaje de error.

“¿Pero qué me estás contando, Antonio, acaso «evitar que dé error» no es lo mismo que «repararlo»?”, preguntaréis con incredulidad. No os falta razón, pero espero que al final de artículo veáis la sutil diferencia. Prometido 😉

Una primera solución que seguramente hayáis utilizado más de uno haya sido descargar el fichero analytics.js y almacenarlo en vuestro servido, donde sí podemos especificar el tiempo de caché que queramos. Sin embargo, esta solución, desaconsejada por la propia Google, presenta dos inconvenientes:

  • Debemos estar pendientes a cualquier cambio en el script original almacenado en los servidores de Google, para actualizarlo en el nuestro (aunque podemos hacerlo automáticamente creando un proceso que lo compruebe de forma periódica).
  • Puede tener algún impacto en las mediciones de las estadísticas. Realmente no sabemos cómo está hecho el script de Google ni cómo hace sus mediciones, así que no podemos estar completamente seguros de que esta opción no altere las estadísticas de Analytics.

La otra solución tira por el camino de en medio. “De acuerdo”, pensamos, “no puedo cambiar el tiempo de caché del script pero ¿y si hago creer a la herramienta PageSpeed que no lo tengo?”. En otras palabras, que PageSpeed no detecte que estamos utilizando el script cuando evalúe nuestra web.

Para conseguirlo, utilizaremos una característica del protocolo HTTP: el “user-agent” o “agente de usuario”, que es una cadena de texto que identifica la aplicación (en este caso, PageSpeed) que está accediendo al servidor (en este caso, el servidor que aloja nuestra web).

Supongo que ya imaginaréis hacia donde voy… La idea es incluir una comprobación en nuestras páginas para que, cuando PageSpeed las visite, no descarguen el script analytics.js. Necesitamos, por tanto, dos cosas: el agente de usuario de PageSpeed, y el código para hacer esta comprobación.

Para determinar el agente de usuario podemos crear un script que lo detecte… o simplemente buscar si alguien ha inventado esta rueda antes que nosotros 😉 Sorprendentemente, PageSpeed no aparece en la página que tiene los agentes de usuario de multitud de navegadores y servicios, pero buscando un poquito podemos encontrarlo aquí y aquí:

  • Para Ordenador: “Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google Page Speed Insights) Chrome/27.0.1453 Safari/537.36”.
  • Para Móvil: “Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko; Google Page Speed Insights) Chrome/27.0.1453 Mobile Safari/537.36”.

El siguiente paso es crear un fragmento de código en nuestras páginas que detecte el agente de usuario de la aplicación que nos visita y, si corresponde al PageSpeed, no ejecutar el código de Google que descarga el script analytics.js. En otro caso, ejecutaría normalmente dicho código.

Así quedaría el código PHP que hace esta comprobación y que deberéis insertar en el fichero header.php (o el fichero que corresponda en vuestra plataforma) en lugar del código de seguimiento de Google Analytics:

<?php

if (stripos($_SERVER['HTTP_USER_AGENT'],"Insights") === false) { ?>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-XXXXXXXX-X', 'auto');
ga('send', 'pageview');
</script>

<?php } ?>

Donde debéis sustituir el texto ‘UA-XXXXXXXX-X’ por vuestro identificador de Google Analytics.

Como podéis ver, muy sencillo y rápido. Observad, sin embargo, que, en realidad, no tiene ningún efecto sobre el rendimiento real de nuestro sitio web: el script de Google se seguirá descargando y ejecutando para cualquier visitante… excepto PageSpeed.

¿Comprendéis ahora porqué no se “repara” el error, sino que se “evita”?

 

¿¿Qué te ha parecido la solución que os propongo? De acuerdo que realmente no evita que el script se cacheé poco tiempo, pero también es cierto que es un problema generado por la propia Google. ¿O crees que esto, en realidad, no sirve para nada y no aporta nada al Posicionamiento SEO? ¿Utilizas algún otro sistema para sortear este error?

Imágenes: freepix, elaboración propia.

 

¿El post te ha resultado útil? ¡Ayúdame a mejorar y puntúalo!

[ Hasta ahora habéis votado 9, con nota media 4.3 ]
 
Tweet about this on Twitter4Share on Facebook0Share on Google+2Pin on Pinterest0Share on LinkedIn0Buffer this pageEmail this to someone

Quizás también te interese...

Google PageSpeed y el cacheo del script analytics.js en el navegador
Etiquetas: Google Analytics    optimización    pagespeed
Sobre el autor,
Consultor SEO Freelance, Ingeniero Superior de Informática, Certificado en Google Adwords y Experto Universitario de Social Media Marketing, con más de 20 años de experiencia en el sector de Internet y las Nuevas Tecnologías.

Hay 2 comentarios acerca de:
    “Google PageSpeed y el cacheo del script analytics.js en el navegador

  • 24/08/2016 a las 11:04
    Enlace permanente

    Pues ha funcionado muy bien… Ya sé que no evita el tiempo, pero me tocaba las narices que siempre apareciese como error cuando yo no podía hacer nada

    Responder
    • 25/08/2016 a las 10:26
      Enlace permanente

      Jaja, tienes toda la razón: es un poco tocanarices que Google te penalice por utilizar su propio servicio 😀

      En cualquier caso, el impacto en tiempo yo creo que debe ser mínimo, si acaso lo hubiera, porque es un script que se descarga desde otro servidor y se ejecuta en modo asíncrono. Además, la “queja” de PageSpeed es por la caché, no por el tiempo. En fin, cosas de Google 😉

      Me alegro que el consejo te haya sido útil 🙂

      ¡¡Hasta pronto!!

      Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada.