Cómo usar el atributo fetchpriority para mejorar el rendimiento de tu web

·
Fetchpriority: atributo HTML que prioriza la carga del recurso LCP para mejorar Core Web Vitals

La carga eficiente de recursos es clave para una buena experiencia de usuario y un mejor SEO técnico. En este artículo estudiaremos a fondo el atributo HTML fetchpriority y cómo emplearlo para optimizar métricas web críticas como Largest Contentful Paint (LCP) y First Contentful Paint (FCP).

También compararemos fetchpriority con otras técnicas como el atributo loading de lazy loading, el uso de preload y el concepto de Priority Hints, mostrando ejemplos prácticos (correctos e incorrectos) y recomendaciones para implementarlo en sitios complejos (e-commerce, portales de contenido, etc.). Empecemos entendiendo qué es exactamente fetchpriority y cómo funciona.

¿Qué es el atributo fetchpriority y cómo funciona?

El atributo fetchpriority es un indicador estándar en HTML que permite sugerir al navegador la prioridad con la que debe cargar un recurso específico. En esencia, es parte de la API Fetch Priority (antes conocida como Priority Hints ) y admite los valores enumerados high, low y auto para señalar si un recurso se debe descargar con prioridad alta, baja o por defecto. El valor predeterminado es auto (equivalente a no establecer preferencia).

Al usar este atributo en elementos HTML como imágenes, scripts o enlaces <link> (incluido preload), se le indica al navegador qué tan importante es ese recurso en comparación con otros, de modo que pueda ajustar su orden de descarga en la cola de red.

Cuando un navegador analiza una página web, asigna automáticamente prioridades de descarga según el tipo de recurso y su ubicación en el DOM. Por ejemplo, las hojas de estilo en el <head> suelen ser prioridad “muy alta” porque bloquean el renderizado, mientras que las imágenes en el cuerpo inicialmente pueden recibir prioridad más baja.

Normalmente los navegadores hacen un buen trabajo determinando esto de forma automática, pero no siempre es óptimo para todas las páginas. Aquí es donde fetchpriority nos da control adicional: el desarrollador puede aumentar o disminuir manualmente la prioridad de ciertos recursos importantes (o poco importantes) para optimizar el orden de carga.

En la práctica, agregar fetchpriority=»high» a un recurso crítico (por ejemplo, la imagen principal hero de la página) le dice al navegador: “tan pronto descubras este elemento, cárgalo con alta prioridad”. Análogamente, usar fetchpriority=»low» en recursos menos urgentes (como scripts no críticos o imágenes secundarias) sugiere al navegador que puede posponer su descarga en favor de otros elementos más importantes.

Es importante destacar que este atributo solo influye después de que el navegador descubre el recurso en el HTML; no adelanta la detección del elemento, sino que ajusta su prioridad una vez conocido. Por tanto, fetchpriority complementa (no reemplaza) técnicas como preload que sirven para descubrir recursos antes de tiempo.

Soporte en navegadores y estado actual

El atributo fetchpriority es relativamente reciente, por lo que inicialmente solo estaba disponible en unos pocos navegadores como Chrome y Edge (Chromium), desde su versión 101, en abril de 2022. Estos navegadores introdujeron la funcionalidad como parte de un esfuerzo de Priority Hints, incluso renombrando la antigua propuesta de atributo importance al definitivo fetchpriority.

Desde octubre de 2024, fetchpriority es Baseline: MDN lo marca como disponible en las versiones actuales de Chrome/Edge (desde la 101), Safari (desde la 17.2) y Firefox (desde la 132, el último en llegar), por lo que hoy puede tratarse como una optimización práctica y no como una curiosidad experimental.

Eso sí, conviene recordar que sigue siendo una hint: el navegador puede ajustar la prioridad final según sus propias heurísticas. Por eso, la forma correcta de validarlo no es asumir que siempre mejora el LCP, sino comprobarlo con waterfall, trazas de red y métricas reales tras el cambio. En navegadores más antiguos, simplemente se ignora sin romper la página.

¿Dónde se puede utilizar? Principalmente en elementos HTML cuyos recursos asociados impliquen descargas de red. La especificación HTML lo admite en tres elementos: <img> para imágenes, <script> y <link> (por ejemplo, un <link rel=»preload»> o un <link rel=»stylesheet»>). Los <iframe> no lo admiten: para ellos, la herramienta es loading=»lazy». Veamos unos ejemplos rápidos:

<!-- Aumentar prioridad de la imagen LCP (hero) -->

<img src="hero.jpg" alt="Imagen principal" fetchpriority="high">

<!-- Depriorizar un script no esencial de terceras partes -->

<script src="analytics.js" fetchpriority="low" async></script>

