Toolypet
Volver al Blog
SEO

Guia Completa de Core Web Vitals 2026 - Optimizacion de Experiencia de Pagina

Comprende las metricas LCP, INP, CLS y metodos de optimizacion. Guia practica para mejorar Core Web Vitals, un factor de ranking de Google.

Toolypet Team

Toolypet Team

Development Team

9 min de lectura

Guia Completa de Core Web Vitals 2026

"El sitio era demasiado lento, asi que me fui"

El 53% de los usuarios abandonan la pagina si la carga toma mas de 3 segundos. Google introdujo Core Web Vitals para reflejar esta experiencia de usuario en los rankings.

En 2026, Core Web Vitals es un factor de ranking clave para SEO movil.


Que son Core Web Vitals?

Core Web Vitals son 3 metricas clave que miden la experiencia del usuario.

Metricas 2026

MetricaMideBuenoNecesita MejoraPobre
LCPVelocidad de carga≤2.5s≤4s>4s
INPRespuesta de interaccion≤200ms≤500ms>500ms
CLSEstabilidad visual≤0.1≤0.25>0.25

Cambio de Metrica (2024)

FID (First Input Delay) → INP (Interaction to Next Paint)

FID: Solo media la primera entrada
INP: Mide la capacidad de respuesta de todas las interacciones (mas completo)

LCP (Largest Contentful Paint)

Definicion

El tiempo que tarda el elemento de contenido mas grande de la pagina en renderizarse en pantalla

Elementos Medidos

ElementoEjemplo
<img>Imagen hero
poster de <video>Miniatura de video
CSS background-imageImagen de fondo
Bloques de texto<h1>, <p>, etc.

Metodos de Optimizacion

1. Optimizacion de Imagenes

<!-- ❌ Lento -->
<img src="hero.png" alt="Hero">

<!-- ✅ Optimizado -->
<img
  src="hero.webp"
  srcset="hero-400.webp 400w, hero-800.webp 800w"
  sizes="(max-width: 600px) 400px, 800px"
  alt="Hero"
  loading="eager"
  fetchpriority="high"
>

2. Tiempo de Respuesta del Servidor (TTFB)

Objetivo: TTFB < 200ms

Metodos de mejora:
- Usar CDN
- Caching del lado del servidor
- Optimizacion de consultas de base de datos
- HTTP/2 o HTTP/3

3. Eliminar Recursos que Bloquean el Renderizado

<!-- ❌ Bloquea renderizado -->
<link rel="stylesheet" href="styles.css">
<script src="app.js"></script>

<!-- ✅ Optimizado -->
<link rel="stylesheet" href="critical.css">
<link rel="preload" href="styles.css" as="style" onload="this.rel='stylesheet'">
<script src="app.js" defer></script>

4. CSS Critico en Linea

<head>
  <style>
    /* Solo CSS necesario para la primera pantalla */
    .hero { ... }
    .header { ... }
  </style>
  <link rel="preload" href="full.css" as="style">
</head>

5. Sugerencias de Precarga

<head>
  <!-- Precargar imagen LCP -->
  <link rel="preload" href="hero.webp" as="image" fetchpriority="high">

  <!-- Precargar fuentes web -->
  <link rel="preload" href="font.woff2" as="font" crossorigin>
</head>

INP (Interaction to Next Paint)

Definicion

El tiempo desde la interaccion del usuario (clic, toque, pulsacion de tecla) hasta la siguiente actualizacion de pantalla

Diferencia con FID

FIDINP
Solo primera entradaTodas las interacciones
Solo retraso de entradaTiempo total de respuesta
Obsoleto 2024Reemplazo Marzo 2024

Que se Mide

  • Clics (raton, tactil)
  • Pulsaciones de teclas
  • Toques (movil)

Metodos de Optimizacion

1. Prevenir Bloqueo del Hilo Principal

// ❌ Bloquea hilo principal
function heavyTask() {
  for (let i = 0; i < 1000000; i++) {
    // Calculo pesado
  }
}

// ✅ Dividir en chunks
async function heavyTaskChunked() {
  const chunks = splitIntoChunks(data, 1000);
  for (const chunk of chunks) {
    processChunk(chunk);
    await new Promise(r => setTimeout(r, 0)); // Ceder
  }
}

