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.
O que são Core Web Vitals
LCP — bom
Maior elemento renderizado
INP — bom
Interface respondeu à interação
CLS — bom
Deslocamento mínimo de layout
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.
O Google apresenta três métricas: LCP, FID e CLS. As ferramentas começam a oferecer suporte aos novos sinais.
Os CWV entram oficialmente no algoritmo de ranqueamento. A implantação termina em agosto de 2021.
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.
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 LCP | Classificação | Ação |
|---|---|---|
| ≤ 2,5 s | Bom | Manter e acompanhar no GSC |
| 2,5 – 4,0 s | Precisa melhorar | Otimizar imagens e reduzir o TTFB |
| > 4,0 s | Ruim | Prioridade 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)
<!-- 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"
/>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.
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()ousetTimeout(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/opacityem CSS
// 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 CLS | Classificação | Causa típica |
|---|---|---|
| ≤ 0,1 | Bom | Espaço reservado para todos os elementos |
| 0,1 – 0,25 | Precisa melhorar | Fontes sem font-display: swap, banners |
| > 0,25 | Ruim | Imagens sem dimensões, inserções dinâmicas |
Causas comuns de CLS
- Imagens sem os atributos
widtheheight: o navegador não sabe o tamanho antes do carregamento - Fontes web sem
font-display: optionalouswap: o FOUT desloca o texto - Banners e avisos de cookies inseridos dinamicamente no topo da página
- Animações CSS que alteram
top/left/marginem vez detransform - Anúncios sem espaço reservado (
min-heightno contêiner)
/* 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 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.
| Tipo | Ferramenta | O que mostra | Caso de uso |
|---|---|---|---|
| Campo | Google Search Console | CWV de todas as URLs do site (p75) | Priorizar páginas com problemas |
| Campo | Painel do CrUX (Looker) | Tendências da janela de 28 dias | Acompanhar o progresso ao longo do tempo |
| Laboratório | PageSpeed Insights | LCP/INP/CLS + recomendações | Diagnosticar uma URL específica |
| Laboratório | Lighthouse (DevTools) | Waterfall detalhado, trace | Análise aprofundada da causa-raiz |
| Laboratório | WebPageTest | Gravação em vídeo, filmstrip | Comparação antes/depois |
Ferramentas de diagnóstico
| Ferramenta | Gratuita | LCP | INP |
|---|---|---|---|
| Google Search Console | Sim | ✓ | ✓ |
| PageSpeed Insights | Sim | ✓ | ✓ |
| Chrome DevTools | Sim | ✓ | ✓ |
| Lighthouse CI | Sim | ✓ | ✓ |
| WebPageTest | Sim (com limites) | ✓ | ✓ |
| SpeedCurve | Pago | ✓ | ✓ |
| Sentry (SDK web-vitals) | Freemium | ✓ | ✓ |
| Ferramenta | CLS | Dados de campo |
|---|---|---|
| Google Search Console | ✓ | ✓ |
| PageSpeed Insights | ✓ | ✓ (CrUX) |
| Chrome DevTools | ✓ | — |
| Lighthouse CI | ✓ | — |
| WebPageTest | ✓ | — |
| SpeedCurve | ✓ | ✓ |
| Sentry (SDK web-vitals) | ✓ | ✓ |
// 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
LCP
- Adicione
fetchpriority="high"e removaloading="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=31536000para 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()ousetTimeout(0) - Aplique debounce nos handlers de
input/scroll(16–100 ms) - Otimize o React:
useMemo,useCallback,React.memoe virtualização de listas - Mova os scripts de terceiros para Web Workers ou carregue-os depois do LCP
- Use animações CSS somente com
transformeopacity
CLS
- Defina
widtheheightem todos os elementos<img>: o navegador reserva o espaço - Use
aspect-ratioem contêineres com dimensões desconhecidas - Configure
font-display: optionalnas fontes críticas - Reserve
min-heightpara 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
O que são Core Web Vitals e por que importam para o SEO?
Como verifico os Core Web Vitals do meu site?
O LCP está acima de 4 segundos. Qual a urgência de corrigir?
Os limites dos Core Web Vitals são iguais para mobile e desktop?
Para e-commerce, o que pesa mais: LCP ou CLS?
Check it with SpiderHead
Free and local: run the audit on your own machine.



