Melhorias nas Principais métricas da Web na página inicial do Mail.ru resultaram em um aumento médio de 10% nas taxas de conversão

Vários meses de trabalho para melhorar as Core Web Vitals na página inicial do Mail.ru resultaram em um aumento de 60% no 75o percentil na Mudança de layout cumulativa (CLS), impulsionando o tempo médio da sessão em 2,7% e as taxas de conversão das seções principais em mais de 10%.

Denis Stasyev
Denis Stasyev
Sven May
Sven May

Onde começamos

O Mail.ru é um dos principais serviços de e-mail na Internet de língua russa e está nos cinco principais sites da Rússia em termos de tráfego. O Mail.ru é um recurso importante para muitas pessoas. Ele recebe centenas de milhões de visitas por mês e é um portal de onde as pessoas podem acessar e-mails, notícias, mídias sociais, pesquisas de performance na Internet e muito mais.

O Mail.ru queria oferecer aos visitantes uma experiência de usuário de alta qualidade, então começou a trabalhar para melhorar as Core Web Vitals. Antes de discutirmos nossa estratégia de otimização, alguns detalhes técnicos da página inicial do Mail.ru devem ser observados.

Embora o projeto já tivesse sido desenvolvido há muito tempo usando nosso mecanismo interno de modelos Fest, começamos a migrar para o Svelte 3 em 2019.

O Svelte implementa a reatividade de uma forma que não usa o DOM virtual, o que faz com que ele consome menos recursos. A abordagem do Svelte remove funções não utilizadas de pacotes de produção, porque o código que as implementa não será gerado pelo compilador se as funções não forem usadas. O código não utilizado é removido durante a compilação, resultando em pacotes menores. Isso pode ajudar a reduzir o Tempo total de bloqueio (TBT, na sigla em inglês) durante a inicialização da página.

Como rastrear métricas de desempenho

Antes de otimizar as Core Web Vitals, avalie a performance em campo. Antes das Core Web Vitals, rastreamos outras métricas, como a Primeira exibição de conteúdo (FCP, na sigla em inglês), no painel de desempenho interno.

Nosso script de coleta de métricas foi modificado para coletar as Core Web Vitals e transmiti-las ao painel de desempenho para visualização. De acordo com as recomendações do Google, nosso script usa a API PerformanceObserver para gerar as métricas, que fazem parte da plataforma de front-end universal do Mail.ru.

O painel exibiu as seguintes métricas para usuários (valores médios para a semana de 15 a 21 de março de 2021):

Nome do grupo de métricas Core Web Vitals Outras Métricas da Web
Nome da métrica LCP FID CLS First Contentful Paint (FCP) TBT TTI
Parcela de usuários de acordo com os limites das Core Web Vitals good 52% 92% 33% 35% 42% 43%
de que precisa 19% 5% 23% 38% 16% 25%
ruim 29% 3% 44% 27% 42% 32%
Métricas para a semana de 15 a 21 de março de 2021
As Core Web Vitals antes da otimização mostram aproximadamente 1/3 dos usuários no grupo de baixa qualidade.
Valores das Métricas da Web antes das melhorias.

Como melhorar as Core Web Vitals

Existem muitas orientações para melhorar as Core Web Vitals, mas cada projeto tem desafios únicos. Para a página inicial do Mail.ru, as seguintes oportunidades foram identificadas:

Esqueletos para melhoria da CLS

A CLS foi uma das métricas de campo com pior desempenho na página inicial do Mail.ru. A criação de perfil subsequente dessa página no painel Performance do DevTools do Chrome revelou que os anúncios eram a origem do problema. Para melhorar a estabilidade do layout, nossa equipe decidiu usar marcadores de posição para reservar espaço para os anúncios antes que eles sejam carregados.

Ao implementar espaços reservados, a primeira etapa é determinar as dimensões do conteúdo que vão substituí-los. Felizmente, a versão para computador da página inicial do Mail.ru tem tamanhos bem documentados para anúncios. Depois de conversar com a equipe de design, esqueletos de interface animados com SVG foram usados como marcadores de posição porque reduzem o tempo de carregamento percebido do conteúdo.

