Performance & Core Web Vitals

INP – Interaction to Next Paint. Co to jest i jak go poprawić w WordPress

W marcu 2024 Google podmieniło FID na INP w Core Web Vitals. Brzmi mało dramatycznie, ale w praktyce 70% witryn na WordPressie + Elementor pęka w nowej metryce, mimo że FID było zielone. Pokażę Ci, co INP dokładnie mierzy, dlaczego psuje strony i jak go naprawić.

W skrócie

  • INP = czas między kliknięciem/dotknięciem użytkownika a następnym przemalowaniem strony.
  • Cel: < 200 ms (dobry), 200–500 ms (wymaga poprawy), > 500 ms (słaby).
  • INP mierzy najgorszą interakcję w sesji (98. percentyl).
  • Najczęstsi winowajcy: Elementor Pro motion effects, livechaty, Tag Manager, ciężkie sliders.

Dlaczego INP, a nie FID

FID (First Input Delay)

Stara metryka mierzyła opóźnienie pierwszego inputu. Bardzo łatwo było ją oszukać:
– Strona zamarza dopiero po kliknięciu w produkt
– Pierwszy input = scroll po wejściu = 0 ms = „świetnie”
– W rzeczywistości aplikacja całkowicie nieresponsywna

INP (Interaction to Next Paint)

Mierzy wszystkie interakcje i bierze najgorszą (98. percentyl). Jeśli kliknięcie w mobilne menu zamraża stronę na 800 ms — INP = 800 ms, niezależnie od tego, że reszta jest szybka.

Surowsza metryka. Trudniej oszukać.

Co dokładnie mierzy INP

Każda interakcja użytkownika:
– Klik w przycisk
– Tap w mobilne menu
– Wpisanie znaku w input
– Najechanie na rozwijalne menu
– Kliknięcie w slider

dla każdej Google mierzy:
Input delay — czas, aż przeglądarka zauważy interakcję (zwykle <50 ms)
Processing time — czas na wykonanie JS event handlera
Presentation delay — czas na przemalowanie strony

Suma tych 3 = INP dla tej interakcji.

Jak go zmierzyć

W locie (Chrome DevTools)

  1. F12 → Performance
  2. Kliknij Record
  3. Wykonaj typowe interakcje (kliknij menu, slider, przycisk)
  4. Stop → szukaj długich tasków (>50 ms = czerwone)

Field data (GSC)

GSC → Core Web Vitals → INP. Pokazuje % stron z dobrym/słabym INP.

PageSpeed Insights

Lab data nie ma INP w formie liczby (bo nie ma realnych interakcji w lab teście). Patrz tylko na field data.

Real-time

Wtyczka Web Vitals Extension (Chrome) pokazuje INP w prawym górnym rogu podczas surfowania.

Główne winowajce w WordPressie

1. Elementor Pro motion effects

Każdy element z animacją scroll-trigger, parallax, mouse track = JavaScript wykonuje się przy każdym ruchu myszą.

Skala problemu: strona z 20 elementami z motion effects = 40–80 ms processing per scroll event.

Rozwiązanie:
– Wyłącz motion effects globally
– Pozostaw 2–3 świadome animacje na home page
– Zostaw „FadeIn na scroll” tylko dla 1–2 sekcji

2. Livechat (Tidio, Tawk, LiveChat, Smartsupp)

Livechat ładuje 100–300 KB JS na każdej stronie. Kliknięcie w button = uruchomienie ciężkiego widget initialization.

Rozwiązanie:
– Lazy-load livechat po pierwszej interakcji użytkownika (scroll, klik)
– Pokazuj tylko na stronach kontaktowych / zamówieniowych
– Lekkie alternatywy: Crisp (mały bundle), Plain HTML form

3. Google Tag Manager + Pixel + GA4

Każdy event tracker = osobny event listener. GTM z 30 tagami = chaos.

Rozwiązanie:
Server-side GTM (zaawansowane, ale realnie redukuje INP o 100–200 ms)
– Lazy-load GTM po pierwszej interakcji (Perfmatters ma to wbudowane)
– Czyść tagi z GTM raz na kwartał — usuwaj nieużywane

