Core Web Vitals: guia completo 2026

Como interpretar LCP, INP e CLS com dados de campo, identificar a camada responsável e melhorar a experiência do usuário sem prometer ranqueamento.

Core Web Vitals (CWV) são o conjunto de métricas do Google que medem a experiência real do usuário: velocidade de carregamento, capacidade de resposta da interface e estabilidade visual. Desde maio de 2021 fazem parte da Experiência da Página e entram no ranqueamento.

As três métricas são avaliadas por URL: ótimos resultados na home não ajudam as páginas de produto. O Google obtém os dados do Chrome UX Report (usuários reais), e não de simulações de laboratório.

As três métricas dos Core Web Vitals e suas faixas verdes. Uma página é considerada boa quando 75% dos usuários reais ficam na faixa verde.
O Google avalia os CWV no limiar p75, ou seja, no 75º percentil. Uma página é “boa” quando 75% dos usuários reais experimentam a métrica na faixa verde. Ferramentas de laboratório, como o Lighthouse, mostram um dispositivo mediano: servem para diagnóstico, não para a avaliação final.

O que são Core Web Vitals

≤ 2,5 s

LCP — bom

Maior elemento renderizado

≤ 200 ms

INP — bom

Interface respondeu à interação

≤ 0,1

CLS — bom

Deslocamento mínimo de layout

75%

Limite de avaliação

Parcela de usuários na faixa verde

História: do FID ao INP

O Google apresentou os Core Web Vitals em 2020 com três métricas: LCP, FID (First Input Delay) e CLS. O FID media o atraso do primeiro toque. Era útil, mas cobria apenas uma fração da interatividade da página.

maio de 2020Core Web Vitals anunciados

O Google apresenta três métricas: LCP, FID e CLS. As ferramentas começam a oferecer suporte aos novos sinais.

junho de 2021Atualização de Experiência da Página

Os CWV entram oficialmente no algoritmo de ranqueamento. A implantação termina em agosto de 2021.

março de 2024FID → INP

O INP (Interaction to Next Paint) substitui o First Input Delay. O INP considera todas as interações da sessão, e não apenas a primeira.

2025–2026INP na prática

Sites com muito JavaScript (SPAs, e-commerce, filtros) sentem a pressão do INP. A otimização de Long Tasks vira prioridade.

LCP — Largest Contentful Paint

O LCP registra o momento em que o maior bloco visível com conteúdo da página termina de ser pintado. Normalmente é uma imagem de destaque, a capa de um artigo ou um H1 grande.

Valor de LCPClassificaçãoAção
≤ 2,5 sBomManter e acompanhar no GSC
2,5 – 4,0 sPrecisa melhorarOtimizar imagens e reduzir o TTFB
> 4,0 sRuimPrioridade máxima, auditar imediatamente

Causas comuns de LCP lento

  • TTFB lento (servidor, CDN, sem cache) — responde por até 40% do tempo do LCP
  • Imagem de destaque sem prioridade: falta fetchpriority="high"
  • Imagem de destaque sem preload (<link rel="preload">)
  • CSS e JS que bloqueiam a renderização atrasam a primeira pintura
  • Imagens grandes demais: sem WebP/AVIF e sem srcset
  • Elemento LCP depende de renderização via JS (SSR do React ainda não concluído no momento do LCP)
Exemplo de priorização do recurso LCP:
html
<!-- Prioritise the LCP image -->
<link rel="preload" as="image" href="/hero.webp" fetchpriority="high" />

<img
  src="/hero.webp"
  alt="Hero"
  fetchpriority="high"
  loading="eager"
  decoding="async"
  width="1280"
  height="720"
/>
Não use loading="lazy" em imagens de destaque: o navegador adia o carregamento e o LCP aumenta. Use lazy apenas em imagens abaixo da dobra.

INP — Interaction to Next Paint

O INP mede o atraso entre qualquer interação do usuário (clique, tecla, toque) e a próxima pintura visual da página. Diferente do FID, o INP acompanha todas as interações da sessão e usa o pior caso, com remoção de outliers.

Anatomia do INP

INP = atraso de entrada + tempo de processamento + atraso de apresentação

Atraso de entrada (espera na fila)até 50 ms
Tempo de processamento (handler do JS)até 100 ms
Atraso de apresentação (renderização + pintura)até 50 ms

