Interaction to Next Paint (INP) dla SEO

Co mierzy INP, próg ≤200 ms na p75, dlaczego zastąpił FID w 2024 roku i jak faktycznie naprawić słaby wynik — z perspektywy technicznego SEO.

Opublikowano po raz pierwszy: 26 cze 2026 · Ostatnia aktualizacja: 3 sie 2026 · Zaawansowane

Interaction to Next Paint (INP) to podstawowa metryka internetowa dotycząca responsywności. Obserwuje każde kliknięcie, dotknięcie i interakcję klawiaturą podczas wizyty i raportuje opóźnienie, poniżej którego (prawie) wszystkie one się zmieściły — mierzone na 75. percentylu w terenie. Dobry wynik to ≤200 ms, słaby to >500 ms. INP zastąpiło First Input Delay 12 marca 2024 roku, ponieważ FID mierzyło tylko opóźnienie wejścia pierwszej interakcji; INP mierzy pełne opóźnienie (opóźnienie wejścia + przetwarzanie + prezentacja) wszystkich interakcji. Naprawiasz to, dzieląc długie zadania, ustępując głównemu wątkowi, robiąc mniej w procedurach obsługi zdarzeń, zmniejszając DOM i okiełznując skrypty innych firm. To metryka terenowa — Total Blocking Time jest jej laboratoryjnym odpowiednikiem.

TL;DR — INP to podstawowy wskaźnik internetowy (Core Web Vital) dla responsywności. Obserwuje opóźnienie wszystkich interakcji kliknięcia, dotknięcia i klawiatury podczas wizyty i raportuje wartość na 75. percentylu (jeden odstający wynik pomijany na 50 interakcji) — nie tylko pierwsze wejście, jak robił to FID. Opóźnienie interakcji = opóźnienie wejścia + czas przetwarzania + opóźnienie prezentacji. Dobry ≤ 200 ms, słaby > 500 ms, oceniane na podstawie danych terenowych na p75. Zastąpił FID 12 marca 2024 roku (FID całkowicie usunięty z narzędzi we wrześniu 2024). Napraw to, dzieląc długie zadania, ustępując głównemu wątkowi za pomocą scheduler.yield(), robiąc mniej w handlerach zdarzeń, zmniejszając DOM i odraczając skrypty stron trzecich. To metryka terenowa — Total Blocking Time to laboratoryjny odpowiednik, a te dwie wartości nie zawsze się zgadzają.

Co mierzy INP — i czym różni się od FID

Definicja Google jest precyzyjna: INP „ocenia ogólną responsywność strony na interakcje użytkownika, obserwując opóźnienia wszystkich kliknięć, dotknięć i interakcji klawiaturowych, które występują przez cały czas trwania wizyty użytkownika na stronie.”

Dowód potwierdzający to twierdzenie INP observes click, tap, and keyboard interaction latency throughout a page visit rather than measuring only the first input delay. Zakres: Current web.dev INP definition and qualifying interaction types. Poziom ufności: wysoki · Zweryfikowano: web.dev: Interaction to Next Paint

To sformułowanie „wszystkie interakcje… przez cały czas trwania wizyty” mówi wszystko. INP jest metryką na poziomie wizyty, a nie czasu ładowania — a rozumowanie Google jest takie, że zdecydowana większość czasu spędzonego przez użytkownika na stronie ma miejsce po jej załadowaniu, więc responsywność podczas użytkowania ma większe znaczenie niż samo pierwsze wrażenie.

Kontrast z First Input Delay to najczystszy sposób na zrozumienie tego: „FID mierzył tylko opóźnienie wejścia pierwszej interakcji na stronie. INP ulepsza FID, obserwując wszystkie interakcje na stronie, od opóźnienia wejścia, do czasu wykonania procedur obsługi zdarzeń.” FID mierzył jedną rzecz dotyczącą jednej interakcji — czas oczekiwania przed uruchomieniem jej procedury obsługi — i ignorował zarówno czas działania procedury, jak i czas potrzebny na zaktualizowanie ekranu. INP mierzy pełne opóźnienie każdej interakcji.

