Pintado del primer contenido (FCP)

Qué mide First Contentful Paint, qué puntuación de FCP es buena, por qué no es una Core Web Vital, en qué se diferencia de First Paint y LCP y cómo corregir un FCP lento.

Publicado por primera vez: 26 jun 2026 · Última actualización: 9 ago 2026 · Avanzado
Idiomas

First Contentful Paint (FCP) es el tiempo desde que una página empieza a cargarse hasta que se renderiza por primera vez cualquier parte de su contenido —texto, imagen, SVG o canvas no blanco—. Un buen resultado es ≤1,8 s en el percentil 75 de usuarios reales. NO es una Core Web Vital: las señales de posicionamiento son LCP, INP y CLS. FCP es una métrica diagnóstica (de laboratorio y de campo) y un componente de LCP —ocurre antes o al mismo tiempo que LCP—, por lo que sirve principalmente para detectar recursos que bloquean el renderizado y un TTFB lento. En Lighthouse 10 representa el 10 % de la puntuación de rendimiento. Corrígelo eliminando CSS/JS que bloqueen el renderizado, reduciendo el TTFB, insertando CSS crítico, usando font-display: swap y preconectando con los orígenes necesarios.

TL;DR — FCP es el tiempo desde el inicio de la navegación hasta que se renderiza por primera vez cualquier contenido de la página (texto, imagen, <svg> o <canvas> no blanco). No es una Core Web Vital: es una métrica diagnóstica complementaria, de laboratorio y de campo, y un componente de LCP (FCP ocurre antes o al mismo tiempo que LCP). Umbrales de campo (p75): Bueno ≤ 1,8 s, necesita mejoras ≤ 3,0 s, deficiente > 3,0 s. En Lighthouse 10 representa el 10 % de la puntuación de rendimiento. Como el reloj de FCP empieza con la navegación, incluye el tiempo de redirección, la configuración de la conexión y el TTFB, por lo que las cifras de laboratorio (Lighthouse) y de campo (CrUX) suelen diferir. Corrígelo donde se origina: primero el CSS/JS que bloquea el renderizado, después el TTFB y luego las fuentes.

Qué mide FCP (con precisión)

La definición de Google, tomada del artículo de Philip Walton en web.dev, es la columna vertebral de la precisión aquí: “First Contentful Paint (FCP) measures the time from when the user first navigated to the page to when any part of the page’s content is rendered on the screen.” (traducción) «First Contentful Paint (FCP) mide el tiempo desde que el usuario navegó por primera vez a la página hasta que cualquier parte del contenido de la página se renderiza en pantalla». «Content», según el mismo documento, significa “text, images (including background images), <svg> elements, or non-white <canvas> elements.” (traducción) «texto, imágenes (incluidas las imágenes de fondo), elementos <svg> o elementos <canvas> no blancos».

La palabra que hace todo el trabajo es any. A FCP no le importa qué se renderiza: un logotipo de 40 píxeles cuenta igual que una imagen principal completa. Es la señal de «¿ya hay algo en pantalla?», precisamente por lo que es un indicador temprano y no una métrica de finalización.

Evidence for this claim FCP measures from navigation until the first text, image, SVG, or non-white canvas content is rendered. Scope: Current web.dev FCP definition and qualifying content types. Confidence: high · Verified: web.dev: First Contentful Paint

Hay un detalle fácil de pasar por alto que cambia la forma de leer la cifra: el reloj de FCP empieza con la navegación, así que incluye todo lo que ocurre antes de que se analice siquiera tu HTML. El propio punto clave de Google dice: “FCP includes any unload time from the previous page, connection set up time, redirect time, and Time To First Byte (TTFB) which can be significant when measured in the field.” (traducción) «FCP incluye cualquier tiempo de descarga de la página anterior, el tiempo de configuración de la conexión, el tiempo de redirección y el Time To First Byte (TTFB), que puede ser considerable cuando se mide en campo». Un servidor que tarda 1,5 s en responder ya ha consumido la mayor parte de tu presupuesto de 1,8 s antes de que el navegador procese un solo byte.

