Przejdź do treści

Jak poprawić Core Web Vitals i czy to pomaga w Google?

Jak mierzyć i poprawiać LCP, INP oraz CLS? Progi Core Web Vitals, różnice między CrUX, Lighthouse i RUM oraz realny wpływ na pozycje i indeksację.

Maciej Sala

Founder StriveLab

18 min czytaniaAktualizacja

Ten poradnik obejmuje interpretację metryk, diagnozę i wybór poprawek, natomiast wszelkie szczegóły wdrożenia w React, Next.js i Astro znajdziesz w podlinkowanych artykułach.

Czym są Core Web Vitals i jakie mają progi?

Core Web Vitals to trzy metryki doświadczenia użytkownika i każda z nich opisuje coś innego. LCP opisuje ładowanie głównej treści, INP responsywność interfejsu, a CLS stabilność wizualną strony internetowej. Warto też odnotować, że INP zastąpił FID w marcu 2024 roku, więc mój poradnik to uwzględnia i dotyczy obecnego zestawu CWV.

MetrykaCo ocenia?Dobry wynikWymaga poprawySłaby wynik
LCP (Largest Contentful Paint)Czas wyświetlenia największego kwalifikującego się elementu treści w widocznym obszarze≤ 2,5 s> 2,5 s do 4 s> 4 s
INP (Interaction to Next Paint)Opóźnienie reakcji na interakcje do kolejnego odmalowania≤ 200 ms> 200 ms do 500 ms> 500 ms
CLS (Cumulative Layout Shift)Skalę nieoczekiwanych przesunięć układu≤ 0,1> 0,1 do 0,25> 0,25

CLS to bezwymiarowa punktacja przesunięć, a TTFB, FCP i TBT służą do diagnozy wydajności poza trójką Core Web Vitals. Progi i sposób ich oceny podaję za dokumentacją web.dev, gdzie w 2026 roku nadal obowiązują te same wartości.

Jak interpretować 75. percentyl i zaliczenie CWV?

75. percentyl, czyli p75, to wartość, której nie przekracza 75% zebranych pomiarów danej metryki. W sytuacji, kiedy p75 LCP wynosi 2,4 s, co najmniej trzy czwarte pomiarów mieści się w tej wartości. Najwolniejsza ćwiartka wejść leży powyżej tej granicy, a sama próba obejmuje tylko użytkowników kwalifikujących się do CrUX.

zbiera dane od kwalifikujących się użytkowników Chrome na komputerach i Androidzie, więc nie ma w nim Safari, Chrome na iOS, Edge ani stron otwieranych w aplikacjach przez WebView. W PageSpeed Insights widzisz kroczące okno ostatnich 28 dni, osobno dla mobile i desktop. Ten podział dotyczy urządzeń użytkowników i nie ma związku z mobile-first indexing, które opisuje sposób pobierania treści przez Googlebota.

Według dokumentacji PageSpeed Insights zaliczenie oceny przy komplecie danych wymaga dobrego p75 dla wszystkich trzech metryk. Istnieje natomiast jeden wyjątek, ponieważ jeśli brakuje wystarczających danych INP, PSI ocenia stronę na podstawie samych LCP i CLS. Brak INP oznacza wtedy lukę w pomiarze responsywności, a gdy zabraknie danych LCP albo CLS, PSI w ogóle nie wystawia oceny.

Czy Core Web Vitals poprawiają pozycje i wpływają na indeksację?

Dokumentacja Google Search Central potwierdza wykorzystanie CWV w systemach rankingowych, ale jednocześnie nie podaje ich wagi ani przelicznika milisekund na pozycje. Nie mamy więc konkretnych odpowiedzi, jak metryki wpływają na SERP. Dobre doświadczenie użytkownika pomaga, gdy wyszukiwarka ma do wyboru wiele przydatnych odpowiedzi, bo pierwszeństwo nadal ma trafna, wartościowa treść.

Jednocześnie trzeba pamiętać, że zaliczenie CWV nie jest warunkiem technicznym indeksacji. Lista wymagań technicznych Google obejmuje między innymi dostęp dla robota, działającą stronę z odpowiedzią HTTP 200 i treść nadającą się do indeksowania, ale spełnienie tych warunków nie gwarantuje dodania strony do indeksu. Moim zdaniem kryteria dodania strony do indeksu są cały czas zaostrzane, choćby ze względu na pojawienie się modeli LLM (czyli AI), które potrafią tworzyć treść masowo.

