Optimizar imágenes para web: WebP, AVIF y lazy loading
Las imágenes son el factor más pesado en cualquier sitio web moderno. Optimizarlas correctamente reduce el LCP en 30-50%, mejora los Core Web Vitals y te convierte en top 5% en velocidad. Guía completa con formatos nuevos, herramientas profesionales y setup automático en tu build.
¿Por qué optimizar imágenes?
Las imágenes representan el 52-67% del peso total de una página promedio. Una imagen sin optimizar de 5MB te puede costar:
- ✗ LCP más lento: si tu hero image tarda 4 segundos en cargar, pierdes usuarios directamente
- ✗ Google ranking: los Core Web Vitals incluyen LCP. Una imagen lenta = ranking más bajo
- ✗ Bounce rate: estudios muestran que cada 1 segundo de delay = +7% bounce rate
- ✗ Coste de ancho de banda: en Cloudflare Images o Imgix, pagas por GB transferido
Una sola optimización (WebP + lazy loading) puede reducir el tamaño total de página en 40% sin perder calidad visual.
Comparativa de formatos: JPEG vs PNG vs WebP vs AVIF
| Formato | Compresión | Soporte navegadores | Mejor para |
|---|---|---|---|
| JPEG | Buena (con pérdida) | 100% (todos) | Fotos naturales, fallback |
| PNG | Pobre (sin pérdida) | 100% (todos) | Iconos, gráficos, transparencia |
| GIF | Pésima | 100% (todos) | Animaciones simples (evita: usa MP4) |
| WebP | Excelente (-25-35%) | 94% (excepto IE, Safari <16) | Fotos, héroes, layouts |
| AVIF | Excepcional (-40-50%) | 65% (Chrome, Firefox, Edge) | Futuro, máxima compresión |
WebP: el estándar moderno (use ahora mismo)
¿Qué es WebP?
WebP es un formato de imagen moderno creado por Google en 2010. Ofrece 25-35% menos tamaño que JPEG manteniendo la misma calidad visual. Soportado en el 94% de navegadores modernos (Chrome, Edge, Firefox, Safari 16+).
Si tu sitio tiene fallback a JPEG, WebP es 100% seguro de implementar hoy.
Cómo convertir a WebP
Opción 1: Squoosh (online, sin instalar)
- 1. Ve a
squoosh.app - 2. Sube tu imagen JPEG/PNG
- 3. Selecciona WebP en dropdown derecha
- 4. Ajusta quality (85-90 es perfecto)
- 5. Descarga. Eso es todo.
Opción 2: ImageMagick (línea de comandos, lotes)
Si necesitas convertir 50+ imágenes:
# Instalar
brew install imagemagick # macOS
sudo apt install imagemagick # Linux
# Convertir una imagen
convert input.jpg -quality 85 output.webp
# Convertir todos en carpeta
for f in *.jpg; do convert "$f" -quality 85 "${f%.jpg}.webp"; done Opción 3: cwebp (oficial de Google)
# Instalar
brew install webp # macOS
# Convertir
cwebp -q 85 input.jpg -o output.webp
# Con lotes
for f in *.jpg; do cwebp -q 85 "$f" -o "${f%.jpg}.webp"; done HTML: cómo servir WebP con fallback
<picture>
<source srcset="image.webp" type="image/webp">
<source srcset="image.jpg" type="image/jpeg">
<img src="image.jpg" alt="Description" width="1200" height="800" loading="lazy">
</picture> El navegador automáticamente elige WebP si lo soporta, si no cae a JPEG. Siempre incluye width + height para evitar CLS.
AVIF: el futuro (compresión superior)
AVIF es el formato del futuro. Ofrece 40-50% menos tamaño que JPEG con calidad superior a WebP. Soportado en Chrome 85+, Firefox 93+, Edge 95+. El problema: Internet Explorer y navegadores viejos no lo soportan (pero podemos usar fallback).
Conversión a AVIF
# Instalar ffmpeg (soporta AVIF)
brew install ffmpeg # macOS
# Convertir
ffmpeg -i input.jpg -c:v libaom-av1 -crf 30 output.avif
# O usar imagemagick (más lento pero fácil)
convert input.jpg output.avif HTML: servir AVIF con fallback a WebP a JPEG
<picture>
<source srcset="image.avif" type="image/avif">
<source srcset="image.webp" type="image/webp">
<source srcset="image.jpg" type="image/jpeg">
<img src="image.jpg" alt="Description" width="1200" height="800" loading="lazy">
</picture> Orden importante: AVIF (mejor) → WebP (bueno) → JPEG (fallback universal)
Lazy loading: carga diferida nativa
No carguemos todas las imágenes en el primer momento. Solo cargamos las que el usuario ve. Esto reduce el LCP drásticamente.
Método 1: loading="lazy" (nativo, recomendado)
<img src="image.webp" alt="..." loading="lazy" width="1200" height="800"> Soportado en el 95% de navegadores. El navegador automáticamente carga la imagen cuando está a punto de entrar en viewport. No necesitas JavaScript.
Método 2: Intersection Observer (control total)
<img data-src="image.webp" alt="..." width="1200" height="800" class="lazy">
<script>
const images = document.querySelectorAll('.lazy');
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.src = entry.target.dataset.src;
observer.unobserve(entry.target);
}
});
});
images.forEach(img => observer.observe(img));
</script> Imágenes responsive: srcset y sizes
No sirvas la misma imagen en móvil y desktop. En móvil una imagen 1200x800 se ve como 400x266. ¿Por qué descargar 1200x800 en móvil?
<img
src="image-400.webp"
srcset="
image-400.webp 400w,
image-800.webp 800w,
image-1200.webp 1200w"
sizes="(max-width: 600px) 100vw, (max-width: 1200px) 50vw, 1200px"
alt="Description"
width="1200"
height="800"
loading="lazy"
> El navegador elige automáticamente la versión correcta según pantalla. En móvil 400w, en tablet 800w, en desktop 1200w. Ahorras 60-70% ancho de banda en móviles.
Herramientas profesionales para optimizar
Squoosh (gratuito, web)
squoosh.app — Interfaz visual. Arrastra imagen, convierte a WebP/AVIF, ajusta quality. Ideal para principiantes. Sin instalar nada.
TinyPNG (freemium, web)
tinypng.com — Compresión con IA. Pierde ~5% calidad pero reduce 40-50%. Plan gratuito: 20 imágenes/mes. Pro: €35/año ilimitado.
ImageOptim (gratuito, macOS)
imageoptim.com — App nativa. Arrastra carpeta, optimiza todo sin perder calidad. Usa 5+ algoritmos. Solo macOS.
ShortPixel (freemium, cloud)
shortpixel.com — API cloud. Sube imagen, recibe optimizada. Convierte JPEG→WebP/AVIF automático. 100 imágenes/mes gratis.
imagemin (npm, automatizado)
npmjs.com/package/imagemin — Para buildtools. Integra en tu workflow: npm run build optimiza automático. Ideal en CI/CD.
Cloudflare Image Resizing (pago, CDN)
Transforma imágenes on-the-fly. Sirve WebP/AVIF automático, redimensiona según device, cachea en CDN. €10/1M transformaciones.
Imgix (pago, profesional)
imgix.com — CDN especializado. URL-based optimization: ?fm=webp&q=80&w=1200. Desde €30/mes.
Astro image integration (gratuito, build-time)
Si usas Astro, <Image> component optimiza automático: WebP, srcset, lazy loading. Sin configurar nada.
Tabla de decisión: qué herramienta usar
| Situación | Mejor opción |
|---|---|
| Soy diseñador, 5 imágenes, sin técnica | Squoosh.app |
| Tengo 50+ imágenes, necesito batch | ImageOptim (Mac) o cwebp |
| Integrar en pipeline automatizado | imagemin (npm) |
| CDN con transform on-the-fly | Cloudflare Image o Imgix |
| Usando Astro o Next.js | Image component nativo |
Setup automático en tu build
Astro (recomendado)
Astro optimiza imágenes automáticamente. Solo necesitas usar el componente:
---
import { Image } from 'astro:assets';
import myImage from '../images/my-image.png';
---
<Image src={myImage} alt="Description" /> Automáticamente: convierte a WebP, crea srcset, agrega width/height, lazy loading, CLS optimization. Zero config.
Next.js
import Image from 'next/image';
export default function MyComponent() {
return (
<Image
src="/images/hero.jpg"
alt="Description"
width={1200}
height={800}
priority
/>
);
} Next.js Image: optimiza automático, responsive, lazy loading. priority para hero (sin lazy loading).
Evitar CLS con width y height
CLS (Cumulative Layout Shift) ocurre cuando el navegador no sabe el tamaño de la imagen hasta descargarla. Mientras carga, el layout "salta".
<!-- ❌ MALO: CLS issue -->
<img src="image.webp" alt="...">
<!-- ✓ BIEN: CLS evitado -->
<img src="image.webp" alt="..." width="1200" height="800" loading="lazy"> Siempre incluye width y height. El navegador pre-calcula el espacio necesario y el layout no salta cuando la imagen carga.
Hero image: fetchpriority="high"
La imagen del hero afecta directamente el LCP. Dile al navegador que la priorize:
<img
src="hero.webp"
alt="Hero"
width="1200"
height="600"
loading="eager"
fetchpriority="high"
> fetchpriority="high": comienza descarga inmediatamente. loading="eager": no lazy load (carga en primer byte). Resultado: LCP -30-40%.
Preguntas frecuentes
¿WebP reduce calidad visual? +
No, si lo configuras bien. A quality=85-90, WebP es imperceptible de JPEG para el ojo humano, pero es 30% más pequeño.
Quality=75 sí pierde detalle. En fotos naturales, 85 es el sweet spot. En gráficos/logos usa PNG.
¿Necesito servir AVIF si ya tengo WebP? +
No es obligatorio, pero si quieres máxima compresión, sí. AVIF es 40-50% más pequeño que JPEG. El overhead de mantener 3 versiones (AVIF, WebP, JPEG) es mínimo si automatizas con imagemin.
Recomendación: para sitios grandes (muchas imágenes), sí vale la pena. Para 10 imágenes, overkill.
¿Lazy loading afecta SEO? +
No. Google entiende loading="lazy" y sigue indexando imágenes. Usa lazy loading para TODAS las imágenes debajo del fold.
Excepción: la imagen del hero no debe ser lazy (usa fetchpriority="high" en lugar).
¿Cuál es el tamaño ideal de imagen? +
Depende del uso. Como regla general:
- Hero: 1200x600px (WebP 100-150KB)
- Artículo: 800x600px (WebP 80-120KB)
- Thumbnail: 400x300px (WebP 30-50KB)
- Favicon: 16x16, 32x32 (PNG puro)
¿SVG vs PNG vs WebP para iconos? +
SVG: Mejor para iconos (vectorial, escalable, pequeño en bytes, soporte 100%).
PNG: Para gráficos con transparencia complejos.
WebP: Solo para fotos/raster. No uses para iconos.
Impacto en Core Web Vitals
LCP (Largest Contentful Paint): Si tu hero image está sin optimizar, LCP >4s. WebP + lazy loading → LCP <2.5s. Mejora: -50-60%
CLS (Cumulative Layout Shift): Sin width/height en imágenes = CLS >0.1 (FAIL). Con width/height = CLS <0.05 (PASS). Mejora: 100%
INP (Interaction to Next Paint): Imágenes ligeras → menos trabajo en el thread principal. INP -20-30%
Artículos relacionados
Cloudflare gratis: configuración completa
CDN gratuito con Image Resizing y optimizaciones automáticas
Hosting con LiteSpeed
Servidores rápidos con cache de imágenes automático
Plugins de caché para WordPress
WP Rocket, W3 Total Cache, LiteSpeed con optimización de imágenes
VPS para aplicaciones web
Servidores con máxima flexibilidad para setup automático
¿Tu sitio necesita hosting optimizado para imágenes?
No solo optimices imágenes: también necesitas un hosting que las sirva rápido via CDN. Nuestra herramienta te recomienda la plataforma perfecta según tu caso.
Encontrar hosting ideal →