Interaction to Next Paint (INP) per la SEO

Cosa misura INP, la soglia di ≤200 ms al p75, perché ha sostituito FID nel 2024 e come risolvere effettivamente un punteggio scarso — dal punto di vista di un SEO tecnico.

Prima pubblicazione: 26 giu 2026 · Ultimo aggiornamento: 11 ago 2026 · Advanced
Lingue

Interaction to Next Paint (INP) è la Core Web Vital per la reattività. Osserva ogni clic, tocco e interazione da tastiera durante una visita e riporta la latenza sotto la quale (quasi) tutte le interazioni sono rientrate — misurata al 75° percentile sul campo. Buono è ≤200 ms, scarso è >500 ms. INP ha sostituito First Input Delay il 12 marzo 2024, perché FID misurava solo il ritardo di input della prima interazione; INP misura la latenza completa (ritardo di input + elaborazione + presentazione) di tutte le interazioni. Lo risolvi spezzando i task lunghi, cedendo il controllo al thread principale, facendo meno negli event handler, riducendo il DOM e domando gli script di terze parti. È una metrica sul campo — Total Blocking Time è il suo proxy in laboratorio.

TL;DR — L’INP è la Core Web Vital per la reattività. Osserva la latenza di tutte le interazioni di clic, tocco e tastiera durante una visita e riporta il valore al 75° percentile (un valore anomalo scartato ogni 50 interazioni) — non solo il primo input come faceva il FID. La latenza di un’interazione = ritardo di input + durata di elaborazione + ritardo di presentazione. Buono ≤ 200 ms, scarso > 500 ms, giudicato sui dati sul campo al p75. Ha sostituito il FID il 12 marzo 2024 (FID completamente rimosso dagli strumenti a settembre 2024). Risolvilo suddividendo le long tasks, cedendo il controllo al thread principale con scheduler.yield(), facendo meno lavoro nei gestori di eventi, riducendo il DOM e rimandando gli script di terze parti. È una metrica sul campo — Total Blocking Time è il proxy di laboratorio e i due non sempre concordano.

Cosa misura l’INP — e come differisce dal FID

La definizione di Google è precisa: INP “valuta la reattività complessiva di una pagina alle interazioni dell’utente osservando la latenza di tutte le interazioni di clic, tocco e tastiera che si verificano durante l’intera durata della visita di un utente a una pagina.”

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

Questa frase “tutte le interazioni… durante l’intera durata” è il punto chiave. INP è una metrica a livello di visita, non di tempo di caricamento — e il ragionamento di Google è che la stragrande maggioranza del tempo di un utente su una pagina avviene dopo il caricamento, quindi la reattività durante l’uso conta più della sola prima impressione.

Il contrasto con First Input Delay è il modo più chiaro per capirlo: “FID misurava solo il ritardo di input della prima interazione su una pagina. INP migliora FID osservando tutte le interazioni su una pagina, dal ritardo di input, al tempo necessario per eseguire i gestori di eventi.” FID cronometrava una cosa su una interazione — l’attesa prima che il suo gestore iniziasse — e ignorava sia quanto a lungo il gestore è rimasto in esecuzione sia quanto tempo ha impiegato lo schermo ad aggiornarsi. INP misura la latenza completa di ogni interazione.

Una sfumatura che vale la pena chiarire, perché è un mito comune: INP non è letteralmente la peggiore interazione. Per evitare di penalizzare una pagina per un singolo picco casuale, il browser scarta un valore anomalo ogni 50 interazioni, poi riporta il valore al 75° percentile delle visualizzazioni di pagina. In una visita con poche interazioni, questo cade sulla interazione più lenta; in una con molte interazioni, un paio di valori anomali vengono esclusi prima.

Ciò che conta come interazione è anche più ristretto di quanto si pensi. Solo clic, tocchi e pressioni da tastiera vengono misurati. Scorrimento, passaggio del mouse e zoom sono esplicitamente esclusi. E un singolo gesto può attivare più eventi — un tocco produce pointerdown, pointerup e click — che INP raggruppa come una interazione, non tre. All’interno di quel gruppo, INP prende la durata dell’evento individuale più lunga, non la somma di tutti — quindi un pointerdown veloce accanto a un click lento viene comunque riportato come una interazione dimensionata dall’evento lento. Se una pagina non ha interazioni qualificanti durante una visita, INP semplicemente non viene riportato per essa.