W sytuacji, kiedy artykułu nie ma w Google, zacznij od inspekcji URL. Musisz określić powód wykluczenia, ostatnie pobranie, noindex, link kanoniczny oraz treść dostępną dla robota. W dalszej kolejności musisz przeanalizować też linki prowadzące do wpisu i to, czy odpowiada na odrębną potrzebę względem innych artykułów. Kolejne kroki opisuję w poradniku Google Search Console i diagnozowania indeksacji.

Jedno powiązanie wydajności z indeksacją jednak istnieje i dotyczy crawlowania. W sytuacji, gdy serwer odpowiada wolno albo zwraca błędy 5xx, Googlebot zmniejsza tempo pobierania stron, co w dużym serwisie opóźnia odkrywanie nowych adresów. Co o tym decyduje? Czas odpowiedzi i stabilność serwera, niezależnie od oceny Core Web Vitals. Jak śledzić ten efekt w logach, pokazuję w artykule o analizie logów Cloudflare pod kątem crawl budgetu.

Jak mierzyć Core Web Vitals: CrUX, Lighthouse i RUM

Dobór narzędzia zależy od pytania, na które szukasz odpowiedzi.

NarzędzieDo czego służy?O czym pamiętać?
Google Search ConsoleWskazuje grupy adresów z problemami CWV, osobno dla mobile i desktopPokazuje tylko zaindeksowane adresy i przypisuje dane do faktycznego URL-a, nawet gdy ten wskazuje inny kanoniczny. Przykład z grupy nie dowodzi identycznego błędu na każdej podstronie
PageSpeed InsightsŁączy dane CrUX z testem Lighthouse dla badanego adresuCzęść laboratoryjna zawiera insighty, np. „LCP breakdown”, które wskazują fazę albo zasób do poprawy
LighthousePomaga odtwarzać problemy ładowania i porównywać poprawki w kontrolowanych warunkachWynik Performance 0–100 nie jest oceną zaliczenia CWV
Chrome DevTools, panel PerformancePozwala nagrać ładowanie i interakcje oraz znaleźć kosztowne zadania i przesunięciaLokalny pomiar opisuje warunki Twojego testu
RUM (Real User Monitoring)Zbiera własne dane użytkowników wraz z kontekstem błędu i wersją wdrożeniaMierzy LCP i INP także w Firefoksie i Safari (od wersji 26.2), więc zakres użytkowników i sposób agregacji różnią się od CrUX

Według pomocy Search Console raport opiera się na danych CrUX i grupuje adresy o podobnym doświadczeniu i dlatego poprawkę szablonu warto sprawdzić na kilku reprezentatywnych stronach, a nie opierając się na pierwszym przykładzie z raportu. Jak czytać statusy grup i dlaczego o statusie decyduje najsłabsza metryka, pokazuję w przewodniku po Search Console w Next.js.

Warto nadmienić, że brak danych terenowych nie oznacza słabej strony internetowej. Najczęściej witryna ma po prostu za mało wizyt, ale CrUX pomija też strony, które nie zwracają kodu HTTP 200 albo mają noindex, więc landing z noindex nigdy nie dostanie danych dla swojego URL-a. PSI pokazuje wtedy dane całego originu, obejmującego protokół, host i port, np. https://strivelab.pl, czyli zbiorcze doświadczenie z całego serwisu. Gdy również origin nie ma danych, nadal możesz wykonać test laboratoryjny i uruchomić RUM.

Dlaczego Lighthouse jest zielony, a Search Console czerwone?

Lighthouse sprawdza pojedynczy scenariusz w określonych warunkach, a CrUX obejmuje różne urządzenia, sieci i zachowania z wielu dni, dlatego dane terenowe często wskazują zupełnie inne problemy niż test laboratoryjny. Użytkownik może otworzyć filtr po minucie albo zobaczyć przesunięcie reklamy podczas czytania, a zwykły audyt ładowania żadnej z tych sytuacji nie odtworzy.

Standardowy audyt nawigacyjny Lighthouse nie mierzy INP. Pokazuje za to , czyli Total Blocking Time, który wskazuje blokowanie głównego wątku podczas ładowania, więc menu, formularze i filtry trzeba sprawdzić osobno. Służy do tego panel Performance w Chrome DevTools, do którego wraz z Chrome 132 trafiły funkcje wycofanego rozszerzenia Web Vitals. Według dokumentacji Chrome DevTools widok Live metrics mierzy LCP, INP i CLS podczas Twojej wizyty, po włączeniu danych terenowych pokazuje obok wyniki CrUX dla tego samego adresu, a log interakcji rozbija każde kliknięcie na fazy.

