Telles Logo
Pular para o conteúdo
Ver todos os artigos
out 24, 2023
·
views
·
likes
·
10 min

Core Web Vitals: LCP, INP e CLS na Prática

Entenda como cada Core Web Vital é calculado, quais são os thresholds, o que os move e como identificar e corrigir problemas reais.

Os Core Web Vitals são três métricas definidas pelo Google para medir a qualidade real da experiência do usuário. Fazem parte do Page Experience signal e influenciam o ranking no Search desde 2021.

Não confunda "boas métricas no Lighthouse" com "bons Core Web Vitals". O Lighthouse roda em condições de laboratório controladas. Os CWV que o Google usa para ranking vêm do Chrome User Experience Report (CrUX) — dados reais de usuários reais, em dispositivos e conexões reais.

As três métricas medem dimensões diferentes da experiência:

⏱️LCP — Velocidade

Largest Contentful Paint: quando o maior elemento visível terminou de carregar. É a métrica mais próxima de "quando a página parece pronta".

👆INP — Responsividade

Interaction to Next Paint: quanto tempo entre uma interação do usuário e o próximo frame pintado refletindo essa interação.

📐CLS — Estabilidade

Cumulative Layout Shift: quanto o conteúdo "pula" durante o carregamento. Botões que se movem, texto que se desloca.


LCP — Largest Contentful Paint

LCP mede quando o maior elemento de conteúdo visível na viewport terminou de renderizar.

🖼️O que é candidato a LCP

Imagens (img, background-image, image em SVG), elementos video (via poster) e blocos de texto (headings, parágrafos). O browser rastreia o maior e atualiza conforme novos elementos aparecem.

🛑Quando o LCP para de ser rastreado

Na primeira interação do usuário (scroll, clique, teclado). O valor final é o último elemento que apareceu antes dessa interação — elementos que chegam depois não afetam o LCP.

  • ≤ 2.5s — Bom

    75% dos usuários precisam estar nessa faixa para o site ter CWV verde no Search Console.

  • 2.5s – 4.0s — Precisa melhorar

    Experiência degradada. Usuários mobile em conexões lentas provavelmente estão nessa faixa.

  • > 4.0s — Ruim

    Impacto negativo em ranking, bounce rate e conversão. Ação urgente necessária.

O que move o LCP

O browser precisa encontrar a imagem LCP o mais cedo possível no HTML. Se for injetada via JS ou CSS, só é descoberta após esses arquivos serem baixados e executados — tarde demais.

<!-- ✅ Descoberta imediata — está no HTML -->
<img src="/hero.jpg" fetchpriority="high" alt="Hero" />
 
<!-- ❌ Descoberta tardia — só aparece após JS executar -->
<div id="hero"></div>
<script>document.getElementById('hero').innerHTML = '<img src="/hero.jpg">'</script>

INP — Interaction to Next Paint

INP mede a responsividade da página — quanto tempo entre uma interação do usuário e o próximo frame pintado refletindo essa interação. Em março de 2024 substituiu o FID como Core Web Vital. A diferença fundamental: o FID media apenas o delay do primeiro input. O INP mede todas as interações e reporta o percentil 98.

  • ≤ 200ms — Bom

    Interação percebida como imediata. O usuário não sente latência.

  • 200ms – 500ms — Precisa melhorar

    Latência perceptível. Usuários em dispositivos lentos ou com muitas interações simultâneas sentem a demora.

  • > 500ms — Ruim

    Página percebida como travada. Alta correlação com abandono de formulários e cliques duplos acidentais.

Como o INP é calculado

Cada interação tem três fases que somadas formam o INP:

Input delay

Tempo entre o evento físico e o início do event handler. Causado por long tasks bloqueando o main thread quando o usuário interage.

⚙️Processing time

Tempo de execução do event handler em si. Handlers pesados com muita lógica ou manipulação de DOM contribuem aqui.

🎨Presentation delay

Tempo do browser para calcular layout, estilo e pintar o frame após o handler terminar.

O que causa INP alto