Le tre parti della latenza di un’interazione

Ogni latenza di interazione si suddivide in tre parti sequenziali. Questo è il modello da tenere a mente, perché ogni parte indica una soluzione diversa:

Interaction latency = Input delay + Processing duration + Presentation delay

  1. Ritardo input — il tempo prima che i tuoi gestori di eventi possano anche solo iniziare a eseguire, di solito perché il thread principale è occupato a completare un’attività lunga.
  2. Durata elaborazione — il tempo necessario per eseguire tutti i callback dei tuoi gestori di eventi.
  3. Ritardo presentazione — il tempo da quando i tuoi gestori finiscono fino a quando il browser dipinge il frame successivo sullo schermo.

La build di attribuzione di web-vitals espone tutti e tre (inputDelay, processingDuration, presentationDelay) così puoi vedere quale parte domina in una interazione reale. Secondo i dati del Web Almanac 2024, il ritardo di presentazione è spesso la parte singola più grande alla mediana — ma la durata di elaborazione è dove di solito vive la leva di ottimizzazione, perché è la parte che si gonfia su pagine mal costruite.

INP measures the whole interaction. Attribute the delay to the waiting, handler, or presentation phase before choosing a fix. Fonte: 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 ·

Le soglie — e l’avvertenza sul campo p75

ValutazioneValore INPMisurato a
Buono≤ 200 ms75° percentile, campo
Da migliorare> 200 ms e ≤ 500 ms75° percentile, campo
Scarso> 500 ms75° percentile, campo

Google Search Central indica chiaramente l’obiettivo: “an INP of less than 200 milliseconds” (traduzione) «un INP inferiore a 200 millisecondi» e inquadra il programma così: “We highly recommend site owners achieve good Core Web Vitals for success with Search.” (traduzione) «Raccomandiamo vivamente ai proprietari dei siti di raggiungere buoni Core Web Vitals per avere successo nella Ricerca.» Il budget di 200 ms è davvero ristretto: a 60 fps il browser punta a un nuovo fotogramma ogni circa 16,7 ms e tutto il lavoro del gestore, insieme al rendering, deve rientrare nel tempo disponibile.

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

Perché INP è una metrica di campo (e i dati di laboratorio non bastano)

Questa è la trappola che cattura molti SEO: un punteggio Lighthouse verde non significa un buon INP. Ma “Lighthouse non può misurare l’INP” richiede tre casi separati, non uno solo, altrimenti leggerai male i tuoi stessi strumenti:

  1. Un’esecuzione Lighthouse standard e non interattiva non riporta alcun INP. Osserva solo il caricamento della pagina — non fa mai clic, tocchi o digitazioni — quindi non c’è alcuna interazione da cronometrare. Lighthouse ripiega su Total Blocking Time (TBT) come proxy del tempo di caricamento. La stessa formulazione di 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.” (traduzione) «Poiché il TBT correla bene con l’INP, una pagina con un TBT elevato è un indicatore ragionevole che potrebbero esserci valori INP elevati durante il caricamento.» Le parole chiave sono “during load.” (traduzione) «durante il caricamento.» Il TBT non dice nulla su un’interazione che va male dieci secondi dopo quando un widget caricato in lazy-load viene eseguito — è un proxy, mai un sostituto o una formula di conversione.
  2. Un’interazione esercitata manualmente o sinteticamente — fare clic su un pulsante reale in DevTools, o scriptare un clic in uno strumento di laboratorio — produce un numero di latenza reale in stile INP per quella singola interazione. Questo è utile per riprodurre un bug specifico. Ma è comunque un solo percorso scriptato su un solo dispositivo: non può rappresentare la combinazione sul campo di dispositivi reali, utenti reali, obiettivi di interazione reali e l’intera durata della pagina di una visita completa. Come dice Google, il valore risultante “will be dependent on what interactions are performed during the measurement period,” (traduzione) «dipenderà dalle interazioni eseguite durante il periodo di misurazione», e il comportamento reale degli utenti è troppo variabile perché una singola esecuzione di laboratorio possa rappresentarlo.
  3. La distribuzione sul campo è l’unica cosa che l’INP realmente è. Ecco perché la fonte autorevole sono i dati sul campo: il Chrome User Experience Report (CrUX), presentato tramite PageSpeed Insights e il report Core Web Vitals di 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.” (traduzione) «I dati sul campo sono la migliore fonte di informazioni a cui puoi attingere per capire quali interazioni sono problematiche per gli utenti reali.»