Warto tutaj omówić własny RUM, który przydaje się do znalezienia konkretnej interakcji lub elementu odpowiedzialnego za problem. Przy wdrożeniu zbieraj kontekst adresu, urządzenia, przeglądarki i wersji aplikacji, a wynik licz jako p75 z pomiarów, bo średnia ukrywa najwolniejsze wizyty. Samo wysłanie zdarzenia do GA4 nie tworzy jeszcze poprawnego raportu CWV, a przykład własnego reportera w Next.js pokazuję w artykule o monitorowaniu aplikacji Next.js na produkcji.

Podział na przeglądarki ma dziś konkretne uzasadnienie. Od Safari 26.2, wydanego w grudniu 2025 roku, LCP i INP mierzą wszystkie duże przeglądarki, więc RUM widzi też użytkowników iPhone'ów, których w CrUX nie ma i według web.dev nie będzie. CLS nadal raportują tylko przeglądarki oparte na Chromium, a wyniki z różnych silników różnią się o pojedyncze milisekundy, bo Chrome liczy LCP do chwili prezentacji klatki, a Safari i Firefox do momentu jej namalowania. Zielony raport w Search Console nic nie mówi o tym, jak Twoja strona działa na iPhone'ach.

Jak CrUX mierzy aplikacje Next.js z nawigacją po stronie klienta?

W aplikacji z nawigacją po stronie klienta, na przykład w Next.js albo innym SPA, przeglądarka pobiera dokument HTML tylko raz i ma to miejsce przy pierwszym wejściu. Metodologia CrUX mówi wprost, że całe takie doświadczenie jest przypisywane do pierwszego wyświetlenia strony. INP i CLS z kolejnych widoków trafiają więc do adresu, od którego zaczęła się wizyta, a LCP dotyczy wyłącznie pierwszego, pełnego ładowania. Dlatego Search Console potrafi wskazać szablon artykułu, choć wolny filtr działa na liście produktów, do której użytkownik przeszedł z tego artykułu.

Od Chrome 151 przeglądarka domyślnie rozpoznaje takie przejścia dzięki Soft Navigations API, a biblioteka web-vitals z opcją reportSoftNavs raportuje metryki osobno dla każdego widoku. Sposób ujęcia miękkich nawigacji w CrUX Google nadal określa jako otwarty, więc Search Console przypisuje całą wizytę do strony wejścia. W przypadku własnego RUM zapisuj trasę z chwili interakcji. INP i CLS są zwykle wysyłane dopiero przy ukryciu karty, więc adres odczytany w momencie wysyłki wskaże ostatnią odwiedzoną podstronę, która nie musi być miejscem wolnej interakcji.

LCP: jak przyspieszyć wyświetlenie głównej treści?

(Largest Contentful Paint) to czas od rozpoczęcia ładowania strony do wyrenderowania największego elementu treści w widocznym obszarze ekranu. Do tej kategorii zaliczają się obrazy, bloki tekstu oraz materiały wideo. Warto pamiętać, że w wersji mobilnej i stacjonarnej może to być zupełnie inny element, w związku z czym najpierw zidentyfikuj go w nagraniu w zakładce Performance.

Z jakich części składa się LCP?

Dla LCP opartego na obrazie przydaje się podział na cztery części:

Część LCPCo sprawdzić?Kierunek poprawy
TTFBJak długo trwa uzyskanie pierwszego bajtu dokumentu?Odpowiedź serwera, przekierowania, cache, CDN
Opóźnienie rozpoczęcia pobierania zasobuCzy przeglądarka odkrywa obraz dopiero po uruchomieniu JS lub pobraniu CSS?Obraz w początkowym HTML, właściwy priorytet, ewentualny preload
Czas pobierania zasobuCzy użytkownik pobiera zbyt duży plik?Wymiary, kompresja, WebP/AVIF, poprawne srcset i sizes
Opóźnienie renderowania elementuCzy pobrany obraz czeka na style, wykonanie JS albo odsłonięcie sekcji?Usunięcie blokad renderowania i zbędnego ukrywania treści