<!-- Iframe de contenido secundario: fetchpriority no aplica, se difiere con lazy -->

<iframe src="https://externo.com/widget" loading="lazy"></iframe>Lenguaje del código: HTML, XML (xml)

En el código anterior, estamos indicando que la imagen “hero.jpg” es crítica (alta prioridad), mientras que el script de analítica no lo es (prioridad baja) y el iframe del widget externo se difiere con loading=»lazy», porque fetchpriority no se aplica a iframes. En navegadores compatibles, esta simple pista puede reordenar el plan de carga a favor de mejorar la experiencia percibida por el usuario. En la siguiente sección profundizamos en por qué esto es beneficioso, explorando casos concretos como la métrica LCP.

Casos de uso: impacto en métricas LCP y FCP

El atributo fetchpriority nació principalmente para ayudar a cargar antes el contenido más importante de la página, mejorando métricas de renderizado inicial. Dos indicadores clave aquí son First Contentful Paint (FCP) – el momento en que aparece el primer contenido (texto o imagen) en pantalla – y Largest Contentful Paint (LCP) – el momento en que se muestra el elemento de contenido más grande o relevante en el viewport (por ejemplo, la imagen hero o el título principal). Un buen FCP y LCP son esenciales para la experiencia de usuario. Ojo: solo el LCP es una de las tres Core Web Vitals (junto con INP y CLS); el FCP no lo es, aunque ayuda a diagnosticar.

El caso de uso más claro de fetchpriority es acelerar la carga de la imagen principal que suele determinar el LCP. Si esa imagen tarda mucho en descargarse, el LCP se retrasa y la página se percibe lenta. Por defecto, los navegadores pueden asignar prioridad baja a imágenes hasta que calculan el layout (en Chrome, las imágenes arrancan con prioridad baja y suben a alta cuando el layout confirma que están en pantalla; desde Chrome 117, las cinco primeras imágenes grandes empiezan en prioridad media). Esto puede hacer que la imagen LCP quede “en cola” detrás de otros recursos menos importantes. Al marcarla con fetchpriority=»high», forzamos al navegador a tratarla como prioritaria desde el inicio, reduciendo o eliminando ese retraso en su descarga.

image
Ejemplo de cascada de carga donde la imagen LCP (resaltada en rojo) está marcada con fetchpriority=»high». La etiqueta «High» (alta prioridad) se asigna inmediatamente a dicha solicitud, acelerando su descarga y adelantando el momento LCP. Fuente: Avoid Overusing fetchpriority=»high» | DebugBear.

Beneficios de esta táctica

Mejora en el LCP

Addy Osmani contó que aplicar Priority Hints (fetchpriority=»high») en la imagen hero mejoró el LCP de Etsy un 4 %, y que algunos sitios llegaron a mejoras del 20-30 % en pruebas de laboratorio.

En un experimento con la página principal de Google Flights, añadir fetchpriority=»high» al elemento LCP (una imagen) redujo el LCP en 0,7 segundos (de 2,6 s a 1,9 s) en un experimento de laboratorio con Cloudflare Workers, no con usuarios reales.

Por su parte, un análisis de Kevin Farrugia con datos del HTTP Archive (enero de 2023) mostró que, en sitios móviles, una imagen marcada con prioridad alta comienza a descargarse apenas ~21ms después de ser descubierta, mientras que una similar con prioridad por defecto puede esperar ~102ms antes de iniciar descarga. Esa diferencia de ~80ms en el inicio puede ampliarse en situaciones congestionadas y con múltiples recursos, afectando significativamente al LCP. De hecho, se observó una correlación clara: a mayor retraso en la descarga inicial de la imagen LCP (por competencia con otros recursos), peor es el LCP registrado. En promedio, la imagen LCP de un sitio móvil mediano pasa ~98ms en cola antes de iniciar descarga, y en los peores casos (p90) hasta 810ms esperando. Usar fetchpriority=»high» ayuda a recortar esa espera, “impulsando” la imagen en la cola de prioridades.

Mejora en el FCP

Aunque fetchpriority se pensó principalmente para LCP, también puede influir positivamente en FCP en ciertos escenarios. Por ejemplo, si el primer contenido visible es una imagen, el mismo razonamiento de priorización aplica: esa imagen inicial aparecerá antes si se carga con prioridad alta.

Más comúnmente, el FCP suele depender de que se cargue el CSS crítico para poder pintar algo de texto. Aquí fetchpriority puede ayudar de forma indirecta: al depriorizar recursos no críticos que compiten en la red, dejamos vía libre para que CSS y contenido crítico se entreguen antes. Imaginemos una página cuya cabecera incluye varios scripts diferidos/async que no son necesarios para mostrar el primer paint.