O retorno da SSR

Para facilitar a transição do Fest para o Svelte, reescrevemos gradualmente o projeto existente em vez de começar de novo. Em março de 2021, migramos a maior parte do front-end para o Svelte e trouxemos a SSR para nosso aplicativo de produção após fazer a triagem e corrigir problemas de desempenho no back-end.

Após implementar a SSR, a equipe descobriu a causa da regressão da CLS que inicialmente passava despercebida: a seção de notícias não foi inserida no momento da renderização do primeiro conteúdo da página. Houve um atraso entre a pintura inicial da marcação da página fornecida pelo servidor e a inserção da seção de notícias no cliente. Esse comportamento resultou em uma mudança no esqueleto do anúncio, o que piorou a CLS.

Embora o DevTools do Chrome mostrasse eventos de mudança de layout, não foi possível encontrar o motivo primeiro. Embora a própria SSR não fosse o problema, ela ajudou a descobrir a solução mais tarde. A correção do código responsável pelo atraso de pintura melhorou a estabilidade do layout do componente de notícias.

O JavaScript ativo mostra apenas uma página vazia na seção de notícias, ocultando os saltos de layout.
Como encontrar o problema de pintura de notícias com o JavaScript desativado.
A desativação do JavaScript revelou mudanças de layout, antes ocultas dos olhos humanos.
Como corrigir o problema de pintura de notícias com o JavaScript desativado

Outro efeito que a SSR pode ter na CLS é a movimentação dos componentes antes e depois da hidratação, o que pode gerar mais mudanças de layout. Encontramos isso em particular na versão para dispositivos móveis e exigiu atenção especial à marcação do componente hidratado. Uma boa solução para esse problema foi transferir o máximo possível de lógica de exibição do JavaScript para o CSS.

Divisão de código e polyfills não usados

Para melhorar a velocidade de carregamento da página percebida, foi necessário trabalhar para diminuir os valores de LCP e FID. Uma maneira de fazer isso é pela divisão de código. Além da página inicial do Mail.ru em si, nossa equipe está desenvolvendo um widget para navegação no portal. No momento, ele está incorporado em muitos dos projetos da nossa empresa.

Por motivos históricos, o widget é inserido bem no início da página como um script de carregamento síncrono. A parcela de polyfills nesse script aumentou com o tempo. Para limitar os efeitos negativos na performance do carregamento desses polyfills, implementamos a divisão de código em navegadores modernos e legados.

Decidimos não usar o padrão module/nomodule para carregar pacotes JavaScript para navegadores modernos ou legados, já que o atributo type="module" do elemento <script> não tinha como alvo navegadores modernos o suficiente para nossas necessidades. Para resolver isso, o Mail.ru usa uma ferramenta interna para identificar as versões modernas dos navegadores no back-end e pode se adaptar a esses navegadores adequadamente.

Quando os navegadores puderam ser identificados no back-end, implementamos a divisão de código para navegadores modernos e legados. O resultado foi uma redução de 43,3% no tamanho do widget JavaScript carregado de forma síncrona para navegadores modernos. Essa prática também foi aplicada a alguns outros scripts de portal.

Além da redução do tamanho dos pacotes e dos efeitos positivos nas Core Web Vitals, a divisão de código também melhora a experiência do desenvolvedor. Apenas 3,5% dos nossos usuários usam navegadores legados, e essa parte está em uma tendência decrescente.Por isso, a implementação da divisão de código permitiu que nossos desenvolvedores usassem as APIs de navegador mais recentes sem introduzir a sobrecarga de polyfill necessária para navegadores legados a todos os usuários.

Resultados

Após o esforço de otimização, observamos os valores médios para a semana de 24 a 30 de maio de 2021 nos nossos dados de campo:

Nome do grupo de métricas Core Web Vitals Outras Métricas da Web
Nome da métrica LCP FID CLS First Contentful Paint (FCP) TBT TTI
Parcela de usuários de acordo com os limites das Core Web Vitals good 58% (+6%) 93% (+1%) 93% (+60%) 43% (+8%) 49% (+7%) 51% (+8%)
de que precisa 18% 4% 3% 34% 17% 24%
ruim 24% 3% 4% 23% 34% 25%
Métricas para a semana de 24 a 30 de março de 2021
Todas as métricas do bucket bom melhoraram em pelo menos 1%. CLS em 60%.
Comparação das Métricas da Web antes e depois (a mudança no grupo "bom" é mostrada entre colchetes).

Os gráficos abaixo mostram as alterações nos valores das métricas de desempenho da página da Web de acordo com a "Plataforma". Observe as duas datas importantes nos gráficos:

  • 23 de março de 2021: lançamento da iteração com as últimas seções da página migrada para o Svelte
  • 19 de abril de 2021: lançamento da iteração com SSR retornada e layout modificado para corrigir regressões de CLS.

A redução nos valores de 1o a 10 de maio está relacionada aos feriados na Rússia.

LCP de março a 1o de junho de 2021 mostrando pequenas melhorias ao longo do tempo.
Gráfico da LCP em "Plataforma": 16 de março a 1o de junho de 2021.
FID de 16 de março a 1o de junho de 2021 mostrando pequenas melhorias em alto nível.
Gráfico de FID em "Platform": 16 de março a 1o de junho de 2021.
A CLS de 16 de março a 1o de junho de 2021 apresentou grandes melhorias a partir de 23 de abril.
Gráfico de CLS em "Platform": 16 de março a 1o de junho de 2021.

Os resultados obtidos usando a "Plataforma" estão alinhados com o crescimento dos valores das métricas no Chrome UX Report (CrUX).

Métrica de LCP do CrUX mostrando um aumento de 51% para 58% no bucket bom.
Mudança da métrica de LCP no CrUX em 2021.
Métrica de FID do CrUX mostrando um pequeno avanço na FID de 91% a 93% com um bom bucket.
Mudança na métrica de FID no CrUX em 2021.
Métrica de CLS no CrUX mostrando grandes melhorias de 46% para 98% no bucket bom.
Mudança da métrica de CLS no CrUX em 2021.

Uma comparação entre os valores de duração média da sessão do usuário uma semana antes e uma semana após o lançamento das melhorias mostra um crescimento de 2,7%. Além disso, há um aumento significativo geral nas conversões na maioria das seções da página. Especificamente, as conversões para o aplicativo de e-mail Mail.ru aumentaram em 11,6%, e a conversão da seção de notícias aumentou em 13,5%.

181%

Aumento do limite da parcela do bom limite de CLS

2,7%

Duração média da sessão maior

13,5%

Aumento da taxa de conversão da seção de notícias

O resultado mais inesperado que tivemos foi um aumento de 17,4% na taxa de cliques (CTR) do banner de marketing (o tempo de renderização foi reduzido significativamente com a introdução de SSR e tags de pré-carregamento).

Depois de analisar o restante das seções da página, notamos uma melhoria de desempenho significativa na grande maioria delas. Mesmo para seções como "Clima" e "Coronavírus", que não são essenciais na nossa página, notamos um aumento de 9,6% e 9,5% nas conversões, respectivamente.

Conclusão

Melhorar o desempenho é um desafio, porque o trabalho envolvido pode ser prolongado. Monitore regularmente as mudanças nas métricas ao longo do tempo e garanta que os novos recursos do produto não causem regressões nas Core Web Vitals. Para isso, monitoramos as mudanças nas Core Web Vitals no orçamento de performance.

Mais importante ainda, destacamos a importância das Core Web Vitals para todos os membros da nossa equipe de produto, de gerentes e designers a testadores e QA. Cada membro da equipe deve estar ciente das métricas de desempenho e estar capacitado para melhorá-las. Nós também incorporamos regularmente objetivos de otimização de desempenho em nossos processos de negócios. Oferecer com sucesso uma experiência do usuário de alta qualidade só é possível por meio do esforço conjunto de todos os membros da equipe.