Interaction to Next Paint (INP) para SEO

Qué mide INP, el umbral de ≤200 ms en p75, por qué reemplazó a FID en 2024 y cómo corregir una puntuación deficiente — desde una perspectiva de SEO técnico.

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

Interaction to Next Paint (INP) es la Core Web Vital de capacidad de respuesta. Observa cada clic, toque e interacción de teclado durante una visita e informa la latencia que (casi) todas ellas no superaron, medida en el percentil 75 en el campo. Bueno es ≤200 ms, deficiente es >500 ms. INP reemplazó a First Input Delay el 12 de marzo de 2024, porque FID solo medía el retraso de entrada de la primera interacción; INP mide la latencia completa (retraso de entrada + procesamiento + presentación) de todas ellas. Se corrige dividiendo tareas largas, cediendo al hilo principal, haciendo menos en los manejadores de eventos, reduciendo el DOM y controlando los scripts de terceros. Es una métrica de campo — Total Blocking Time es su proxy de laboratorio.

TL;DR — INP es la Core Web Vital para la capacidad de respuesta. Observa la latencia de todas las interacciones de clic, toque y teclado a lo largo de una visita e informa el valor en el percentil 75 (un valor atípico descartado por cada 50 interacciones) — no solo la primera entrada como hacía FID. La latencia de una interacción = retraso de entrada + duración del procesamiento + retraso de presentación. Bueno ≤ 200 ms, deficiente > 500 ms, juzgado con datos de campo en p75. Reemplazó a FID el 12 de marzo de 2024 (FID eliminado por completo de las herramientas en septiembre de 2024). Arrégralo dividiendo las tareas largas, cediendo al hilo principal con scheduler.yield(), haciendo menos en los manejadores de eventos, reduciendo el DOM, y difiriendo los scripts de terceros. Es una métrica de campo — Total Blocking Time es el proxy de laboratorio, y los dos no siempre coinciden.

Qué mide INP — y en qué se diferencia de FID

La definición de Google es precisa: INP “evalúa la capacidad de respuesta general de una página a las interacciones del usuario observando la latencia de todos los clics, toques y pulsaciones de teclado que ocurren a lo largo de la vida de la visita de un usuario a una página.” Evidence for this claim INP observes click, tap, and keyboard interaction latency throughout a page visit rather than measuring only the first input delay. Scope: Current web.dev INP definition and qualifying interaction types. Confidence: high · Verified: web.dev: Interaction to Next Paint Esa frase de “todas las interacciones… a lo largo de la vida” es la clave. INP es una métrica a nivel de visita, no de tiempo de carga — y el razonamiento de Google es que la gran mayoría del tiempo de un usuario en una página ocurre después de que se carga, por lo que la capacidad de respuesta durante el uso importa más que la primera impresión por sí sola.

El contraste con First Input Delay es la forma más clara de entenderlo: “FID solo medía el retraso de entrada de la primera interacción en una página. INP mejora FID al observar todas las interacciones en una página, desde el retraso de entrada hasta el tiempo que tarda en ejecutar los manejadores de eventos.” FID cronometraba una cosa sobre una interacción — la espera antes de que comenzara su manejador — e ignoraba tanto cuánto tiempo se ejecutaba el manejador como cuánto tiempo tardaba la pantalla en actualizarse. INP mide la latencia completa de cada interacción.

Un matiz que vale la pena entender bien, porque es un mito común: INP no es literalmente la peor interacción. Para evitar penalizar a una página por un único pico aleatorio, el navegador descarta un valor atípico por cada 50 interacciones y luego informa el valor en el percentil 75 de las vistas de página. En una visita con pocas interacciones, eso cae en la interacción más lenta; en una con muchas, un par de valores atípicos se excluyen primero.

Lo que cuenta como interacción también es más limitado de lo que la gente asume. Solo se miden clics, toques y pulsaciones de teclado. El desplazamiento, el paso del cursor y el zoom están explícitamente excluidos. Y un solo gesto puede disparar varios eventos — un toque produce pointerdown, pointerup y click — que INP agrupa como una interacción, no tres. Dentro de ese grupo, INP toma la duración de evento individual más larga, no la suma de todos — así que un pointerdown rápido junto a un click lento aún se informa como una interacción dimensionada por el evento lento. Si una página no tiene interacciones que califiquen durante una visita, INP simplemente no se informa para ella.