Trzeba pamiętać, że nie istnieje jakaś uniwersalna proporcja tych części, która wskazuje jedną przyczynę, a gdy LCP jest tekstem, podział wygląda inaczej niż dla osobno pobieranego obrazu – co wyjaśnia poradnik optymalizacji LCP. Ten sam podział znajdziesz w narzędziu PageSpeed Insights w sekcji „LCP breakdown”. Obok wyświetla się wskazówka „LCP request discovery”, która weryfikuje, czy obraz LCP jest widoczny bezpośrednio w początkowym kodzie HTML, nie posiada atrybutu loading="lazy" oraz ma przypisany priorytet fetchpriority="high".

Które poprawki wdrożyć najpierw?

  1. Nie stosuj lazy loadingu do obrazu LCP. Obrazy poza początkowym widokiem mogą ładować się później.
  2. Ułatw pobranie właściwego zasobu. Dla obrazu LCP rozważ fetchpriority="high"; preload przydaje się zwłaszcza przy późnym odkrywaniu zasobu. Nie nadawaj wysokiego priorytetu całej galerii.
  3. Dostarczaj obraz odpowiadający rozmiarowi wyświetlania. Mały ekran nie powinien bez potrzeby pobierać grafiki przygotowanej dla dużego monitora.
  4. Sprawdź serwer i renderowanie. Buforowanie w cache lub generowanie statyczne skutecznie skracają TTFB. Z kolei samo SSR nie zapewnia automatycznie wysokiej wydajności — czas generowania odpowiedzi przez serwer i zasoby blokujące nadal robią swoje. Jak streaming i Suspense przyspieszają pierwszą treść w Next.js, opisuję w poradniku o streamingu.

Konfigurację obrazów, sizes, fill i preload opisuję w porównaniu next/image, srcset i CDN. Kiedy problem wynika z dostępności treści dopiero po wykonaniu JavaScript, przeczytaj kiedy Next.js daje przewagę pod SEO.

Jak bfcache i prerendering skracają LCP kolejnych wejść?

CrUX od danych za marzec 2024 roku raportuje typy nawigacji, w tym powroty obsłużone z pamięci podręcznej wstecz/dalej (bfcache) i strony wyrenderowane z wyprzedzeniem (prerender). Takie wejścia mają LCP bliskie zeru i realnie obniżają p75 całego adresu, a strona wykluczona z bfcache przy każdym powrocie przyciskiem „Wstecz” ładuje się od nowa.

Stan sprawdzisz w Chrome DevTools, w zakładce Application → Back/forward cache, która podaje też powody odrzucenia strony. Nagłówek Cache-Control: no-store przestał być bezwarunkową blokadą, bo Chrome od 2025 roku wpuszcza do bfcache część takich stron i usuwa je z pamięci, gdy zmienią się ciasteczka, co opisuje dokumentacja bfcache dla no-store. Prerendering kolejnych podstron umożliwia z kolei Speculation Rules API, obsługiwane przez przeglądarki oparte na Chromium.

INP: jak poprawić reakcję na kliknięcia i wpisywanie?

(Interaction to Next Paint) to czas od interakcji użytkownika do wyświetlenia kolejnej klatki, raportowany dla praktycznie najwolniejszej interakcji podczas wizyty. Metryka obejmuje kliknięcia, dotknięcia ekranu oraz użycie klawiatury. Definicja ta pomija samo przewijanie strony i najechanie kursorem. Co do zasady wynik odzwierciedla najwolniejszą interakcję, przy czym na każde 50 zdarzeń pomiar odrzuca jedną wartość skrajną. W sytuacji, kiedy użytkownik nie wykona żadnej z tych akcji, wskaźnik INP po prostu nie zostanie zmierzony.

INP mierzy całą drogę od interakcji do kolejnej klatki. Najdłuższe zadanie JavaScript to tylko fragment tej drogi, na którą składają się:

  • Input delay: oczekiwanie na rozpoczęcie obsługi, np. gdy główny wątek zajmuje inny skrypt.
  • Processing duration: wykonanie procedur obsługi zdarzeń.
  • Presentation delay: czas do wyświetlenia kolejnej klatki, obejmujący potrzebną pracę nad renderowaniem.

Kiedy nie wiesz, które działanie nagrać, zacznij od danych terenowych. Wersja attribution biblioteki web-vitals dołącza do INP selektor elementu i trzy powyższe fazy, a w przeglądarkach opartych na Chromium także wpisy Long Animation Frames z listą skryptów, które blokowały klatkę. Po adresie skryptu od razu widać, czy winny jest Twój kod, czy widżet zewnętrzny.

