Published
- 3 min read
Web Vitals: Guía Completa para Optimizar el Rendimiento de tu Sitio

¡Hola! Hoy vamos a hablar de Web Vitals, esas métricas que Google usa para evaluar la experiencia de usuario en tu sitio web. Si alguna vez te has preguntado por qué tu sitio no aparece en los primeros resultados de búsqueda o por qué los usuarios abandonan tu página, este artículo te ayudará a entenderlo y solucionarlo.
¿Qué son las Core Web Vitals?
Las Core Web Vitals son tres métricas específicas que Google considera fundamentales para la experiencia de usuario:
- LCP (Largest Contentful Paint)
- FID (First Input Delay)
- CLS (Cumulative Layout Shift)
1. LCP (Largest Contentful Paint)
¿Qué es?
El tiempo que tarda en cargar el elemento más grande visible en la pantalla.
Valores recomendados:
- Bueno: ≤ 2.5 segundos
- Necesita mejorar: ≤ 4 segundos
- Pobre: > 4 segundos
Cómo optimizarlo:
// 1. Optimiza la carga de imágenes
<img
src="imagen.jpg"
loading="lazy"
width="800"
height="600"
alt="Descripción"
/>
// 2. Usa next/image o componentes similares
import Image from 'next/image'
<Image
src="/imagen.jpg"
width={800}
height={600}
priority={true} // Para imágenes above the fold
quality={75}
alt="Descripción"
/>
// 3. Implementa preload para recursos críticos
<link
rel="preload"
href="fuente.woff2"
as="font"
type="font/woff2"
crossOrigin="anonymous"
/>
Tips adicionales:
- Minimiza el tiempo de respuesta del servidor
- Utiliza CDN para recursos estáticos
- Implementa caché del navegador
- Optimiza el CSS crítico
2. FID (First Input Delay)
¿Qué es?
El tiempo que tarda el navegador en responder a la primera interacción del usuario.
Valores recomendados:
- Bueno: ≤ 100 ms
- Necesita mejorar: ≤ 300 ms
- Pobre: > 300 ms
Cómo optimizarlo:
// 1. Divide tu código en chunks
const MiComponente = lazy(() => import('./MiComponente'));
// 2. Implementa code splitting
const routes = [
{
path: '/',
component: lazy(() => import('./Home')),
},
{
path: '/about',
component: lazy(() => import('./About')),
},
];
// 3. Optimiza el bundle size
// webpack.config.js
module.exports = {
optimization: {
splitChunks: {
chunks: 'all',
minSize: 20000,
},
},
};
Tips adicionales:
- Minimiza el JavaScript de terceros
- Implementa debounce en eventos
- Usa Web Workers para tareas pesadas
- Optimiza el árbol DOM
3. CLS (Cumulative Layout Shift)
¿Qué es?
La medida de inestabilidad visual de la página.
Valores recomendados:
- Bueno: ≤ 0.1
- Necesita mejorar: ≤ 0.25
- Pobre: > 0.25
Cómo optimizarlo:
// 1. Reserva espacio para imágenes
<div style={{ aspectRatio: '16/9' }}>
<img src='imagen.jpg' width='800' height='450' alt='Descripción' />
</div>;
// 2. Usa skeleton loaders
function SkeletonLoader() {
return (
<div className='skeleton'>
<div className='skeleton-image'></div>
<div className='skeleton-text'></div>
</div>
);
}
// 3. Evita contenido dinámico que cause desplazamiento
const [content, setContent] = useState(null);
useEffect(() => {
// Carga el contenido después del render inicial
const timer = setTimeout(() => {
setContent(datos);
}, 0);
return () => clearTimeout(timer);
}, []);
Tips adicionales:
- Define dimensiones explícitas para imágenes
- Evita insertar contenido dinámico above the fold
- Usa fuentes web optimizadas
- Implementa un sistema de diseño consistente
Herramientas de Medición
1. Chrome DevTools
// En la consola del navegador
const observer = new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
console.log(entry);
// Envía los datos a tu sistema de análisis
}
});
observer.observe({ entryTypes: ['largest-contentful-paint', 'first-input', 'layout-shift'] });
2. Google Analytics
// Implementa el seguimiento de Web Vitals
web - vitals.getCLS(console.log);
web - vitals.getFID(console.log);
web - vitals.getLCP(console.log);
3. Lighthouse
- Ejecuta auditorías regulares
- Establece umbrales de rendimiento
- Monitorea tendencias
Optimización Avanzada
1. Implementa Service Workers
// service-worker.js
const CACHE_NAME = 'v1';
const urlsToCache = ['/', '/styles/main.css', '/scripts/main.js'];
self.addEventListener('install', (event) => {
event.waitUntil(caches.open(CACHE_NAME).then((cache) => cache.addAll(urlsToCache)));
});
2. Utiliza HTTP/2 y HTTP/3
# nginx.conf
http2 on;
http3 on;
3. Implementa Preconnect
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://analytics.google.com" />
Checklist de Optimización
-
Optimización de Imágenes
- Usa formatos modernos (WebP)
- Implementa lazy loading
- Define dimensiones explícitas
- Utiliza CDN
-
Optimización de JavaScript
- Implementa code splitting
- Minimiza el bundle size
- Utiliza tree shaking
- Implementa caching
-
Optimización de CSS
- Elimina CSS no utilizado
- Minimiza CSS crítico
- Implementa critical CSS
- Utiliza CSS moderno
-
Optimización de Servidor
- Implementa HTTP/2
- Configura compresión
- Optimiza caché
- Utiliza CDN
Conclusión
Optimizar las Web Vitals no es una tarea única, sino un proceso continuo. Recuerda:
- Mide regularmente el rendimiento
- Establece objetivos claros
- Implementa cambios gradualmente
- Verifica el impacto de cada cambio
- Mantén un registro de métricas
¿Te gustaría profundizar en algún aspecto específico o tienes alguna pregunta sobre la optimización de Web Vitals?