Si añadimos fetchpriority=»low» a esos <script> o a ciertos fetch API de datos secundarios, el navegador les dará menor preferencia y dedicará más ancho de banda primero a las hojas de estilo, fuentes o imágenes críticas necesarias para el FCP. Esto puede traducirse en que el primer elemento (por ejemplo, el título en texto o un logo) se renderice más rápido en pantalla, mejorando el FCP.

En resumen, fetchpriority nos permite eliminar “ruido” en la cola de carga inicial – priorizando lo que importa (por ej., CSS, la imagen hero) y relegando lo prescindible – lo cual ataca directamente las demoras tanto en FCP como en LCP.

Cómo afecta a INP y CLS

Vale la pena mencionar que fetchpriority no afecta métricas de interacción o estabilidad visual (INP y CLS) de forma directa, pero al acelerar la carga inicial, contribuye a que el usuario pueda interactuar antes con el contenido principal cargado.

Además, desde el punto de vista de SEO técnico, optimizar LCP es muy valioso: Google recomienda que el LCP ocurra antes de 2.5s para brindar una buena UX, y los sistemas de ranking de Google tienen en cuenta las Core Web Vitals, aunque la propia documentación aclara que no compensan un contenido menos relevante.

Por tanto, implementar fetchpriority correctamente no solo mejora la velocidad percibida, sino que puede ayudar a cumplir las métricas que los buscadores consideran como indicadores de calidad de página.

Comparativa técnica: fetchpriority vs loading, preload y Priority Hints

Dado que existen otras técnicas para optimizar la carga de recursos, es importante entender cómo se compara fetchpriority con atributos como loading (lazy loading nativo), el uso de <link rel=»preload»> e incluso con el término genérico Priority Hints.

A continuación, desglosamos cuándo conviene usar cada uno y cómo se complementan entre sí:

fetchpriority vs loading (lazy/eager)

El atributo HTML loading controla la carga diferida de imágenes/iframes fuera de la vista (loading=»lazy» evita cargar recursos offscreen hasta que se acerquen al viewport). Por el contrario, fetchpriority no impide la carga de un recurso, sino que ajusta su orden de prioridad. No se deben combinar en el mismo elemento atributos contradictorios.

Por ejemplo, marcar una imagen como lazy (loading=»lazy») implica que no se cargue hasta que el usuario haga scroll cerca de ella, por lo que añadirle fetchpriority=»high» no tiene sentido (la imagen ni siquiera comenzará a cargarse inicialmente).

En general, las imágenes above the fold (en el primer pantallazo) deberían no usar lazy loading y en cambio podrían ser candidatas a fetchpriority=»high», mientras que las imágenes below the fold se pueden lazy-load y no requieren prioridad alta (el propio lazy loading ya difiere su carga). Chrome asigna prioridad baja por defecto a las imágenes (media a las cinco primeras imágenes grandes, desde Chrome 117) hasta determinar su posición en pantalla, pero con fetchpriority=»high» podemos indicarle de antemano qué imagen sí es crítica.

En resumen: use loading=»lazy» para retrasar la carga de contenidos fuera de vista y fetchpriority=»high» para acelerar la carga de lo más importante en vista. Si accidentalmente se usara lazy loading en una imagen LCP, conviene remover ese loading=»lazy» y sustituirlo por fetchpriority=»high» .

Por otro lado, también es válido usar fetchpriority=»low» en ciertos casos: por ejemplo en imágenes above the fold que sean decorativas o menos importantes que otra (aunque si realmente no son importantes, quizá deberían ser lazy). En la práctica, fetchpriority=»low» se usa más en scripts o en imágenes secundarias del primer pantallazo (por ejemplo, las diapositivas ocultas de un carrusel), dado que las imágenes no críticas usualmente ya se manejan con lazy loading.

fetchpriority vs <link rel=»preload»>

La directiva de preload y el atributo fetchpriority abordan problemas diferentes pero complementarios. Usar <link rel=»preload» href=»recurso» as=»tipo»> en el <head> le dice al navegador “descubre y empieza a cargar este recurso antes de encontrarlo en el HTML principal”.

Es ideal para recursos difíciles de descubrir de otro modo: por ejemplo, fuentes web definidas en CSS, imágenes de fondo en CSS, o archivos que solo se cargan vía JavaScript. Sin embargo, el preload no cambia la prioridad intrínseca con la que el navegador descarga ese recurso; simplemente lo mete antes en la cola.

Por ejemplo, si hacemos preload de una imagen LCP, el navegador la conocerá antes, pero todavía podría tratarla con prioridad baja por ser imagen. Aquí es donde fetchpriority aporta valor: podemos combinar ambos, preload + fetchpriority, para obtener lo mejor de cada uno. Primero descubrimos la imagen temprano (preload) y luego le decimos que es de alta prioridad (fetchpriority) para que no quede relegada.