Uma long task é qualquer tarefa que bloqueia o main thread por mais de 50ms. Durante ela, o browser não consegue processar eventos de input — o clique do usuário fica na fila.

// ❌ Long task — bloqueia o main thread
function processLargeList(items) {
  return items.map(item => heavyComputation(item));
}
 
// ✅ Yield para o browser entre chunks
async function processLargeList(items) {
  const results = [];
  for (const item of items) {
    results.push(heavyComputation(item));
    await scheduler.yield(); // deixa o browser respirar
  }
  return results;
}

CLS — Cumulative Layout Shift

CLS mede a estabilidade visual — quanto o conteúdo "pula" enquanto carrega. Um botão que se move quando o usuário está prestes a clicar, texto que se desloca quando uma imagem carrega sem dimensão definida.

  • ≤ 0.1 — Bom

    Layout estável. Usuário não percebe movimento inesperado de conteúdo.

  • 0.1 – 0.25 — Precisa melhorar

    Shifts perceptíveis. Botões e links se movem o suficiente para causar cliques errados.

  • > 0.25 — Ruim

    Layout instável. Alta probabilidade de cliques acidentais e experiência frustrante.

Causas mais comuns

  • Imagens sem dimensão definida

    O browser não sabe o tamanho antes de baixar. Quando a imagem carrega, empurra todo o conteúdo abaixo. Fix: sempre defina width e height — o browser calcula o aspect-ratio automaticamente e reserva o espaço.

  • Anúncios e embeds sem espaço reservado

    Slots de anúncios que aparecem do nada são os maiores contribuintes de CLS em produção. Reserve o espaço com min-height antes do anúncio carregar.

  • Fontes web causando FOUT

    Quando a fonte web substitui o fallback, o tamanho do texto pode mudar e causar shift. Use size-adjust no font-face do fallback para aproximar as métricas tipográficas.

  • Conteúdo dinâmico acima de conteúdo existente

    Banners de cookies, toasts e notificações que aparecem no topo empurram conteúdo para baixo. Use posição fixa ou reserve o espaço antecipadamente.

  • Animações nas propriedades erradas

    Animar top, left, margin ou height causa reflow e pode gerar CLS. Use transform: translate() — não afeta o layout, roda só no compositor.


Teste seus valores

Agora que você conhece as três métricas e seus thresholds, simule os valores reais do seu site. Arraste cada slider e veja instantaneamente o diagnóstico — com os mesmos critérios que o Google usa para Page Experience.

Como obter seus valores reais

Acesse o PageSpeed Insights para o seu domínio. Na seção "Descubra o que seus usuários reais estão experienciando", você encontra o p75 de LCP, INP e CLS dos últimos 28 dias — esses são os valores que o Google usa para ranking.

Verificador de Core Web Vitals

0 de 3 no verde
LCP⚠️ Precisa melhorar

Largest Contentful Paint

3.5s
02.5s bom4.0s6.0s
INP⚠️ Precisa melhorar

Interaction to Next Paint

320ms
0200ms bom500ms1000ms
CLS⚠️ Precisa melhorar

Cumulative Layout Shift

0.18
00.10 bom0.250.50

Arraste os sliders para simular seus valores reais


Como debugar Core Web Vitals

Identificou um problema no checker acima? Use essas ferramentas para encontrar a causa raiz:

Abra o DevTools e acesse a aba Performance. Grave uma sessão e procure por:

Long tasks marcadas em vermelho — impacto direto no INP. Layout shifts marcados na linha "Experience" — impacto direto no CLS. O LCP candidate é identificado automaticamente na linha "Timings".

O painel Performance Insights (More tools) oferece análise automática com sugestões contextuais — melhor ponto de entrada para quem está começando.


No próximo artigo, exploramos Entrega & Rendering — CDN, estratégias de render (SSR, SSG, ISR, Streaming), lazy loading, resource hints e compressão.

As minhas notas

Selecione um trecho e use Destacar no menu (somente neste aparelho).

Artigos relacionados