Las tres partes de la latencia de una interacción

La latencia de cada interacción se divide en tres partes secuenciales. Este es el modelo que debes tener en mente, porque cada parte apunta a una solución diferente:

Interaction latency = Input delay + Processing duration + Presentation delay

  1. Retraso de entrada — el tiempo antes de que tus manejadores de eventos puedan siquiera comenzar a ejecutarse, normalmente porque el hilo principal está ocupado terminando una tarea larga.
  2. Duración del procesamiento — el tiempo que tardan en ejecutarse todas las devoluciones de llamada de tus manejadores de eventos.
  3. Retraso de presentación — el tiempo desde que tus manejadores terminan hasta que el navegador pinta el siguiente fotograma en pantalla.

La compilación de atribución de web-vitals expone las tres (inputDelay, processingDuration, presentationDelay) para que puedas ver qué parte domina en una interacción real. Según los datos del Web Almanac de 2024, el retraso de presentación suele ser la parte más grande en la mediana — pero la duración del procesamiento es donde suele estar el margen de optimización, porque es la parte que se dispara en páginas mal construidas.

INP measures the whole interaction. Attribute the delay to the waiting, handler, or presentation phase before choosing a fix. Fuente: web.dev

The interaction begins with input delay while the event waits for the main thread. Processing duration follows while the event-handler callbacks execute. Presentation delay runs from the end of the handlers until the browser lays out and paints the next frame. Together these three sequential phases make up the interaction latency measured by INP.

© Patrick Stox LLC · CC BY 4.0 ·

Los umbrales — y la advertencia del campo p75

CalificaciónValor de INPMedido en
Bueno≤ 200 msPercentil 75, campo
Necesita mejoras> 200 ms y ≤ 500 msPercentil 75, campo
Pobre> 500 msPercentil 75, campo

Google Search Central establece el objetivo claramente — “an INP of less than 200 milliseconds” (traducción) «un INP inferior a 200 milisegundos» — y enmarca todo el programa así: “We highly recommend site owners achieve good Core Web Vitals for success with Search.” (traducción) «Recomendamos encarecidamente que los propietarios de sitios logren buenos Core Web Vitals para tener éxito en la Búsqueda». El presupuesto de 200 ms es realmente ajustado cuando recuerdas que el navegador quiere un fotograma cada ~16,7 ms a 60 fps; todo tu trabajo de manejadores más el renderizado tiene que caber.

Evidence for this claim INP is good at 200 milliseconds or less and poor above 500 milliseconds, assessed at the 75th percentile. Scope: Current web.dev INP thresholds for field measurement. Confidence: high · Verified: web.dev: Interaction to Next Paint

Por qué INP es una métrica de campo (y los datos de laboratorio no son suficientes)

Esta es la trampa que atrapa a muchos especialistas en SEO: una puntuación verde de Lighthouse no significa un buen INP. Pero «Lighthouse no puede medir el INP» necesita tres casos separados, no uno, o malinterpretarás tus propias herramientas:

  1. Una ejecución estándar de Lighthouse sin interacción no informa ningún INP. Solo observa la carga de la página — nunca hace clic, toca ni escribe nada — por lo que no hay interacción que cronometrar. Lighthouse recurre al Tiempo de bloqueo total (TBT) como proxy del tiempo de carga. El propio marco de Google: “Because TBT correlates well with INP, a page with a high TBT is a reasonable indicator that there may be high INP values during load.” (traducción) «Debido a que el TBT se correlaciona bien con el INP, una página con un TBT alto es un indicador razonable de que puede haber valores altos de INP durante la carga.» Las palabras clave son “during load.” (traducción) «durante la carga». El TBT no dice nada sobre una interacción que sale mal diez segundos después cuando se ejecuta un widget de carga diferida — es un proxy, nunca un sustituto ni una fórmula de conversión.
  2. Una interacción ejercitada manual o sintéticamente — hacer clic en un botón real en DevTools, o programar un clic en una herramienta de laboratorio — sí produce un número real de latencia estilo INP para esa interacción. Eso es útil para reproducir un error específico. Pero sigue siendo una ruta programada en un dispositivo: no puede representar la mezcla de campo de dispositivos reales, usuarios reales, objetivos de interacción reales y una vida de página completa de una visita. Como dice Google, el valor resultante “will be dependent on what interactions are performed during the measurement period,” (traducción) «dependerá de las interacciones que se realicen durante el período de medición», y el comportamiento real del usuario es demasiado variable para que una sola ejecución de laboratorio lo represente.
  3. La distribución de campo es lo único que realmente es el INP. Por eso la fuente autoritativa son los datos de campo: el Informe de experiencia de usuario de Chrome (CrUX), presentado a través de PageSpeed Insights y el informe de Core Web Vitals de Search Console. “Field data is the best source of information you can draw on when it comes to understanding which interactions are problematic for actual users.” (traducción) «Los datos de campo son la mejor fuente de información que puedes utilizar para entender qué interacciones son problemáticas para los usuarios reales.»

