Watafak.io
Tutoriales

Evitá que el script de Google Analytics 4 retrase la carga de tu página en WordPress sin usar plugins externos

🕒 9 min

El script de Google Analytics 4 empeora tus métricas de rendimiento, al menos en dispositivos móviles.

Es un hecho. A veces un poquito, a veces más, pero las empeora.

Estuve haciendo algunas pruebas y descubrí que la opción que mejora la velocidad de carga es agregar el script de Google Analytics 4 al final del <body>, usando un código insertado en un plugin personalizado de WordPress (también sirve en el archivo functions.php de tu tema hijo, pero por cuestión de orden y facilidad de depuración me gusta tenerlo en un plugin aparte).

Paso a paso para insertar el script de GA4

Recuperá tu ID de medición

Entrá a tu cuenta de Google Analytics 4, andá a Administrar (abajo en el panel lateral izquierdo) y en la columna Propiedad (la de la derecha) te aseguras que esté seleccionada la propiedad de tu web.

Luego le das clic en Flujo de datos, clic en el nombre que le diste a tu flujo y te aparecerá esta pantalla:

Captura de pantalla de Flujo de datos de Google Analytics 4
Captura de pantalla de Flujo de datos de Google Analytics 4.

Ahí está tu ID de medición, en seguida lo usamos.

Abrí tu plugin personalizado de WordPress

En caso de que aún no lo tengás, aquí podés aprender como crear un plugin personalizado para WordPress.

Suponiendo que ya lo tenés creado, en el menú lateral de tu WordPress entrá a Plugins y le das clic en Editor de archivos de plugins. Te tiene que salir una pantalla como esta:

Captura de la pantalla de la página 'Editor de archivos de plugins
Captura de la pantalla de la página 'Editor de archivos de plugins.

En el menú desplegable buscás por nombre tu plugin personalizado, lo seleccionás y le das clic al botón Seleccionar.

Irás al editor de código de tu plugin personalizado:

Captura de pantalla del Editor del plugin personalizado
Captura de pantalla del Editor del plugin personalizado.

Código para mejorar la carga de Google Analytics 4

Ahora, en el área de texto del editor copiá el siguiente código:

    /**
     * Agregar el script de Google Analytics en lo más bajo de la etiqueta body,
     * y que se active luego del evento 'load'.
     * */
    function load_google_analytics_script() {
        ?>
        <script defer>
            window.addEventListener('load', function() {
                var gaScript = document.createElement('script');
                gaScript.async = true;
                gaScript.src = 'https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX'; // Reemplazá aquí tu ID de medición.
                
                gaScript.onload = function() {
                    // console.log('Script de Google Analytics cargado y listo para rastrear eventos.');
    
                    // Aquí puedes iniciar el rastreo de eventos personalizados si lo deseas
                    window.dataLayer = window.dataLayer || [];
                    function gtag(){dataLayer.push(arguments);}
                    gtag('js', new Date());
                    gtag('config', 'G-XXXXXXXXXX'); // Reemplazá aquí tu ID de medición.
                };
                document.body.appendChild(gaScript);
            });
        </script>
        <?php
    }
    add_action('wp_footer', 'load_google_analytics_script', 9999);

Recordá reemplazar G-XXXXXXXXXX por tu ID de medición.