FCP NO es una Core Web Vital

Voy a ser tajante porque la mayoría de las páginas se andan con rodeos: FCP no es una Core Web Vital ni forma parte de las señales de posicionamiento de Google. Las Core Web Vitals son LCP, INP y CLS, y FCP no aparece en ninguna parte de la página de Google sobre las Core Web Vitals del posicionamiento en búsquedas.

Lo que es FCP, en la taxonomía de Google, es una «Other Web Vital»: una métrica complementaria útil para el diagnóstico. web.dev lo expresa así: “the metrics Time to First Byte (TTFB) and First Contentful Paint (FCP) are both vital aspects of the loading experience, and are both useful in diagnosing issues with LCP (slow server response times or render-blocking resources, respectively).” (traducción) «las métricas Time to First Byte (TTFB) y First Contentful Paint (FCP) son aspectos fundamentales de la experiencia de carga y ambas sirven para diagnosticar problemas de LCP (tiempos de respuesta lentos del servidor o recursos que bloquean el renderizado, respectivamente)».

Por tanto, la forma honesta de explicárselo a las partes interesadas tiene dos caras, y debes decir ambas sin titubear:

  • FCP no afecta directamente al posicionamiento. No optimices FCP «para SEO».
  • FCP es un buen diagnóstico de LCP, que sí afecta al posicionamiento. Los recursos que bloquean el renderizado aparecen primero en FCP.

FCP frente a First Paint (FP)

Se confunden constantemente:

  • First Paint (FP) se produce cuando el navegador pinta cualquier cosa, incluso un color de fondo sin contenido real.
  • FCP se produce solo cuando se renderiza contenido apto: texto, imágenes (incluidas las imágenes de fondo), elementos <svg> o elementos <canvas> no blancos. Es una lista específica definida por la especificación, no una regla imprecisa de «cualquier contenido del DOM», y conviene mantenerla precisa porque una imagen de fondo cuenta aunque no sea texto del DOM.

Por tanto, FP ≤ FCP, siempre. En la mayoría de las páginas son casi idénticos, porque es raro pintar un color de fondo sin contenido encima. Cuando existe una diferencia significativa, normalmente significa que se pintó un fondo meramente decorativo antes que cualquier contenido real. La API Paint Timing devuelve entradas tanto para first-paint como para first-contentful-paint, pero FCP es el que merece análisis; FP rara vez aporta algo accionable.

FCP frente a LCP

La otra pareja que la gente mezcla:

  • FCP = cuando se pinta cualquier contenido. Se produce pronto. Puede ser un logotipo diminuto o un enlace de navegación.
  • LCP = cuando se renderiza el elemento más grande de la ventana gráfica. Se produce en FCP o después.

La formulación de Google es que FCP mide cuándo se pinta cualquier contenido y LCP cuándo se pinta el contenido principal, por lo que LCP pretende ser más selectivo. Interpreta «más selectivo» como eso, no como «certificado como correcto»: ninguna de las dos métricas demuestra que el contenido principal real de la página esté completo o sea útil para el visitante. FCP solo confirma que se pintó algo apto; LCP confirma que lo hizo el candidato apto más grande. Una página puede tener un FCP rápido (logotipo a 0,5 s) y un LCP lento (imagen principal a 4 s); esa diferencia es en sí misma un diagnóstico útil. Y si tu FCP está cerca de tu LCP, suele ser una buena señal: significa que lo primero que se pintó también es lo más grande, sin un renderizado inicial desperdiciado en elementos de interfaz que no importan al usuario.

Evidence for this claim FCP answers when any eligible content first appears, while LCP tracks the largest eligible viewport candidate; neither metric proves the page's main content is complete or useful. Scope: field and lab Confidence: high · Verified: First Contentful Paint (FCP)

Conviene conocer una rareza de medición: debido a las restricciones de seguridad sobre la temporización de imágenes de origen cruzado, la API del navegador puede informar en casos excepcionales de un LCP anterior al FCP. Es un artefacto de medición, no algo que haya ocurrido físicamente.

