
Core Web Vitals: Las Métricas que Determinan tu Ranking en Google
El 53% de los usuarios abandona una web que tarda más de 3 segundos en cargar. Pero Google fue más allá: desde 2021, las Core Web Vitals son factor oficial de ranking SEO.
¿El problema? El 70% de las webs suspenden en estas métricas básicas, perdiendo posiciones y conversiones todos los días.
En esta guía técnica completa, vas a dominar cada Core Web Vital, entender cómo medirlas correctamente y aplicar optimizaciones que mejoren tanto tu SEO como tu experiencia de usuario.
Por Qué las Core Web Vitals Son Críticas para tu SEO
Los Números que Cambian Todo
- +32% conversiones con LCP bajo 2.5s
- -24% bounce rate optimizando CLS
- +15% ranking promedio con buenas Core Web Vitals
- 2.5x más probabilidad de aparecer en featured snippets
- 40% más tiempo en página con FID optimizado
El Impacto Real en tu Negocio
CASO REAL - E-commerce:
Antes: LCP 4.2s, CLS 0.25, FID 180ms
Después: LCP 1.8s, CLS 0.05, FID 45ms
RESULTADOS:
• +67% conversiones
• +23% posiciones promedio
• +45% páginas por sesión
• -38% tasa de rebote
• ROI optimización: 890%
Las 3 Core Web Vitals: Guía Técnica Completa
1. LCP (Largest Contentful Paint): Velocidad de Carga Percibida
¿Qué Mide LCP Realmente?
LCP mide cuánto tarda en cargar el elemento más grande visible en el viewport inicial. No es la carga completa de la página, sino cuándo el usuario percibe que la página está lista.
ELEMENTOS QUE CUENTA LCP:
✅ Imágenes <img>
✅ Elementos <image> dentro de SVG
✅ Videos (imagen poster)
✅ Elementos con background-image CSS
✅ Bloques de texto
❌ NO CUENTA:
❌ Elementos fuera del viewport inicial
❌ Imágenes que requieren interacción
❌ SVGs inline sin <image>
Umbrales de LCP
🟢 BUENO: ≤ 2.5 segundos
🟡 NECESITA MEJORA: 2.5s - 4.0s
🔴 POBRE: > 4.0 segundos
OBJETIVO ÓPTIMO: < 1.5 segundos
Optimización Técnica de LCP
FASE 1: Identificar el 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: Optimizaciones por Tipo de Elemento
SI LCP ES IMAGEN:
1. Optimizar formato (WebP/AVIF)
2. Implementar lazy loading correcto
3. Preload crítico: <link rel="preload" as="image">
4. CDN + compresión
5. Responsive images con srcset
SI LCP ES TEXTO:
1. Optimizar fuentes (preload, display: swap)
2. Minimizar CSS crítico
3. Eliminar render-blocking resources
4. Inline CSS crítico
5. Diferir CSS no crítico
FASE 3: Técnicas Avanzadas
<!-- 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>
<!-- Optimización de imágenes críticas -->
<img src="/hero.webp"
fetchpriority="high"
decoding="async"
width="800"
height="600"
alt="Descripción optimizada">
<!-- Critical CSS inline -->
<style>
/* CSS crítico para LCP element */
.hero { display: block; width: 100%; height: auto; }
</style>
2. FID (First Input Delay): Interactividad Real
¿Qué Mide FID?
FID mide el tiempo desde que el usuario hace su primera interacción (click, tap, key press) hasta que el navegador puede responder. Es la métrica de interactividad real.
INTERACCIONES QUE CUENTA FID:
✅ Clicks en enlaces/botones
✅ Taps en elementos táctiles
✅ Key presses en inputs
✅ Gestos custom event handlers
❌ NO CUENTA:
❌ Scrolling
❌ Zooming
❌ Hover (sin click)
Umbrales de FID
🟢 BUENO: ≤ 100 milisegundos
🟡 NECESITA MEJORA: 100ms - 300ms
🔴 POBRE: > 300 milisegundos
OBJETIVO ÓPTIMO: < 50ms
Optimización Técnica de FID
FASE 1: Identificar Bloqueos del 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: Optimización de JavaScript
TÉCNICAS PRINCIPALES:
1. Code splitting por rutas
2. Lazy loading de componentes no críticos
3. Web Workers para tareas pesadas
4. Debounce/throttle en event handlers
5. RequestIdleCallback para tareas no urgentes
OPTIMIZACIÓN DE BUNDLING:
• Separar vendor chunks
• Dynamic imports
• Tree shaking agresivo
• Minificación avanzada
• Gzip/Brotli compression
FASE 3: Implementación Práctica
// Code splitting con dynamic imports
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 tareas no críticas
requestIdleCallback(() => {
// Analytics, tracking, etc.
initializeNonCriticalFeatures();
});
// Event delegation para mejor performance
document.addEventListener('click', (e) => {
if (e.target.matches('.button')) {
// Handle click efficiently
}
});
3. CLS (Cumulative Layout Shift): Estabilidad Visual
¿Qué Mide CLS?
CLS mide la estabilidad visual de tu página. Cuantifica cuánto se mueven los elementos visibles durante la carga, creando una experiencia frustrante para el usuario.
CAUSAS PRINCIPALES DE CLS:
• Imágenes sin dimensiones
• Ads que se insertan dinámicamente
• Fuentes que cambian durante la carga
• Contenido dinámico sin placeholder
• Elementos CSS sin height definido
Umbrales de CLS
🟢 BUENO: ≤ 0.1
🟡 NECESITA MEJORA: 0.1 - 0.25
🔴 POBRE: > 0.25
OBJETIVO ÓPTIMO: < 0.05
Cálculo Técnico de CLS
// Fórmula CLS
CLS = Impact Fraction × Distance Fraction
// Monitoreo en tiempo 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});
Optimización Técnica de CLS
FASE 1: Elementos Multimedia
<!-- ❌ Causa CLS -->
<img src="image.jpg" alt="Descripción">
<!-- ✅ Previene CLS -->
<img src="image.jpg"
alt="Descripción"
width="800"
height="600"
style="aspect-ratio: 800/600;">
<!-- ✅ Con CSS moderno -->
<style>
.image-container {
aspect-ratio: 16/9;
background: #f0f0f0;
}
.image-container img {
width: 100%;
height: 100%;
object-fit: cover;
}
</style>
FASE 2: Contenido Dinámico
/* Placeholder para ads */
.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: Optimización de Fuentes
/* Prevenir layout shifts con fuentes */
@font-face {
font-family: 'CustomFont';
src: url('custom-font.woff2') format('woff2');
font-display: fallback; /* o swap con cuidado */
}
body {
font-family: 'CustomFont', 'Arial', sans-serif;
/* Fallback similar en 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%;
}
Herramientas Profesionales de Medición
1. Google PageSpeed Insights (PSI)
VENTAJAS:
• Datos reales de usuarios (CrUX)
• Datos de laboratorio (Lighthouse)
• Diagnósticos específicos
• Sugerencias de optimización
LIMITACIONES:
• Solo URL pública
• Snapshot en el tiempo
• No tracking continuo
Uso Profesional de PSI:
# API para automatización
curl "https://www.googleapis.com/pagespeed/insights/v5/runPagespeed?url=https://example.com&key=YOUR_API_KEY&category=performance"
# Parámetros avanzados
&strategy=mobile # o desktop
&category=performance # o accessibility, seo, pwa
&locale=es # idioma del reporte
2. Chrome DevTools (Performance Tab)
WORKFLOW PROFESIONAL:
1. Abrir DevTools → Performance
2. Configurar condiciones:
• CPU: 4x slowdown
• Network: Fast 3G
• Clear cache
3. Grabar interacción real
4. Analizar timeline:
• First Paint (FP)
• First Contentful Paint (FCP)
• Largest Contentful Paint (LCP)
• Layout shifts
3. Web Vitals Extension
INSTALACIÓN:
Chrome Web Store → "Web Vitals"
CARACTERÍSTICAS:
• Medición en tiempo real
• Overlay en la página
• Historial de métricas
• Comparación temporal
4. Search Console (Core Web Vitals Report)
VENTAJAS ÚNICAS:
• Datos reales de usuarios
• Agrupación por tipo de página
• Tendencias temporales
• Issues específicos por URL
INTERPRETACIÓN:
• URLs pobres: > 25% usuarios experiencia pobre
• URLs que necesitan mejora: experiencia mixta
• URLs buenas: > 75% usuarios experiencia buena
Técnicas Avanzadas de Optimización
1. Critical Path Optimization
<!-- Critical CSS inline -->
<style>
/* Solo estilos above-the-fold */
.header, .hero, .main-content { /* estilos críticos */ }
</style>
<!-- Non-critical CSS 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 dominios 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 navegación 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. Image Optimization Avanzada
<!-- Responsive images optimizadas -->
<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="Descripción optimizada"
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))
);
});
// Estrategia 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))
);
}
});
Errores Críticos que Debes Evitar
Los 10 Errores Más Costosos
-
Medir Solo en Laboratorio (-30% precisión)
❌ Solo usar Lighthouse ✅ Combinar lab data + field data (RUM)
-
No Definir Dimensiones de Imágenes (+0.15 CLS)
❌ <img src="image.jpg" alt="desc"> ✅ <img src="image.jpg" width="800" height="600" alt="desc">
-
Cargar JavaScript Síncrono (+200ms FID)
❌ <script src="heavy.js"></script> ✅ <script src="heavy.js" defer></script>
-
Font Loading Sin Optimizar (+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>
-
Third-Party Scripts Sin Control (+500ms FID)
❌ Cargar todos los scripts en <head> ✅ Lazy load, async, y defer estratégicos
-
CSS Render-Blocking (+1s LCP)
❌ <link rel="stylesheet" href="all-styles.css"> ✅ Inline critical CSS + preload rest
-
Imágenes Sin Optimizar (+2s LCP)
❌ JPEG 2MB sin compresión ✅ WebP/AVIF + compresión + responsive
-
No Usar CDN (+40% LCP)
❌ Servir assets desde origen ✅ CDN global + HTTP/2 + Brotli
-
Ads Sin Placeholder (+0.25 CLS)
❌ Inserción dinámica sin reservar espacio ✅ Contenedores fijos + lazy loading
-
No Monitorear Continuamente (-50% optimización)
❌ Optimizar una vez y olvidar ✅ RUM + alertas + optimización continua
Roadmap de Implementación
Semana 1: Diagnóstico y Setup
DÍA 1-2: AUDITORÍA COMPLETA
□ PageSpeed Insights (mobile + desktop)
□ Chrome DevTools analysis
□ Search Console review
□ Identificar elementos LCP
DÍA 3-4: SETUP MONITOREO
□ Web Vitals extension install
□ RUM implementation
□ Performance budget definition
□ Baseline metrics documentation
DÍA 5-7: PLANNING
□ Priorizar optimizaciones por impacto
□ Recursos necesarios
□ Timeline realista
□ Success metrics definition
Semana 2-3: Quick Wins
OPTIMIZACIONES RÁPIDAS:
□ Image dimensions añadidas
□ JavaScript defer/async
□ Critical CSS inline
□ Font preload implementation
□ Compress images to WebP
VALIDACIÓN:
□ Test en staging
□ Before/after comparison
□ Multiple device testing
□ Performance impact measurement
Semana 4-6: Optimizaciones Avanzadas
TÉCNICAS AVANZADAS:
□ Code splitting implementation
□ Service worker caching
□ Advanced image optimization
□ Third-party script optimization
□ CDN implementation
MONITOREO:
□ Weekly performance reviews
□ User experience correlation
□ Business metrics impact
□ Continuous optimization
Conclusión: Core Web Vitals Como Ventaja Competitiva
Las Core Web Vitals no son solo métricas técnicas abstractas. Son indicadores directos de la experiencia que ofreces a tus usuarios y, por tanto, factores determinantes de tu éxito online.
La realidad del mercado:
- El 90% de las webs ignoran estas métricas
- Google las usa cada vez más para ranking
- Los usuarios premian la velocidad con conversiones
- La optimización técnica tiene ROI medible
Tu ventaja competitiva está en:
- Medir correctamente (lab + field data)
- Optimizar sistemáticamente (técnico + UX)
- Monitorear continuamente (RUM + alertas)
- Iterar basándose en datos (A/B testing + metrics)
La diferencia entre una web rápida y una lenta no es solo técnica. Es la diferencia entre un negocio que crece y uno que se estanca en la era de la atención limitada.
¿Tu próximo paso? Implementa el diagnóstico de la Semana 1 hoy mismo. Mide, optimiza, mide de nuevo. Los Core Web Vitals optimizados son tu ticket de entrada al top 10% de webs que Google y los usuarios realmente premian.
Recuerda: Las Core Web Vitals son métricas evolutivas. Google las actualiza y refina constantemente, por lo que tu optimización debe ser un proceso continuo, no una tarea única. Enfócate primero en conseguir puntuaciones “Buenas” en las tres métricas antes de perseguir la perfección en una sola. El mayor impacto viene de la optimización equilibrada de LCP, FID y CLS juntas, no de optimizar una métrica a expensas de las otras.