Veamos paso a paso qué hace este código (cortesía de ChatGPT):

  1. Definición de la función load_google_analytics_script(): Esto es el inicio de una función que agrega el script de Google Analytics en el pie de página (footer) de tu sitio WordPress.
  2. Apertura de etiqueta <script> con defer: La etiqueta <script> se abre con el atributo defer. Esto indica que el script se cargará de manera asíncrona, lo que permite que la página continúe cargando sin esperar a que el script esté listo.
  3. window.addEventListener('load', function() {...}): Se añade un event listener que escucha el evento load del objeto window. Esto asegura que el código interno se ejecute solo después de que todos los recursos de la página, como imágenes, estilos y otros scripts, se hayan cargado por completo.
  4. Creación de un elemento <script> dinámico: Se crea un elemento <script> utilizando el método document.createElement('script'). Esto permite que el script de Google Analytics se agregue al DOM.
  5. Configuración de atributos del script: Se establecen varios atributos para el elemento <script> creado:
    • async = true: Indica que el script se cargará de manera asíncrona.
    • src: La URL del script de Google Analytics que se cargará.
  6. gaScript.onload = function() {...}: Se define una función que se ejecutará cuando el script de Google Analytics se cargue exitosamente. En esta función:
    • Se inicializa el objeto window.dataLayer para el seguimiento de eventos personalizados.
    • Se define la función gtag() que se utilizará para enviar datos al servidor de Google Analytics.
    • Se llama a gtag('js', new Date()) para indicar que se ha cargado el script de Google Analytics.
    • Se llama a gtag('config', 'G-PETRHRNLGN') para configurar y activar el seguimiento con tu identificador.
  7. document.body.appendChild(gaScript): El elemento <script> creado se agrega como un hijo del elemento <body> utilizando el método appendChild(). Esto asegura que el script se cargue en la parte más baja de la página, como lo deseas.
  8. Cierre de la etiqueta <script>: El código JavaScript se cierra.
  9. Etiqueta <?php: Se abre una etiqueta PHP para incorporar código PHP en medio del script. En este caso, se está utilizando para imprimir el código JavaScript anterior.
  10. Cierre de la función load_google_analytics_script(): Se cierra la función definida al principio.
  11. add_action('wp_footer', 'load_google_analytics_script', 9999): Se agrega la acción load_google_analytics_script() al pie de página (wp_footer) del sitio WordPress con una prioridad alta de 9999. Esto asegura que el script se ejecute al final del footer y que otros scripts en la página se ejecuten antes.

En resumen, el código inserta el script de Google Analytics 4 antes del cierre de la etiqueta </body>, y lo ejecuta después de que la página ya cargó todos los recursos necesarios.

¿Frustrado por ir de una herramienta a otra para escribir tus publicaciones?

¡Basta de eso! Con watafak.io podés investigar palabras clave, organizarlas según el ciclo de vida de tu cliente, crear tu keyword clúster y escribir tus publicaciones ganadoras, todo en un sólo lugar.

Registrate en la lista de espera para conseguir tu acceso anticipado.

¡Quiero registrame ahora!

¿Cuándo insertar el script de GA4 al final del body?

  1. Cuando estás buscando mayor velocidad de carga de la página.
  2. Cuando querés tener mejores métricas de rendimiento.
  3. Cuando querés mejorar la experiencia de tu usuario.
  4. Cuando querés enviar datos más acotados a Google Analytics 4.

Este último punto es el que define si añadir el script de GA4 en el wp_footer.

Si insertás el código según las instrucciones predeterminadas (lo más arriba posible del <head>), el script de GA4 se descargará en paralelo al análisis del HTML, pero se ejecutará inmediatamente esté descargado, bloqueando el parseo (análisis) del HTML y causando una demora en la carga de la página.

Sin embargo, al activarse tan temprano, registrará todos los eventos, incluso las visitas a la página en las que el usuario entró y se salió antes de que termine de cargarse todo el HTML.

En cambio, si añades el código al final de la página, y lo configuras para que se ejecute después del evento ‘load’, el script registrará sólamente las visitas de los usuarios que esperaron a que la página esté completamente cargada.

Esta diferencia en la configuración afectará tus métricas de ‘visitas a la página’ y ‘bounce rate’ (tasa de rebote).

Por un lado registrarás menos visitas realizadas, por otro lado, las visitas que registrés son más significativas, ya que son usuarios que, al menos, se quedaron hasta que cargó tu página.

Así que, si tus objetivos de marketing implican analizar todas las visitas a la página y el bounce rate, entonces debés colocar el script de GA4 en lo más alto del <head>.

Pero, si tus objetivos de marketing son más flexibles, podés priorizar la velocidad de carga de la página.

Otro asunto que debés tomar en cuenta es que el script actual se mantiene en caché por 15 minutos (900 segundos).

Esto significa que sólo demorará en cargar la primera vez que un usuario visita tu página, las siguientes veces será una carga instantánea, ya que el archivo estará cacheado por 15 minutos.

Análisis comparativo entre ambas opciones

He preparado un pequeño cuadro comparando la velocidad de carga de la página principal de watafak.io, para evaluar la mejora en las métricas.