Poradnik optymalizacji INP zaleca potem prostą metodę, by nagrać w Performance konkretne działanie, np. otwarcie menu lub zmianę filtra, i następnie sprawdzić, która część trwa najdłużej. Następnie dobierz odpowiednią poprawkę:

  • Ogranicz zbędny JavaScript i koszt uruchamiania zewnętrznych widżetów. Odkładanie wszystkich widżetów do pierwszego kliknięcia może przerzucić ich koszt właśnie na tę interakcję, a async i defer przesuwają tylko moment pobrania i uruchomienia skryptu, więc koszt ich wykonania zostaje. Opóźnione ładowanie GTM na realnym projekcie pokazuję w case study PageSpeed 100/100 w Next.js.

  • Dziel długie zadania na mniejsze i oddawaj sterowanie przeglądarce przez scheduler.yield(), dostępne w Chrome i Edge od wersji 129 oraz w Firefoksie od 142. W Safari zostaje fallback na setTimeout. Ciężkie obliczenia niewymagające DOM mogą trafić do Web Workera.

  • Skróć handlery oraz ogranicz niepotrzebne renderowanie i rozmiar aktualizowanego DOM.

  • Pokaż informację zwrotną natychmiast, na przykład stan „Wyszukiwanie…”, a mniej pilną pracę odłóż. Przy wyszukiwaniu debounce może ograniczyć żądania, ale wpisywany tekst powinien pojawiać się od razu.

Pomiar INP kończy się na kolejnym odmalowaniu, więc czas do pojawienia się wyników wyszukiwania albo zapisu formularza leży poza nim i wymaga osobnej metryki.

Przykłady pracy ze stanem i dużymi listami znajdziesz w artykule o wzorcach pogarszających INP w React. Gdy problem zaczyna się od ilości kodu, przejdź do analizy i zmniejszania paczki JavaScript w Next.js.

CLS: jak ograniczyć przesunięcia układu?

(Cumulative Layout Shift) to bezwymiarowa miara nieoczekiwanych przesunięć widocznych elementów strony. Obecna definicja bierze pod uwagę największą sumę punktacji przesunięć w jednym oknie sesji: maksymalnie pięć sekund, z przerwami krótszymi niż sekunda między przesunięciami. Wynik odzwierciedla więc najsłabszy moment całej wizyty, a kolejne okna czasowe już go nie zwiększają. Co istotne, pomiar obejmuje też zachowanie strony po jej załadowaniu. Zgodnie z dokumentacją CLS przesunięcia występujące w ciągu 500 ms od akcji użytkownika są traktowane jako oczekiwane i nie wpływają na wynik. Pamiętaj jednak, że samo przewijanie strony takiego wyłączenia nie daje.

Jak znaleźć i usunąć źródło przesunięcia?

Nagraj w panelu Performance ładowanie i przewijanie strony, a potem porównaj zdarzenia przesunięć na klatkach przed zmianą i po niej. Element, który się przesunął, nie zawsze jest przyczyną, ponieważ tekst potrafi się obniżyć ze względu na reklamę wczytaną powyżej. Sekcja „Layout shift culprits” w Lighthouse i DevTools wskazuje typowych sprawców tego zjawiska i mogą to być np. obrazy bez określonych wymiarów, wstrzyknięte iframe'y czy przeskoki przy ładowaniu fontów.

  • Obrazy i wideo: podawaj prawidłowe width i height albo rezerwuj proporcje przez aspect-ratio. Dla responsywnego obrazu CSS powinien zachowywać te proporcje.

  • Reklamy, embedy i dane z API: rezerwuj miejsce odpowiadające docelowemu układowi. Zbyt małe min-height nie zapobiegnie późniejszemu powiększeniu kontenera.

  • Fonty: dobierz fallback o zbliżonych metrykach. Samo font-display: swap pozwala wcześniej pokazać tekst, ale nie zapobiega przesunięciu przy zmianie kroju. Jak next/font z size-adjust sprowadził CLS z fontów do zera, pokazuję w case study PageSpeed 100/100.

  • Banery i animacje: unikaj niespodziewanego przesuwania już czytanej treści. Animowanie transform zamiast właściwości zmieniających układ pomaga ograniczać takie zmiany. Przykłady dla Framer Motion pokazuję w artykule o wydajnych animacjach w Next.js.