Umbrales y por qué laboratorio y campo no coinciden

Umbrales de campo (CrUX, p75): Bueno ≤ 1,8 s · necesita mejoras ≤ 3,0 s · deficiente > 3,0 s. La orientación de Google es medir en el percentil 75 de las cargas de página, separado entre móviles y ordenadores.

Evidence for this claim A good FCP is 1.8 seconds or less at the 75th percentile; above 3 seconds is poor. Scope: Current web.dev FCP field thresholds. Confidence: high · Verified: web.dev: First Contentful Paint

Pero Lighthouse para ordenadores utiliza límites distintos y más estrictos: verde es aproximadamente 0–0,9 s, naranja 0,9–1,6 s y rojo más de 1,6 s, porque el laboratorio ejecuta un Chrome limpio y limitado en un dispositivo simulado, no en condiciones reales. (Esas bandas, al igual que las ponderaciones de la puntuación que aparecen más adelante, dependen de la versión de Lighthouse; esto refleja el documento de auditoría vigente al redactar estas líneas). La puntuación de FCP de Lighthouse es “a comparison of your page’s FCP time and FCP times for real websites, based on data from the HTTP Archive.” (traducción) «una comparación del tiempo de FCP de tu página con los tiempos de FCP de sitios web reales, basada en datos de HTTP Archive».

Esta es la fuente más común de confusión sobre FCP, así que interiorízala:

La línea de «bueno» de 1,8 s es el umbral de campo (CrUX p75). La línea «verde» de Lighthouse para ordenadores es de ~0,9 s. Son escalas distintas para trabajos distintos.

Las cifras de campo y de laboratorio difieren principalmente porque muestrean poblaciones distintas, no porque una sea universalmente «más verdadera». Lighthouse ejecuta una única sesión limpia con condiciones fijas de dispositivo y red. Campo/CrUX agrega dispositivos reales, redes reales, estados de caché y tipos de navegación, incluidas restauraciones del back/forward cache y páginas prerenderizadas, que no reciben automáticamente un FCP nuevo como una navegación normal; necesitan su propio tratamiento del ciclo de vida (la biblioteca web-vitals lo hace por ti). En la mayoría de los sitios, la cifra de campo resulta más alta: los usuarios reales arrastran cadenas de redirecciones, el tiempo de descarga de la página anterior y conexiones frías que una ejecución de laboratorio omite, pero eso es una tendencia, no una regla. Antes de interpretar una diferencia entre laboratorio y campo como un problema, comprueba que comparas situaciones equivalentes (misma clase de dispositivo y mismas condiciones de red). Usa los datos de campo para tu cifra del mundo real y Lighthouse para el diagnóstico.

Dónde encaja FCP en la puntuación de Lighthouse

En Lighthouse 10 —la versión actual al redactar estas líneas, no una cifra permanente— FCP representa el 10 % de la puntuación de rendimiento. La ponderación completa es:

MétricaPeso
Total Blocking Time (TBT)30 %
Largest Contentful Paint (LCP)25 %
Cumulative Layout Shift (CLS)25 %
First Contentful Paint (FCP)10 %
Speed Index10 %

La puntuación de rendimiento es una media ponderada de las puntuaciones de cada métrica, y Google señala que las ponderaciones cambian con el tiempo a medida que evoluciona su investigación. FCP se ha mantenido en el 10 % desde Lighthouse 8 hasta 10, pero confírmalo con la versión que estés ejecutando antes de tratar ese «10 %» como algo inmutable. La lectura práctica es que un FCP perfecto solo puede mover tu cifra de Lighthouse hasta cierto punto, y un FCP malo suele apuntar también a un LCP malo (comparten causas raíz), aunque es una coincidencia que conviene comprobar, no algo que la puntuación garantice.

Qué causa un FCP lento