Estoy usando los resultados de pagespeed.web.dev para obtener el promedio de 5 análisis para cada una de las alternativas.

Variables analizadas - versión MóvilTop HeadBottom Body% Variación
Rendimiento85,490,45,85 %
First Content Paintful (seg)El primer procesamiento de imagen con contenido indica el momento en el que se visualiza en la pantalla el primer texto o imagen.2,882,8-2,78 %
Largest Content Paintful (seg)La métrica Procesamiento de imagen con contenido más grande indica el momento en que se pinta el texto o la imagen más grandes.3,242,8-13,58 %
Total Blocking Time (ms)Suma todos los períodos entre FCP y el Tiempo de carga, cuando la tarea tarda más de 50 ms. El resultado se expresa en milisegundos.9858-40,82 %
Cumulative Layout ShiftEl Cambio de diseño acumulado mide el movimiento de los elementos visibles dentro del viewport. 0,0540,0540,00 %
Speed Index (seg)El Índice de velocidad indica la rapidez con la que se puede ver el contenido de una página.3,543,1-12,43 %
Variables analizadas - versión EscritorioTop HeadBottom Body% Variación
Rendimiento98,298,40,20 %
First Content Paintful (seg)El primer procesamiento de imagen con contenido indica el momento en el que se visualiza en la pantalla el primer texto o imagen.0,760,782,63 %
Largest Content Paintful (seg)La métrica Procesamiento de imagen con contenido más grande indica el momento en que se pinta el texto o la imagen más grandes.0,880,924,55 %
Total Blocking Time (ms)Suma todos los períodos entre FCP y el Tiempo de carga, cuando la tarea tarda más de 50 ms. El resultado se expresa en milisegundos.20-100,00 %
Cumulative Layout ShiftEl Cambio de diseño acumulado mide el movimiento de los elementos visibles dentro del viewport. 0,0340,0340,00 %
Speed Index (seg)El Índice de velocidad indica la rapidez con la que se puede ver el contenido de una página.1,140,92-19,30 %

Podés ver que, para escritorio, la variación en Rendimiento y en tiempo de bloqueo es insignificante, mientras que el Speed Index es casi 20% más rápido colocando el script al final del <body>. Por otro lado, las métricas de FCP y LCP son un poco peores.

Donde hay mejoras notables es en las métricas para móvil. Lo más destacado es que la cantidad de tiempo que queda bloqueada la carga es 40% menor colocando el script después de que carguen todos los demás recursos de la página.

¿Qué otras opciones hay?

Mientras buscaba cómo resolver el asunto de la carga de GA4 encontré esta página, en donde el autor expone un código minificado que registra unos pocos eventos en tu sitio web, a cambio reduce el peso del script a sólo 2 kb, en comparación a los 90,7 kb que pesa actualmente. Al ser más ligero, carga más rápido.

Honestamente, no he probado esa solución, aunque parece ser buena opción para usuarios avanzados que no necesitan toda la batería de datos que recopila y genera Google Analytics 4.

Otra opción es usar el evento ‘DOMContentLoaded’ en vez del evento ‘load’. El evento DOMContentLoaded se dispara antes del load, y marca la finalización de la carga del DOM, aunque aún sigan descargandose scripts.

En caso que querrás usar ese evento, sólo ubicá:

window.addEventListener('load', function() {...})

y reemplazalo por:

document.addEventListener('DOMContentLoaded', function() {...})

Conclusiones

Insertar el script de Google Analytics 4 antes del cierre de la etiqueta </body> y ejecutarlo después de que hayan cargado todos los recursos tiene sentido si:

  1. Querés mejorar la experiencia de usuario en dispositivos móviles.
  2. Tus objetivos de marketing no son tan estrictos con la tasa de rebote.

En cambio, si tu objetivo de marketing no lo permite, o si sos un poco más tolerante con la velocidad de carga, agregá el script en lo más alto de la etiqueta </head>.

Artículo escrito por Juan Guillermo Castaño

Sobre mi: Soy perezoso, impaciente y arrogante. Por eso siempre busco la eficiencia, los resultados rápidos y los altos estándares. Mi frase favorita: 'si vis pacen, para bellum'. Me encantan los perros y los caballos.