Usa il laboratorio (casi 1 e 2) per trovare e riprodurre un’interazione lenta; usa il campo (caso 3) per confermare se sta effettivamente trascinando verso il basso i punteggi dei visitatori reali.

Perché il tuo punteggio INP è scarso

Quasi ogni problema di INP riconduce al thread principale bloccato quando un utente interagisce. I soliti sospetti:

  • Attività lunghe. Qualsiasi attività sul thread principale oltre 50 ms è un’attività lunga; l’importo oltre 50 ms è il suo “periodo di blocco”. Mentre una è in esecuzione, la tua interazione non può essere gestita. Questa è la causa principale più grande.
  • Gestori di eventi pesanti. Fare troppo in modo sincrono all’interno di un gestore di clic/input aumenta direttamente la durata di elaborazione.
  • Grandi dimensioni del DOM. DOM più grandi costano di più da renderizzare, il che aumenta sia il ritardo di input che quello di presentazione.
  • Script di terze parti. Secondo il Web Almanac, i fornitori di consenso, i tag manager, l’analisi e i widget di chat sono i principali colpevoli — e colpiscono anche i siti di contenuti semplici. Sono il primo posto in cui guardo su una pagina che non ho costruito io.
  • JavaScript post-caricamento. Solo perché una pagina è stata renderizzata non significa che abbia finito di caricarsi — gli script che vengono valutati dopo la prima pittura possono bloccare le interazioni iniziali.

Come risolverlo

Le strategie, approssimativamente in ordine di impatto:

1. Spezza le attività lunghe. Il consiglio principale di Google sui gestori è di “do as little work as possible in them.” (traduzione) «fare il minor lavoro possibile in essi.» Dividi un grande lavoro in attività più piccole così il browser può intercalare un’interazione utente. Quando le attività sono spezzate, “the browser can respond to higher-priority work much sooner — including user interactions.” (traduzione) «il browser può rispondere molto prima al lavoro a priorità più alta — incluse le interazioni utente.»

2. Cedi il controllo al thread principale. Il metodo moderno consigliato è scheduler.yield() (Chrome 129+, Firefox 142+): await scheduler.yield() sospende il codice, permette al browser di gestire il lavoro in attesa e riprende con priorità, evitando che altre attività in coda superino la continuazione. Il fallback classico è setTimeout(..., 0), che funziona ancora ma sposta la continuazione in fondo alla coda delle attività; dopo varie chiamate annidate i browser impongono inoltre un minimo di 5 ms. Non usare più isInputPending(): Google afferma “we no longer recommend using this API.” (traduzione) «non consigliamo più di usare questa API». Consulta la scheda Script per il modello.

3. Fai meno nei gestori di eventi — rimanda il lavoro non critico. Esegui solo l’aggiornamento visivo che il prossimo frame richiede in modo sincrono; spingi tutto il resto (salvataggio, controllo ortografico, analytics, conteggi di parole) dietro requestAnimationFrame + setTimeout o uno yield. L’utente vede la risposta immediatamente; la contabilità avviene dopo.

4. Evita il layout thrashing. Leggere le proprietà di layout subito dopo aver scritto gli stili nello stesso task costringe il browser a un layout sincrono che avrebbe potuto altrimenti raggruppare. Raggruppa le letture, poi le scritture.

5. Riduci la dimensione del DOM. Alberi più piccoli vengono renderizzati più velocemente. content-visibility può renderizzare pigramente gli elementi fuori schermo così non ti costano durante il caricamento o l’interazione.