4. Slick Slider, Owl Carousel, Swiper

Sliders w WordPressie ładują pełne biblioteki (~50–80 KB). Kliknięcie strzałki = ciężka operacja DOM.

Rozwiązanie:
– Użyj natywnego CSS-only slidera (scroll-snap)
– Albo Swiper.js z minimalną konfiguracją
– Wyrzuć Slick (przestarzały, ciężki)

5. Modale / popupy

Każdy popup w Elementor Pro = pełen widget z own JavaScript.

Rozwiązanie:
– Limit: 1 popup na całej witrynie
– Nie ładuj popupu globalnie (włącz tylko na stronach gdzie jest)
– Asset CleanUp / Perfmatters

6. Mobile menu z hamburger animacją

Niektóre motywy/builders robią mobile menu z 200 ms transition + JavaScript zamykający na klik na zewnątrz.

Rozwiązanie:
– Skróć animację do 100 ms
– Sprawdź, czy event handler na „click outside” jest debounced
– Najprostsze rozwiązanie często najlepsze

7 kroków poprawy INP

Krok 1: Pomiar baseline

Zapisz current INP z PageSpeed (field data) i Chrome DevTools (lab).

Krok 2: Wyłącz motion effects

W Elementor → Site Settings → Motion Effects → Disable Globally. Zostaw tylko świadome animacje na 2–3 elementach.

Krok 3: Lazy-load third-party

Perfmatters → Script Manager → ustaw GTM, livechat, Pixel jako „Lazy load on user interaction”.

Krok 4: Server-side GTM

Jeśli masz dużo tagów — server-side GTM przesuwa wykonywanie z przeglądarki użytkownika na Twój serwer. Setup 4–8 godzin, ale ROI duży.

Krok 5: Wyłącz niekrytyczne wtyczki

Każda aktywna wtyczka = potencjalny event listener. Sprawdź wtyczki, które ostatnio nie używałeś, i wyłącz.

Krok 6: Code splitting

Dla zaawansowanych — rozdziel JavaScript na „krytyczny” (ładowany od razu) i „niekrytyczny” (ładowany leniwie).

Krok 7: Web Workers dla ciężkich obliczeń

Jeśli masz np. kalkulator z dużą logiką — przenieś go do Web Workera (osobny wątek przeglądarki, nie blokuje UI).

Prawdziwa case study z naszej praktyki

Klient #1: sklep WooCommerce z mobile INP = 680 ms.

Diagnoza:
– Elementor Pro motion effects na 30 elementach (240 ms)
– Tidio livechat ładowany na każdej stronie (180 ms)
– GTM z 22 tagami (140 ms)
– Slick Slider na home page (120 ms)

Co zrobiliśmy:
– Wyłączenie motion effects (-200 ms)
– Lazy-load Tidio po pierwszej interakcji (-150 ms)
– Wyczyszczenie GTM, defer (-90 ms)
– Wymiana Slick na CSS scroll-snap (-100 ms)

Wynik po 4 tygodniach: mobile INP = 180 ms (kategoria „Dobry”).

Co dalej

W tym tygodniu:

  1. Wejdź do GSC → Core Web Vitals → INP
  2. Otwórz raport „Słabe URL-e” i wybierz 3 najgorsze
  3. Otwórz każdy w Chrome DevTools → Performance
  4. Zidentyfikuj long tasks (>200 ms)
  5. Wprowadź 1 poprawkę z tej listy

INP to nasz speciality — robimy diagnostykę i optymalizację za 1 500 zł, gwarantujemy poprawę z „Słaby” na „Dobry”. Zamów audyt.

Pomógł Ci ten artykuł?

Podziel się z innymi

Masz konkretny projekt?

Pogadajmy o Twojej stronie.

Bezpłatna 30-minutowa konsultacja, brief i indywidualna wycena w ciągu 24 godzin roboczych. Bez handlowca — odpisuje Adrian.

Wyceń projekt