Usa el laboratorio (casos 1 y 2) para encontrar y reproducir una interacción lenta; usa el campo (caso 3) para confirmar si realmente está perjudicando las puntuaciones de los visitantes reales.

Por qué tu puntuación de INP es deficiente

Casi todos los problemas de INP se remontan al hilo principal bloqueado cuando un usuario interactúa. Los sospechosos habituales:

  • Tareas largas. Cualquier tarea del hilo principal de más de 50 ms es una tarea larga; la cantidad que supera los 50 ms es su «período de bloqueo». Mientras una se ejecuta, tu interacción no puede manejarse. Esta es la causa más grande.
  • Manejadores de eventos pesados. Hacer demasiado de forma síncrona dentro de un manejador de clic/entrada infla directamente la duración del procesamiento.
  • Tamaño grande del DOM. Los DOM más grandes cuestan más de renderizar, lo que infla tanto el retraso de entrada como el de presentación.
  • Scripts de terceros. Según el Web Almanac, los proveedores de consentimiento, los administradores de etiquetas, la analítica y los widgets de chat son los principales infractores — y afectan incluso a sitios de contenido simple. Son el primer lugar donde miro en una página que no construí.
  • JavaScript posterior a la carga. El hecho de que una página se haya renderizado no significa que haya terminado de cargar — los scripts que se evalúan después de la primera pintura pueden bloquear interacciones tempranas.

Cómo solucionarlo

Las estrategias, aproximadamente en orden de impacto:

1. Divide las tareas largas. El consejo principal de Google sobre los manejadores es “do as little work as possible in them.” (traducción) «haz la menor cantidad de trabajo posible en ellos». Divide un trabajo grande en tareas más pequeñas para que el navegador pueda intercalar una interacción del usuario. Cuando las tareas se dividen, “the browser can respond to higher-priority work much sooner — including user interactions.” (traducción) «el navegador puede responder mucho antes a trabajos de mayor prioridad — incluidas las interacciones del usuario».

2. Cede el hilo principal. La forma moderna y recomendada es scheduler.yield() (Chrome 129+, Firefox 142+): await scheduler.yield() pausa tu código, permite que el navegador maneje el trabajo pendiente y se reanuda con prioridad — así otras tareas no se adelantarán a tu continuación. La alternativa clásica es setTimeout(..., 0), que sigue funcionando pero envía tu código al final de la cola de tareas (y los navegadores aplican un mínimo de 5 ms después de varias llamadas anidadas). Una cosa que debes dejar de hacer: isInputPending() — Google ahora dice “we no longer recommend using this API.” (traducción) «Ya no recomendamos usar esta API». Consulta la pestaña Scripts para ver el patrón.

3. Haz menos en los controladores de eventos — difiere el trabajo no crítico. Ejecuta solo la actualización visual que el siguiente fotograma necesita de forma síncrona; empuja todo lo demás (guardado, corrección ortográfica, analítica, recuento de palabras) detrás de requestAnimationFrame + setTimeout o un yield. El usuario ve la respuesta de inmediato; el trabajo de registro ocurre después.

4. Evita el thrashing de layout. Leer propiedades de layout justo después de escribir estilos en la misma tarea obliga al navegador a hacer un layout síncrono que podría haber agrupado. Agrupa las lecturas y luego las escrituras.