O que prejudica o INP

  • Long Tasks acima de 50 ms bloqueiam a thread principal: o navegador não consegue processar a entrada
  • Handlers de evento pesados: setState síncrono no React e atualizações maciças do DOM
  • Falta de scheduler.yield() ou setTimeout(0) para quebrar as Long Tasks
  • Scripts de terceiros (chat, anúncios, analytics) ocupam a thread principal
  • Animações feitas em JavaScript em vez de transform/opacity em CSS
Exemplo de divisão de uma Long Task com o scheduler:
javascript
// Breaking up a Long Task with scheduler.yield()
async function processLargeList(items) {
  for (let i = 0; i < items.length; i++) {
    processItem(items[i]);
    // Yield to the main thread every 50 items
    if (i % 50 === 0) {
      await scheduler.yield();
    }
  }
}
scheduler.yield() é uma alternativa moderna ao setTimeout(0). O navegador devolve o controle, processa a entrada do usuário e depois retoma a tarefa. Tem suporte no Chrome 115+; para os demais navegadores, use um polyfill com setTimeout.

CLS — Cumulative Layout Shift

O CLS é uma métrica sem unidade que descreve o deslocamento inesperado total dos elementos da página. Fórmula: fração de impacto × fração de distância. Deslocar um botão que foi pressionado não conta: só entram na conta os elementos que se movem sem ação do usuário.

Valor de CLSClassificaçãoCausa típica
≤ 0,1BomEspaço reservado para todos os elementos
0,1 – 0,25Precisa melhorarFontes sem font-display: swap, banners
> 0,25RuimImagens sem dimensões, inserções dinâmicas

Causas comuns de CLS

  • Imagens sem os atributos width e height: o navegador não sabe o tamanho antes do carregamento
  • Fontes web sem font-display: optional ou swap: o FOUT desloca o texto
  • Banners e avisos de cookies inseridos dinamicamente no topo da página
  • Animações CSS que alteram top/left/margin em vez de transform
  • Anúncios sem espaço reservado (min-height no contêiner)
Exemplo de reserva de espaço para evitar CLS:
css
/* Reserve space for an ad slot */
.ad-container {
  min-height: 250px;
  width: 100%;
}

/* Animation without CLS: transform and opacity only */
.card:hover {
  transform: translateY(-4px);
  /* Wrong: margin-top: -4px — this shifts layout */
}

Impacto no ranqueamento

O Google confirmou: os CWV são um dos sinais da Experiência da Página que participam do ranqueamento. Mas funcionam como desempate, não como fator principal. Uma página com ótimo conteúdo e CWV ruins supera uma página com CWV ótimos e conteúdo fraco.

O efeito real: sites na faixa verde têm taxas de rejeição menores e aparecem no relatório de Experiência da Página do Google Search Console. Teste rápido: se um concorrente com conteúdo parecido está à sua frente, verifique os CWV dele no PageSpeed Insights.

O efeito indireto pesa mais: páginas rápidas reduzem a taxa de rejeição e aumentam a profundidade de sessão e a conversão. O argumento de negócio para os CWV é mais forte que o argumento de SEO. A Amazon constatou que +100 ms no LCP equivalem a -1% de receita.

Como medir os Core Web Vitals

Há dois tipos de dados: dados de laboratório (simulação — Lighthouse, WebPageTest) e dados de campo (usuários reais — CrUX, GSC). O Google ranqueia com base nos dados de campo. O laboratório serve para o diagnóstico.

TipoFerramentaO que mostraCaso de uso
CampoGoogle Search ConsoleCWV de todas as URLs do site (p75)Priorizar páginas com problemas
CampoPainel do CrUX (Looker)Tendências da janela de 28 diasAcompanhar o progresso ao longo do tempo
LaboratórioPageSpeed InsightsLCP/INP/CLS + recomendaçõesDiagnosticar uma URL específica
LaboratórioLighthouse (DevTools)Waterfall detalhado, traceAnálise aprofundada da causa-raiz
LaboratórioWebPageTestGravação em vídeo, filmstripComparação antes/depois
O PageSpeed Insights mostra os dois tipos de dados em uma só página: dados de campo (CrUX) no topo e dados de laboratório (Lighthouse) abaixo. Use os dados de campo para avaliar a situação e os de laboratório para encontrar as causas.

Ferramentas de diagnóstico