Poradnik optymalizacji CLS szczegółowo omawia odpowiednie techniki i przykłady. Warto pamiętać, że dedykowane komponenty frameworka rozwiążą problem tylko częściowo: optymalizacja obrazu nie pomoże, gdy brak przestrzeni na reklamę lub dynamiczny baner i tak rozbije układ strony. Wdrożenie dla Astro opisuję w artykule o technicznym fundamencie SEO w Astro.

Jak baner zgód na cookies wpływa na LCP, INP i CLS?

Baner zgód ma dziś niemal każda strona firmowa w Polsce, a co ciekawe, według web.dev potrafi on pogorszyć wszystkie trzy metryki naraz. Na telefonie baner z długim tekstem zajmuje dużą część ekranu i bywa elementem LCP, więc wynik zależy wtedy od chwili, w której skrypt platformy zgód (CMP) go wyświetli. Baner wstawiony u góry już po wyrenderowaniu strony spycha treść w dół i podbija CLS, dlatego pokazuj go jako nakładkę (przyklejoną stopkę lub okno modalne) albo zarezerwuj dla niego miejsce w układzie. W wypadku strony StriveLab zdecydowałem się na mały, już przeskalowany pod mobile banerek, który przede wszystkim nie powinien być nadmiernie kłopotliwy.

W przypadku INP problem pojawia się w momencie, którego standardowy test ładowania strony po prostu nie wywoła. Kliknięcie „Akceptuj wszystkie” uruchamia jednocześnie analitykę, piksele reklamowe i czat, zrzucając cały ten ciężar na jedną interakcję. Aby temu zapobiec, skrypt CMP ładuj z atrybutem async bezpośrednio w HTML-u strony (z pominięciem menedżera tagów), a mniej pilne tagi odpalaj po uzyskaniu zgody etapami. Kolejność sygnałów Consent Mode opisuję w artykule o konfiguracji GA4 i Google Tag Manager w Next.js, a współpracę CMP z pomiarem konwersji w poradniku o landing page dla Google Ads.

Które poprawki pomagają na którą metrykę?

Poniższa tabela zbiera najczęstsze przyczyny słabych wyników i pierwsze kroki opisane w poprzednich sekcjach. Zanim wybierzesz poprawkę, potwierdź przyczynę w nagraniu z panelu Performance albo w danych RUM.

MetrykaNajczęstsze przyczyny słabego wynikuPierwsze poprawkiGdzie szukać przyczyny
LCPWolny TTFB, późne odkrycie obrazu, za duży plik, blokady renderowania, baner zgód jako element LCPObraz w początkowym HTML bez loading="lazy", fetchpriority="high", właściwe srcset i sizes, cache lub generowanie statyczne„LCP breakdown” w PageSpeed Insights, panel Performance
INPGłówny wątek zajęty innym skryptem, długie handlery, kosztowne renderowanie, skrypty uruchamiane po zgodzie na cookiesMniej JavaScriptu i widżetów, dzielenie długich zadań przez scheduler.yield(), natychmiastowa informacja zwrotnaAtrybucja web-vitals z Long Animation Frames, log interakcji w DevTools
CLSObrazy bez wymiarów, reklamy i embedy bez zarezerwowanego miejsca, zmiana kroju fontu, baner wstawiony nad treściąwidth i height lub aspect-ratio, rezerwacja miejsca, fallback fontu o zbliżonych metrykach, baner jako nakładka„Layout shift culprits” w Lighthouse i DevTools

Jak wygląda diagnoza Core Web Vitals w praktyce?

Poniższy przykład jest tylko i wyłącznie ilustracyjny i nie pochodzi z pomiaru konkretnego klienta. Załóżmy, że szablon artykułów ma mobilne p75: LCP 3,6 s, INP 160 ms i CLS 0,04. Pierwszym naszym zadaniem jest zbadanie LCP na kilku wpisach korzystających z tego szablonu. W nagraniu jednego wejścia wychodzi tak: TTFB 0,5 s, opóźnienie rozpoczęcia pobierania obrazu 1,7 s, pobieranie 0,6 s i opóźnienie renderowania 0,8 s. Te części sumują się do LCP 3,6 s tego wejścia, co nie oznacza, że można sumować percentyle poszczególnych faz z wielu wizyt.

