Optimización de next/image en Next.js — LCP/INP y Calidad 2025
Publicado: 23 sept 2025 · Tiempo de lectura: 4 min · Por el equipo editorial de Unified Image Tools
Introducción
next/image
optimiza y da estructura al layout, pero un mal uso puede mejorar LCP y empeorar INP. Dar prioridad excesiva a imágenes hero o decodificar muchas imágenes tras una acción de usuario puede ralentizar la respuesta.
Esta guía sigue el marco de INP de Optimización de Entrega de Imágenes Centrada en INP 2025 — Proteger la Experiencia con decode/priority/Coordinación de Script y sistematiza la optimización de imágenes en Next.js (App Router) desde los ángulos de layout, prioridad y coordinación de timing.
TL;DR
- LCP: usar
fetchpriority="high"
ypreload
juntos sizes
yaspect-ratio
para CLS cero- No abusar de
priority-hints
. Evitar degradación INP por sobrecarga de recursos next/image
placeholder
: LQIP o CSS, evitar SVG pesados
Enlaces internos: Optimización de Entrega de Imágenes Centrada en INP 2025 — Proteger la Experiencia con decode/priority/Coordinación de Script, Sugerencias de prioridad de imagen y optimización de precarga 2025, Diseño de imágenes responsivas 2025 — Guía práctica de srcset/sizes
¿Por qué next/image afecta INP?
El navegador sigue "descarga → decodificación → layout/render". next/image
ayuda a optimizar, pero puede empeorar INP si:
- LazyLoad masivo tras input → decodificación compite con eventos
- Abuso de
priority
→ saturación de red, scripts importantes se retrasan sizes
incorrecto → sobrecarga de decodificación, LCP e INP empeoran
Claves: tamaño adecuado, minimizar prioridad, separar timing.
Principios de diseño
- Ruta crítica: Hero/LCP con
high
, restoauto
/lazy fill
/sizes
: elegir según layout fijo o variable- Color: sRGB fijo, P3 solo si se verifica compatibilidad
Ejemplo de implementación
<Image src="/hero.avif" alt="" priority fetchPriority="high" sizes="100vw" />
Puntos:
- Solo LCP con
priority
/fetchPriority="high"
sizes
igual al layout real. Layout variable: string por breakpointwidth/height
(layout fijo) ofill + aspect-ratio
(variable) para CLS cero
Antipatrones y soluciones
priority
en todas las imágenes de primer plano → solo en hero/carousel principal- 20 thumbnails bajo el pliegue decodifican lazy tras scroll → usar
rootMargin: '300px 0px'
sizes
100vw fijo, mayor que el real → estimar ancho y usar string por breakpoint- SVG placeholder pesado en hero → usar LQIP/CSS
Ejemplo de diseño de tamaños con next/image
Tarjeta de ancho fijo:
<Image
src="/cards/card.avif"
alt=""
width={360}
height={240}
sizes="(max-width: 768px) 92vw, 360px"
loading="lazy"
decoding="async"
placeholder="blur"
blurDataURL="data:image/jpeg;base64,..."
style={{ objectFit: 'cover' }}
/>
Hero de ancho completo (variable):
<div style={{ position: 'relative', aspectRatio: '3 / 2' }}>
<Image
src="/hero/cover.avif"
alt=""
fill
sizes="100vw"
priority
fetchPriority="high"
decoding="sync"
/>
{/* Overlay de texto, etc. */}
<h1 className="sr-only">Nombre del producto</h1>
</div>
Notas:
- Si usas
fill
, el padre debe tenerposition: relative
yaspect-ratio
decoding="sync"
solo en LCP, restoasync
Recursos y preconnect/preload
preconnect
solo si el CDN se usa desde el inicio. No abusar. preload
solo para 1 imagen LCP.
export const metadata = {
other: {
link: [
{ rel: 'preconnect', href: 'https://cdn.example.com', crossOrigin: 'anonymous' },
// { rel: 'preload', as: 'image', href: '/hero-1536.avif', imagesrcset: '/hero-768.avif 768w, /hero-1536.avif 1536w', imagesizes: '100vw' },
],
},
};
Enlaces internos: Sugerencias de prioridad de imagen y optimización de precarga 2025
Estrategia de placeholders (amigable con INP)
- Objetivo: evitar CLS y mejorar percepción. No hace falta generación pesada
- Blur fuerte en hero no es necesario. El "progresivo" no mejora INP
- Usar LQIP/BlurDataURL/CSS gradiente para evitar parpadeo visual
Relacionado: Diseño de Placeholders Responsivos LQIP/SQIP/BlurHash Mejores Prácticas 2025
Optimización CDN: conversión y clave de caché
- Si usas
width
oformat
en query, unifica la clave de caché - Evita upscale por defecto
- Si negocias DPR/formato, controla la fragmentación de caché
Relacionado: Trampas del Redimensionado en CDN Edge 2025 — El Triángulo de Escalado/Caché/Calidad, Optimización de Entrega de Imágenes en la Era Edge - Diseño CDN 2025
Medición y guardarraíles (operación real)
- Recoge INP/LCP con RUM (web-vitals). Vigila Long Task tras input
- Compara p75 tras cada deploy, detecta abuso de
priority
o desviaciones ensizes
- Usa snapshots en CI para detectar regresión en JSON-LD/datos estructurados
Ejemplo de hook RUM:
import { onINP, onLCP } from 'web-vitals/attribution';
onINP((m) => fetch('/rum', { method: 'POST', body: JSON.stringify({ name: m.name, value: m.value }) }));
onLCP((m) => fetch('/rum', { method: 'POST', body: JSON.stringify({ name: m.name, value: m.value }) }));
Casos de estudio (breves)
Caso 1: Hero LP + galería bajo el pliegue
- Problema: tras scroll, 16 thumbnails cargan a la vez → INP p75 sube de 320→380ms
- Solución: usar
rootMargin: '300px 0px'
, ajustarsizes
, inicializar trasrequestIdleCallback
- Resultado: INP p75 baja a 250ms, LCP mejora 3%
Caso 2: Imágenes en el cuerpo del artículo
- Problema: sin
sizes
, sobrecarga de decodificación, scroll se traba - Solución: calcular
sizes
desde el ancho del contenedor, usardecoding="async"
- Resultado: decodificación 35% más rápida, INP p75 mejora 40ms
FAQ
P. ¿Son necesarios ambos priority
y fetchPriority="high"
?
R. Se pueden usar juntos, pero solo en la imagen hero.
P. ¿Usar placeholder blur?
R. Útil para evitar CLS, no mejora INP. Mantenerlo ligero.
P. ¿Elegir fill
o ancho fijo?
R. Si el layout es variable, usar fill + aspect-ratio
; si es fijo, width/height
. Siempre concretar con sizes
.
Checklist para distribución
- [ ] Solo LCP con
priority
/fetchPriority="high"
/decoding="sync"
- [ ] No LCP:
loading="lazy"
+decoding="async"
- [ ]
sizes
igual al layout (sin sobrecarga) - [ ] Si usas
fill
, padre conposition: relative
yaspect-ratio
- [ ] No poner decode/init pesado en ventana 300–500ms tras input
- [ ] Vigilar INP/LCP con RUM, usar p75 como métrica principal
Herramientas relacionadas
Artículos relacionados
Optimización de Entrega de Imágenes Centrada en INP 2025 — Proteger la Experiencia con decode/priority/Coordinación de Script
LCP solo no es suficiente. Principios de diseño de entrega de imágenes que no empeoran INP y procedimientos de implementación con Next.js/APIs de navegador sistematizados. Hasta atributo decode, fetchpriority, carga diferida, coordinación de scripts.
Diseño de Pruebas A/B de Imágenes 2025 — Optimizando Calidad, Velocidad y CTR Simultáneamente
Diseño de pruebas que evalúa combinaciones de formato/calidad/tamaño/placeholder usando métricas LCP/INP y CTR para implementación en producción.
Sugerencias de prioridad de imagen y optimización de precarga 2025
Aplique correctamente fetchpriority y preload a las imágenes candidatas de LCP. Explicamos el uso de imagesrcset/sizes, los peligros de la precarga y la implementación que no deteriora el INP con ejemplos reales.
Estrategia Definitiva de Compresión de Imágenes 2025 — Guía Práctica para Optimizar Rendimiento Preservando Calidad
Desglose integral de las últimas estrategias de compresión de imágenes para Core Web Vitals y operaciones del mundo real, con presets específicos, código y flujos de trabajo por caso de uso. Cubre selección JPEG/PNG/WebP/AVIF, optimización build/entrega y resolución de problemas.
Diseño de Pipeline de Optimización por Lotes - Equilibrando INP/Calidad/Rendimiento 2025
Optimización de imágenes masiva hecha 'de forma segura y rápida'. Consideraciones de UI que no degradan INP, colas asíncronas, selección de formato, validación automatizada - un plano práctico para uso en producción.
Optimización de Entrega de Imágenes 2025 — Guía de Priority Hints / Preload / HTTP/2
Mejores prácticas para la entrega de imágenes que no sacrifican LCP y CLS. Combina Priority Hints, Preload, HTTP/2 y estrategias de formato apropiadas para equilibrar el tráfico de búsqueda y la experiencia del usuario.