La mejora de las Métricas web esenciales en la página principal de Mail.ru generó un aumento promedio del 10% en los porcentajes de conversiones

Varios meses de trabajo para mejorar las métricas web esenciales en la página principal de Mail.ru generaron un aumento del 60% en el percentil 75 en el cambio de diseño acumulativo (CLS), lo que aumentó el tiempo de sesión promedio en un 2.7% y los porcentajes de conversiones de las secciones principales en más del 10%.

Denis Stasyev
Denis Stasyev
Sven May
Sven May

Dónde comenzamos

Mail.ru es uno de los servicios de correo electrónico líderes en la Internet de habla rusa y se encuentra entre los 5 principales sitios de Rusia en términos de tráfico. Mail.ru es un recurso importante para muchas personas. Recibe cientos de millones de visitas por mes y es un portal desde el que las personas pueden acceder a correos electrónicos, noticias, redes sociales, búsquedas de Internet de alto rendimiento y mucho más.

Mail.ru quería brindar a sus visitantes una experiencia del usuario de alta calidad, por lo que comenzó a trabajar para mejorar las métricas web esenciales. Antes de analizar nuestra estrategia de optimización, debemos tener en cuenta algunos detalles técnicos de la página principal de Mail.ru.

Aunque el proyecto se había desarrollado durante mucho tiempo con nuestro motor de plantillas interno Fest, comenzamos a migrar a Svelte 3 en 2019.

Svelte implementa la reactividad de una manera que no usa el DOM virtual, lo que lo hace menos intensivo en recursos. El enfoque de Svelte quita las funciones que no se usan de los paquetes de producción porque el compilador no genera el código que las implementa si no se usan. El código que no se usa se quita durante la compilación, lo que genera paquetes más pequeños. Esto puede ayudar a reducir el tiempo de bloqueo total (TBT) durante el inicio de la página.

Realiza un seguimiento de las métricas de rendimiento

Antes de optimizar las métricas web esenciales, es útil evaluar el rendimiento en el campo. Antes de las métricas web esenciales, hacíamos un seguimiento de otras métricas, como el primer procesamiento de imagen con contenido (FCP), en nuestro panel de rendimiento interno.

Se modificó nuestra secuencia de comandos de recopilación de métricas para recopilar las métricas web esenciales y transmitirlas a nuestro panel de rendimiento para su visualización. De acuerdo con las recomendaciones de Google, nuestra secuencia de comandos usa la API de PerformanceObserver para obtener métricas, que forma parte de la "plataforma" del frontend universal dentro de Mail.ru.

El panel mostró las siguientes métricas para los usuarios (valores promedio de la semana del 15 al 21 de marzo de 2021):

Nombre del grupo de métricas Métricas web esenciales Otras métricas web
Nombre de la métrica LCP FID CLS FCP TBT TTI
Porcentaje de usuarios según los umbrales de las Métricas web esenciales bueno 52% 92% 33% 35% 42% 43%
needs-improvement 19% 5% 23% 38% 16% 25%
deficiente 29% 3% 44% 27% 42% 32%
Métricas de la semana del 15 al 21 de marzo de 2021
Las Métricas web esenciales antes de la optimización muestran que aproximadamente 1/3 de los usuarios se encuentran en el bucket de rendimiento bajo.
Valores de las Métricas web antes de las mejoras.

Cómo mejorar las métricas web esenciales

Si bien existe mucha orientación para mejorar las Métricas web esenciales, cada proyecto tiene desafíos únicos. En el caso de la página principal de Mail.ru, se identificaron las siguientes oportunidades:

Esqueletos para mejorar el CLS

El CLS fue una de las métricas de campo con el peor rendimiento en la página principal de Mail.ru. El perfil posterior de esta página en el panel Rendimiento de las Herramientas para desarrolladores de Chrome reveló que los anuncios eran la fuente del problema. Para mejorar la estabilidad del diseño, nuestro equipo decidió usar marcadores de posición para reservar espacio para los anuncios antes de que se carguen.

Cuando implementes marcadores de posición, el primer paso es determinar las dimensiones del contenido que los reemplazará. Por suerte, la versión para computadoras de la página principal de Mail.ru tiene tamaños de anuncios estrictamente documentados. Después de hablar con el equipo de diseño, se usaron esqueletos de IU animados con SVG como marcadores de posición, ya que reducen el tiempo de carga percibido del contenido.