5. Reduce el tamaño del DOM. Los árboles más pequeños se renderizan más rápido. content-visibility puede renderizar perezosamente los elementos fuera de pantalla para que no te cuesten durante la carga o la interacción.

6. Audita y difiere los scripts de terceros. Esta es la corrección SEO de mayor impacto en sitios reales. Carga los scripts de consentimiento/etiquetas/analítica de forma perezosa, condiciónalos a la interacción o sácalos de la ruta crítica. Una página de contenido “ligera” puede fallar INP simplemente por un widget pesado incrustado.

¿Afecta INP a los rankings?

Sí — INP es una de las tres Core Web Vitals, y las Core Web Vitals son parte de las señales de experiencia de página de Google. Pero es una señal ligera: un desempate entre resultados igualmente relevantes, no un factor de ranking primario. No persigas una puntuación INP perfecta a expensas del contenido y la relevancia.

Dos puntos SEO prácticos. Primero, el móvil es el número difícil. En el Web Almanac de 2024, ~74 % de los sitios móviles pasaron INP frente a ~97 % en escritorio — y como Google indexa primero el móvil, la cifra móvil es la que cuenta. Segundo, los sitios complejos rinden peor: solo ~53 % de los 1 000 sitios principales pasaron, porque las páginas ricas en funciones envían más JavaScript que bloquea el hilo principal. El desarrollo intensivo de funciones es un riesgo para INP, y las páginas de alta interacción — páginas de producto, checkout, resultados de búsqueda, formularios — están mucho más expuestas que el contenido estático.

INP vs FID — el panorama completo

FID (retirado)INP (actual)
InteraccionesSolo la primeraTodas, toda la visita
Qué mideSolo el retraso de entradaRetraso de entrada + procesamiento + presentación
Umbral bueno≤ 100 ms≤ 200 ms
EstadoEliminado de las herramientas en septiembre de 2024Core Web Vital desde el 12 de marzo de 2024

FID ha desaparecido — eliminado de Search Console el día que se lanzó INP y de CrUX BigQuery/API para septiembre de 2024. Si una herramienta o auditoría aún menciona FID, está desactualizada.

Casos límite que hacen que los datos de INP no coincidan

Un puñado de peculiaridades del ciclo de vida explican la mayoría de las preguntas de “¿por qué mi RUM no coincide con CrUX?”:

  • Sin interacciones, no hay INP. Si una visita nunca recibe un clic, toque o pulsación de tecla — o solo recibe gestos excluidos como desplazamiento y pasar el cursor — no hay valor de INP para esa vista de página. Esto es normal en páginas de contenido de solo lectura y no es un error en tu monitoreo.
  • Los iframes cuentan para la métrica, pero tu propio JavaScript no puede ver dentro de ellos. Una interacción dentro de un iframe incrustado (un anuncio, un widget, un formulario incrustado) contribuye al INP de la página. Pero un script RUM de origen propio no puede leer eventos de un iframe de origen cruzado de la misma manera que la métrica del propio navegador — así que CrUX y una configuración RUM de mismo origen pueden legítimamente discrepar en páginas con incrustaciones de terceros. Documenta esta brecha en lugar de tratar una discrepancia RUM/campo como un error.
  • Las restauraciones de caché de retroceso/avance restablecen el INP a cero. Una página recuperada de bfcache (el botón de retroceso, por ejemplo) comienza un conteo de INP fresco — las interacciones de antes de la navegación de salida no se transfieren.
  • Las pestañas de larga duración y en segundo plano aún deben informar. Debido a que una pestaña puede permanecer abierta durante horas sin descargarse formalmente — especialmente en móvil, donde el sistema operativo puede simplemente matarla — el INP debe capturarse cuando la página se oculta, no solo al descargarse. Las configuraciones RUM que solo se vacían en unload perderán silenciosamente datos de estas visitas.

Dónde encaja esto

El INP es una pieza del panorama de Core Web Vitals, junto con Largest Contentful Paint (carga) y Cumulative Layout Shift (estabilidad visual). Verifícalo en PageSpeed Insights y el informe de Search Console (campo), y depúralo en Lighthouse / Chrome DevTools (laboratorio, a través del proxy TBT). Los datos detrás de todo provienen de CrUX.

Add an expert note

Pin an expert quote

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