Fragmento de código HTML mostrando una etiqueta link rel=preload con fetchpriority=high para una imagen heroGuía detallada

Guía de Precarga de Imágenes: Implementación Práctica para Reducir el LCP

Ver contenido

Guía de Precarga de Imágenes: Implementación Práctica para Reducir el LCP

Introducción

Esta guía cubre cómo identificar tu imagen LCP, implementar rel="preload" y fetchpriority="high" correctamente, precargar imágenes responsivas con srcset, y evitar los errores que anulan el beneficio de estas técnicas. El UXR SEO Analyzer reporta si la imagen LCP detectada carece de señales de prioridad.

Si necesitas el contexto conceptual primero, revisa Precarga de Imágenes Explicada.

Paso 1: Identificar la Imagen LCP

Usa el panel Performance de Chrome DevTools o el reporte de Lighthouse para identificar qué elemento se marca como Largest Contentful Paint. En la mayoría de páginas de contenido es la imagen hero o la imagen destacada del artículo.

Paso 2: Preload Básico para Imagen en HTML

<head>
  <link rel="preload" as="image" href="/hero.jpg" fetchpriority="high">
</head>
<body>
  <img src="/hero.jpg" fetchpriority="high" width="1200" height="600" alt="Descripción de la imagen">
</body>

Nota que declaramos fetchpriority="high" tanto en el <link rel="preload"> como en la etiqueta <img> para maximizar la señal de prioridad en ambos puntos del pipeline de carga.

Paso 3: Preload de Imágenes Responsivas

Cuando la imagen LCP usa srcset/sizes, el preload debe replicar esos mismos atributos usando imagesrcset e imagesizes para que el navegador precargue la variante correcta:

<link
  rel="preload"
  as="image"
  href="/hero-800.jpg"
  imagesrcset="/hero-400.jpg 400w, /hero-800.jpg 800w, /hero-1200.jpg 1200w"
  imagesizes="(max-width: 600px) 100vw, 800px"
  fetchpriority="high">

Sin imagesrcset/imagesizes, el navegador podría precargar una variante distinta a la que finalmente usa el <img>, desperdiciando el ancho de banda de esa descarga temprana.

Paso 4: Preload de Imagen de Fondo CSS

Si el elemento LCP es un background-image definido en CSS, el navegador no lo descubre hasta que procesa esa regla CSS—por eso el preload en el <head> es indispensable para el descubrimiento temprano:

<link rel="preload" as="image" href="/hero-bg.jpg" fetchpriority="high">
<style>
  .hero { background-image: url('/hero-bg.jpg'); }
</style>

Paso 5: Verificar el Resultado

  1. Abre las DevTools → panel Network y confirma que hero.jpg aparece entre las primeras solicitudes, con prioridad "High".
  2. Ejecuta Lighthouse y compara el timestamp de LCP antes/después del cambio.
  3. Confirma que no hay loading="lazy" en la misma imagen—es el error que anula el efecto del preload.

Errores Comunes

ErrorConsecuenciaCorrección
Preload con href distinto al src realEl navegador descarga un recurso que nunca se usa, y no acelera nadaSincronizar exactamente la URL del preload con la del <img>
Precargar más de una imagen como "high"Se diluye la prioridad y compite con la imagen LCP realReservar fetchpriority="high" solo para el elemento LCP
Combinar preload con loading="lazy"Señales contradictorias; el navegador puede ignorar el preloadNunca usar lazy loading en la imagen LCP
Preload sin atributo as="image"El navegador no asigna la prioridad correcta al recursoSiempre declarar as="image"

Implementación en Frameworks

Next.js

El componente next/image expone una prop priority que, al aplicarse a la imagen LCP, genera automáticamente tanto el <link rel="preload"> correspondiente en el <head> como el atributo fetchpriority="high" en el elemento renderizado, y además desactiva el lazy loading para esa imagen específica:

import Image from 'next/image';

export default function Hero() {
  return (
    <Image
      src="/hero.jpg"
      width={1200}
      height={600}
      alt="Descripción de la imagen"
      priority
    />
  );
}

Nuxt / Vue

El componente <NuxtImg> de @nuxt/image acepta una prop preload equivalente que genera el mismo par de señales (link preload + fetchpriority) durante el renderizado del lado del servidor.

HTML Estático / Astro

En sitios sin framework de imágenes integrado, la implementación manual mostrada en los pasos anteriores es la única opción, por lo que vale la pena encapsularla en un componente o partial reutilizable para no repetir el patrón en cada plantilla.

Precarga de Múltiples Candidatos LCP