2. Debounce/Throttle

// ❌ Ejecutar cada vez
input.addEventListener('input', search);

// ✅ Debounce
input.addEventListener('input', debounce(search, 300));

3. Usar Web Workers

// Hilo principal
const worker = new Worker('worker.js');
worker.postMessage(data);
worker.onmessage = (e) => updateUI(e.data);

// worker.js
self.onmessage = (e) => {
  const result = heavyComputation(e.data);
  self.postMessage(result);
};

4. Optimizar Manejadores de Eventos

// ❌ Manejador pesado
button.onclick = () => {
  computeData();      // Pesado
  updateDOM();        // Manipulacion DOM
  sendAnalytics();    // Red
};

// ✅ Separacion asincrona
button.onclick = async () => {
  requestAnimationFrame(() => {
    updateDOM();      // Actualizacion rapida de UI primero
  });

  await computeDataAsync();
  sendAnalytics();    // Despues
};

5. Reducir Tamano de Scripts

// Code splitting
const Modal = React.lazy(() => import('./Modal'));

// Tree shaking
import { specific } from 'library'; // Evitar import completo

CLS (Cumulative Layout Shift)

Definicion

Puntuacion acumulativa de cambios de diseno inesperados durante la carga de la pagina

Escenario del Problema

Usuario: A punto de hacer clic en un boton
Carga anuncio: El diseno cambia
Resultado: Hace clic en el boton equivocado

Metodos de Optimizacion

1. Especificar Dimensiones de Imagen/Video

<!-- ❌ Sin dimensiones (causa CLS) -->
<img src="photo.jpg" alt="Photo">

<!-- ✅ Especificar dimensiones -->
<img src="photo.jpg" alt="Photo" width="800" height="600">

<!-- ✅ Usar aspect-ratio -->
<img src="photo.jpg" alt="Photo" style="aspect-ratio: 4/3; width: 100%;">

2. Reservar Espacio para Anuncios/Embeds

/* Pre-reservar espacio para anuncios */
.ad-slot {
  min-height: 250px;
  background: #f0f0f0;
}

/* O usar aspect-ratio */
.video-embed {
  aspect-ratio: 16/9;
  width: 100%;
}

3. Optimizacion de Fuentes Web

/* ❌ Causa FOUT/FOIT */
@font-face {
  font-family: 'Custom';
  src: url('font.woff2');
}

/* ✅ Usar font-display */
@font-face {
  font-family: 'Custom';
  src: url('font.woff2');
  font-display: swap; /* u optional */
}
<!-- Precargar fuentes -->
<link rel="preload" href="font.woff2" as="font" crossorigin>

4. Manejar Contenido Dinamico

// ❌ Insercion repentina
container.innerHTML = newContent;

// ✅ Reservar espacio antes de insertar
container.style.minHeight = '200px';
container.innerHTML = newContent;
/* O establecer min-height en CSS */
.dynamic-content {
  min-height: 200px;
}

5. Usar Animaciones Transform

/* ❌ Dispara layout */
.element {
  animation: slide 0.3s;
}
@keyframes slide {
  from { top: -100px; }
  to { top: 0; }
}

/* ✅ Usar transform (sin cambio de layout) */
@keyframes slide {
  from { transform: translateY(-100px); }
  to { transform: translateY(0); }
}

Herramientas de Medicion

Datos de Campo (Usuarios Reales)

HerramientaFuente de DatosCaracteristicas
Chrome UX ReportUsuarios de ChromeAgregacion de 28 dias
Search ConsoleBasado en CrUXOficial de Google
PageSpeed InsightsCrUX + LighthouseAnalisis en tiempo real

Datos de Laboratorio (Simulacion)

HerramientaProposito
LighthouseIntegrado en Chrome DevTools
WebPageTestAnalisis detallado, pruebas comparativas
GTmetrixInformes visuales

Chrome DevTools

1. F12 (Herramientas de Desarrollo)
2. Pestana Performance
3. Record → Actualizar pagina
4. Verificar seccion Web Vitals