Największa zwłoka występuje przed pobraniem obrazu, dlatego wtedy trzeba sprawdzić, czy grafika trafia do HTML dopiero po uruchomieniu aplikacji i czy nie ma loading="lazy". Następnie po poprawce porównujesz kilka testów w tych samych warunkach, a po wdrożeniu przechodzisz do obserwacji danych użytkowników. Sama konwersja pliku na AVIF nie rozwiąże problemu tak dużego opóźnienia rozpoczęcia pobierania.

Jak ustalić priorytety i potwierdzić efekt optymalizacji?

  • Zapisz punkt wyjścia. Zanotuj p75, okres, urządzenie oraz zakres raportu: URL, origin czy grupa stron. Przy braku CrUX zapisz scenariusze i warunki testów lokalnych.

  • Wybierz problem o największym znaczeniu. Uwzględnij przekroczenie progu, liczbę dotkniętych stron i znaczenie interakcji dla użytkownika. Wolne wysłanie formularza może być pilniejsze niż drobna poprawa już dobrego LCP.

  • Sformułuj hipotezę i wprowadź ograniczoną zmianę. Przykładowo: filtr listy przelicza wszystkie produkty bezpośrednio w obsłudze kliknięcia. Przeniesienie tej pracy za kolejne odrysowanie klatki skróci czas przetwarzania i obniży wskaźnik INP.

  • Powtórz reprezentatywne scenariusze. Testuj build produkcyjny, mobile i desktop, wolniejsze CPU oraz sieć. Sprawdź również interakcje podczas ładowania i stan po uruchomieniu skryptów marketingowych.

  • Oceń dane po wdrożeniu. RUM pozwala wcześniej porównać nowe pomiary. CrUX i GSC odzwierciedlają zmianę stopniowo: każde kolejne 28-dniowe okno zawiera więcej wizyt po wdrożeniu, dlatego pierwsze przesunięcie zobaczysz przed upływem pełnych 28 dni. Trend śledź w CrUX Vis, które pokazuje tygodniowe punkty z ostatnich 40 tygodni, a w raporcie CWV w Search Console kliknij „Rozpocznij śledzenie”, żeby uruchomić 28-dniowe monitorowanie poprawki.

  • Zabezpiecz poprawkę przed regresją. Ustal budżet wydajności i kontroluj ważne szablony po zmianach. Konfigurację opisuję w poradniku blokowania zmian pogarszających LCP i INP w Next.js.

Szybsza i stabilniejsza strona internetowa może ułatwiać zakupy i wysyłanie formularzy, zmniejszać frustrację użytkowników i ograniczać problemy na słabszych urządzeniach. Ocena wpływu na biznes musi jednak zostać przeprowadzona oddzielnie od wyniku testu: należy sprawdzić konwersję, ukończenie formularzy i błędy, uwzględniając zmiany ruchu. Sposób liczenia opłacalności opisuję w artykule o koszcie opóźnienia strony i Core Web Vitals.

Audyt techniczny i optymalizacja pod kątem SEO i GEO.
Audyt techniczny SEO

Często zadawane pytania

Czy poprawa Core Web Vitals gwarantuje wyższe pozycje w Google?

Nie. Google wykorzystuje Core Web Vitals w systemach rankingowych, ale dobre wyniki nie gwarantują awansu, ponieważ wciąż liczy się między innymi trafność oraz jakość oferowanej przez stronę treści. Konkretny wpływ LCP na wzrost pozycji jest niewiadomą i możemy co najwyżej spekulować.

Jakie są dobre wyniki LCP, INP i CLS?

Stan na dzisiaj to wyniki LCP nie większe niż 2,5 sekundy, INP nie większe niż 200 milisekund i CLS nie większe niż 0,1. Ocenia się 75. percentyl pomiarów, przy czym osobno dla urządzeń mobilnych i komputerów.

Czy 100 punktów w Lighthouse oznacza zaliczone Core Web Vitals?

Nie. Wynik Lighthouse opisuje test laboratoryjny. Ocena Core Web Vitals w PageSpeed Insights korzysta z danych użytkowników Chrome z CrUX. Zwykły audyt ładowania Lighthouse nie mierzy INP; TBT pomaga diagnozować blokowanie głównego wątku, ale nie zastępuje INP.

Czy CrUX obejmuje użytkowników iPhone'ów?

