Por qué me obsesiona optimizar imágenes
Trabajo con proyectos digitales desde hace años y una cosa se repite en casi todos: las imágenes mal optimizadas matan la velocidad y la conversión. Yo quiero que mis productos se vean bien y carguen rápido. No es solo estética: es experiencia de usuario, SEO y reducción de costes de hosting. En este artículo comparto mi flujo, herramientas y decisiones prácticas para reducir el peso sin sacrificar la calidad.
Principios básicos que aplico siempre
- Priorizar propósito: ¿esa imagen es hero, producto, ícono o fondo? Cada caso tiene requisitos distintos de resolución y formato.
- Optimizar antes de subir: trabajo las imágenes en local o en pipeline, no dependo de subir pesados y esperar a que el CDN las reduzca.
- Servir formatos modernos: siempre que sea posible uso WebP o AVIF para navegadores compatibles y dejo JPEG/PNG como fallback.
- Responsive y adaptativo: nunca subo una única versión de gran tamaño; implemento srcset y tamaños para diferentes pantallas.
- Lazy loading y prioridad: pinto primero lo que se ve y perezoso el resto.
Elegir el formato correcto
El formato marca la mayor parte de la diferencia entre calidad y peso. Aquí resumo mi criterio:
| Formato | Cuándo usarlo | Ventaja |
|---|---|---|
| JPEG | Fotos con muchos tonos | Compatibilidad máxima, buena compresión con pérdida |
| PNG | Gráficos con transparencia o pocos colores | Sin pérdida, transparencia |
| WebP | Fotos y gráficos en navegadores modernos | Peso ~25-40% menor que JPEG manteniendo calidad |
| AVIF | Proyectos que buscan máximo ahorro | Mejor compresión que WebP, aún menos soporte en ciertos entornos |
| SVG | Íconos, logotipos y gráficos vectoriales | Escalable y muy ligero si está optimizado |
Mi regla práctica: generar WebP y AVIF en el pipeline y servir JPEG/PNG como fallback para navegadores antiguos. En sitios estáticos uso picture o srcset para ofrecer múltiples versiones.
Compresión: pérdida vs sin pérdida
¿Pérdida o sin pérdida? Depende. Para fotografías casi siempre uso compresión con pérdida porque el ahorro de peso es enorme y la diferencia visual suele ser mínima si ajustas la calidad. Para iconos y gráficos con texto uso compresión sin pérdida o SVG.
Algunos parámetros que suelo usar como referencia:
- JPEG: calidad entre 60–80% según la imagen.
- WebP: quality 60–80 o usar opciones de compresión automática.
- AVIF: calidad similar a WebP pero con parámetros más agresivos cuando la compatibilidad está controlada.
- PNG: aplicar PNG-quantización si es posible para reducir colores.
Herramientas que uso
En mi flujo incorporo herramientas manuales y automatizadas. Algunas favoritas:
- Squoosh — excelente para pruebas rápidas y ver diferencias visuales entre formatos.
- ImageOptim (macOS) / Trimage (Linux) — para optimizar imágenes locales en lote.
- TinyPNG — útil para compresión rápida con muy buenos resultados en PNG/JPEG.
- Imagemin — para automatizar en builds; plugins para WebP/AVIF.
- Cloudinary o Imgix — servicios que hacen transformación y optimización on-the-fly, muy útiles para catálogos grandes.
Responsive images: srcset y sizes
Una de las mejores inversiones en tiempo es configurar correctamente srcset y sizes. Así el navegador descarga la versión óptima según el ancho de la pantalla y la densidad de píxeles.
Ejemplo simplificado que siempre uso:
<img src="imagen-800.jpg" srcset="imagen-400.jpg 400w, imagen-800.jpg 800w, imagen-1200.jpg 1200w" sizes="(max-width: 600px) 100vw, 50vw" alt="Descripción">
Esto reduce descargas innecesarias en móviles y evita servir un 1200px a una pantalla pequeña.
Retina y densidades de pantalla
Para imágenes rasterizadas en interfaces que deben verse nítidas en pantallas retina suelo proveer versiones @1x y @2x (o incluso @3x para casos puntuales). Con srcset también puedes declarar versiones por densidad:
<img src="logo.png" srcset="logo.png 1x, [email protected] 2x" alt="Logo">
Sin embargo, para iconos y gráficos vectoriales prefiero SVG: son nítidos sin duplicar peso.
Lazy loading y prioridad de carga
Aplico lazy loading en imágenes que no están en el viewport inicial usando el atributo loading="lazy" o librerías como lozad.js si necesito soporte adicional. Para imágenes above-the-fold las cargo normalmente y a veces uso un placeholder ligero (blur-up) para mejorar la percepción de velocidad.
Automatización en el pipeline
En proyectos con despliegues continuos integro optimización en el build:
- Generar múltiples tamaños y formatos con scripts (Imagemin, Sharp).
- Subir versiones optimizadas a un CDN (Cloudflare, Fastly, S3 + CloudFront).
- Usar transformaciones bajo demanda (Cloudinary, Imgix) cuando el catálogo es grande y cambian los requisitos.
Esto evita errores humanos y garantiza coherencia entre entornos.
SEO y accesibilidad
Optimizar no es solo peso: también es semántica. Siempre añado atributos alt descriptivos y, cuando es relevante, atributos width y height en las imágenes para evitar reflow (layout shift). Google valora el CLS bajo y imágenes que no hacen saltos de diseño.
Metadatos, perfiles de color y privacidad
Antes de subir, elimino metadatos EXIF que no sean necesarios (salvo cuando uso información técnica para galerías). También convierto imágenes a sRGB para evitar diferencias de color entre navegadores. Esto reduce peso y protege información sensible.
Casos prácticos y ejemplos reales
En un e-commerce reduje el peso medio de imágenes de producto de 600 KB a 120 KB usando AVIF con fallback WebP/JPEG, generando tres tamaños por imagen y sirviendo desde Cloudinary. Resultado: mejora de 40% en First Contentful Paint y aumento del 8% en conversiones organicas. No es magia: fue aplicar los principios descritos.
Errores frecuentes que evito
- Subir imágenes exportadas directamente desde la cámara sin procesarlas.
- Usar PNG para fotografías por defecto.
- No ofrecer fallbacks para navegadores antiguos.
- No medir antes y después: siempre hago pruebas con Lighthouse o WebPageTest.
Si quieres, puedo compartir un pequeño script de ejemplo para generar WebP y AVIF con Sharp o una configuración de Imagemin para tu proyecto. Dime qué stack usas y lo adaptamos.