En muchos casos, usar solo fetchpriority en la imagen HTML es suficiente, ya que el parser la descubrirá al llegar a esa etiqueta; pero si la imagen LCP está definida en CSS o es muy tardía en el HTML, un preload puede ser necesario acompañado del atributo de prioridad para asegurar su tratamiento preferente.

Cabe señalar que implementar preload correctamente puede ser complejo (hay que indicar el tipo correcto, usar condiciones de media queries para el recurso adecuado, etc.), y es fácil cometer errores que terminen pre-cargando recursos que no se usan. De hecho, es común ver sitios que hacen preload de imágenes equivocadas (ej.: cargan un .png cuando en producción se usa .webp, o pre-cargan tanto la versión móvil como desktop de un banner sin condicionar). Estos preloads mal gestionados consumen ancho de banda innecesariamente. fetchpriority en cambio es más difícil de «meter la pata», pues se aplica directamente en el elemento objetivo y el navegador solo actuará cuando ese elemento realmente exista.

En resumen: use preload para descubrir anticipadamente recursos cruciales (especialmente si no están en HTML directo), y use fetchpriority para priorizar la descarga de recursos ya descubiertos cuando la prioridad por defecto no se alinea con la importancia real del recurso.

A menudo, la combinación de ambas es la solución óptima para asegurar que, por ejemplo, la imagen LCP empiece a bajarse lo antes posible en cualquier navegador.

Un tip avanzado es que incluso se puede añadir el atributo fetchpriority dentro de la propia etiqueta <link rel=»preload»> (además de as=»image») para tener un único punto de configuración que funcione en navegadores con y sin soporte: los navegadores compatibles aplicarán la prioridad alta al preload, y los no compatibles al menos harán el preload normal ignorando el atributo desconocido (Fetch Priority and optimizing LCP).

fetchpriority vs Priority Hints

En realidad, Priority Hints es el nombre original de la iniciativa de especificación que dio lugar a fetchpriority. Durante el desarrollo se usó ese término (y un atributo temporal llamado importance) para describir la idea de permitir a los desarrolladores dar pistas sobre la prioridad de recursos al navegador.

Ya estandarizada, la funcionalidad se conoce formalmente como la Fetch Priority API, pero muchos artículos y documentos aún se refieren al concepto general como “Priority Hints”. Efectivamente, hablar de Priority Hints es hablar de atributos como fetchpriority en HTML o su contraparte en JS (la propiedad priority en fetch() o en las interfaces DOM de elementos). No son cosas opuestas, sino el concepto (hints) vs. la implementación (atributo API).

En resumen: Priority Hints es simplemente el concepto global de sugerir prioridades, mientras que fetchpriority es la forma concreta de aplicarlo (ya sea en HTML o HTTP headers). Para propósitos prácticos de SEO técnico, basta con recordar que el atributo HTML fetchpriority es nuestra herramienta para aprovechar Priority Hints. Adicionalmente, vale decir que fetchpriority no está limitado solo a HTML: también es posible usarlo vía JavaScript (ej.: img.fetchPriority = «high» en la API DOM de imágenes) o incluso en la cabecera HTTP Link de respuestas server-side para recursos ligados, aunque estas formas son menos comunes en entornos SEO. La mayoría de las veces utilizaremos la sintaxis HTML directa que es sencilla y declarativa.

Buenas prácticas

Habiendo clarificado estas comparaciones, podemos resumir algunas buenas prácticas: Usar fetchpriority=»high» no reemplaza a hacer las cosas básicas bien (cargar primero lo crítico, usar lazy para lo no visible, etc.), sino que es un refuerzo.

No intentes solucionarlo todo marcando todo como high (veremos por qué a continuación), sino apunta solamente a ese recurso cuyo adelanto realmente moverá la aguja de tus métricas (tipicamente la imagen LCP).

Y recuerda combinar con preload o otras técnicas cuando aplique, asegurándote de no duplicar descargas ni crear competencia innecesaria.

Ejemplos prácticos: uso correcto vs. incorrecto

A continuación, veamos ejemplos concretos en HTML de cómo implementar correctamente fetchpriority y casos de uso incorrecto que se deben evitar:

✅ Ejemplo de uso correcto

Supongamos una página cuyo elemento LCP es una imagen de cabecera grande. Queremos que esta cargue lo antes posible. El marcado HTML correcto sería algo así:

<!-- Imagen LCP (hero) con prioridad alta -->

<img src="portada.jpg" alt="Imagen destacada" width="800" height="600" fetchpriority="high">

<!-- Otra imagen crítica en viewport (ejemplo: logo), sin lazy loading pero sin fetchpriority high porque no es LCP -->