El regreso de SSR

Para facilitar la transición de Fest a Svelte, reescribimos de forma incremental el proyecto existente en lugar de comenzar de nuevo. En marzo de 2021, migramos la mayor parte del frontend a Svelte y, finalmente, llevamos el SSR a nuestra aplicación de producción después de clasificar y corregir los problemas de rendimiento del backend.

Después de implementar el SSR, el equipo descubrió la causa de la regresión de CLS que inicialmente pasó desapercibida: la sección de noticias no se insertaba en el momento de renderizar el primer contenido de la página. Hubo un retraso entre la pintura inicial del marcado de página que proporcionó el servidor y la inserción de la sección de noticias en el cliente. Este comportamiento provocó un cambio en el esqueleto del anuncio, lo que empeoró el CLS.

Aunque las herramientas para desarrolladores de Chrome mostraban eventos de cambio de diseño, no pudimos encontrar el motivo al principio. Aunque el SSR no era el problema, ayudó a descubrir la solución más adelante. Se corrigió el código responsable del retraso en la pintura, lo que mejoró la estabilidad del diseño del componente de noticias.

El código JavaScript activo solo muestra una página vacía en la sección de noticias, lo que oculta los saltos de diseño.
Encontramos el problema de pintura de noticias con JavaScript inhabilitado.
La inhabilitación de JavaScript reveló los cambios de diseño que antes estaban ocultos para los ojos humanos.
Se corrigió el problema de pintura de noticias con JavaScript inhabilitado.

Otro efecto que el SSR puede tener en el CLS es el movimiento de los componentes antes y después de la hidratación, lo que puede provocar más cambios de diseño. Encontramos este problema en la versión para dispositivos móviles en particular, y requirió prestar especial atención al marcado de componentes hidratados. Una buena solución a este problema fue transferir la mayor cantidad posible de lógica de visualización de JavaScript a CSS.

División de código y polyfills sin usar

Para mejorar la velocidad de carga percibida de la página, se requirió trabajar para disminuir los valores de LCP y FID. Una forma de lograrlo es mediante la división de código. Además de la página principal de Mail.ru, nuestro equipo está desarrollando un widget para la navegación del portal. Actualmente, está incorporado en muchos de los proyectos de nuestra empresa.

Por motivos históricos, el widget se inserta al principio de la página como una secuencia de comandos de carga síncrona. La proporción de polyfills en esta secuencia de comandos aumentó con el tiempo. Para limitar los efectos negativos en el rendimiento de la carga de estos polyfills, implementamos la división de código para navegadores modernos y heredados.

Decidimos no usar el patrón module/nomodule para cargar paquetes de JavaScript para navegadores modernos o heredados, ya que el atributo type="module" del elemento <script> no se segmentaba para navegadores lo suficientemente modernos para nuestras necesidades. Para abordar este problema, Mail.ru usa una herramienta interna para identificar las versiones modernas de navegadores en el backend y puede adaptarse a esos navegadores según corresponda.

Una vez que se pudieron identificar los navegadores en el backend, implementamos la división de código para navegadores modernos y heredados. El resultado fue una reducción del 43.3% en el tamaño del widget de JavaScript cargado de forma síncrona para navegadores modernos. Esta práctica también se aplicó a algunas otras secuencias de comandos del portal.

Además de reducir el tamaño del paquete y tener efectos positivos en las métricas web esenciales, la división de código también mejora la experiencia del desarrollador. Solo el 3.5% de nuestros usuarios usan navegadores heredados, y esa proporción tiene una tendencia a la baja, por lo que la implementación de la división de código permitió que nuestros desarrolladores usaran las APIs de navegador más recientes sin introducir el aumento de tamaño de polyfill necesario para los navegadores heredados para todos los usuarios.

Resultados

Después del esfuerzo de optimización, observamos los valores promedio de la semana del 24 al 30 de mayo de 2021 en nuestros datos de campo:

Nombre del grupo de métricas Métricas web esenciales Otras métricas web
Nombre de la métrica LCP FID CLS FCP TBT TTI
Porcentaje de usuarios según los umbrales de las Métricas web esenciales bueno 58% (+6%) 93% (+1%) 93% (+60%) 43% (+8%) 49% (+7%) 51% (+8%)
needs-improvement 18% 4% 3% 34% 17% 24%
deficiente 24% 3% 4% 23% 34% 25%
Métricas de la semana del 24 al 30 de marzo de 2021
Todas las métricas del bucket bueno mejoraron al menos un 1%. CLS incluso en un 60%.
Comparación de las métricas web antes y después (el cambio en el grupo "bueno" se muestra entre corchetes).

En los siguientes gráficos, se muestran los cambios en los valores de las métricas de rendimiento de las páginas web según la "Plataforma". Observa las dos fechas importantes en los gráficos:

  • 23 de marzo de 2021: Lanzamiento de la iteración con las secciones de la última página migradas a Svelte.
  • 19 de abril de 2021: Lanzamiento de la iteración con SSR devuelto y diseño modificado para corregir las regresiones de CLS.

La disminución de los valores del 1 al 10 de mayo se debe a los feriados de mayo en Rusia.

LCP de marzo al 1 de junio de 2021, que muestra pequeñas mejoras con el tiempo.
Gráfico de LCP en "Plataforma": del 16 de marzo al 1 de junio de 2021.
FID del 16 de marzo al 1 de junio de 2021, que muestra pequeñas mejoras en un nivel alto
Gráfico de FID en "Plataforma": del 16 de marzo al 1 de junio de 2021.
CLS del 16 de marzo al 1 de junio de 2021, que muestra grandes mejoras a partir del 23 de abril
Gráfico de CLS en "Plataforma": del 16 de marzo al 1 de junio de 2021.

Los resultados obtenidos con "Plataforma" están alineados con el crecimiento de los valores de las métricas en el Informe de UX de Chrome (CrUX).

Métrica de LCP de CrUX que muestra un aumento del 51% al 58% en el bucket bueno.
Cambio en la métrica de LCP en CrUX en 2021.
Métrica de FID de CrUX que muestra una ligera mejora en el FID del 91% al 93% en el bucket bueno.
Cambio en la métrica de FID en CrUX en 2021.
Métrica de CLS en CrUX que muestra mejoras significativas del 46% al 98% en el bucket bueno.
Cambio en la métrica CLS en CrUX en 2021.

Una comparación de los valores promedio de la duración de la sesión del usuario una semana antes del lanzamiento de las mejoras iniciales y una semana después muestra un crecimiento del 2.7%. Además, hay un aumento significativo general en la conversión en la mayoría de las secciones de la página. En particular, las conversiones a la app de correo electrónico Mail.ru aumentaron un 11.6%, y las conversiones de la sección de noticias aumentaron un 13.5%.

181%

Aumento del umbral de porcentaje de CLS bueno

2.7%

Mayor duración promedio de la sesión

13.5%

Aumento del porcentaje de conversiones de la sección de noticias

El resultado más inesperado que obtuvimos fue un aumento del 17.4% en la tasa de clics (CTR) del banner de marketing (su tiempo de renderización se redujo significativamente con la introducción de SSR y etiquetas de carga previa).

Después de analizar el resto de las secciones de la página, notamos una mejora significativa en el rendimiento de la gran mayoría de ellas. Incluso en secciones como Clima y Coronavirus, que no son clave en nuestra página, observamos un aumento de las conversiones del 9.6% y el 9.5%, respectivamente.

Conclusión

Mejorar el rendimiento es un desafío, ya que el trabajo involucrado puede prolongarse. Debes supervisar periódicamente los cambios en las métricas a lo largo del tiempo y asegurarte de que todas las funciones nuevas del producto no causen regresiones en las métricas web esenciales. Para lograrlo, supervisamos los cambios en las Métricas web esenciales en nuestro presupuesto de rendimiento.

Lo más importante es que enfatizamos la importancia de las métricas web esenciales a todos los miembros de nuestro equipo de productos, desde los gerentes y diseñadores hasta los verificadores y el control de calidad. Cada miembro del equipo debe conocer las métricas de rendimiento y tener la capacidad de mejorarlas. También incorporamos objetivos de optimización del rendimiento en nuestros procesos comerciales con una cadencia regular. Proporcionar con éxito una experiencia del usuario de alta calidad solo es posible mediante un esfuerzo conjunto de todos los miembros del equipo.