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

¡CON UN 20% DE DESCUENTO!Alojamiento WordPress con WebEmpresa

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

Si quieres mejorar el posicionamiento 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 de caché de navegador. ¿Podemos evitar o especificar este caché de navegador?



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é de navegador 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.

Guía de hosting WordPress y mejores optimizaciones

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.


¡CON UN 20% DE DESCUENTO!Alojamiento WordPress con WebEmpresa

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 19, con nota media 4.8 ]

Otros posts del SEO de los Anillos que pueden interesarte

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

Hay 27 comentarios acerca de:
    “Google PageSpeed y el caché de navegador del script analytics.js

  • 16/04/2018 a las 22:43
    Enlace permanente

    Hola, la verdad no veo la necesidad de implementarlo pues a la larga sigue siendo lo mismo!.
    Solo es ocultarle la verdad al PageSped. Según el waterfall cuanto es la diferencia de tiempo de cargar el script a no cargarlo?. Eso no califica dentro de la regla de no mostrar contenidos diferentes a los bots y a los usuarios? A la larga no nos penalizarán por eso? :O ??
    Saludos!. Me gusta tu blog 😉

    Responder
    • 17/04/2018 a las 13:18
      Enlace permanente

      Hola, Germán:

      En efecto, tal como se indica en el propio artículo, es un subterfugio para evitar que Google detecte un problema… ¡que genera la propia Google! A efectos prácticos, el impacto es pequeño, apenas uno o dos puntos en la valoración de PageSpeed, pero como curiosidad tiene su interés.

      Con respecto a lo que comentar, que Google pueda penalizarlo porque se muestran contenidos diferentes, sería así si fuera una práctica generalizada en un porcentaje importante de páginas y con grandes porciones de contenido. En este caso, es la ejecución condicional de un script, algo bastante habitual de todas formas; por ejemplo, para adaptar el contenido a las características o versión del navegador del usuario.

      ¡¡Gracias por tu comentario!! Un saludo.

      Responder
  • 19/01/2018 a las 12:42
    Enlace permanente

    El problema es que, por lo menos en mi caso, si se añade esta condición al código, el Pagespeed te quita puntuación

    Responder
    • 24/01/2018 a las 19:50
      Enlace permanente

      Hola, Jesús:

      Gracias por dejar el comentario. ¿Has ejecutado la prueba varias veces? Habitualmente, la puntuación puede varias 2 ó 3 puntos, dependiendo de las condiciones de la red o que haya otros accesos simultáneamente. Eliminar este mensaje de error del cacheo de navegador no supone mucha gananacia en esta puntuación, uno o dos puntos, así que puede que la variación sea debido a esto.

      Un saludo.

      Responder
    • 30/11/2017 a las 9:46
      Enlace permanente

      Buenos días, Marcelo:

      Me alegro que el post haya sido útil.

      Ahora mismo no tengo nada para el píxel de Facebook, pero me parece una sugerencia interesante. Tomo nota de ello para un futuro artículo. Me llevará un tiempo (estoy hasta arriba 😉 ), pero cuando tenga algo, te aviso por aquí 🙂

      Un saludo!!!

      Responder
  • 12/11/2017 a las 19:59
    Enlace permanente

    Hola,

    ¿se puede adaptar para utilizarlo con el tag manager, ya que utilizo este para varios códigos y el tag requiere insertar códigos en el head y en el body?

    Otro inconveniente es que se debe insertar directamente y hay muchos temas que tienen opciones para insertar códigos en el head o body pero al parecer allí estos no permiten etiquetas php.

    Responder
    • 13/11/2017 a las 17:04
      Enlace permanente

      Hola, Carlos:

      El Google Tag Manager dispone de su propio script. Sería cuestión de probarlo pero, en principio, debería bastar con insertar este script en la sentencia condicional en el lugar del script de Analytics.

      La inserción del código se debe hacer directamente en el fichero php que corresponda en el tema. Por cuestiones de seguridad, no creo que haya temas que permitann meter código php. Al menos, yo no lo he visto.

      Espero haberte sigo de ayuda 🙂

      ¡¡Un saludo!!

      Responder
    • 06/09/2017 a las 14:14
      Enlace permanente

      Hola, Morales, gracias por dejar tu comentario.

      Así, a priori, debería ser posible, pues la dinámica es prácticamente la misma. Es cuestión de hacer unos cuantos experimentos para comprobarlo, similares a los que apunto en el artículo.

      Un saludo.

      Responder
  • 18/08/2017 a las 16:32
    Enlace permanente

    Muy buena solución. y sencilla de usar. Gracias por compartirla. Recién la usé y PageSpeed Insights ya no se queja por eso. Desde que entendí por qué aparecía ese error me costó creer que la misma gente que me recomendaba qué pasos seguir para tener una web optimizada sea la que me traía un problema.

    Abrazo.

    Responder
    • 06/09/2017 a las 14:16
      Enlace permanente

      Hola, Eduardo. Aunque no lo he hecho con el recapcha, viendo el código js y teniendo en cuenta que lo que se controla es quien realiza la visita a la página, la solución debería ser prácticamente idéntica. Aunque siempre habrá que experimentar un poco para asegurarlo.

      Un saludo.

      Responder
  • 10/08/2017 a las 17:50
    Enlace permanente

    Excelente artículo, me ayudo mucho. ¿Tienes algún artículo para corregir el error de carga cuando usas fuentes de google fonts y Bootstrap?, Felicitaciones por tu blog

    Responder
  • 08/08/2017 a las 18:41
    Enlace permanente

    Hola Antonio.
    Gracias por la información compartida.
    Lo he agregado y ha funcionado.
    Solo quiero saber si es normal que después de agregado el code sale un aviso en Google Speed test:
    PageSpeed Insights ha recibido una respuesta 500 del servidor.

    Responder
    • 06/09/2017 a las 14:21
      Enlace permanente

      Hola, Jesús, me alegro que el artículo te haya sido útil.

      Sobre tu pregunta, ese error de respuesta suele depender de alguna actividad del servidor, que no responde correctamente. Suele ser un quebradero de cabeza porque no da pistas de donde se ha producido el error ni de cómo aislarlo, y habría que ver los logs del servidor para intentar localizarlo. En principio, la inclusión de este código no debería provocar este error, ni ningún otro. Es muy raro, ¿quizás algún error en la transcripción del código PHP? Comprueba que está todo bien escrito.

      Un saludo.

      Responder
  • 04/07/2017 a las 1:33
    Enlace permanente

    Uff por fin se pudo solucionar ese «problema» (proveído por el mismo Google ) muchas gracias!!!,
    ahora a seguir mejorando con la optimización 😀

    Responder
  • 08/01/2017 a las 19:41
    Enlace permanente

    Hola Antonio,

    He probado el dódigo en mi blog sustituéndolo por el de Google Analytics, pero no a disuadido a Google de no leerlo,
    el error en PageSpeed Insights sigue apareciendo.

    Saludos

    Responder
    • 10/01/2017 a las 18:58
      Enlace permanente

      Hola, Tomás:

      ¿Estás usando algún plugin de caché o un CDN? Si ése es el caso, vacía las cachés y pasa el pagespeed de nuevo. De todas formas, con una caché este método no es infalible, porque depende de quien haga la primera visita cuando una página caduca en la caché, que no siempre será el bot de Pagespeed.

      Gracias por comentar y un saludo!!

      Responder
  • 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. 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.