<img src="logo.png" alt="Logo sitio" width="120" height="120">Lenguaje del código: HTML, XML (xml)

En este ejemplo, la primera <img> (portada.jpg) es la candidata a LCP, por lo que le añadimos fetchpriority=»high». Nótese que no le pusimos loading=»lazy» ya que es contenido above the fold importante. La segunda imagen (logo) está también en pantalla inicialmente pero es pequeña y menos importante; podemos dejar que cargue normalmente (prioridad por defecto) ya que no suele ser el elemento LCP ni un cuello de botella.

Así, evitamos marcar como high más de lo necesario. Esta estrategia sigue la recomendación de usar fetchpriority=»high» solo en la imagen más importante de la página (normalmente la de LCP). De esta forma nos aseguramos de no saturar la “vía rápida” de la red con múltiples recursos compitiendo.

❌ Ejemplo de uso incorrecto 1

Marcar múltiples recursos como alta prioridad sin discernimiento. Veamos un anti-patrón:

<!-- Múltiples recursos marcados incorrectamente con prioridad alta -->

<img src="portada.jpg" alt="Hero" fetchpriority="high">

<img src="banner-publicidad.jpg" alt="Banner publicitario" fetchpriority="high">

<img src="imagen-decorativa.png" alt="Decoración" fetchpriority="high">Lenguaje del código: HTML, XML (xml)

En este caso hipotético, se le asignó fetchpriority=»high» a tres imágenes, incluyendo una de publicidad y otra meramente decorativa. Esto es contraproducente: usar fetchpriority de forma excesiva acaba causando competencia de ancho de banda entre todos esos recursos “High”, anulando el beneficio. El navegador intentará cargar todos con prioridad máxima simultáneamente, lo que en conexiones limitadas puede demorar la carga de todos ellos por igual.

El resultado es que todo tarda más y el verdadero contenido esencial (la portada) ya no recibe ventaja alguna. Este ejemplo ilustra la máxima “cuando todo es importante, nada lo es” – si marcamos todo como prioritario, al final hemos perdido la priorización diferencial. La práctica correcta habría sido identificar solo la imagen de portada como high, y las demás dejarlas en auto o incluso usar loading=»lazy» para la decorativa/publicidad si están fuera de vista inicial.

❌ Ejemplo de uso incorrecto 2

Combinar lazy loading con fetchpriority alto en el mismo elemento:

<!-- Configuración conflictiva: lazy + high a la vez -->

<img src="portada.jpg" alt="Hero" loading="lazy" fetchpriority="high">Lenguaje del código: HTML, XML (xml)

Aquí se le indica al navegador que no cargue la imagen hasta que sea necesaria (loading=»lazy») pero a la vez que la considere de alta prioridad. Esta configuración es ilógica: si la imagen es crítica debería cargarse eager, no lazy.

Como mencionamos, en un caso así el atributo fetchpriority se desperdicia porque el navegador ni siquiera iniciará la descarga hasta que la imagen esté cerca del viewport. Este error suele ocurrir cuando se aplica indiscriminadamente lazy loading a todas las imágenes por configuración global (por ejemplo, algunas plataformas ponen loading=»lazy» por defecto en todas las imágenes) y luego alguien añade fetchpriority alto a la supuesta imagen principal sin quitar el lazy.

La solución: las imágenes above the fold deben ser loading=»eager» (comportamiento por defecto si se omite el atributo) y en el caso de la principal usar fetchpriority=»high» en lugar de lazy. Las imágenes below the fold sí pueden llevar loading=»lazy» pero entonces normalmente no necesitan fetchpriority (o podrían llevar fetchpriority=»low» si por alguna razón queremos que se carguen pero con poca prioridad).

En resumen, los usos correctos implican: (1) Identificar correctamente el recurso crítico (especialmente la imagen LCP) y marcarlo con fetchpriority alto. (2) No abusar marcando muchos recursos como high; uno o dos a lo sumo en una página típica, el resto déjalos con prioridad automática o baja si conviene. (3) Evitar configuraciones mutuamente excluyentes (como lazy+high a la vez). Siguiendo estas pautas, fetchpriority se convierte en una potente pero sencilla mejora de performance.

Ejemplo hipotético: cuando el plugin de caché anula fetchpriority

Ejemplo hipotético. El caso que sigue es inventado para ilustrar el proceso de diagnóstico: no describe una web real ni de un cliente, y no recoge mediciones.

Imagina un blog en WordPress con una imagen destacada grande arriba de cada post. WordPress marca esa imagen con fetchpriority=»high» y no le pone loading=»lazy», como hemos visto. Pero el sitio usa además un plugin de caché u optimización con la carga diferida de imágenes por JavaScript activada para todo el sitio.