En orden aproximado de prioridad:

  1. Recursos que bloquean el renderizado: el asesino número uno. El CSS y el JS síncrono del <head> obligan al navegador a esperar: no puede construir el CSSOM ni el árbol de renderizado, así que no puede pintar nada hasta descargar y analizar esos archivos.
  2. TTFB alto: FCP no puede producirse antes de que lleguen los bytes. Un servidor lento es la primera pieza del dominó y está dentro de la medición de FCP.
  3. Cadenas de redirecciones: cada redirección añade un viaje de ida y vuelta completo antes del primer byte.
  4. Estrategia de carga de fuentes web: font-display: block (o ninguna regla) puede dejar el texto invisible hasta unos 3 segundos. Aunque el pintado se produzca técnicamente sobre un fondo, el usuario no ve nada útil.

Cómo corregirlo

La lista completa, pero con un orden de prioridad que la documentación no te da. Son palancas habituales, no universales: comprueba primero tu traza o tira de película para ver qué recurso o fase está retrasando realmente tu candidato de FCP antes de aplicar correcciones (preconnect, preload o un cambio de font-display) que quizá no correspondan a tu página:

Haz esto primero (mayores beneficios):

  • Elimina el CSS y JavaScript que bloquean el renderizado. Inserta el CSS crítico de la zona visible directamente en <head>, carga el resto de forma asíncrona y añade async/defer a los scripts no críticos. Cambiar de sitio una etiqueta <link> no ayuda: el navegador no pintará hasta que todo el CSS se cargue y analice, independientemente de dónde esté la etiqueta.
  • Reduce el TTFB (tiempo de respuesta del servidor). Caché, CDN, un origen más rápido: cualquier cosa que entregue antes el primer byte reduce directamente el FCP.
  • Corrige la carga de fuentes. Usa font-display: swap (muestra inmediatamente el texto de fallback y cambia a la fuente web cuando está lista) o font-display: optional (omite la fuente web si aún no está en caché). Evita font-display: block para el texto crítico: es lo peor para FCP.

Después, ordena el resto:

  • Preconecta con los orígenes necesarios mediante <link rel="preconnect">: establecer pronto conexiones con orígenes de terceros importantes puede ahorrar 100–500 ms.
  • Precarga solicitudes clave (<link rel="preload">) para una fuente crítica o la imagen LCP.
  • Minifica el CSS, elimina CSS sin usar y elimina JavaScript sin usar: los archivos más pequeños se analizan antes y desbloquean antes el pintado.
  • Evita múltiples redirecciones, evita cargas de red enormes, sirve recursos estáticos con una política de caché eficiente, evita un DOM excesivo y minimiza la profundidad de solicitudes críticas. Es higiene general de la carga que alimenta el primer pintado.

La cadena diagnóstica FCP → TTFB → LCP

Así es como yo usaría realmente FCP, y es el enfoque que la documentación sugiere sin desarrollarlo: trata las tres métricas de carga como un único flujo de trabajo:

  1. FCP alto → comprueba los recursos que bloquean el renderizado (CSS/JS en <head>). Es la causa más habitual y la mejora más rápida.
  2. Comprueba también el TTFB: como FCP lo incluye, un servidor lento infla FCP antes de que entre en escena cualquier bloqueo del renderizado. La orientación de web.dev es que, como TTFB precede a FCP y LCP, tu servidor debe responder lo bastante rápido para que el percentil 75 de los usuarios alcance un FCP «bueno».
  3. Estos mismos problemas suelen propagarse a LCP —la métrica que sí es una señal de posicionamiento— porque FCP y LCP comparten con frecuencia causas raíz. Es una coincidencia que conviene comprobar, no una garantía: LCP tiene sus propios factores (el tamaño, la prioridad y la ruta de carga de su elemento más grande), así que corregir las causas de FCP no promete arreglar LCP. Es el lugar correcto para empezar a mirar, no el último paso.

Ese es el valor de FCP para un profesional de SEO: una lectura temprana y barata de si la ruta de carga está sana, antes de que termine la medición más selectiva de LCP.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.