6. Controlla e rimanda gli script di terze parti. Questa è la correzione SEO a più alto impatto sui siti reali. Carica gli script di consenso/tag/analytics in modo pigro, limitali all’interazione, o spostali fuori dal percorso critico. Una pagina di contenuti “leggera” può fallire l’INP solo a causa di un widget incorporato pesante.

L’INP influisce sul posizionamento?

Sì — l’INP è uno dei tre Core Web Vitals, e i Core Web Vitals fanno parte dei segnali di page experience di Google. Ma è un segnale leggero: un criterio di spareggio tra risultati comparabilmente rilevanti, non un fattore di ranking primario. Non inseguire un punteggio INP perfetto a scapito di contenuti e rilevanza.

Due punti SEO pratici. Primo, il mobile è il numero difficile. Nel Web Almanac 2024, ~74% dei siti mobile ha superato l’INP rispetto a ~97% su desktop — e poiché Google indicizza mobile-first, la cifra mobile è quella che conta. Secondo, i siti complessi vanno peggio: solo ~53% dei primi 1 000 siti ha superato, perché le pagine ricche di funzionalità caricano più JavaScript che blocca il thread principale. Lo sviluppo intenso di funzionalità è un rischio INP, e le pagine ad alta interazione — pagine prodotto, checkout, risultati di ricerca, moduli — sono molto più esposte rispetto ai contenuti statici.

INP vs FID — il quadro completo

FID (ritirato)INP (attuale)
InterazioniSolo la primaTutte, l’intera visita
Cosa misuraSolo il ritardo di inputRitardo di input + elaborazione + presentazione
Soglia buona≤ 100 ms≤ 200 ms
StatoRimosso dagli strumenti a settembre 2024Core Web Vital dal 12 marzo 2024

FID è sparito — rimosso da Search Console il giorno in cui è stato lanciato l’INP e da CrUX’s BigQuery/API entro settembre 2024. Se uno strumento o un audit fa ancora riferimento a FID, è obsoleto.

Casi limite che fanno discordare i dati INP

Una manciata di stranezze del ciclo di vita spiega la maggior parte delle domande “perché il mio RUM non corrisponde a CrUX”:

  • Nessuna interazione, nessun INP. Se una visita non riceve mai un clic, un tocco o una pressione di un tasto — o riceve solo gesti esclusi come lo scorrimento e il passaggio del mouse — non c’è alcun valore INP per quella visualizzazione di pagina. Questo è normale nelle pagine di contenuto di sola lettura e non è un bug nel tuo monitoraggio.
  • Gli iframe contano ai fini della metrica, ma il tuo JavaScript non può vedere al loro interno. Un’interazione all’interno di un iframe incorporato (un annuncio, un widget, un modulo incorporato) contribuisce all’INP della pagina. Ma uno script RUM di prima parte non può leggere gli eventi da un iframe cross-origin come può fare la metrica del browser stesso — quindi CrUX e una configurazione RUM same-origin possono legittimamente discordare su pagine con incorporamenti di terze parti. Documenta questa lacuna piuttosto che trattare una discrepanza RUM/campo come un bug.
  • Il ripristino della cache back/forward azzera l’INP. Una pagina recuperata dalla bfcache (il pulsante indietro, per esempio) inizia un nuovo conteggio INP — le interazioni precedenti alla navigazione di allontanamento non vengono trasferite.
  • Le schede di lunga durata e in background devono comunque fare rapporto. Poiché una scheda può rimanere aperta per ore senza mai essere scaricata formalmente — soprattutto su mobile, dove il sistema operativo potrebbe semplicemente terminarla — l’INP dovrebbe essere catturato quando la pagina diventa nascosta, non solo su unload. Le configurazioni RUM che scaricano solo su unload perderanno silenziosamente dati da queste visite.

Dove si colloca

L’INP è un elemento del quadro dei Core Web Vitals, insieme a Largest Contentful Paint (caricamento) e Cumulative Layout Shift (stabilità visiva). Controllalo in PageSpeed Insights e nel report di Search Console (campo), e correggilo in Lighthouse / Chrome DevTools (laboratorio, tramite il proxy TBT). I dati alla base di tutto provengono da CrUX.

Add an expert note

Pin an expert quote

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