Ese tipo de carga diferida suele reescribir el HTML: mueve la URL real a un atributo como data-src, sirve en su lugar un marcador ligero (un SVG o un GIF transparente) y deja que un script cambie data-src por src cuando la imagen se acerca al viewport. El fetchpriority=»high» sigue en la etiqueta, pero ahora prioriza el marcador, no la foto. La imagen real no se pide hasta que se ejecuta el script: es el anti-patrón lazy + high del ejemplo incorrecto 2, solo que escondido.

<!-- Lo que genera WordPress -->

<img src="portada.webp" alt="Portada" width="1200" height="675" fetchpriority="high">

<!-- Lo que llega al navegador tras el plugin (simplificado) -->

<img src="data:image/svg+xml;base64,..." data-src="portada.webp" alt="Portada" width="1200" height="675" fetchpriority="high">Lenguaje del código: HTML, XML (xml)

Cómo lo diagnosticarías

  1. Mira el HTML que entrega el servidor (Ver código fuente, no el inspector, que ya muestra el DOM modificado por el script). Si la imagen destacada lleva data-src o un marcador en src, el navegador no puede descubrirla al leer el HTML.
  2. Abre Chrome DevTools, pestaña Network, filtra por Img y activa la columna Priority. Si la petición de la imagen real sale después del script del plugin, la carga diferida la está retrasando.
  3. Pasa PageSpeed Insights o Lighthouse y mira el desglose del LCP: un retraso de carga del recurso (resource load delay) grande apunta a que la imagen se descubre tarde, no a que pese demasiado.

Qué cambiarías

  • Excluir la imagen destacada (o las primeras imágenes de la página) de la carga diferida del plugin. La mayoría de plugins de caché tienen una lista de exclusiones por clase, por nombre de archivo o por «primeras N imágenes»; el nombre exacto del ajuste cambia de un plugin a otro.
  • Comprobar que, tras el cambio, la imagen sale en el HTML del servidor con su src real, fetchpriority=»high» y sin loading=»lazy».
  • Repetir la prueba de laboratorio y esperar unos 28 días a que los datos de usuarios reales (CrUX) recojan el cambio antes de sacar conclusiones.

Qué cabría esperar: en laboratorio, el LCP debería adelantarse, porque la imagen se descubre al leer el HTML en vez de esperar al script. Cuánto depende de cada web (peso del JavaScript, conexión, tamaño de la imagen), así que aquí no hay cifras: la única que vale es la que midas en la tuya.

Resultados de rendimiento y casos de estudio

Como hemos visto, fetchpriority bien usado puede mejorar notablemente los tiempos de carga perceptivos. Diversos casos de estudio y experimentos respaldan su eficacia:

  • Etsy.com: Según Addy Osmani, Priority Hints en la imagen LCP aceleró el LCP de Etsy un 4 % (el artículo no aclara si en campo o en laboratorio). Las mejoras del 20-30 % que cita en laboratorio son de otros sitios, no de Etsy. Esta mejora contribuye a que más usuarios vean el contenido principal más rápido, lo cual en una tienda en línea puede significar menos rebote y mejor conversión.
  • Google Flights: En un experimento de laboratorio, el LCP bajó de 2,6 s a 1,9 s (unos 700 ms) simplemente añadiendo fetchpriority alto a la imagen de héroe de la página, demostrando que incluso sitios ya optimizados pueden beneficiarse de afinar la prioridad de carga.
  • Análisis general (HTTP Archive): Un análisis de Kevin Farrugia (enero de 2023) con datos del HTTP Archive de páginas móviles encontró que, en la mediana, las imágenes LCP con prioridad alta empezaban su descarga en 21 ms tras ser descubiertas, contra 102 ms cuando tenían prioridad baja por defecto. También concluyó que en muchas páginas existe una “oportunidad” latente: la imagen LCP a menudo queda esperando en cola mientras otros recursos (scripts, CSS) terminan de cargarse, especialmente en páginas con muchos recursos de bloqueo. Aplicar fetchpriority reduce esa espera y, en consecuencia, mejora el LCP. En la web móvil mediana, la imagen LCP esperaba en cola unos 98 ms antes de empezar a descargarse; en el percentil 90, 810 ms. Priorizarla alivia este cuello de botella.
  • WordPress Core: El equipo de rendimiento de WordPress identificó el valor de esta técnica y propuso incorporarla por defecto en el CMS. Desde WordPress 6.3 (agosto de 2023), el núcleo añade automáticamente fetchpriority=»high» a la imagen que estima que será la LCP: la primera imagen grande de la respuesta (más de 50.000 píxeles de área), por ejemplo la imagen destacada de un post. Es una predicción, no una medición del LCP real. WordPress no marca otras imágenes con high y nunca combina en la misma imagen fetchpriority=»high» y loading=»lazy». Este es un respaldo importante, pues WordPress impulsa una porción enorme de sitios web; al integrar fetchpriority en su core, está consolidando su rol en el arsenal de SEO técnico.
  • DebugBear (monitor de rendimiento): En un artículo de DebugBear, se analizó una página donde se abusó de fetchpriority alto en muchos recursos, causando un detrimento en la velocidad. Ajustando la configuración para usar fetchpriority solo en el LCP real, lograron mejorar las métricas. Esto refuerza la idea de que bien aplicado es beneficioso, pero mal aplicado puede ser contraproducente.