Jeden niuans, który warto dobrze zrozumieć, bo to powszechny mit: INP nie jest dosłownie najgorszą interakcją. Aby nie karać strony za pojedynczy losowy skok, przeglądarka odrzuca jedną wartość odstającą na każde 50 interakcji, a następnie raportuje wartość na 75. percentylu wyświetleń strony. Przy wizycie z małą liczbą interakcji trafia to na najwolniejszą interakcję; przy intensywnej wizycie kilka wartości odstających jest najpierw wykluczanych.

To, co liczy się jako interakcja, jest również węższe, niż ludzie zakładają. Mierzone są tylko kliknięcia, dotknięcia i naciśnięcia klawiszy. Przewijanie, najeżdżanie kursorem i powiększanie są wyraźnie wykluczone. A pojedynczy gest może wywołać kilka zdarzeń — dotknięcie generuje pointerdown, pointerup i click — które INP grupuje jako jedną interakcję, a nie trzy. W ramach tej grupy INP bierze najdłuższy czas trwania pojedynczego zdarzenia, a nie sumę wszystkich — więc szybki pointerdown obok wolnego click nadal raportuje się jako jedna interakcja o rozmiarze określonym przez wolne zdarzenie. Jeśli strona nie ma kwalifikujących się interakcji podczas wizyty, INP po prostu nie jest dla niej raportowany.

Trzy części opóźnienia interakcji

Opóźnienie każdej interakcji dzieli się na trzy sekwencyjne części. To model, który warto mieć w głowie, ponieważ każda część wskazuje na inną poprawkę:

Interaction latency = Input delay + Processing duration + Presentation delay

  1. Opóźnienie wejścia — czas przed rozpoczęciem działania procedur obsługi zdarzeń, zwykle dlatego, że główny wątek jest zajęty kończeniem długiego zadania.
  2. Czas przetwarzania — czas potrzebny na wykonanie wszystkich wywołań zwrotnych procedur obsługi zdarzeń.
  3. Opóźnienie prezentacji — czas od zakończenia procedur obsługi do namalowania przez przeglądarkę następnej klatki na ekranie.

Wersja z atrybucją web-vitals udostępnia wszystkie trzy wartości (inputDelay, processingDuration, presentationDelay), dzięki czemu możesz zobaczyć, która część dominuje w rzeczywistej interakcji. Według danych Web Almanac z 2024 r., opóźnienie prezentacji jest często największą pojedynczą częścią przy medianie — ale to czas przetwarzania zwykle daje największe możliwości optymalizacji, ponieważ to ta część rośnie na źle zbudowanych stronach.

INP mierzy całą interakcję. Przypisz opóźnienie do fazy oczekiwania, obsługi lub prezentacji przed wyborem rozwiązania. Źródło: web.dev

Interakcja rozpoczyna się od opóźnienia wejścia, podczas gdy zdarzenie czeka na wątek główny. Następnie następuje czas przetwarzania, podczas którego wykonywane są procedury obsługi zdarzeń. Opóźnienie prezentacji trwa od zakończenia procedur obsługi do momentu, gdy przeglądarka wykona układ i namaluje następną klatkę. Razem te trzy sekwencyjne fazy składają się na opóźnienie interakcji mierzone przez INP.

© Patrick Stox LLC · CC BY 4.0 ·

Progi — i uwaga dotycząca pola p75

OcenaWartość INPZmierzona przy
Dobra≤ 200 ms75. percentyl, pole
Wymaga poprawy> 200 ms i ≤ 500 ms75. percentyl, pole
Słaba> 500 ms75. percentyl, pole

Google Search Central jasno określa cel — “an INP of less than 200 milliseconds” (tłumaczenie) „INP mniejsze niż 200 milisekund” — i przedstawia cały program jako: “We highly recommend site owners achieve good Core Web Vitals for success with Search.” (tłumaczenie) „Zdecydowanie zalecamy właścicielom witryn osiągnięcie dobrych wyników Core Web Vitals dla sukcesu w wyszukiwarce”. Budżet 200 ms jest naprawdę napięty, gdy pamiętasz, że przeglądarka chce klatki co ~16,7 ms przy 60 fps; cała praca procedur obsługi plus renderowanie musi się w tym zmieścić.

