¿Qué Son los Core Web Vitals?
Los Core Web Vitals son un conjunto de tres métricas de rendimiento definidas por Google que miden la experiencia real del usuario en páginas web. Impactan directamente en los rankings de búsqueda y representan lo que Google considera los aspectos más importantes de la experiencia de página.
Como ingeniero QA, entender estas métricas es esencial porque:
- Afectan los rankings SEO (visibilidad en búsquedas)
- Correlacionan con el engagement del usuario y las tasas de conversión
- Proporcionan criterios objetivos y medibles para testing de aceptación de rendimiento
- Se incluyen cada vez más en presupuestos de rendimiento y criterios de release
Los Tres Core Web Vitals
LCP — Largest Contentful Paint
Qué mide: El tiempo desde que la página comienza a cargar hasta que el elemento de contenido más grande en el viewport se renderiza.
Umbral bueno: Menos de 2.5 segundos
Qué cuenta como “elemento más grande”:
- Imágenes (
<img>,<image>dentro de SVG) - Imágenes de poster de video
- Imágenes de fondo cargadas vía
url() - Elementos de texto a nivel de bloque (
<h1>,<p>, etc.)
Causas comunes de LCP deficiente:
- Tiempo de respuesta del servidor lento (TTFB alto)
- JavaScript y CSS que bloquean el renderizado
- Tiempos de carga de recursos lentos (imágenes grandes, fuentes no optimizadas)
- Delays de renderizado del lado del cliente (frameworks SPA)
INP — Interaction to Next Paint
Qué mide: La responsividad de la página ante interacciones del usuario (clics, taps, teclas) durante todo su ciclo de vida. INP es la peor latencia de interacción, ignorando outliers.
Umbral bueno: Menos de 200 milisegundos
Cómo funciona:
- El usuario hace clic en un botón
- El navegador procesa el event handler (JavaScript)
- El navegador actualiza la visualización
- INP mide el tiempo total del paso 1 al paso 3
Causas comunes de INP deficiente:
- Tareas JavaScript de larga ejecución bloqueando el hilo principal
- Tamaño excesivo del DOM (>1500 elementos)
- Event handlers complejos sin optimización
- Scripts de terceros compitiendo por el hilo principal
CLS — Cumulative Layout Shift
Qué mide: El total de todos los cambios de layout inesperados durante toda la vida de la página. Un layout shift ocurre cuando un elemento visible cambia su posición de un frame al siguiente sin interacción del usuario.
Umbral bueno: Menos de 0.1
Cálculo de CLS:
Puntaje de Layout Shift = Fracción de Impacto × Fracción de Distancia
- Fracción de impacto: El área del viewport afectada por el cambio
- Fracción de distancia: Qué tan lejos se movió el elemento relativo al viewport
Causas comunes de CLS deficiente:
- Imágenes y anuncios sin dimensiones explícitas de ancho/alto
- Contenido inyectado dinámicamente encima del contenido existente
- Web fonts causando redimensionamiento del texto (FOIT/FOUT)
- Embeds de terceros que cargan tarde
Midiendo Core Web Vitals
Datos de Laboratorio (Desarrollo/Testing)
Los datos de laboratorio se recolectan en un entorno controlado. Son reproducibles pero no representan condiciones de usuarios reales.
| Herramienta | LCP | INP | CLS | Notas |
|---|---|---|---|---|
| Chrome DevTools (pestaña Performance) | Sí | Sí | Sí | Más detallado |
| Lighthouse | Sí | No (usa TBT) | Sí | Puntajes agregados |
| PageSpeed Insights | Sí | Sí | Sí | Datos lab + campo |
| WebPageTest | Sí | Parcial | Sí | Testing multi-ubicación |
Datos de Campo (Usuarios Reales)
Los datos de campo provienen de usuarios reales visitando tu sitio. Reflejan condiciones reales pero requieren volumen de tráfico.
| Fuente | Tipo de Datos | Disponibilidad |
|---|---|---|
| Chrome UX Report (CrUX) | Promedio móvil de 28 días | Público (sitios con suficiente tráfico) |
| PageSpeed Insights | Datos CrUX con resumen de origen | Público |
| Search Console | Reporte Core Web Vitals | Solo propietarios del sitio |
| Librería JavaScript web-vitals | Datos por usuario en tiempo real | Requiere implementación |
Usando la Pestaña Performance de DevTools
- Abre DevTools > pestaña Performance
- Haz clic en el ícono de engranaje y habilita Web Vitals
- Haz clic en Record y recarga la página
- Detén la grabación cuando la página cargue completamente
- Busca la línea Web Vitals mostrando marcadores de LCP, CLS
- El panel Summary muestra desgloses de tiempos
Verificación Rápida con PageSpeed Insights
Navega a pagespeed.web.dev e ingresa tu URL. El reporte muestra:
- Datos de campo (si están disponibles): Core Web Vitals reales de los últimos 28 días
- Datos de laboratorio: Rendimiento simulado desde un dispositivo móvil de gama media en 4G
- Diagnósticos: Problemas específicos con correcciones recomendadas
- Auditorías aprobadas: Lo que ya funciona bien
Estrategias de Testing para Core Web Vitals
Checklist de Testing LCP
- Medir LCP en la landing page, páginas de producto y artículos del blog
- Probar con red limitada (Slow 3G, Fast 3G, 4G)
- Probar con limitación de CPU (4x, 6x slowdown)
- Verificar que el elemento LCP sea la imagen/texto hero deseado, no un elemento inesperado
- Verificar que LCP no retroceda después de nuevos deployments
- Probar con caché vacío y caché cargado
Checklist de Testing INP
- Hacer clic en cada elemento interactivo y notar si alguno se siente lento
- Probar envíos de formularios, menús desplegables y apertura de modales
- Probar mientras la página aún está cargando (estado parcialmente cargado)
- Usar DevTools Performance para identificar tareas largas (>50ms)
- Probar con limitación de CPU para simular dispositivos de gama baja
Checklist de Testing CLS
- Observar la carga de la página de inicio a fin — notar saltos visuales
- Hacer scroll por toda la página observando cambios de layout
- Probar con red lenta para ver cambios de layout durante carga progresiva
- Verificar que todas las imágenes tengan atributos explícitos de ancho y alto
- Probar con bloqueadores de anuncios deshabilitados (los anuncios son causa común de CLS)
- Verificar la carga de fuentes — ¿el texto cambia de tamaño cuando cargan las web fonts?
Ejercicio: Auditoría de Core Web Vitals
Realiza una auditoría de Core Web Vitals en un sitio web de tu elección (el sitio de tu empresa, un proyecto personal o un sitio público conocido).
Paso 1: Recolectar Datos de Laboratorio
Abre el sitio en Chrome con DevTools:
- Ve a la pestaña Performance
- Habilita Web Vitals en configuración
- Configura throttling: CPU 4x slowdown, red Fast 3G
- Graba una carga de página nueva (limpia caché primero con Ctrl+Shift+Delete)
- Registra los siguientes valores:
| Métrica | Valor | Umbral Bueno | Aprobado/Reprobado |
|---|---|---|---|
| LCP | ___s | <2.5s | |
| CLS | ___ | <0.1 | |
| TBT (proxy de INP) | ___ms | <200ms |
Paso 2: Identificar el Elemento LCP
En la grabación de Performance:
- Encuentra el marcador LCP en la línea de Web Vitals
- Haz clic en él para ver qué elemento activó el LCP
- Documenta: ¿Cuál es el elemento LCP? ¿Es el contenido hero deseado?
Paso 3: Encontrar Layout Shifts
- En la grabación, busca barras rosadas en la fila Experience
- Haz clic en cada layout shift para ver qué elementos se movieron
- Documenta cada shift: ¿Qué elemento? ¿Cuánto se movió? ¿Qué lo causó?
Paso 4: Probar Interacciones
- Graba una nueva sesión de performance
- Haz clic en 5-10 elementos interactivos (botones, links, menús, campos de formulario)
- Busca tareas largas (bloques amarillos >50ms) activadas por tus interacciones
- Documenta cualquier interacción que tome más de 200ms en responder visualmente
Solución: Reporte de Auditoría de Ejemplo
Sitio auditado: example-ecommerce.com (página de inicio)
Resultados de Laboratorio (Chrome, CPU 4x, Fast 3G):
| Métrica | Valor | Umbral | Estado |
|---|---|---|---|
| LCP | 3.8s | <2.5s | FALLA |
| CLS | 0.24 | <0.1 | FALLA |
| TBT | 890ms | <200ms | FALLA |
Análisis de LCP:
- Elemento LCP: Imagen hero banner (2.4MB JPEG)
- Causa raíz: Imagen no optimizada, sin srcset responsive, sin preload hint
- Corrección: Convertir a WebP, agregar
loading="eager", agregar<link rel="preload">, implementar srcset para tamaños responsive
Problemas de CLS Encontrados:
| Elemento | Puntaje Shift | Causa |
|---|---|---|
| Imagen hero | 0.12 | Sin atributos width/height |
| Banner publicitario | 0.08 | Inyectado después de carga |
| Consentimiento de cookies | 0.04 | Empuja contenido hacia abajo |
- Corrección: Agregar dimensiones explícitas a imágenes, reservar espacio para anuncios con CSS, usar overlay para consentimiento de cookies en lugar de empujar contenido
Problemas de INP/TBT:
- Hilo principal bloqueado 450ms por bundle de analytics
- Inicialización de carrusel de productos bloquea 320ms
- Widget de chat de terceros agrega 120ms a la carga
- Corrección: Diferir analytics, lazy-load del carrusel, cargar widget de chat al interactuar
Prioridad de recomendaciones:
- Optimizar imagen hero (LCP: mejora esperada de 3.8s a ~1.8s)
- Agregar dimensiones a imágenes (CLS: mejora esperada de 0.24 a ~0.04)
- Diferir JavaScript no crítico (TBT: mejora esperada de 890ms a ~200ms)
Monitoreo Automatizado de Core Web Vitals
Para aseguramiento de calidad continuo, integra Core Web Vitals en tu pipeline de CI/CD:
# Usando Lighthouse CI
npm install -g @lhci/cli
# Ejecutar Lighthouse con assertions
lhci autorun --config=lighthouserc.json
Ejemplo de lighthouserc.json con umbrales de Core Web Vitals:
{
"ci": {
"assert": {
"assertions": {
"largest-contentful-paint": ["error", {"maxNumericValue": 2500}],
"cumulative-layout-shift": ["error", {"maxNumericValue": 0.1}],
"total-blocking-time": ["error", {"maxNumericValue": 200}]
}
}
}
}
Esto falla el build si los Core Web Vitals exceden los umbrales, previniendo regresiones de rendimiento de llegar a producción.
Puntos Clave
- Core Web Vitals consiste en tres métricas: LCP (carga), INP (interactividad) y CLS (estabilidad visual)
- INP reemplazó a FID en marzo 2024 y mide la responsividad durante todo el ciclo de vida de la página
- Usa tanto datos de laboratorio (DevTools, Lighthouse) como datos de campo (CrUX, Search Console) para un panorama completo
- Cada métrica tiene estrategias de testing específicas — no revises solo el puntaje agregado
- Integra umbrales de Core Web Vitals en CI/CD para prevenir regresiones
- Core Web Vitals deficientes impactan directamente los rankings SEO y el engagement del usuario