Optimizacion por Framework

Next.js

// next.config.js
module.exports = {
  images: {
    formats: ['image/avif', 'image/webp'],
  },
  experimental: {
    optimizeCss: true,
  },
};

// Componente
import Image from 'next/image';

export default function Hero() {
  return (
    <Image
      src="/hero.jpg"
      alt="Hero"
      width={1200}
      height={600}
      priority // Imagen LCP
      placeholder="blur"
    />
  );
}

React

// Code splitting
const HeavyComponent = React.lazy(() => import('./HeavyComponent'));

// Suspense
<Suspense fallback={<Skeleton />}>
  <HeavyComponent />
</Suspense>

JavaScript Vanilla

<!-- Carga de scripts -->
<script src="critical.js"></script>
<script src="app.js" defer></script>
<script src="analytics.js" async></script>

<!-- Carga diferida de imagenes -->
<img src="below-fold.jpg" loading="lazy" alt="Below fold">

Prioridad de Mejora

Por Impacto

RangoItem de OptimizacionEfecto
1Optimizacion de imagen LCPLCP ↓
2Eliminar JS que bloquea renderizadoLCP, INP ↓
3Especificar dimensiones imagen/embedCLS ↓
4Usar CDNLCP ↓
5Optimizacion de fuentes webCLS ↓
6Division de bundle JSINP ↓

Victorias Rapidas

<!-- 1. Precargar imagen LCP -->
<link rel="preload" href="hero.webp" as="image">

<!-- 2. Especificar dimensiones de imagen -->
<img width="800" height="600" ...>

<!-- 3. JS defer -->
<script src="app.js" defer></script>

Preguntas Frecuentes

Q1: Cuanto afecta Core Web Vitals al ranking?

A: Es un factor de ranking directo, pero no mas importante que la calidad del contenido. Juega un papel decisivo cuando la calidad del contenido es similar entre paginas competidoras.

Q2: Por que los puntajes movil y escritorio son diferentes?

A: Google utiliza principalmente datos moviles. Priorice la optimizacion movil.

Q3: Por que muestra "Sin datos"?

A: No hay suficientes datos de trafico en Chrome UX Report. El sitio puede tener poco trafico o ser nuevo.

Q4: Que metrica deberia mejorar primero?

A: Generalmente:

  1. LCP - Mejora mas notable
  2. CLS - Reduce frustracion del usuario
  3. INP - Importante para sitios con mucha interaccion

Q5: Que hacer si scripts de terceros son el problema?

A:

  • Eliminar scripts innecesarios
  • Usar atributos async o defer
  • Usar bibliotecas Web Worker como Partytown

Lista de Verificacion

Optimizacion LCP

  • Precargar imagen LCP
  • Optimizacion de imagen (WebP/AVIF)
  • Eliminar recursos que bloquean renderizado
  • TTFB < 200ms
  • Usar CDN

Optimizacion INP

  • Dividir chunks JS pesados
  • Aplicar debounce/throttle
  • Eliminar JS innecesario
  • Limpiar scripts de terceros

Optimizacion CLS

  • Especificar dimensiones imagen/video
  • Reservar espacio para anuncios
  • Configurar font-display
  • Reservar espacio para contenido dinamico

Conclusion

Esenciales de Core Web Vitals:

  1. LCP ≤ 2.5s: Renderizar contenido mas grande rapidamente
  2. INP ≤ 200ms: Responder instantaneamente a interacciones
  3. CLS ≤ 0.1: Sin cambios de diseno

La optimizacion movil es clave.


Herramientas Relacionadas

HerramientaProposito
Analizador PageSpeedMedir Core Web Vitals
Optimizador de ImagenesConversion WebP
Generador de Meta TagsMeta tags SEO
Core Web VitalsLCPINPCLSVelocidad de PaginaSEOOptimizacion de Rendimiento

Sobre el Autor

Toolypet Team

Toolypet Team

Development Team

The Toolypet Team creates free, privacy-focused web tools for developers and designers. All tools run entirely in your browser with no data sent to servers.

Web DevelopmentCSS ToolsDeveloper ToolsSEOSecurity