En términos de SEO, todos estos resultados en rendimiento tienen un impacto indirecto pero importante. Mejorar LCP y FCP no solo agrada a los usuarios (que experimentan un sitio más rápido), sino que ayuda a cumplir con los objetivos de Core Web Vitals, que los sistemas de ranking de Google tienen en cuenta.

Google no calcula una puntuación única de experiencia de página (el informe de Search Console que la resumía desapareció en 2023) y su documentación deja claro que la relevancia del contenido pesa más. El factor SEO es moderado, pero en entornos competitivos cada optimización cuenta, y un sitio más rápido retiene mejor a los usuarios.

En resumen, fetchpriority aporta beneficios medibles de rendimiento que, al alinear tu sitio con las métricas web recomendadas por Google, acaban reforzando tu estrategia SEO técnico de forma integral.

Recomendaciones para implementación en sitios complejos

Implementar fetchpriority en un proyecto existente requiere cierta planificación, especialmente en sitios grandes o con contenido dinámico como e-commerce o medios. Aquí ofrecemos recomendaciones prácticas para aprovecharlo al máximo en escenarios complejos:

  • Identifica correctamente tu elemento LCP en cada página. Esto puede variar por página o plantilla: en un e-commerce de productos será la foto principal del producto; en una homepage quizá un banner hero; en un artículo de noticias, la imagen destacada o el título grande (si es texto, no aplica fetchpriority puesto que este solo afecta recursos descargables).

    Herramientas como Lighthouse o WebPageTest ayudan a diagnosticar qué elemento es LCP. Una vez identificado, asegúrate de que ese elemento esté presente en el HTML inicial (idealmente server-side rendered) y añade fetchpriority=»high» en su marca. Nota: si la imagen LCP solo se carga vía JavaScript (caso de algunas Single Page Applications), considera refactorizar para que esté en el HTML SSR o usar un <link rel=»preload»> con fetchpriority en el <head> para no demorar su descubrimiento.
  • No marcar más de uno o dos recursos como high por página. En la mayoría de casos un único recurso principal merece prioridad máxima (p. ej. la imagen LCP). Si tienes también un script particularmente crítico que debe cargarse rápido (raro en términos de renderizado; los scripts críticos suelen ser ya blocking y priorizados automáticamente), podrías marcarlo high, pero generalmente los navegadores ya priorizan JS de forma adecuada.

    Prioriza manualmente solo elementos que el navegador por sí solo no priorizaría lo suficiente. Recuerda: si todo es high, nada es high – evita el sobreuso.
  • Usa fetchpriority=»low» para “quitar del camino” recursos no urgentes. Por ejemplo, las diapositivas ocultas de un carrusel en el primer pantallazo: al marcarlas con fetchpriority=»low», el navegador da preferencia a la imagen visible y al contenido de la parte superior.

    Los iframes (un carrusel de vídeos de YouTube embebidos, por ejemplo) no admiten fetchpriority: para ellos, loading=»lazy» o una fachada que cargue el reproductor al hacer clic. Similar con scripts de terceros (analytics, widgets) que no afectan al contenido visible inmediato – cargarlos con prioridad baja puede mejorar el ritmo de carga visual.
  • E-commerce (tiendas en línea): En páginas de listado de productos (categorías, resultados de búsqueda) es tentador querer que todas las imágenes aparezcan rápido, pero marcar cada miniatura con fetchpriority=»high» sería desastroso. En su lugar, enfocarse en optimizaciones tradicionales: lazy load para productos fuera de pantalla, y quizás no lazy para los primeros 1-2 productos visibles pero sin necesidad de fetchpriority (a menos que alguna miniatura sea particularmente grande).

    Reserva fetchpriority alto para casos como la página de detalle de producto, donde una gran foto del producto es el centro de atención. Incluso allí, si tienes una galería con varias imágenes, marca solo la primera (la visible inicialmente) con high, y las demás déjalas en auto o lazy hasta que el usuario las necesite. Si tu sitio e-commerce carga muchas cosas en el head (CSS, varios JS), quizá la imagen LCP quede esperando: un buen preload + fetchpriority puede ser crucial en ese contexto para ganar la carrera al CSS/JS de terceros. Consejo: medir siempre antes y después con herramientas como Lighthouse para cuantificar la mejora de LCP al ajustar estas prioridades.
  • Medios y sitios de noticias: Suelen tener una imagen destacada grande, texto, y varias imágenes insertadas en el artículo. Aplica fetchpriority alto a la imagen destacada si está en el viewport inicial. Las imágenes dentro del artículo (cuerpo) usualmente están más abajo; aquí confía en lazy loading para no impactar la carga inicial. Muchos CMS (como WordPress) ahora automáticamente no ponen loading=»lazy» a la imagen destacada precisamente para permitir que cargue antes; asegúrate de esa configuración.

    Puedes también querer priorizar otras cosas: por ejemplo, si usas muchas fuentes web, un error común es que las fuentes (webfonts) tardan en cargar afectando el FCP; en tal caso, mejor que jugar con fetchpriority, considera usar rel=»preload» en las font files, ya que fetchpriority no se aplica directamente a las fuentes cargadas desde CSS. Pero si tienes por ejemplo un script de anuncios que realmente no necesitas cargar inmediatamente, puedes añadirle fetchpriority=»low» para que no compita con el contenido editorial. Cada medio debe balancear sus necesidades (anuncios vs contenido), pero desde el punto de vista de SEO/performance, el contenido propio debe ganar prioridad.
  • Test A/B en producción: Dado que cada sitio es distinto, es recomendable probar los cambios. Implementa fetchpriority en un entorno de prueba o en un porcentaje de usuarios y compara las métricas Web Vitals (LCP en especial) usando herramientas de monitoreo (puedes enviar las Web Vitals a Google Analytics 4 con la librería web-vitals, o usar herramientas como SpeedCurve, Calibre, DebugBear, etc.).

    Observa si hay mejoras significativas. Si la mejora no es evidente, verifica si quizás el elemento marcado ya tenía prioridad alta por otros motivos o si hay un cuello de botella diferente. Por ejemplo, si LCP es texto, fetchpriority en imágenes no ayudará; o si el LCP ocurre muy tarde por un bundle JS gigante bloqueando el hilo principal, la prioridad de red de la imagen no resolverá eso. En sitios complejos, a veces hay que combinar varias optimizaciones.
  • Mantente actualizado y revisa la implementación con las actualizaciones del sitio. Si tu sitio cambia el diseño o el contenido principal (por ejemplo, cambia la imagen hero por un video, o reorganizas la estructura), revisa si la estrategia de fetchpriority sigue siendo válida. Actualmente el atributo es bien soportado, pero siempre monitorea la compatibilidad (especialmente si tu analytics muestra usuarios de navegadores muy viejos). Dado que es una mejora progresiva, no debería causar problemas en ningún navegador (los antiguos simplemente ignoran el atributo), por lo que es bastante seguro.

