Mejores prácticas de imágenes e ícones
Un resumen condensado de las 25 mejores prácticas más importantes extraídas de cada página en esta sección.
Busca en todas las páginas de la documentación
Un resumen condensado de las 25 mejores prácticas más importantes extraídas de cada página en esta sección.
🤖 Read the SystemsArchitect.io Blog for over 100+ cloud architecture articles 🔥
next/image para que Next.js sirva automáticamente WebP/AVIF, cargue de forma diferida las imágenes fuera de pantalla y genere tamaños responsivos. La etiqueta <img> sin procesar no incluye optimización y daña el LCP.fill sin la prop sizes hace que el navegador descargue la variante más grande para cada dispositivo. Proporciona una cadena sizes consciente de puntos de corte que coincida con tus columnas de diseño reales.fill debe tener position: relative (o absolute/fixed) más dimensiones definidas, o la imagen se colapsa a altura cero. Usa un envoltorio de relación de aspecto para bloquear el diseño.priority a imágenes hero por encima del pliegue (típicamente una o dos por página). El uso excesivo cancela el beneficio de carga diferida de next/image.images.unsplash.com, images.pexels.com, cdn.pixabay.com) a images.remotePatterns en next.config.ts y reinicia el servidor de desarrollo. Las entradas faltantes causan errores 400 en tiempo de ejecución, no en tiempo de compilación.StaticImageData con width, height y un blurDataURL generado automáticamente, eliminando boilerplate manual. También habilitan placeholder="blur" sin trabajo extra.width y height definen el tamaño solicitado y la relación de aspecto - no redimensionan ni recortan el elemento renderizado. Controla el tamaño visual con clases CSS..env.local. Pixabay es especialmente arriesgado porque la clave es un parámetro de consulta.next: { revalidate: 3600 } para que te mantengas dentro de límites de tasa por hora (Unsplash 50/5000, Pexels 200, Pixabay 100/min) y mantengas las páginas rápidas. Esto también evita sobrecargar las APIs de terceros en cada solicitud.Authorization: Client-ID <key>, Pexels requiere la clave sin procesar sin prefijo Bearer, y Pixabay usa un parámetro de consulta key. Mezclar estos devuelve un 401 y desperdicia tiempo de depuración.regular/webformatURL/large para visualización y reserva raw/original/fullHDURL para descargas, ya que los originales pueden exceder 10MB. Servir imágenes de tamaño excesivo deshace el punto de un canal de optimización.download_location cada vez que se usa una foto. Pexels y Pixabay fomentan fuertemente la atribución incluso cuando no es estrictamente requerida.alt de Pexels o alt_description de Unsplash pueden estar vacíos, ser genéricos o nulos. Proporciona un respaldo significativo para mantener las imágenes accesibles.react-icons desde una ruta de familia como react-icons/fa - importar desde la raíz del paquete puede derrotar el tree-shaking y agrupar miles de ícones sin usar. La misma disciplina se aplica a cualquier importación de ícones de estilo barrel.size y color; establece dimensiones y color a través de utilidades de Tailwind como h-6 w-6 text-blue-500. Alias imports cuando uses variantes outline y solid del mismo ícono en un archivo.LucideIcon, IconType, o React.ComponentType<SVGProps<SVGSVGElement>> para tipificar props de ícones para que puedas renderizarlos con <Icon size={…} />. Pasar un elemento renderizado en lugar de un tipo de componente rompe los botones envolventes reutilizables.IconContext.Provider de react-icons usa React Context y debe vivir en un Componente Cliente en el App Router. Colócalo lo suficientemente alto en el árbol para cubrir el subárbol que deseas estilizar.stroke="currentColor" (o fill="currentColor") en ícones SVG en línea para que hereden color a través de clases padre text-*. Esto hace que un conjunto de ícones hecho a mano se comporte como Lucide o Heroicons.aria-hidden="true" y sin role; los ícones informativos necesitan role="img" más un aria-label. También escribe atributos SVG en camelCase (viewBox, strokeWidth) y mantén viewBox incluso después de la optimización de SVGO.fill y stroke a negro, así que los ícones basados en stroke necesitan fill="none" e ícones rellenos necesitan stroke="none" para evitar renderización sorpresa. El comportamiento solo stroke de Lucide es un ejemplo concreto - fill no tiene efecto allí.blurDataURLs (alrededor de 8x8 píxeles) con anticipación y cachéalos con tus metadatos de imagen. Generarlos por solicitud con sharp añade latencia y no puede ejecutarse en el Edge Runtime.blur() solo a placeholders diminutos, nunca a imágenes de resolución completa.favicon.ico en la raíz de app/, y suelta icon.*, apple-icon.*, opengraph-image.* y twitter-image.* en los segmentos de ruta donde deben aplicarse. Next.js los conecta en <head> automáticamente y alcanza las imágenes OG por ruta.ImageResponse de next/og usa Satori, que soporta solo flexbox (sin grid), sin background-image: url(), y requiere fuentes cargadas como ArrayBuffer. Apunta a 1200x630, exporta un alt, y prefiere runtime = "edge" para imágenes rápidas y cacheables por página.Revisado por Chris St. John·Última actualización: 16 jul 2026
🤖 Read the SystemsArchitect.io Blog for over 100+ cloud architecture articles 🔥