
Core Web Vitals: As Métricas que Determinam o seu Ranking no Google
53% dos usuários abandonam um site que demora mais de 3 segundos para carregar. Mas o Google foi além: desde 2021, os Core Web Vitals são fator oficial de ranking SEO.
O problema? 70% dos sites falham nessas métricas básicas, perdendo posições e conversões todos os dias.
Neste guia técnico completo, você vai dominar cada Core Web Vital, entender como medi-los corretamente e aplicar otimizações que melhoram tanto o seu SEO quanto a experiência do usuário.
Por Que os Core Web Vitals São Críticos para o seu SEO
Os Números que Mudam Tudo
- +32% conversões com LCP abaixo de 2,5s
- -24% taxa de rejeição otimizando CLS
- +15% ranking médio com bons Core Web Vitals
- 2,5x mais probabilidade de aparecer em featured snippets
- 40% mais tempo na página com FID otimizado
O Impacto Real no seu Negócio
CASO REAL - E-commerce:
Antes: LCP 4,2s, CLS 0,25, FID 180ms
Depois: LCP 1,8s, CLS 0,05, FID 45ms
RESULTADOS:
• +67% conversões
• +23% posições médias
• +45% páginas por sessão
• -38% taxa de rejeição
• ROI otimização: 890%
Os 3 Core Web Vitals: Guia Técnico Completo
1. LCP (Largest Contentful Paint): Velocidade de Carregamento Percebida
O que o LCP Realmente Mede?
LCP mede quanto tempo leva para carregar o maior elemento visível na viewport inicial. Não é o carregamento completo da página, mas quando o usuário percebe que a página está pronta.
ELEMENTOS QUE O LCP CONTA:
✅ Imagens <img>
✅ Elementos <image> dentro de SVG
✅ Vídeos (imagem poster)
✅ Elementos com background-image CSS
✅ Blocos de texto
❌ NÃO CONTA:
❌ Elementos fora da viewport inicial
❌ Imagens que requerem interação
❌ SVGs inline sem <image>
Thresholds do LCP
🟢 BOM: ≤ 2,5 segundos
🟡 PRECISA MELHORAR: 2,5s - 4,0s
🔴 RUIM: > 4,0 segundos
OBJETIVO ÓTIMO: < 1,5 segundos
Otimização Técnica do LCP
FASE 1: Identificar o Elemento LCP
// Script para identificar elemento LCP
new PerformanceObserver((entryList) => {
for (const entry of entryList.getEntries()) {
console.log('LCP candidate:', entry.element, entry.startTime);
}
}).observe({type: 'largest-contentful-paint', buffered: true});
FASE 2: Otimizações por Tipo de Elemento
SE LCP FOR IMAGEM:
1. Otimizar formato (WebP/AVIF)
2. Implementar lazy loading correto
3. Preload crítico: <link rel="preload" as="image">
4. CDN + compressão
5. Imagens responsivas com srcset
SE LCP FOR TEXTO:
1. Otimizar fontes (preload, display: swap)
2. Minimizar CSS crítico
3. Eliminar render-blocking resources
4. CSS crítico inline
5. Diferir CSS não crítico
FASE 3: Técnicas Avançadas
<!-- Preload de recursos críticos -->
<link rel="preload" as="image" href="/hero-image.webp" fetchpriority="high">
<link rel="preload" as="font" href="/fonts/main.woff2" type="font/woff2" crossorigin>
<!-- Otimização de imagens críticas -->
<img src="/hero.webp"
fetchpriority="high"
decoding="async"
width="800"
height="600"
alt="Descrição otimizada">
<!-- CSS crítico inline -->
<style>
/* CSS crítico para elemento LCP */
.hero { display: block; width: 100%; height: auto; }
</style>
2. FID (First Input Delay): Interatividade Real
O que o FID Mede?
FID mede o tempo desde quando o usuário faz sua primeira interação (click, tap, pressão de tecla) até quando o navegador consegue responder. É a métrica de interatividade real.
INTERAÇÕES QUE O FID CONTA:
✅ Clicks em links/botões
✅ Taps em elementos tácteis
✅ Pressão de teclas em inputs
✅ Gestos com event handlers customizados
❌ NÃO CONTA:
❌ Scrolling
❌ Zooming
❌ Hover (sem click)
Thresholds do FID
🟢 BOM: ≤ 100 milissegundos
🟡 PRECISA MELHORAR: 100ms - 300ms
🔴 RUIM: > 300 milissegundos
OBJETIVO ÓTIMO: < 50ms
Otimização Técnica do FID
FASE 1: Identificar Bloqueios da Main Thread
// Medir FID real
new PerformanceObserver((entryList) => {
for (const entry of entryList.getEntries()) {
const FID = entry.processingStart - entry.startTime;
console.log('FID:', FID);
}
}).observe({type: 'first-input', buffered: true});
FASE 2: Otimização de JavaScript
TÉCNICAS PRINCIPAIS:
1. Code splitting por rotas
2. Lazy loading de componentes não críticos
3. Web Workers para tarefas pesadas
4. Debounce/throttle em event handlers
5. RequestIdleCallback para tarefas não urgentes
OTIMIZAÇÃO DE BUNDLING:
• Separar vendor chunks
• Imports dinâmicos
• Tree shaking agressivo
• Minificação avançada
• Compressão Gzip/Brotli
FASE 3: Implementação Prática
// Code splitting com imports dinâmicos
const loadHeavyComponent = async () => {
const { HeavyComponent } = await import('./HeavyComponent');
return HeavyComponent;
};
// Web Worker para cálculos pesados
const worker = new Worker('heavy-calculations.js');
worker.postMessage({data: heavyData});
// RequestIdleCallback para tarefas não críticas
requestIdleCallback(() => {
// Analytics, tracking, etc.
initializeNonCriticalFeatures();
});
// Event delegation para melhor performance
document.addEventListener('click', (e) => {
if (e.target.matches('.button')) {
// Lidar com click eficientemente
}
});
3. CLS (Cumulative Layout Shift): Estabilidade Visual
O que o CLS Mede?
CLS mede a estabilidade visual da sua página. Quantifica o quanto os elementos visíveis se movem durante o carregamento, criando uma experiência frustrante para o usuário.
CAUSAS PRINCIPAIS DO CLS:
• Imagens sem dimensões
• Anúncios inseridos dinamicamente
• Fontes que mudam durante o carregamento
• Conteúdo dinâmico sem placeholder
• Elementos CSS sem altura definida
Thresholds do CLS
🟢 BOM: ≤ 0,1
🟡 PRECISA MELHORAR: 0,1 - 0,25
🔴 RUIM: > 0,25
OBJETIVO ÓTIMO: < 0,05
Cálculo Técnico do CLS
// Fórmula CLS
CLS = Impact Fraction × Distance Fraction
// Monitoramento em tempo real
new PerformanceObserver((entryList) => {
for (const entry of entryList.getEntries()) {
if (!entry.hadRecentInput) {
console.log('Layout shift:', entry.value);
}
}
}).observe({type: 'layout-shift', buffered: true});
Otimização Técnica do CLS
FASE 1: Elementos Multimídia
<!-- ❌ Causa CLS -->
<img src="image.jpg" alt="Descrição">
<!-- ✅ Previne CLS -->
<img src="image.jpg"
alt="Descrição"
width="800"
height="600"
style="aspect-ratio: 800/600;">
<!-- ✅ Com CSS moderno -->
<style>
.image-container {
aspect-ratio: 16/9;
background: #f0f0f0;
}
.image-container img {
width: 100%;
height: 100%;
object-fit: cover;
}
</style>
FASE 2: Conteúdo Dinâmico
/* Placeholder para anúncios */
.ad-container {
min-height: 250px;
background: linear-gradient(90deg, #f0f0f0 25%, transparent 37%, #f0f0f0 63%);
background-size: 400% 100%;
animation: loading 1.5s ease-in-out infinite;
}
/* Skeleton screens */
.skeleton {
background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 37%, #f0f0f0 63%);
background-size: 400% 100%;
animation: skeleton-loading 1.5s ease-in-out infinite;
}
@keyframes skeleton-loading {
0% { background-position: 100% 0; }
100% { background-position: -100% 0; }
}
FASE 3: Otimização de Fontes
/* Prevenir layout shifts com fontes */
@font-face {
font-family: 'CustomFont';
src: url('custom-font.woff2') format('woff2');
font-display: fallback; /* ou swap com cuidado */
}
body {
font-family: 'CustomFont', 'Arial', sans-serif;
/* Fallback similar em métricas */
}
/* Size-adjust para matching de fallbacks */
@font-face {
font-family: 'CustomFont-fallback';
src: local('Arial');
size-adjust: 95%;
ascent-override: 95%;
descent-override: 25%;
line-gap-override: 0%;
}
Ferramentas Profissionais de Medição
1. Google PageSpeed Insights (PSI)
VANTAGENS:
• Dados reais de usuários (CrUX)
• Dados de laboratório (Lighthouse)
• Diagnósticos específicos
• Sugestões de otimização
LIMITAÇÕES:
• Apenas URL pública
• Snapshot no tempo
• Sem rastreamento contínuo
Uso Profissional do PSI:
# API para automação
curl "https://www.googleapis.com/pagespeed/insights/v5/runPagespeed?url=https://example.com&key=YOUR_API_KEY&category=performance"
# Parâmetros avançados
&strategy=mobile # ou desktop
&category=performance # ou accessibility, seo, pwa
&locale=pt # idioma do relatório
2. Chrome DevTools (Aba Performance)
WORKFLOW PROFISSIONAL:
1. Abrir DevTools → Performance
2. Configurar condições:
• CPU: 4x slowdown
• Network: Fast 3G
• Clear cache
3. Gravar interação real
4. Analisar timeline:
• First Paint (FP)
• First Contentful Paint (FCP)
• Largest Contentful Paint (LCP)
• Layout shifts
3. Extensão Web Vitals
INSTALAÇÃO:
Chrome Web Store → "Web Vitals"
CARACTERÍSTICAS:
• Medição em tempo real
• Overlay na página
• Histórico de métricas
• Comparação temporal
4. Search Console (Relatório Core Web Vitals)
VANTAGENS ÚNICAS:
• Dados reais de usuários
• Agrupamento por tipo de página
• Tendências temporais
• Issues específicos por URL
INTERPRETAÇÃO:
• URLs ruins: > 25% usuários experiência ruim
• URLs precisam melhorar: experiência mista
• URLs boas: > 75% usuários boa experiência
Técnicas Avançadas de Otimização
1. Critical Path Optimization
<!-- CSS crítico inline -->
<style>
/* Apenas estilos above-the-fold */
.header, .hero, .main-content { /* estilos críticos */ }
</style>
<!-- CSS não crítico diferido -->
<link rel="preload" href="/styles/non-critical.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="/styles/non-critical.css"></noscript>
2. Resource Hints Estratégicos
<!-- DNS prefetch para domínios externos -->
<link rel="dns-prefetch" href="//fonts.googleapis.com">
<link rel="dns-prefetch" href="//www.google-analytics.com">
<!-- Preconnect para recursos críticos -->
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<!-- Prefetch para navegação futura -->
<link rel="prefetch" href="/next-page.html">
<!-- Preload para recursos críticos -->
<link rel="preload" href="/critical-image.webp" as="image">
<link rel="preload" href="/main.js" as="script">
3. Otimização de Imagens Avançada
<!-- Imagens responsivas otimizadas -->
<picture>
<source media="(min-width: 800px)"
srcset="/large.avif 1x, /large-2x.avif 2x"
type="image/avif">
<source media="(min-width: 800px)"
srcset="/large.webp 1x, /large-2x.webp 2x"
type="image/webp">
<source media="(min-width: 400px)"
srcset="/medium.avif 1x, /medium-2x.avif 2x"
type="image/avif">
<source media="(min-width: 400px)"
srcset="/medium.webp 1x, /medium-2x.webp 2x"
type="image/webp">
<img src="/medium.jpg"
alt="Descrição otimizada"
width="800"
height="600"
loading="lazy"
decoding="async">
</picture>
4. Service Worker para Performance
// service-worker.js
const CACHE_NAME = 'v1';
const CRITICAL_RESOURCES = [
'/',
'/styles/critical.css',
'/js/main.js',
'/images/hero.webp'
];
// Precache recursos críticos
self.addEventListener('install', event => {
event.waitUntil(
caches.open(CACHE_NAME)
.then(cache => cache.addAll(CRITICAL_RESOURCES))
);
});
// Estratégia Cache First para assets
self.addEventListener('fetch', event => {
if (event.request.destination === 'image') {
event.respondWith(
caches.match(event.request)
.then(response => response || fetch(event.request))
);
}
});
Erros Críticos que Você Deve Evitar
Os 10 Erros Mais Caros
-
Medir Apenas em Laboratório (-30% precisão)
❌ Usar apenas Lighthouse ✅ Combinar lab data + field data (RUM)
-
Não Definir Dimensões de Imagens (+0,15 CLS)
❌ <img src="image.jpg" alt="desc"> ✅ <img src="image.jpg" width="800" height="600" alt="desc">
-
Carregar JavaScript Síncrono (+200ms FID)
❌ <script src="heavy.js"></script> ✅ <script src="heavy.js" defer></script>
-
Carregamento de Fontes Sem Otimizar (+0,2 CLS, +800ms LCP)
❌ @import url('https://fonts.googleapis.com/css?family=Font'); ✅ <link rel="preconnect" href="https://fonts.gstatic.com"> <link rel="preload" href="font.woff2" as="font" crossorigin>
-
Scripts de Terceiros Sem Controle (+500ms FID)
❌ Carregar todos os scripts no <head> ✅ Lazy load, async e defer estratégicos
-
CSS Render-Blocking (+1s LCP)
❌ <link rel="stylesheet" href="all-styles.css"> ✅ CSS crítico inline + preload resto
-
Imagens Sem Otimizar (+2s LCP)
❌ JPEG 2MB sem compressão ✅ WebP/AVIF + compressão + responsivo
-
Não Usar CDN (+40% LCP)
❌ Servir assets da origem ✅ CDN global + HTTP/2 + Brotli
-
Anúncios Sem Placeholder (+0,25 CLS)
❌ Inserção dinâmica sem reservar espaço ✅ Containers fixos + lazy loading
-
Não Monitorar Continuamente (-50% otimização)
❌ Otimizar uma vez e esquecer ✅ RUM + alertas + otimização contínua
Roadmap de Implementação
Semana 1: Diagnóstico e Setup
DIA 1-2: AUDITORIA COMPLETA
□ PageSpeed Insights (mobile + desktop)
□ Análise Chrome DevTools
□ Revisão Search Console
□ Identificar elementos LCP
DIA 3-4: SETUP MONITORAMENTO
□ Instalação extensão Web Vitals
□ Implementação RUM
□ Definição budget performance
□ Documentação métricas baseline
DIA 5-7: PLANEJAMENTO
□ Priorizar otimizações por impacto
□ Recursos necessários
□ Timeline realista
□ Definição métricas de sucesso
Semana 2-3: Quick Wins
OTIMIZAÇÕES RÁPIDAS:
□ Dimensões de imagens adicionadas
□ JavaScript defer/async
□ CSS crítico inline
□ Implementação preload fontes
□ Comprimir imagens para WebP
VALIDAÇÃO:
□ Teste em staging
□ Comparação antes/depois
□ Teste múltiplos dispositivos
□ Medição impacto performance
Semana 4-6: Otimizações Avançadas
TÉCNICAS AVANÇADAS:
□ Implementação code splitting
□ Cache service worker
□ Otimização avançada de imagens
□ Otimização scripts terceiros
□ Implementação CDN
MONITORAMENTO:
□ Revisões performance semanais
□ Correlação experiência usuário
□ Impacto métricas negócio
□ Otimização contínua
Conclusão: Core Web Vitals como Vantagem Competitiva
Os Core Web Vitals não são apenas métricas técnicas abstratas. São indicadores diretos da experiência que você oferece aos seus usuários e, portanto, fatores determinantes do seu sucesso online.
A realidade do mercado:
- 90% dos sites ignoram essas métricas
- Google as usa cada vez mais para ranking
- Usuários premiam velocidade com conversões
- Otimização técnica tem ROI mensurável
Sua vantagem competitiva está em:
- Medir corretamente (lab + field data)
- Otimizar sistematicamente (técnico + UX)
- Monitorar continuamente (RUM + alertas)
- Iterar baseado em dados (A/B testing + métricas)
A diferença entre um site rápido e lento não é apenas técnica. É a diferença entre um negócio que cresce e um que estagnou na era da atenção limitada.
Seu próximo passo? Implemente o diagnóstico da Semana 1 hoje mesmo. Meça, otimize, meça novamente. Os Core Web Vitals otimizados são seu ticket de entrada no top 10% de sites que Google e usuários realmente recompensam.
Lembre-se: Os Core Web Vitals são métricas evolutivas. O Google as atualiza e refina constantemente, então sua otimização deve ser um processo contínuo, não uma tarefa única. Foque primeiro em conseguir pontuações “Boas” nas três métricas antes de buscar perfeição em apenas uma. O maior impacto vem da otimização equilibrada de LCP, FID e CLS juntos, não otimizando uma métrica às custas das outras.