Dowód potwierdzający to twierdzenie INP is good at 200 milliseconds or less and poor above 500 milliseconds, assessed at the 75th percentile. Zakres: Current web.dev INP thresholds for field measurement. Poziom ufności: wysoki · Zweryfikowano: web.dev: Interaction to Next Paint

Dlaczego INP jest metryką polową (a dane laboratoryjne nie wystarczą)

To jest pułapka, w którą wpada wielu SEO: zielony wynik Lighthouse nie oznacza dobrego INP. Ale stwierdzenie „Lighthouse nie może zmierzyć INP” wymaga trzech osobnych przypadków, a nie jednego, inaczej źle odczytasz własne narzędzia:

  1. Standardowe, nieinteraktywne uruchomienie Lighthouse w ogóle nie raportuje INP. Obserwuje tylko ładowanie strony — nigdy nie klika, nie dotyka ani nie wpisuje niczego — więc nie ma interakcji do zmierzenia. Lighthouse używa w zamian Total Blocking Time (TBT) jako proxy czasu ładowania. Ujęcie 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.” (tłumaczenie) „Ponieważ TBT dobrze koreluje z INP, strona z wysokim TBT jest rozsądnym wskaźnikiem, że mogą występować wysokie wartości INP podczas ładowania.” Kluczowe słowa to “during load.” (tłumaczenie) „podczas ładowania.” TBT nie mówi nic o interakcji, która psuje się dziesięć sekund później, gdy uruchomi się leniwie ładowany widget — to proxy, nigdy substytut ani wzór do przeliczania.
  2. Ręcznie lub syntetycznie wykonana interakcja — kliknięcie prawdziwego przycisku w DevTools lub skryptowanie kliknięcia w narzędziu laboratoryjnym — faktycznie daje rzeczywistą wartość opóźnienia w stylu INP dla tej jednej interakcji. To przydatne do odtworzenia konkretnego błędu. Ale to wciąż jedna ścieżka skryptowa na jednym urządzeniu: nie może zastąpić mieszanki prawdziwych urządzeń, prawdziwych użytkowników, prawdziwych celów interakcji i pełnego czasu życia strony z danych terenowych. Jak ujmuje to Google, wynikowa wartość “will be dependent on what interactions are performed during the measurement period,” (tłumaczenie) „będzie zależeć od tego, jakie interakcje są wykonywane w okresie pomiaru,” a prawdziwe zachowanie użytkowników jest zbyt zmienne, aby pojedyncze uruchomienie laboratoryjne mogło je reprezentować.
  3. Rozkład danych terenowych to jedyna rzecz, którą INP faktycznie jest. Dlatego autorytatywnym źródłem są dane terenowe: raport Chrome User Experience Report (CrUX), prezentowany przez PageSpeed Insights i raport Core Web Vitals w 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.” (tłumaczenie) „Dane terenowe to najlepsze źródło informacji, na którym możesz polegać, jeśli chodzi o zrozumienie, które interakcje są problematyczne dla prawdziwych użytkowników.”

Użyj laboratorium (przypadki 1 i 2), aby znaleźć i odtworzyć wolną interakcję; użyj danych terenowych (przypadek 3), aby potwierdzić, czy faktycznie obniża wyniki prawdziwych odwiedzających.

Dlaczego Twój wynik INP jest słaby