En conclusión, la implementación de fetchpriority en sitios web complejos debe ser cirúrgica: identificar lo crítico y darle un empujón, identificar lo accesorio y quitarle prioridad, sin pasarse de la raya. Hecha correctamente, esta optimización de una sola línea puede ser ese detalle que te ayude a pasar de un LCP “aceptable” a “bueno” en Core Web Vitals, o que reduzca esas décimas de segundo que marcan la diferencia en la percepción de velocidad por parte del usuario.

Cada optimización cuenta

El atributo fetchpriority se ha convertido en una herramienta valiosa en el arsenal del SEO técnico y performance web. Nos permite afinar la forma en que los navegadores cargan nuestros recursos, asegurando que el contenido más importante de cada página llegue al usuario lo antes posible.

Los estudios y datos refuerzan su eficacia cuando se usa con mesura: implementaciones en sitios reales como Etsy o WordPress han validado mejoras en rendimiento y UX.

Finalmente, en sitios complejos la clave está en integrar fetchpriority dentro de una estrategia holística de performance: identificar LCP, ajustar prioridades, y mantener un equilibrio para no crear competencia interna.

En la era de Core Web Vitals, cada optimización cuenta. fetchpriority es una adición relativamente nueva pero potente para ayudarnos a lograr esas puntuaciones verdes en LCP y FCP, que pueden ayudar algo al posicionamiento y, sobre todo, a usuarios más satisfechos.

Aprende más sobre SEO Técnico

Daniel Pajuelo

Daniel Pajuelo es ingeniero informático y SEO Senior, actualmente trabajando en GuruWalk. En su blog personal escribe sobre Inteligencia Artificial, SEO, Programación...

Ver más sobre Daniel
Categorías SEO

Continua leyendo

Leer más sobre: SEO