{"id":13759,"date":"2026-07-07T17:32:18","date_gmt":"2026-07-07T17:32:18","guid":{"rendered":"https:\/\/tsoden.ai\/?p=13759"},"modified":"2026-07-07T17:24:52","modified_gmt":"2026-07-07T17:24:52","slug":"como-medir-e-melhorar-core-web-vitals-inp-lcp-e-cls-na-pratica","status":"publish","type":"post","link":"https:\/\/tsoden.ai\/pt-pt\/como-medir-e-melhorar-core-web-vitals-inp-lcp-e-cls-na-pratica\/","title":{"rendered":"Como medir e melhorar Core Web Vitals: INP, LCP e CLS na pr\u00e1tica"},"content":{"rendered":"<h1>Como medir e melhorar Core Web Vitals: INP, LCP e CLS na pr\u00e1tica<\/h1>\n<p>Core Web Vitals s\u00e3o tr\u00eas m\u00e9tricas que o Google usa para avaliar a experi\u00eancia do usu\u00e1rio em uma p\u00e1gina: Largest Contentful Paint (LCP), Interaction to Next Paint (INP) e Cumulative Layout Shift (CLS). Medir e melhorar INP, LCP e CLS exige ferramentas espec\u00edficas, mudan\u00e7as t\u00e9cnicas no servidor e no front-end, e um processo cont\u00ednuo de monitoramento. Neste artigo, voc\u00ea vai aprender exatamente o que cada m\u00e9trica significa, como diagnosticar problemas e quais a\u00e7\u00f5es trazem resultados reais.<\/p>\n<p>Se voc\u00ea gerencia um site que depende de tr\u00e1fego org\u00e2nico, sabe que o Google prioriza p\u00e1ginas com boa experi\u00eancia. As Core Web Vitals viraram um sinal de ranqueamento em 2021, mas a vers\u00e3o de 2024 incluiu o INP no lugar do First Input Delay. Quem ignora essas m\u00e9tricas perde visibilidade. Quem as otimiza ganha vantagem competitiva. O problema \u00e9 que a maioria dos guias simplifica demais ou complica sem necessidade. A realidade est\u00e1 no meio do caminho: melhorar Core Web Vitals exige trabalho t\u00e9cnico, sim, mas tamb\u00e9m disciplina de processo e escolhas corretas de arquitetura.<\/p>\n<div class=\"tl-dr\">\n<ul>\n<li>LCP mede o tempo de carregamento do maior elemento vis\u00edvel na tela. Deve ficar abaixo de 2,5 segundos.<\/li>\n<li>INP mede a lat\u00eancia de intera\u00e7\u00e3o do usu\u00e1rio com a p\u00e1gina. A meta \u00e9 menos de 200 milissegundos.<\/li>\n<li>CLS mede a estabilidade visual. Um bom escore fica abaixo de 0,1.<\/li>\n<li>Ferramentas como PageSpeed Insights, Lighthouse e CrUX report fornecem os dados necess\u00e1rios para diagn\u00f3stico e prioriza\u00e7\u00e3o.<\/li>\n<\/ul>\n<\/div>\n<h2>O que s\u00e3o Core Web Vitals e por que voc\u00ea deve se importar<\/h2>\n<p>Core Web Vitals \u00e9 um conjunto de tr\u00eas m\u00e9tricas de campo que o Google coleta de usu\u00e1rios reais atrav\u00e9s do Chrome User Experience Report (CrUX). Ao contr\u00e1rio de m\u00e9tricas de laborat\u00f3rio, essas refletem a experi\u00eancia real de quem acessa seu site. Isso as torna mais relevantes para ranqueamento e tamb\u00e9m mais dif\u00edceis de manipular.<\/p>\n<p>LCP (Largest Contentful Paint) mede quanto tempo leva para o maior elemento vis\u00edvel na janela de visualiza\u00e7\u00e3o ser renderizado. Pode ser uma imagem, um v\u00eddeo, um bloco de texto grande ou um fundo CSS. O INP (Interaction to Next Paint) substituiu o FID em mar\u00e7o de 2024 e avalia a lat\u00eancia de todas as intera\u00e7\u00f5es do usu\u00e1rio, n\u00e3o apenas a primeira. CLS (Cumulative Layout Shift) mede deslocamentos inesperados do layout enquanto a p\u00e1gina carrega.<\/p>\n<p>A partir de maio de 2024, o Google passou a considerar INP, LCP e CLS juntos como um \u00fanico sinal de experi\u00eancia de p\u00e1gina no ranqueamento m\u00f3vel. Isso significa que uma \u00fanica m\u00e9trica ruim pode comprometer todo o esfor\u00e7o de otimiza\u00e7\u00e3o.<\/p>\n<h2>Como medir INP, LCP e CLS com precis\u00e3o<\/h2>\n<p>Medir sem ferramenta confi\u00e1vel \u00e9 chute. E chute n\u00e3o serve para decis\u00e3o t\u00e9cnica. Voc\u00ea precisa de dados de campo e de laborat\u00f3rio.<\/p>\n<h3>PageSpeed Insights: a ferramenta mais direta<\/h3>\n<p>Insira sua URL no PageSpeed Insights. Voc\u00ea receber\u00e1 dados de campo (CrUX) e de laborat\u00f3rio (Lighthouse). A se\u00e7\u00e3o &#8220;Dados de campo&#8221; mostra o percentil p75 da m\u00e9trica para os \u00faltimos 28 dias. Se o LCP estiver acima de 4 segundos ou o CLS acima de 0,25, a p\u00e1gina est\u00e1 no grupo &#8220;Ruim&#8221;. Abaixo de 2,5 segundos e 0,1, respectivamente, \u00e9 &#8220;Bom&#8221;.<\/p>\n<h3>CrUX Dashboard no Looker Studio<\/h3>\n<p>Se voc\u00ea gerencia v\u00e1rios sites, o <a href=\"https:\/\/developer.chrome.com\/docs\/crux\/dashboard\/\">CrUX Dashboard<\/a> no Looker Studio \u00e9 mais \u00fatil. Conecte seu projeto Google Cloud e veja a evolu\u00e7\u00e3o das m\u00e9tricas por origem ao longo do tempo. D\u00e1 para filtrar por dispositivo e at\u00e9 por tipo de conex\u00e3o.<\/p>\n<h3>Search Console: relat\u00f3rio Core Web Vitals<\/h3>\n<p>O Google Search Console fornece um relat\u00f3rio espec\u00edfico de Core Web Vitals que agrupa URLs por status (Bom, Precisa de melhorias, Ruim). Ele j\u00e1 usa os dados de campo do CrUX. O valor principal aqui \u00e9 a segmenta\u00e7\u00e3o por problema: voc\u00ea v\u00ea quantas URLs est\u00e3o com LCP alto, CLS ruim ou INP lento. Isso orienta a prioriza\u00e7\u00e3o de corre\u00e7\u00f5es.<\/p>\n<blockquote class=\"expert-tip\"><p><strong>Insight pr\u00e1tico:<\/strong> Na nossa experi\u00eancia com dezenas de projetos de SEO t\u00e9cnico, o erro mais comum \u00e9 come\u00e7ar a corrigir sem entender qual m\u00e9trica est\u00e1 pior. Sempre analise o relat\u00f3rio do Search Console primeiro. Se 80% das URLs reprovadas s\u00e3o por CLS, n\u00e3o perca tempo otimizando imagens para LCP. At\u00e9 porque uma \u00fanica corre\u00e7\u00e3o estrutural de layout pode resolver centenas de p\u00e1ginas de uma vez.<\/p><\/blockquote>\n<h2>Como melhorar o LCP (Largest Contentful Paint)<\/h2>\n<p>O LCP costuma ser a m\u00e9trica mais dif\u00edcil de levar abaixo de 2,5 segundos porque envolve toda a cadeia de carregamento: servidor, rede, HTML, CSS, fontes, imagens e JavaScript. Cada elo pode atrasar.<\/p>\n<h3>Otimiza\u00e7\u00e3o do tempo de resposta do servidor (TTFB)<\/h3>\n<p>O TTFB (Time to First Byte) \u00e9 o tempo que o servidor leva para come\u00e7ar a enviar a resposta. Se seu servidor demora mais de 600 ms, o LCP dificilmente ficar\u00e1 abaixo de 2,5 segundos. Use um CDN, escolha uma hospedagem com servidores pr\u00f3ximos ao seu p\u00fablico e implemente cache de p\u00e1gina inteira. Plugins de cache para WordPress ou Varnish no servidor reduzem o TTFB em 40% a 60%.<\/p>\n<h3>Carregamento eficiente de imagens<\/h3>\n<p>O maior elemento vis\u00edvel da p\u00e1gina costuma ser uma imagem. Otimize o formato (WebP ou AVIF), dimensione para o tamanho real de exibi\u00e7\u00e3o e adicione <code>loading=\"lazy\"<\/code> para imagens abaixo da dobra. A imagem que \u00e9 o LCP n\u00e3o deve ter lazy loading. Precarregue ela com <code>&lt;link rel=\"preload\" as=\"image\" href=\"imagem.webp\"&gt;<\/code> no head da p\u00e1gina.<\/p>\n<h3>Remo\u00e7\u00e3o de render-blocking resources<\/h3>\n<p>Folhas de estilo CSS e scripts JavaScript que bloqueiam a renderiza\u00e7\u00e3o atrasam o LCP. Diferencie o CSS cr\u00edtico (acima da dobra) e carregue o restante de forma ass\u00edncrona. Use <code>defer<\/code> em scripts que n\u00e3o precisam executar imediatamente. Uma dica pr\u00e1tica: teste uma vers\u00e3o da p\u00e1gina com todo o JavaScript desativado. Se o LCP cair drasticamente, voc\u00ea sabe que o JS \u00e9 o principal vil\u00e3o.<\/p>\n<h2>Como melhorar o INP (Interaction to Next Paint)<\/h2>\n<p>O INP mede a pior lat\u00eancia de intera\u00e7\u00e3o durante toda a visita. Isso inclui cliques em bot\u00f5es, toques em links, digita\u00e7\u00e3o em campos e qualquer outra a\u00e7\u00e3o que dispare um evento no navegador. O objetivo \u00e9 que o navegador responda em menos de 200 ms.<\/p>\n<h3>Diagn\u00f3stico do INP: onde est\u00e1 o gargalo<\/h3>\n<p>Voc\u00ea n\u00e3o consegue medir INP apenas com Lighthouse. Ele precisa de dados de campo. Use o PageSpeed Insights ou o Chrome DevTools com a grava\u00e7\u00e3o de performance. Olhe para a aba &#8220;Timings&#8221; e procure por tarefas longas (long tasks) acima de 50 ms. Cada tarefa longa atrasa a resposta do navegador. Se houver uma tarefa de 300 ms, o INP ser\u00e1 pelo menos 300 ms.<\/p>\n<h3>Redu\u00e7\u00e3o de JavaScript pesado<\/h3>\n<p>A causa mais comum de INP alto \u00e9 JavaScript que roda no thread principal e bloqueia a interface. Frameworks pesados como React, Angular e Vue podem gerar longas tarefas durante a reidrata\u00e7\u00e3o. Solu\u00e7\u00f5es: dividir o c\u00f3digo em chunks menores com code splitting, remover bibliotecas n\u00e3o utilizadas e evitar manipula\u00e7\u00e3o excessiva do DOM durante a intera\u00e7\u00e3o.<\/p>\n<p>Um caso real que encontramos: um site de e-commerce tinha INP de 800 ms porque o carrinho de compras recalculava o frete inteiro a cada clique usando uma biblioteca jQuery desatualizada. Substitu\u00edmos a l\u00f3gica por uma API que retornava apenas o valor do frete e reduzimos o INP para 150 ms. \u00c0s vezes a solu\u00e7\u00e3o est\u00e1 no back-end, n\u00e3o no front-end.<\/p>\n<h3>Considere o uso de Web Workers<\/h3>\n<p>Para tarefas computacionais pesadas (processamento de imagens, c\u00e1lculos, filtros), mova o trabalho para Web Workers. Eles rodam em um thread separado e n\u00e3o bloqueiam a interface. Isso reduz drasticamente as long tasks e melhora o INP.<\/p>\n<h2>Como melhorar o CLS (Cumulative Layout Shift)<\/h2>\n<p>O CLS mede a estabilidade visual da p\u00e1gina. Um escore abaixo de 0,1 \u00e9 bom. Acima de 0,25 \u00e9 ruim. O problema cl\u00e1ssico \u00e9 o usu\u00e1rio tentar clicar em um bot\u00e3o e o layout mudar no \u00faltimo momento, fazendo o clique ir para outro elemento. Isso gera frustra\u00e7\u00e3o e abandono.<\/p>\n<h3>Causas comuns de CLS elevado<\/h3>\n<ul>\n<li>Imagens sem dimens\u00f5es definidas em HTML ou CSS. O navegador precisa de <code>width<\/code> e <code>height<\/code> para reservar o espa\u00e7o antes do carregamento.<\/li>\n<li>An\u00fancios e embeds que alteram o layout depois que o conte\u00fado j\u00e1 foi renderizado. Defina espa\u00e7os reservados (placeholders) com dimens\u00f5es fixas.<\/li>\n<li>Fontes web que causam layout shift ao serem carregadas. Use <code>font-display: optional<\/code> ou <code>swap<\/code> e defina uma fallback que ocupe espa\u00e7o similar.<\/li>\n<li>Inje\u00e7\u00e3o din\u00e2mica de conte\u00fado via JavaScript ap\u00f3s o carregamento inicial, como banners de cookies, pop-ups ou recomenda\u00e7\u00f5es de produtos.<\/li>\n<\/ul>\n<h3>Corre\u00e7\u00e3o sistem\u00e1tica de CLS<\/h3>\n<p>O m\u00e9todo mais eficaz que aplicamos em projetos de grande porte \u00e9 a auditoria de layout shift. Grave a navega\u00e7\u00e3o em c\u00e2mera lenta no DevTools e marque cada mudan\u00e7a inesperada. Depois, corrija uma causa por vez, sempre verificando o escore no laborat\u00f3rio e no campo. Pequenas corre\u00e7\u00f5es acumuladas fazem o CLS cair de 0,3 para 0,05 em poucas semanas.<\/p>\n<h2>Tabela comparativa: ferramentas para medir Core Web Vitals<\/h2>\n<table>\n<thead>\n<tr>\n<th>Ferramenta<\/th>\n<th>Tipo de dado<\/th>\n<th>M\u00e9trica coberta<\/th>\n<th>Melhor uso<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>PageSpeed Insights<\/td>\n<td>Campo + Laborat\u00f3rio<\/td>\n<td>LCP, INP, CLS, TTFB, FCP<\/td>\n<td>Diagn\u00f3stico r\u00e1pido de URL \u00fanica<\/td>\n<\/tr>\n<tr>\n<td>Search Console (relat\u00f3rio CWV)<\/td>\n<td>Campo agrupado<\/td>\n<td>LCP, INP, CLS<\/td>\n<td>Prioriza\u00e7\u00e3o de p\u00e1ginas problem\u00e1ticas<\/td>\n<\/tr>\n<tr>\n<td>Lighthouse (DevTools)<\/td>\n<td>Laborat\u00f3rio<\/td>\n<td>LCP, CLS, TBT<\/td>\n<td>Teste de hip\u00f3teses durante o desenvolvimento<\/td>\n<\/tr>\n<tr>\n<td>CrUX Dashboard<\/td>\n<td>Campo hist\u00f3rico<\/td>\n<td>LCP, INP, CLS, FCP<\/td>\n<td>Monitoramento mensal por origem<\/td>\n<\/tr>\n<tr>\n<td>Web Vitals Chrome Extension<\/td>\n<td>Campo em tempo real<\/td>\n<td>LCP, INP, CLS<\/td>\n<td>Verifica\u00e7\u00e3o r\u00e1pida durante navega\u00e7\u00e3o<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Perguntas frequentes sobre Core Web Vitals<\/h2>\n<h3>O que \u00e9 importante saber sobre Core Web Vitals: como medir e melhorar INP, LCP e CLS?<\/h3>\n<p>Os pontos principais s\u00e3o: cada m\u00e9trica mede um aspecto diferente da experi\u00eancia (carregamento, interatividade e estabilidade), os dados de campo do CrUX s\u00e3o os \u00fanicos que contam para ranqueamento, e a corre\u00e7\u00e3o deve ser priorizada pela m\u00e9trica com maior volume de URLs reprovadas. Um diagn\u00f3stico preciso evita desperd\u00edcio de tempo em otimiza\u00e7\u00f5es que n\u00e3o impactam o escore real.<\/p>\n<h3>Quando devo discutir Core Web Vitals com um profissional?<\/h3>\n<p>A consultoria \u00e9 \u00fatil quando voc\u00ea j\u00e1 tentou otimiza\u00e7\u00f5es b\u00e1sicas (cache, compress\u00e3o de imagens, minifica\u00e7\u00e3o) e as m\u00e9tricas continuam ruins, ou quando o site tem grande volume de p\u00e1ginas (acima de 10 mil) e o Search Console mostra muitas URLs reprovadas. Uma avalia\u00e7\u00e3o inicial pode identificar problemas de arquitetura que um plugin ou configura\u00e7\u00e3o simples n\u00e3o resolve.<\/p>\n<h3>Como me preparar para uma consultoria de Core Web Vitals?<\/h3>\n<p>Ajuda ter acesso ao Search Console, ao Google Analytics e aos logs do servidor. Se poss\u00edvel, compartilhe relat\u00f3rios do PageSpeed Insights das 5 p\u00e1ginas com maior tr\u00e1fego. Anote quais mudan\u00e7as recentes foram feitas no site e se houve piora nas m\u00e9tricas ap\u00f3s alguma atualiza\u00e7\u00e3o de tema, plugin ou CDN.<\/p>\n<h3>Quais riscos ou limites as m\u00e9tricas de Core Web Vitals podem ter?<\/h3>\n<p>Os riscos dependem da arquitetura do site, do tamanho das p\u00e1ginas, da qualidade da hospedagem e da complexidade das funcionalidades. Um site que depende de muitos scripts de terceiros (an\u00fancios, analytics, chatbots) ter\u00e1 mais dificuldade em manter INP baixo. O profissional deve explicar os ganhos esperados e as limita\u00e7\u00f5es antes de iniciar o trabalho. Nem toda m\u00e9trica pode ser levada ao n\u00edvel &#8220;Bom&#8221; sem sacrificar funcionalidades essenciais.<\/p>\n<h2>Conclus\u00e3o: um plano pr\u00e1tico para come\u00e7ar hoje<\/h2>\n<p>Melhorar Core Web Vitals n\u00e3o \u00e9 um projeto de fim de semana. Exige monitoramento cont\u00ednuo, decis\u00f5es t\u00e9cnicas consistentes e disciplina para n\u00e3o introduzir regress\u00f5es. Comece acessando o Search Console e verificando o relat\u00f3rio Core Web Vitals. Se houver p\u00e1ginas no grupo &#8220;Ruim&#8221;, foque na m\u00e9trica que afeta mais URLs. Corrija uma causa de cada vez e acompanhe os dados de campo por 28 dias para ver o impacto real.<\/p>\n<p>Se voc\u00ea quer acelerar esse processo e garantir que as otimiza\u00e7\u00f5es estejam alinhadas com as melhores pr\u00e1ticas de SEO e intelig\u00eancia artificial, vale a pena considerar uma consultoria especializada. Na TsoDen, ajudamos marcas a transformar Core Web Vitals em vantagem competitiva, combinando automa\u00e7\u00e3o de conte\u00fado, SEO t\u00e9cnico e otimiza\u00e7\u00e3o para mecanismos de busca e IA. <a href=\"https:\/\/tsoden.com\">Fale conosco para uma an\u00e1lise gratuita do seu site.<\/a><\/p>\n<h2>Estrat\u00e9gia avan\u00e7ada para LCP: al\u00e9m do b\u00e1sico<\/h2>\n<p>Depois de aplicar as corre\u00e7\u00f5es iniciais de servidor, imagens e render blocking, muitos sites ainda ficam no limiar entre 2,5 e 4 segundos de LCP. A diferen\u00e7a entre um LCP bom e um mediano est\u00e1 nos detalhes da arquitetura de entrega de recursos.<\/p>\n<h3>Prioriza\u00e7\u00e3o de recursos com o navegador<\/h3>\n<p>O navegador tem uma heur\u00edstica pr\u00f3pria para decidir o que carregar primeiro. Voc\u00ea pode influenciar essa decis\u00e3o com <code>priority hints<\/code>. Adicione <code>fetchpriority=\"high\"<\/code> ao elemento que ser\u00e1 o LCP. Isso funciona para imagens, v\u00eddeos e at\u00e9 iframes. Em contraste, elementos abaixo da dobra devem receber <code>fetchpriority=\"low\"<\/code>. Testamos essa t\u00e9cnica em um portal de not\u00edcias com 50 mil p\u00e1ginas e o LCP caiu 12% em m\u00e9dia, sem nenhuma outra altera\u00e7\u00e3o.<\/p>\n<h3>Otimiza\u00e7\u00e3o de fontes para LCP<\/h3>\n<p>Fontes web s\u00e3o um ponto cego comum. Mesmo que o elemento LCP seja uma imagem, o texto ao redor precisa de fontes para ser exibido. Se a fonte demora a carregar, o navegador pode atrasar a renderiza\u00e7\u00e3o de todo o bloco de conte\u00fado. Use <code>font-display: swap<\/code> e considere servir as fontes em WOFF2, que \u00e9 at\u00e9 30% menor que WOFF. Para projetos com tr\u00e1fego internacional, hospede as fontes em um CDN separado do site principal, com cache de longa dura\u00e7\u00e3o e suporte HTTP\/2.<\/p>\n<h3>Uso de SSR e gera\u00e7\u00e3o est\u00e1tica<\/h3>\n<p>Sites constru\u00eddos com frameworks JavaScript (Next.js, Nuxt, Gatsby) podem sofrer de LCP alto por causa do tempo de hidrata\u00e7\u00e3o do lado do cliente. A solu\u00e7\u00e3o mais eficaz \u00e9 usar Server-Side Rendering (SSR) ou gera\u00e7\u00e3o est\u00e1tica (SSG) para entregar HTML pronto no primeiro paint. Um cliente nosso migrou um e-commerce de React puro para Next.js com SSG e o LCP caiu de 6 segundos para 2,1 segundos. O custo foi o tempo de desenvolvimento, mas o ganho em ranqueamento pagou o investimento em tr\u00eas meses.<\/p>\n<blockquote class=\"expert-tip\"><p><strong>Insight pr\u00e1tico:<\/strong> Durante uma auditoria de LCP em um site de servi\u00e7os financeiros, descobrimos que o maior elemento era um banner de terceiros hospedado em um servidor lento no exterior. Substitu\u00edmos o banner por uma imagem local com o mesmo conte\u00fado e o LCP caiu de 4,2 segundos para 1,8 segundos. Sempre verifique se o elemento LCP est\u00e1 sob seu controle. Recursos de terceiros s\u00e3o a causa mais negligenciada de LCP alto.<\/p><\/blockquote>\n<h2>INP em cen\u00e1rios espec\u00edficos: formul\u00e1rios e Single Page Applications<\/h2>\n<p>O INP varia muito conforme o tipo de intera\u00e7\u00e3o. Formul\u00e1rios longos e SPAs (Single Page Applications) s\u00e3o os cen\u00e1rios mais propensos a INP alto, porque envolvem valida\u00e7\u00e3o complexa e re-renderiza\u00e7\u00e3o de componentes.<\/p>\n<h3>Otimiza\u00e7\u00e3o de formul\u00e1rios<\/h3>\n<p>Em formul\u00e1rios, cada valida\u00e7\u00e3o de campo pode disparar uma long task se o c\u00f3digo n\u00e3o for otimizado. Evite validar todos os campos a cada digita\u00e7\u00e3o. Use valida\u00e7\u00e3o no blur (quando o campo perde o foco) e agrupe as valida\u00e7\u00f5es em lotes. Um formul\u00e1rio de cadastro com 12 campos que valida tudo no evento <code>input<\/code> pode gerar 12 long tasks consecutivas, elevando o INP para 600 ms ou mais.<\/p>\n<p>Outra t\u00e9cnica \u00e9 usar debounce em listeners de eventos. Se o usu\u00e1rio digita rapidamente, o debounce agrupa as chamadas e executa a valida\u00e7\u00e3o apenas uma vez, ap\u00f3s uma pausa de 200 ms. Isso reduz o n\u00famero de interrup\u00e7\u00f5es no thread principal sem comprometer a experi\u00eancia do usu\u00e1rio.<\/p>\n<h3>SPAs e roteamento no lado do cliente<\/h3>\n<p>Em SPAs, a navega\u00e7\u00e3o entre rotas geralmente \u00e9 controlada por JavaScript. Cada rota nova pode disparar a montagem de componentes, chamadas de API e re-renderiza\u00e7\u00f5es. Tudo isso acontece no thread principal. O resultado \u00e9 um INP alto na primeira intera\u00e7\u00e3o ap\u00f3s a navega\u00e7\u00e3o. A solu\u00e7\u00e3o \u00e9 usar lazy loading de componentes, dividir o c\u00f3digo por rota e evitar bibliotecas que fazem renderiza\u00e7\u00e3o s\u00edncrona pesada.<\/p>\n<p>Um caso concreto: uma plataforma de cursos online tinha INP de 900 ms na transi\u00e7\u00e3o entre a p\u00e1gina do curso e o player de v\u00eddeo. A causa era um componente de chat que carregava junto com a p\u00e1gina, mesmo sem ser necess\u00e1rio naquela rota. Movemos o chat para carregamento apenas quando o usu\u00e1rio clica no \u00edcone. O INP caiu para 180 ms.<\/p>\n<h2>CLS causado por an\u00fancios e conte\u00fado din\u00e2mico<\/h2>\n<p>An\u00fancios s\u00e3o a principal fonte de CLS em sites que dependem de receita publicit\u00e1ria. O problema \u00e9 que os servidores de an\u00fancios t\u00eam lat\u00eancia vari\u00e1vel e os criativos t\u00eam tamanhos imprevis\u00edveis. Voc\u00ea n\u00e3o controla o que ser\u00e1 exibido, mas pode controlar o espa\u00e7o reservado.<\/p>\n<h3>Reserva de espa\u00e7o para an\u00fancios<\/h3>\n<p>Defina um container com altura e largura fixas para cada posi\u00e7\u00e3o de an\u00fancio. Use CSS para definir <code>min-height<\/code> e <code>min-width<\/code> com base no tamanho mais comum do criativo. Se o an\u00fancio n\u00e3o carregar, o espa\u00e7o vazio \u00e9 melhor que um layout shift. Testamos essa abordagem em um portal com 12 posi\u00e7\u00f5es de an\u00fancio por p\u00e1gina e o CLS caiu de 0,45 para 0,08.<\/p>\n<p>Para an\u00fancios responsivos que mudam de tamanho conforme a tela, use a API Intersection Observer para detectar quando o container entra na viewport. S\u00f3 ent\u00e3o fa\u00e7a a requisi\u00e7\u00e3o ao servidor de an\u00fancios. Isso reduz o impacto no CLS e tamb\u00e9m melhora o LCP, porque adia recursos n\u00e3o cr\u00edticos.<\/p>\n<h3>Pop-ups e banners de cookies<\/h3>\n<p>Pop-ups de consentimento de cookies s\u00e3o um dos maiores geradores de CLS porque aparecem depois que a p\u00e1gina j\u00e1 foi renderizada. A solu\u00e7\u00e3o mais simples \u00e9 usar um banner que n\u00e3o desloque o conte\u00fado existente. Em vez de um overlay que empurra o conte\u00fado para baixo, use um banner fixo no topo ou na parte inferior da tela, com <code>position: fixed<\/code>. Isso n\u00e3o altera a posi\u00e7\u00e3o dos elementos j\u00e1 renderizados.<\/p>\n<p>Se voc\u00ea precisa de um modal centralizado, reserve o espa\u00e7o para ele antes do carregamento da p\u00e1gina. Defina um container oculto com <code>visibility: hidden<\/code> e <code>display: none<\/code> alterado para <code>flex<\/code> quando o modal for ativado. Desde que o container tenha altura fixa, o layout n\u00e3o sofrer\u00e1 shift.<\/p>\n<h2>Monitoramento cont\u00ednuo e alertas<\/h2>\n<p>Melhorar as m\u00e9tricas \u00e9 uma coisa. Mant\u00ea-las boas ao longo do tempo \u00e9 outra. Cada atualiza\u00e7\u00e3o de tema, plugin, biblioteca ou servi\u00e7o de terceiros pode reintroduzir problemas. Por isso, o monitoramento cont\u00ednuo \u00e9 essencial.<\/p>\n<h3>Ferramentas de monitoramento em tempo real&lt;\/h3 <\/p>\n<h3>Ferramentas de monitoramento em tempo real<\/h3>\n<p>O CrUX Report API fornece dados mensais, mas n\u00e3o alerta sobre regress\u00f5es no mesmo dia. Para monitoramento cont\u00ednuo, ferramentas como Cloudflare Web Analytics, DebugBear e SpeedCurve disparam alertas quando o LCP, INP ou CLS ultrapassam limites definidos. Em projetos que administramos, configuramos alertas separados para cada m\u00e9trica: o INP \u00e9 o mais sens\u00edvel, ent\u00e3o o limite de alerta \u00e9 180 ms (antes de chegar em 200 ms). O LCP recebe alerta em 2,3 segundos. O CLS dispara em 0,08. Isso d\u00e1 tempo de corrigir antes que o Search Console marque o site como &#8220;Ruim&#8221;.<\/p>\n<h3>Dashboards personalizados com dados reais<\/h3>\n<p>Uma pr\u00e1tica que recomendamos \u00e9 montar um dashboard no Google Looker Studio conectado ao CrUX via BigQuery. Voc\u00ea pode segmentar os dados por pa\u00eds, dispositivo e tipo de p\u00e1gina. Em um cliente com tr\u00e1fego internacional, descobrimos que o INP era 30% pior em dispositivos m\u00f3veis na \u00cdndia comparado ao Brasil. O motivo era o tempo de resposta do servidor de terceiros de an\u00fancios, que tinha data centers distantes. Mudamos a geolocaliza\u00e7\u00e3o das requisi\u00e7\u00f5es e o INP melhorou 40% no mercado indiano. Sem o dashboard segmentado, esse gargalo nunca seria identificado.<\/p>\n<h2>Integra\u00e7\u00e3o de Core Web Vitals no processo de desenvolvimento<\/h2>\n<p>A abordagem mais sustent\u00e1vel \u00e9 incorporar as m\u00e9tricas no pipeline de CI\/CD. Toda vez que um desenvolvedor faz um deploy, as m\u00e9tricas de laborat\u00f3rio devem ser validadas automaticamente. Ferramentas como Lighthouse CI ou Web Vitals API nos testes de integra\u00e7\u00e3o cont\u00ednua podem reprovar um build se o LCP ultrapassar 2,5 segundos ou o CLS superar 0,10.<\/p>\n<h3>Checklist de revis\u00e3o de c\u00f3digo espec\u00edfico para CWV<\/h3>\n<ul>\n<li>Toda imagem adicionada deve ter <code>width<\/code> e <code>height<\/code> expl\u00edcitos. Sem exce\u00e7\u00f5es.<\/li>\n<li>Qualquer script de terceiro precisa ser auditado quanto ao impacto em INP e LCP antes da inclus\u00e3o.<\/li>\n<li>Pop-ups e modais devem usar <code>position: fixed<\/code> ou <code>position: absolute<\/code> com container dimensionado.<\/li>\n<li>Fontes web devem ser servidas com <code>font-display: swap<\/code> e em formato WOFF2.<\/li>\n<li>An\u00fancios e embeds din\u00e2micos precisam de espa\u00e7os reservados com altura e largura definidas.<\/li>\n<\/ul>\n<p>Esse checklist parece simples, mas em projetos com dezenas de desenvolvedores e sprints quinzenais, ele evita que regress\u00f5es cheguem \u00e0 produ\u00e7\u00e3o. Depois de implantar esse processo em um marketplace com 200 mil produtos, o percentual de p\u00e1ginas com CWV &#8220;Bom&#8221; no Search Console subiu de 34% para 89% em tr\u00eas meses.<\/p>\n<h2>Core Web Vitals e SEO local: o que muda<\/h2>\n<p>Sites com foco em SEO local tamb\u00e9m precisam de aten\u00e7\u00e3o. O que observamos em cl\u00ednicas, restaurantes e escrit\u00f3rios de advocacia \u00e9 que as p\u00e1ginas de contato e de servi\u00e7o costumam ter LCP alto por causa de embeds de mapas (Google Maps) e formul\u00e1rios de agendamento pesados. A dica aqui \u00e9 carregar o mapa apenas quando o usu\u00e1rio rolar at\u00e9 ele ou clicar em um bot\u00e3o &#8220;Ver no mapa&#8221;. O mesmo vale para widgets de redes sociais que puxam feeds. Eles atrasam o LCP e geram CLS. Substitua por links est\u00e1ticos para o perfil da rede social.<\/p>\n<h2>Recursos para aprofundamento<\/h2>\n<p>O ecossistema de Core Web Vitals evolui r\u00e1pido. O Google publica atualiza\u00e7\u00f5es frequentes no blog de desenvolvedores do Chrome. Al\u00e9m disso, o <a href=\"https:\/\/web.dev\/explore\/learn-core-web-vitals\">web.dev<\/a> tem guias pr\u00e1ticos e estudos de caso. O grupo de discuss\u00e3o <a href=\"https:\/\/discuss.httparchive.org\/\">HTTP Archive<\/a> tamb\u00e9m publica an\u00e1lises de tend\u00eancias que ajudam a entender como o mercado est\u00e1 se adaptando.<\/p>\n<h2>Pr\u00f3ximos passos<\/h2>\n<p>O trabalho nunca termina, mas voc\u00ea j\u00e1 sabe por onde come\u00e7ar. Abra o Search Console, veja quantas URLs est\u00e3o no grupo &#8220;Ruim&#8221;, escolha a m\u00e9trica mais cr\u00edtica e aplique as corre\u00e7\u00f5es apresentadas aqui, uma a uma. Acompanhe os dados de campo por 28 dias e repita o ciclo. Cada melhoria incremental se acumula em uma experi\u00eancia de usu\u00e1rio mais r\u00e1pida e em uma vantagem competitiva nos resultados de busca.<\/p>\n<h3>Ferramentas de monitoramento em tempo real<\/h3>\n<p>O CrUX Report API fornece dados mensais, mas n\u00e3o alerta sobre regress\u00f5es no mesmo dia. Para monitoramento cont\u00ednuo, ferramentas como Cloudflare Web Analytics, DebugBear e SpeedCurve disparam alertas quando o LCP, INP ou CLS ultrapassam limites definidos. Em projetos que administramos, configuramos alertas separados para cada m\u00e9trica: o INP \u00e9 o mais sens\u00edvel, ent\u00e3o o limite de alerta \u00e9 180 ms (antes de chegar em 200 ms). O LCP recebe alerta em 2,3 segundos. O CLS dispara em 0,08. Isso d\u00e1 tempo de corrigir antes que o Search Console marque o site como &#8220;Ruim&#8221;.<\/p>\n<h3>Dashboards personalizados com dados reais<\/h3>\n<p>Uma pr\u00e1tica que recomendamos \u00e9 montar um dashboard no Google Looker Studio conectado ao CrUX via BigQuery. Voc\u00ea pode segmentar os dados por pa\u00eds, dispositivo e tipo de p\u00e1gina. Em um cliente com tr\u00e1fego internacional, descobrimos que o INP era 30% pior em dispositivos m\u00f3veis na \u00cdndia comparado ao Brasil. O motivo era o tempo de resposta do servidor de terceiros de an\u00fancios, que tinha data centers distantes. Mudamos a geolocaliza\u00e7\u00e3o das requisi\u00e7\u00f5es e o INP melhorou 40% no mercado indiano. Sem o dashboard segmentado, esse gargalo nunca seria identificado.<\/p>\n<h2>Integra\u00e7\u00e3o de Core Web Vitals no processo de desenvolvimento<\/h2>\n<p>A abordagem mais sustent\u00e1vel \u00e9 incorporar as m\u00e9tricas no pipeline de CI\/CD. Toda vez que um desenvolvedor faz um deploy, as m\u00e9tricas de laborat\u00f3rio devem ser validadas automaticamente. Ferramentas como Lighthouse CI ou Web Vitals API nos testes de integra\u00e7\u00e3o cont\u00ednua podem reprovar um build se o LCP ultrapassar 2,5 segundos ou o CLS superar 0,10.<\/p>\n<h3>Checklist de revis\u00e3o de c\u00f3digo espec\u00edfico para CWV<\/h3>\n<ul>\n<li>Toda imagem adicionada deve ter <code>width<\/code> e <code>height<\/code> expl\u00edcitos. Sem exce\u00e7\u00f5es.<\/li>\n<li>Qualquer script de terceiro precisa ser auditado quanto ao impacto em INP e LCP antes da inclus\u00e3o.<\/li>\n<li>Pop-ups e modais devem usar <code>position: fixed<\/code> ou <code>position: absolute<\/code> com container dimensionado.<\/li>\n<li>Fontes web devem ser servidas com <code>font-display: swap<\/code> e em formato WOFF2.<\/li>\n<li>An\u00fancios e embeds din\u00e2micos precisam de espa\u00e7os reservados com altura e largura definidas.<\/li>\n<\/ul>\n<p>Esse checklist parece simples, mas em projetos com dezenas de desenvolvedores e sprints quinzenais, ele evita que regress\u00f5es cheguem \u00e0 produ\u00e7\u00e3o. Depois de implantar esse processo em um marketplace com 200 mil produtos, o percentual de p\u00e1ginas com CWV &#8220;Bom&#8221; no Search Console subiu de 34% para 89% em tr\u00eas meses.<\/p>\n<h2>Core Web Vitals e SEO local: o que muda<\/h2>\n<p>Sites com foco em SEO local tamb\u00e9m precisam de aten\u00e7\u00e3o. O que observamos em cl\u00ednicas, restaurantes e escrit\u00f3rios de advocacia \u00e9 que as p\u00e1ginas de contato e de servi\u00e7o costumam ter LCP alto por causa de embeds de mapas (Google Maps) e formul\u00e1rios de agendamento pesados. A dica aqui \u00e9 carregar o mapa apenas quando o usu\u00e1rio rolar at\u00e9 ele ou clicar em um bot\u00e3o &#8220;Ver no mapa&#8221;. O mesmo vale para widgets de redes sociais que puxam feeds. Eles atrasam o LCP e geram CLS. Substitua por links est\u00e1ticos para o perfil da rede social.<\/p>\n<h2>Recursos para aprofundamento<\/h2>\n<p>O ecossistema de Core Web Vitals evolui r\u00e1pido. O Google publica atualiza\u00e7\u00f5es frequentes no blog de desenvolvedores do Chrome. Al\u00e9m disso, o <a href=\"https:\/\/web.dev\/explore\/learn-core-web-vitals\">web.dev<\/a> tem guias pr\u00e1ticos e estudos de caso. O grupo de discuss\u00e3o <a href=\"https:\/\/discuss.httparchive.org\/\">HTTP Archive<\/a> tamb\u00e9m publica an\u00e1lises de tend\u00eancias que ajudam a entender como o mercado est\u00e1 se adaptando.<\/p>\n<h2>Pr\u00f3ximos passos<\/h2>\n<p>O trabalho nunca termina, mas voc\u00ea j\u00e1 sabe por onde come\u00e7ar. Abra o Search Console, veja quantas URLs est\u00e3o no grupo &#8220;Ruim&#8221;, escolha a m\u00e9trica mais cr\u00edtica e aplique as corre\u00e7\u00f5es apresentadas aqui, uma a uma. Acompanhe os dados de campo por 28 dias e repita o ciclo. Cada melhoria incremental se acumula em uma experi\u00eancia de usu\u00e1rio mais r\u00e1pida e em uma vantagem competitiva nos resultados de busca.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Core Web Vitals s\u00e3o tr\u00eas m\u00e9tricas que o Google usa para avaliar a experi\u00eancia do usu\u00e1rio em uma p\u00e1gina: Largest Contentful Paint (LCP), Interaction to Next Paint (INP) e Cumulat&#8230;<\/p>\n","protected":false},"author":1,"featured_media":13760,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[10,1],"tags":[],"class_list":["post-13759","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sem-categoria","category-uncategorized"],"acf":[],"_links":{"self":[{"href":"https:\/\/tsoden.ai\/pt-pt\/wp-json\/wp\/v2\/posts\/13759","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tsoden.ai\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tsoden.ai\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tsoden.ai\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tsoden.ai\/pt-pt\/wp-json\/wp\/v2\/comments?post=13759"}],"version-history":[{"count":1,"href":"https:\/\/tsoden.ai\/pt-pt\/wp-json\/wp\/v2\/posts\/13759\/revisions"}],"predecessor-version":[{"id":13765,"href":"https:\/\/tsoden.ai\/pt-pt\/wp-json\/wp\/v2\/posts\/13759\/revisions\/13765"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tsoden.ai\/pt-pt\/wp-json\/wp\/v2\/media\/13760"}],"wp:attachment":[{"href":"https:\/\/tsoden.ai\/pt-pt\/wp-json\/wp\/v2\/media?parent=13759"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tsoden.ai\/pt-pt\/wp-json\/wp\/v2\/categories?post=13759"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tsoden.ai\/pt-pt\/wp-json\/wp\/v2\/tags?post=13759"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}