Prawie każdy problem z INP sprowadza się do zablokowania głównego wątku, gdy użytkownik interaguje. Typowi podejrzani:

  • Długie zadania. Każde zadanie na głównym wątku trwające ponad 50 ms jest długim zadaniem; ilość ponad 50 ms to jego „okres blokowania”. Gdy jedno działa, Twoja interakcja nie może być obsłużona. To najczęstsza przyczyna.
  • Ciężkie procedury obsługi zdarzeń. Robienie zbyt wiele synchronicznie w procedurze obsługi kliknięcia/wejścia bezpośrednio zwiększa czas przetwarzania.
  • Duży rozmiar DOM. Większe DOM-y kosztują więcej przy renderowaniu, co zwiększa zarówno opóźnienie wejścia, jak i prezentacji.
  • Skrypty stron trzecich. Według Web Almanac, dostawcy zgód, menedżery tagów, analityka i widgety czatu to główni winowajcy — i dotykają nawet prostych stron z treścią. To pierwsze miejsce, na które patrzę na stronie, której nie zbudowałem.
  • JavaScript po załadowaniu. To, że strona się wyrenderowała, nie oznacza, że skończyła się ładować — skrypty uruchamiane po pierwszym malowaniu mogą blokować wczesne interakcje.

Jak to naprawić

Strategie, mniej więcej w kolejności wpływu:

1. Dziel długie zadania. Główna rada Google dotycząca procedur obsługi to “do as little work as possible in them.” (tłumaczenie) „rób w nich jak najmniej pracy.” Podziel duże zadanie na mniejsze, aby przeglądarka mogła wpleść interakcję użytkownika. Gdy zadania są podzielone, “the browser can respond to higher-priority work much sooner — including user interactions.” (tłumaczenie) „przeglądarka może reagować na pracę o wyższym priorytecie znacznie szybciej — w tym na interakcje użytkownika.”

2. Ustąp głównemu wątkowi. Nowoczesny, zalecany sposób to scheduler.yield() (Chrome 129+, Firefox 142+): await scheduler.yield() wstrzymuje Twój kod, pozwala przeglądarce obsłużyć oczekujące zadania i wznawia z priorytetem — więc inne zadania nie przeskoczą Twojej kontynuacji. Klasycznym rozwiązaniem awaryjnym jest setTimeout(..., 0), które nadal działa, ale wysyła Twój kod na koniec kolejki zadań (a przeglądarki wymuszają minimalny czas 5 ms po kilku zagnieżdżonych wywołaniach). Jedna rzecz, którą należy przestać robić: isInputPending() — Google mówi teraz “we no longer recommend using this API.” (tłumaczenie) „nie zalecamy już korzystania z tego interfejsu API”. Zobacz kartę Scripts, aby poznać wzorzec.

3. Rób mniej w procedurach obsługi zdarzeń — odraczaj mniej krytyczną pracę. Wykonuj tylko aktualizację wizualną, którą następna klatka potrzebuje synchronicznie; wszystko inne (zapisywanie, sprawdzanie pisowni, analityka, liczenie słów) przesuń za requestAnimationFrame + setTimeout lub yield. Użytkownik widzi odpowiedź natychmiast; księgowość dzieje się później.

4. Unikaj thrashowania układu. Czytanie właściwości układu zaraz po zapisaniu stylów w tym samym zadaniu zmusza przeglądarkę do synchronicznego układu, który mogła pogrupować. Najpierw czytaj, potem zapisuj.

5. Zmniejsz rozmiar DOM. Mniejsze drzewa renderują się szybciej. content-visibility może leniwie renderować elementy poza ekranem, aby nie kosztowały Cię podczas ładowania lub interakcji.

6. Audytuj i odraczaj skrypty stron trzecich. To najskuteczniejsza poprawka SEO na prawdziwych stronach. Ładuj skrypty zgody/tagów/analityki leniwie, ograniczaj je do interakcji lub przenieś poza ścieżkę krytyczną. “Lekka” strona z treścią może nie zdać INP wyłącznie z powodu ciężkiego osadzonego widgetu.

Czy INP wpływa na rankingi?

Tak — INP jest jednym z trzech podstawowych wskaźników internetowych (Core Web Vitals), a Core Web Vitals są częścią sygnałów doświadczenia strony Google. Ale to lekki sygnał: rozstrzygający między porównywalnie istotnymi wynikami, a nie główny czynnik rankingowy. Nie goń za idealnym wynikiem INP kosztem treści i trafności.