En sitios con contenido dinámico (por ejemplo, un feed donde el primer elemento cambia según el usuario), puede que no sepas en tiempo de build cuál imagen exacta será el LCP. Una estrategia común es precargar la imagen del primer elemento del feed en el servidor, ya que estadísticamente es la más probable candidata a LCP, y aceptar que en casos atípicos el beneficio sea menor.

Monitoreo Continuo del LCP tras la Implementación

Una vez implementado el preload, valida el impacto real (no solo en laboratorio) integrando la métrica de campo con la librería web-vitals:

import { onLCP } from 'web-vitals';

onLCP((metric) => {
  console.log('LCP real de este usuario:', metric.value, 'ms');
  // envía el valor a tu sistema de analítica junto con la URL de la página
});

Compara la distribución de LCP de campo antes y después del cambio durante al menos una semana, ya que las condiciones de red variables entre usuarios pueden ocultar mejoras que sí son consistentes en el agregado.

Precarga de Fuentes vs. Precarga de Imágenes

Es común que un sitio ya use rel="preload" para fuentes web críticas, pero no lo extienda a la imagen LCP. Ambos recursos compiten por el mismo presupuesto de ancho de banda inicial, así que agregar un preload de imagen sin revisar cuántos preloads ya existen puede diluir la prioridad de todos ellos. Como regla general, limita los preloads críticos (fuente principal + imagen LCP) a un máximo de 2-3 recursos por página; agregar más preloads de los que realmente son críticos para el renderizado inicial reduce el beneficio de cada uno.

Preload Condicional según el Viewport

En layouts donde la imagen LCP cambia entre móvil y escritorio (por ejemplo, un hero distinto por breakpoint), puedes usar el atributo media en el <link rel="preload"> para que el navegador solo descargue la variante relevante según el ancho de viewport, evitando descargar ambas imágenes innecesariamente:

<link rel="preload" as="image" href="/hero-mobile.jpg" media="(max-width: 600px)" fetchpriority="high">
<link rel="preload" as="image" href="/hero-desktop.jpg" media="(min-width: 601px)" fetchpriority="high">

Resumen de Decisión Rápida

PreguntaRespuesta
¿Es esta la imagen LCP de la página?Sí → aplica preload + fetchpriority. No → no la toques.
¿La imagen LCP está en un fondo CSS?Sí → preload es obligatorio para el descubrimiento temprano.
¿Ya hay 2-3 preloads críticos en la página?Sí → evalúa si realmente necesitas agregar uno más.
¿La imagen tiene loading="lazy"?Sí → elimínalo si es la imagen LCP.

Trabajando junto a una Content Security Policy

Los sitios con una Content Security Policy estricta a veces bloquean las señales de preload sin querer si la directiva img-src no cubre el dominio del CDN donde vive la imagen precargada. Si un preload parece no tener efecto, revisa la consola del navegador en busca de advertencias de violación de CSP antes de asumir que la técnica en sí falló—esta es una de las razones más comunes por las que una etiqueta de preload correctamente escrita no acelera nada en producción.

Artículos Relacionados


Referencias

  1. web.dev - Preload critical assets to improve loading speed
  2. web.dev - Optimize resource loading with the Fetch Priority API
  3. web.dev - Preload responsive images
  4. web.dev - Optimize Largest Contentful Paint
  5. Chrome Developers - LCP request discovery
  6. Chrome Developers - Avoid chaining critical requests

Artículos relacionados

Versión relacionada

Introducción

Precarga de Imágenes: Cómo rel=preload y fetchpriority Aceleran tu LCP

Precargar la imagen LCP con rel=preload o fetchpriority=high es uno de los cambios de menor esfuerzo y mayor impacto para mejorar el Largest Contentful Paint.

Hub de categoría

Hub

Images Seo Hub

Las imágenes son críticas para el engagement del usuario, pero también pueden ser el mayor cuello de botella de rendimiento de tu sitio web

En la misma categoría

Guía detallada

Lcp Optimization Guide

Largest Contentful Paint (LCP) mide cuándo el elemento de contenido más grande se vuelve visible para los usuarios

Guía detallada

Fetchpriority Optimization Guide

Esta guia completa te lleva a traves de estrategias avanzadas de implementacion de fetchpriority

Guía detallada

Lazy Loading Best Practices Guide

El lazy loading es una de las técnicas más efectivas para mejorar el rendimiento de páginas—cuando se usa correctamente

Otros temas

Hub

Performance Seo Hub

El rendimiento es un factor de ranking crítico e impacta directamente la experiencia del usuario