FerramentaGratuitaLCPINP
Google Search ConsoleSim✓✓
PageSpeed InsightsSim✓✓
Chrome DevToolsSim✓✓
Lighthouse CISim✓✓
WebPageTestSim (com limites)✓✓
SpeedCurvePago✓✓
Sentry (SDK web-vitals)Freemium✓✓
CLS e dados de campo nas mesmas ferramentas:
FerramentaCLSDados de campo
Google Search Console✓✓
PageSpeed Insights✓✓ (CrUX)
Chrome DevTools✓—
Lighthouse CI✓—
WebPageTest✓—
SpeedCurve✓✓
Sentry (SDK web-vitals)✓✓
Para monitoramento em produção, adicione a biblioteca JS web-vitals do Google. Ela coleta os CWV reais e os envia para a sua plataforma de analytics (GA4, Sentry, DataDog).
javascript
// web-vitals v4 — collect real CWV
import { onLCP, onINP, onCLS } from 'web-vitals';

function sendToAnalytics({ name, value, id }) {
  // Send to GA4
  gtag('event', name, {
    value: Math.round(name === 'CLS' ? value * 1000 : value),
    metric_id: id,
    metric_delta: value,
  });
}

onLCP(sendToAnalytics);
onINP(sendToAnalytics);
onCLS(sendToAnalytics);

Checklist de otimização

Valores de limite do Google para LCP, INP e CLS dos Core Web Vitals.

LCP

  • Adicione fetchpriority="high" e remova loading="lazy" da imagem de destaque
  • Adicione <link rel="preload" as="image"> para a imagem de destaque no <head>
  • Converta as imagens para WebP ou AVIF e configure o srcset
  • Reduza o TTFB para ≤ 800 ms: CDN, cache e SSR na edge
  • Remova do <head> os scripts que bloqueiam a renderização (async/defer/module)
  • Defina Cache-Control: max-age=31536000 para os recursos estáticos

INP

  • Analise as Long Tasks em Chrome DevTools → Performance → Main Thread
  • Quebre as tarefas acima de 50 ms com scheduler.yield() ou setTimeout(0)
  • Aplique debounce nos handlers de input / scroll (16–100 ms)
  • Otimize o React: useMemo, useCallback, React.memo e virtualização de listas
  • Mova os scripts de terceiros para Web Workers ou carregue-os depois do LCP
  • Use animações CSS somente com transform e opacity

CLS

  • Defina width e height em todos os elementos <img>: o navegador reserva o espaço
  • Use aspect-ratio em contêineres com dimensões desconhecidas
  • Configure font-display: optional nas fontes críticas
  • Reserve min-height para espaços de anúncios e conteúdo dinâmico
  • Posicione avisos (cookies, banners) na parte inferior da página, e não no topo
  • Verifique o FOUT: fontes sem fallback deslocam o texto no carregamento
Prioridade: comece pelo LCP, que costuma estar no vermelho e tem mais peso na Experiência da Página. Quando o LCP estiver no verde, passe para o INP (crítico em SPAs e páginas interativas) e depois para o CLS.
O que são Core Web Vitals e por que importam para o SEO?
Os Core Web Vitals medem carregamento, capacidade de resposta e estabilidade visual. O Google diz que os sistemas de ranqueamento os usam como parte da experiência da página em sentido amplo, mas uma boa pontuação não garante as primeiras posições: relevância e outros sinais continuam importando.
Como verifico os Core Web Vitals do meu site?
Use o Google Search Console (relatório de Core Web Vitals), o PageSpeed Insights (dados reais do CrUX e dados de laboratório), a aba Performance do Chrome DevTools ou o Lighthouse. Para monitoramento contínuo, integre a biblioteca web-vitals.js e envie os dados ao GA4.
O LCP está acima de 4 segundos. Qual a urgência de corrigir?
Trate como prioridade de experiência do usuário e de diagnóstico. Identifique o elemento LCP, o caminho de entrega dele e o grupo de dispositivos afetado; depois, confirme a mudança nos dados de laboratório e de campo. Não prometa resultado de ranqueamento ou prazo a partir de uma única correção.
Os limites dos Core Web Vitals são iguais para mobile e desktop?
Os limites são os mesmos (LCP ≤ 2,5 s, INP ≤ 200 ms, CLS ≤ 0,1), mas as pontuações são medidas separadamente. O mobile quase sempre tem resultado pior, por causa de CPUs e redes mais lentas. O GSC mostra os dois segmentos: priorize o mobile.
Para e-commerce, o que pesa mais: LCP ou CLS?
O LCP pesa mais para a conversão: um elemento principal lento em uma página de produto ou de landing page reduz vendas diretamente (cerca de −1% de conversão a cada +0,1 s de LCP, segundo dados do Google). O CLS pesa mais para a UX: um botão de compra que se desloca sob o cursor é uma causa direta de abandono. Trabalhe nos dois em paralelo.

Check it with SpiderHead

Free and local: run the audit on your own machine.

Try it