Dwie praktyczne uwagi SEO. Po pierwsze, mobile to twarda liczba. W Web Almanac 2024, ~74% witryn mobilnych zdało INP w porównaniu z ~97% na desktopie — a ponieważ Google indeksuje mobile-first, liczba mobilna jest tą, która się liczy. Po drugie, złożone witryny radzą sobie gorzej: tylko ~53% z 1000 najlepszych witryn zdało, ponieważ strony bogate w funkcje dostarczają więcej JavaScriptu, który blokuje główny wątek. Ciężki rozwój funkcji to ryzyko INP, a strony o wysokiej interakcji — strony produktów, kasy, wyniki wyszukiwania, formularze — są znacznie bardziej narażone niż statyczne treści.

INP vs FID — pełny obraz

FID (wycofany)INP (obecny)
InterakcjeTylko pierwszaWszystkie, cała wizyta
Co mierzyTylko opóźnienie wejściaOpóźnienie wejścia + przetwarzanie + prezentacja
Dobry próg≤ 100 ms≤ 200 ms
StatusUsunięty z narzędzi wrzesień 2024Core Web Vital od 12 marca 2024

FID zniknął — usunięty z Search Console w dniu premiery INP i z CrUX BigQuery/API do września 2024. Jeśli narzędzie lub audyt nadal odwołuje się do FID, jest nieaktualne.

Przypadki brzegowe, które powodują rozbieżności w danych INP

Kilka osobliwości cyklu życia wyjaśnia większość pytań “dlaczego mój RUM nie zgadza się z CrUX”:

  • Brak interakcji, brak INP. Jeśli wizyta nie obejmuje kliknięcia, dotknięcia ani naciśnięcia klawisza — lub obejmuje tylko wykluczone gesty, takie jak przewijanie i najeżdżanie — nie ma wartości INP dla tego wyświetlenia strony. To normalne na stronach tylko do odczytu i nie jest błędem w Twoim monitorowaniu.
  • Iframe’y wliczają się do metryki, ale Twój własny JavaScript nie widzi ich wnętrza. Interakcja w osadzonym iframe (reklama, widget, osadzony formularz) przyczynia się do INP strony. Ale skrypt RUM pierwszej strony nie może czytać zdarzeń z iframe’a innego pochodzenia tak, jak robi to natywna metryka przeglądarki — więc CrUX i konfiguracja RUM tego samego pochodzenia mogą zasadnie się różnić na stronach z osadzeniami innych firm. Udokumentuj tę lukę, zamiast traktować niezgodność RUM/pole jako błąd.
  • Przywrócenie z pamięci podręcznej wstecz/wprzód resetuje INP do zera. Strona pobrana z bfcache (na przykład przycisk wstecz) rozpoczyna nowe zliczanie INP — interakcje sprzed nawigacji nie są przenoszone.
  • Długo żyjące i działające w tle karty nadal muszą raportować. Ponieważ karta może pozostać otwarta przez godziny bez formalnego zwolnienia — zwłaszcza na urządzeniach mobilnych, gdzie system operacyjny może ją po prostu zabić — INP powinno być przechwytywane, gdy strona staje się ukryta, a nie tylko przy zwolnieniu. Konfiguracje RUM, które wysyłają dane tylko przy unload, po cichu stracą dane z tych wizyt.

Gdzie to się znajduje

INP to jeden z elementów obrazu Core Web Vitals, obok Largest Contentful Paint (ładowanie) i Cumulative Layout Shift (stabilność wizualna). Sprawdź go w PageSpeed Insights i raporcie Search Console (pole), a debuguj w Lighthouse / Chrome DevTools (laboratorium, przez proxy TBT). Dane za tym wszystkim pochodzą z CrUX.

Dodaj notatkę eksperta

Przypnij cytat eksperta

Nowa osoba? Najpierw utwórz jej nieprzejęty profil na /admin/experts/ → Przypnij cytat eksperta .