Nie. CrUX zbiera dane wyłącznie z Chrome na komputerach i Androidzie, więc nie ma w nim Safari ani Chrome na iOS. Od Safari 26.2 zmierzysz LCP i INP użytkowników iPhone'ów we własnym RUM, a CLS nadal raportują tylko przeglądarki oparte na Chromium.

Po jakim czasie poprawki będą widoczne w Search Console?

Raport opiera się na kroczącym oknie 28 dni, więc nowe pomiary stopniowo zastępują stare, a pierwszą zmianę trendu zobaczysz przed upływem pełnego okna, o ile strona ma wystarczająco dużo wizyt. Przycisk „Rozpocznij śledzenie” w raporcie uruchamia 28-dniowe monitorowanie poprawki.

Jak liczone są Core Web Vitals w aplikacji Next.js z nawigacją po stronie klienta?

CrUX przypisuje całą wizytę do pierwszego, pełnego ładowania strony. INP i CLS z kolejnych widoków trafiają więc do adresu wejścia, a LCP dotyczy tylko pierwszego widoku. Chrome 151 domyślnie rozpoznaje miękkie nawigacje, a biblioteka web-vitals potrafi raportować je osobno, ale sposób ich ujęcia w CrUX nie został jeszcze ustalony.

Czy Google ocenia Core Web Vitals dla całej domeny, czy dla podstrony?

Według Google systemy rankingowe oceniają treść co do zasady na poziomie konkretnej strony, także w zakresie page experience, choć stosują też niektóre oceny całej witryny. Search Console grupuje podobne adresy, a PageSpeed Insights przy braku danych dla URL-a pokazuje dane originu, dlatego poprawka wspólnego szablonu zwykle zmienia wyniki wielu podstron.

O autorze

Maciej Sala

Maciej Sala — konsultant technologiczny produktów cyfrowych i web developer z bogatym doświadczeniem w marketingu internetowym oraz SEO. Na co dzień pracuje z Reactem, Next.js i TypeScriptem, a ostatnio także z Astro i narzędziami do automatyzacji procesów AI. Sprawnie łączy perspektywę produktową z praktycznym podejściem do kodu. Przez kilka lat był związany z branżą gier wideo jako project manager i game designer. Absolwent historii na Uniwersytecie Jagiellońskim oraz studiów podyplomowych z marketingu internetowego na AGH w Krakowie. Po godzinach trenuje na siłowni, maluje figurki i rozwija własne projekty.

Pomagam przekładać takie tematy na konkretne wdrożenia w frontendzie, SEO, analityce i procesie produktowym.

Skontaktuj się ze mną
LH.pl – Hosting Mango

Biblioteka wiedzy na temat SEO

Czytaj dalej

Zobacz więcej wpisów
Jak osiągnąć 100/100 w Lighthouse Performance w Next.js? Case study

Mamy tu typową stronę usługową zbudowaną w Next.js, wyposażoną w Google Analytics, Google Tag Manager , prosty formularz kontaktowy, galerię zdjęć i animacje. Na początku testy PageSpeed Insights pokazały wyniki: 67/100 na urządzeniach mobilnych i 89/100 na komputerach stacjonarnych.

Maciej Sala

Maciej Sala

Founder StriveLab

Audyt techniczny SEO: co obejmuje w 2026 roku?

To, że strona otwiera się w przeglądarce, nie oznacza jeszcze, że robot wyszukiwarki jest w stanie bez przeszkód pobrać jej treść, poprawnie ją zinterpretować i ostatecznie włączyć do indeksu. Audyt techniczny SEO służy właśnie do weryfikacji tych krytycznych warunków. Pozwala on zidentyfikować fundamenty wymagające naprawy i wyznaczyć właściwe priorytety, zanim przejdziemy do rozbudowy treści oraz pozyskiwania linków.

Maciej Sala

Maciej Sala

Founder StriveLab

Kiedy Next.js daje przewagę w SEO nad React SPA

Next.js to framework React, który ułatwia uniknięcie głównego ograniczenia aplikacji SPA renderowanych wyłącznie w przeglądarce: kluczowa treść może znaleźć się już w początkowym HTML. Google nie musi wtedy czekać na wykonanie JavaScriptu, żeby ją odkryć. Framework dodaje też Metadata API, optymalizację obrazów i podział kodu, ale korzyść dla Core Web Vitals zależy od sposobu implementacji, ilości kodu klienckiego i infrastruktury.

Maciej Sala

Maciej Sala

Founder StriveLab

LH.pl – Cloud Server 1C4G