First Contentful Paint (FCP) w SEO

Co mierzy First Contentful Paint, jaki jest dobry wynik FCP, dlaczego nie jest to Core Web Vital, czym różni się od First Paint i LCP oraz jak naprawić wolne FCP.

Opublikowano po raz pierwszy: 26 cze 2026 · Ostatnia aktualizacja: 11 sie 2026 · Advanced
Języki

First Contentful Paint (FCP) to czas od rozpoczęcia ładowania strony do momentu, gdy jakakolwiek jej treść — tekst, obraz, SVG lub niebiała płaszczyzna — zostanie po raz pierwszy wyrenderowana. Dobry wynik to ≤1,8 s na 75. percentylu rzeczywistych użytkowników. NIE jest to Core Web Vital: sygnały rankingowe to LCP, INP i CLS. FCP to metryka diagnostyczna (laboratoryjna i polowa), która jest elementem składowym LCP — występuje w tym samym czasie lub przed LCP — więc jest przydatna głównie do wykrywania zasobów blokujących renderowanie i wolnego TTFB. W Lighthouse 10 stanowi 10% wyniku Performance. Napraw to, eliminując blokujące renderowanie CSS/JS, skracając TTFB, osadzając krytyczny CSS, używając font-display: swap i wstępnie łącząc się z wymaganymi źródłami.

TL;DR — FCP to czas od rozpoczęcia nawigacji do momentu, gdy jakakolwiek treść strony (tekst, obraz, <svg> lub niebiały <canvas>) zostanie po raz pierwszy wyrenderowana. To nie jest Core Web Vital — to uzupełniająca, laboratoryjna i polowa metryka diagnostyczna oraz element budulcowy LCP (FCP występuje w tym samym czasie co LCP lub wcześniej). Progi polowe (p75): dobrze ≤ 1,8 s, wymaga poprawy ≤ 3,0 s, słabo > 3,0 s. W Lighthouse 10 to 10 % wyniku wydajności. Ponieważ zegar FCP zaczyna się od nawigacji — obejmuje czas przekierowań, konfigurację połączenia i TTFB — wyniki laboratoryjne (Lighthouse) i polowe (CrUX) często się różnią. Napraw to tam, gdzie to występuje: najpierw blokujące renderowanie CSS/JS, potem TTFB, a na końcu czcionki.

Co dokładnie mierzy FCP

Definicja Google z artykułu Philipa Waltona na web.dev jest tutaj osią dokładności: FCP mierzy czas od rozpoczęcia nawigacji do chwili wyrenderowania na ekranie dowolnej części treści strony. W tym samym ujęciu „treść” obejmuje tekst, obrazy — także obrazy tła — elementy <svg> oraz niebiałe elementy <canvas>; dosłowne brzmienie źródła pozostaje w sekcji cytatów.

Słowem, które robi całą robotę, jest any. FCP nie dba o to, co się renderuje — logo o szerokości 40 pikseli liczy się tak samo jak pełny obraz hero. To sygnał “czy cokolwiek jest już na ekranie?”, co jest dokładnie powodem, dla którego jest to wskaźnik wczesny, a nie metryka ukończenia.

Evidence for this claim FCP measures from navigation until the first text, image, SVG, or non-white canvas content is rendered. Scope: Current web.dev FCP definition and qualifying content types. Confidence: high · Verified: web.dev: First Contentful Paint

Jeden szczegół, który łatwo przeoczyć i który zmienia sposób odczytu liczby: zegar FCP zaczyna liczyć od nawigacji, więc obejmuje wszystko, co dzieje się zanim Twój HTML zostanie w ogóle sparsowany. Kluczowy punkt Google: pomiar FCP obejmuje czas zwalniania poprzedniej strony, nawiązywania połączenia, przekierowań i Time To First Byte (TTFB), który może mieć znaczenie w pomiarach polowych. Serwer, który odpowiada w 1,5 s, już wykorzystał większość Twojego budżetu 1,8 s, zanim przeglądarka przetworzyła choć jeden bajt.

FCP NIE jest Core Web Vital

Powiem wprost, bo większość stron to zamazuje: FCP nie jest Core Web Vital i nie jest częścią sygnałów rankingowych Google. Core Web Vitals to LCP, INP i CLS — a FCP nie jest wymienione nigdzie na stronie Google Search ranking Core Web Vitals.

Czym FCP jest w taksonomii Google, to „Other Web Vital” — metryka uzupełniająca przydatna w diagnozie. Zgodnie z web.dev zarówno TTFB, jak i FCP są ważnymi aspektami doświadczenia ładowania oraz pomagają diagnozować problemy z LCP: odpowiednio wolną odpowiedź serwera i zasoby blokujące renderowanie. Dosłowny cytat znajduje się w sekcji źródłowej.

Zatem uczciwe ramy dla interesariuszy są dwustronne i powinieneś przedstawić obie połowy bez wahania:

  • FCP nie wpływa bezpośrednio na ranking. Nie optymalizuj FCP “pod SEO”.
  • FCP to świetne narzędzie diagnostyczne dla LCP, które wpływa na ranking. Zasoby blokujące renderowanie pojawiają się w FCP jako pierwsze.

FCP a First Paint (FP)

Te dwa są ciągle mylone:

  • First Paint (FP) odpala, gdy przeglądarka maluje cokolwiek — w tym sam kolor tła bez żadnej rzeczywistej treści.
  • FCP odpala tylko wtedy, gdy renderuje się kwalifikująca treść: tekst, obrazy (w tym obrazy tła), elementy <svg> lub nie-białe elementy <canvas>. To konkretna, zdefiniowana w specyfikacji lista — a nie luźna zasada “dowolna treść DOM” — i warto zachować precyzję, ponieważ obraz tła się liczy, nawet jeśli nie jest tekstem w DOM.

Zatem FP ≤ FCP, zawsze. Na większości stron są prawie identyczne, ponieważ malowanie koloru tła bez treści na wierzchu jest rzadkie. Gdy jest znacząca różnica, zwykle oznacza to kosmetyczne tło pomalowane przed jakąkolwiek prawdziwą treścią. Interfejs Paint Timing API zwraca zarówno wpisy first-paint, jak i first-contentful-paint — ale FCP jest tym, który warto analizować; FP rzadko mówi ci coś, co można wykorzystać.

FCP a LCP

Druga para, którą ludzie łączą:

  • FCP = kiedy jakakolwiek treść się maluje. Odpala wcześnie. Może to być małe logo lub link nawigacyjny.
  • LCP = kiedy renderuje się największy element w viewporcie. Odpala w tym samym czasie co FCP lub po nim.

Sformułowanie Google: FCP mierzy, kiedy jakakolwiek treść zostanie namalowana, a LCP, kiedy główna treść zostanie namalowana, więc LCP ma być bardziej selektywne. Czytaj to jako „bardziej selektywne”, a nie „potwierdzone jako poprawne” — żadna z tych metryk nie dowodzi, że faktyczna główna treść strony jest kompletna lub użyteczna dla odwiedzającego. FCP po prostu potwierdza, że coś kwalifikującego się zostało namalowane; LCP potwierdza, że największy kwalifikujący się kandydat to zrobił. Strona może mieć szybkie FCP (logo po 0,5 s) i wolne LCP (obraz hero po 4 s) — ta różnica sama w sobie jest użytecznym wskaźnikiem diagnostycznym. A jeśli Twoje FCP jest bliskie LCP, to często dobry znak: oznacza to, że pierwsza namalowana rzecz jest również największa, bez marnowania wczesnego malowania na elementy interfejsu, które nie mają znaczenia dla użytkownika.

Evidence for this claim FCP answers when any eligible content first appears, while LCP tracks the largest eligible viewport candidate; neither metric proves the page's main content is complete or useful. Scope: field and lab Confidence: high · Verified: First Contentful Paint (FCP)

Jedna osobliwość pomiarowa, o której warto wiedzieć: z powodu ograniczeń bezpieczeństwa dotyczących pomiaru czasu obrazów z innych źródeł, API przeglądarki może w rzadkich przypadkach zgłosić LCP wcześniej niż FCP. To artefakt pomiarowy, a nie coś, co fizycznie miało miejsce.

Progi — i dlaczego laboratorium i pole się różnią

Progi terenowe (CrUX, p75): Dobry ≤ 1,8 s · wymaga poprawy ≤ 3,0 s · słaby > 3,0 s. Wytyczne Google mówią, aby mierzyć na 75. percentylu ładowań stron, oddzielnie dla urządzeń mobilnych i komputerów stacjonarnych.

Evidence for this claim A good FCP is 1.8 seconds or less at the 75th percentile; above 3 seconds is poor. Scope: Current web.dev FCP field thresholds. Confidence: high · Verified: web.dev: First Contentful Paint

Ale Lighthouse desktop używa innych, ostrzejszych progów — zielony to około 0–0,9 s, pomarańczowy 0,9–1,6 s, czerwony powyżej 1,6 s — ponieważ laboratorium uruchamia czystą, ograniczoną przeglądarkę Chrome na symulowanym urządzeniu, a nie w warunkach rzeczywistych. (Te zakresy, podobnie jak wagi wyników poniżej, są specyficzne dla wersji Lighthouse — odzwierciedlają aktualny dokument audytu w momencie pisania.) Wynik FCP w Lighthouse to „porównanie czasu FCP Twojej strony z czasami FCP rzeczywistych witryn, oparte na danych z HTTP Archive”.

To najczęstsze źródło nieporozumień dotyczących FCP, więc zapamiętaj to:

Linia „dobry” 1,8 s to próg terenowy (CrUX p75). Linia „zielona” w Lighthouse desktop to ~0,9 s. To różne skale do różnych zadań.

Wyniki laboratoryjne i terenowe różnią się głównie dlatego, że próbkują różne populacje, a nie dlatego, że jedno jest uniwersalnie „bardziej prawdziwe”. Lighthouse uruchamia pojedynczą czystą sesję na stałych warunkach urządzenia/sieci. Pole/CrUX agreguje rzeczywiste urządzenia, rzeczywiste sieci, stany pamięci podręcznej i typy nawigacji — w tym przywracanie z pamięci podręcznej wstecz/do przodu i wstępnie renderowane strony, które nie automatycznie otrzymują świeżego FCP tak jak normalna nawigacja; wymagają one własnego zarządzania cyklem życia (biblioteka web-vitals robi to za Ciebie). Na większości stron liczba terenowa faktycznie jest wyższa — prawdziwi użytkownicy mają łańcuchy przekierowań, czas rozładowania poprzedniej strony i zimne połączenia, które sesja laboratoryjna pomija — ale to tendencja, a nie reguła. Zanim zinterpretujesz różnicę laboratorium/pole jako problem, sprawdź, czy porównujesz porównywalne rzeczy (ta sama klasa urządzeń, te same warunki sieciowe). Używaj danych terenowych do rzeczywistej liczby, a Lighthouse do diagnozy.

Gdzie FCP znajduje się w wyniku Lighthouse

W Lighthouse 10 — aktualnej wersji w momencie pisania, a nie stałej wartości — FCP stanowi 10% wyniku Performance. Pełna waga:

MetrykaWaga
Total Blocking Time (TBT)30%
Largest Contentful Paint (LCP)25%
Cumulative Layout Shift (CLS)25%
First Contentful Paint (FCP)10%
Speed Index10%

Wynik Performance to średnia ważona indywidualnych wyników metryk, a Google zauważa, że wagi zmieniają się z czasem w miarę ewolucji ich badań — FCP utrzymywało się na poziomie 10% od Lighthouse 8 do 10, ale potwierdź to w wersji, której używasz, zanim potraktujesz „10%” jako niezmienne. Praktyczny wniosek: idealne FCP może przesunąć Twój wynik Lighthouse tylko w pewnym zakresie — a złe FCP często wskazuje na złe LCP (mają wspólne przyczyny źródłowe), choć to nakładanie się warto sprawdzić, a nie coś, co wynik gwarantuje.

Co powoduje wolne FCP

W przybliżonej kolejności priorytetów:

  1. Zasoby blokujące renderowanie — zabójca numer jeden. CSS i synchroniczny JS w <head> zmuszają przeglądarkę do czekania: nie może zbudować CSSOM i drzewa renderowania, więc nie może namalować niczego, dopóki te pliki nie zostaną pobrane i przeanalizowane.
  2. Wysoki TTFB — FCP nie może wystąpić, zanim nie nadejdą bajty. Wolny serwer to pierwsze domino i jest wewnątrz pomiaru FCP.
  3. Łańcuchy przekierowań — każde przekierowanie to pełna podróż w obie strony dodana przed pierwszym bajtem.
  4. Strategia ładowania czcionek internetowychfont-display: block (lub brak reguły) może pozostawić tekst niewidocznym przez nawet ~3 sekundy. Nawet jeśli malowanie technicznie nastąpi w tle, użytkownik nie widzi niczego użytecznego.

Jak to naprawić

Pełna lista, ale z priorytetami, których dokumentacja nie podaje. To typowe dźwignie, nie uniwersalne — najpierw sprawdź własny ślad lub film, aby zobaczyć, który zasób lub faza faktycznie opóźnia Twój kandydat FCP, zanim sięgniesz po poprawki (preconnect, preload, zmiana font-display), które mogą nie dotyczyć Twojej strony:

Zrób to najpierw (największe zyski):

  • Wyeliminuj CSS i JavaScript blokujące renderowanie. Wstaw krytyczny CSS dla treści nad zakładką bezpośrednio w <head>; resztę ładuj asynchronicznie; dodaj async/defer do niekrytycznych skryptów. Przeniesienie tagu <link> nie pomaga — przeglądarka nie namaluje, dopóki cały CSS nie zostanie załadowany i przeanalizowany, niezależnie od tego, gdzie znajduje się tag.
  • Zmniejsz TTFB (czas odpowiedzi serwera). Pamięć podręczna, CDN, szybsze źródło — wszystko, co sprawi, że pierwszy bajt pojawi się szybciej, bezpośrednio skraca FCP.
  • Napraw ładowanie czcionek. Użyj font-display: swap (natychmiast pokazuje tekst zastępczy, zamienia na czcionkę internetową, gdy będzie gotowa) lub font-display: optional (pomija czcionkę internetową, jeśli nie jest już w pamięci podręcznej). Unikaj font-display: block dla krytycznego tekstu — to najgorsze dla FCP.

Potem uporządkuj resztę:

  • Preconnect do wymaganych źródeł za pomocą <link rel="preconnect"> — wczesne nawiązywanie połączeń z ważnymi źródłami zewnętrznymi może zaoszczędzić 100–500 ms.
  • Preload kluczowych żądań (<link rel="preload">) dla krytycznej czcionki lub obrazu LCP.
  • Minifikuj CSS, usuń nieużywany CSS, usuń nieużywany JavaScript — mniejsze pliki parsują się i odblokowują malowanie szybciej.
  • Unikaj wielu przekierowań, unikaj ogromnych ładunków sieciowych, serwuj statyczne zasoby z wydajną polityką pamięci podręcznej, unikaj nadmiernego rozmiaru DOM i minimalizuj krytyczną głębokość żądań. Ogólna higiena ładunku, która wszystko zasila pierwsze malowanie.

Łańcuch diagnostyczny FCP → TTFB → LCP

Tak faktycznie użyłbym FCP i to jest rama, którą dokumentacja sugeruje, ale nie rozwija. Traktuj trzy metryki ładowania jako jeden przepływ pracy:

  1. FCP jest wysokie → sprawdź zasoby blokujące renderowanie (CSS/JS w <head>). To najczęstsza przyczyna i najszybsza wygrana.
  2. Sprawdź też TTFB — ponieważ FCP je zawiera, wolny serwer zawyża FCP, zanim jakiekolwiek blokowanie renderowania w ogóle wejdzie w grę. Wskazówka web.dev: ponieważ TTFB poprzedza zarówno FCP, jak i LCP, Twój serwer powinien odpowiadać na tyle szybko, aby 75. percentyl użytkowników osiągał “dobre” FCP.
  3. Te same problemy często kaskadują do LCP — metryki, która jest faktycznym sygnałem rankingowym — ponieważ FCP i LCP często mają wspólne przyczyny źródłowe. To nakładanie się warto sprawdzić, ale to nie gwarancja: LCP ma własne czynniki (rozmiar, priorytet i ścieżka ładowania swojego konkretnego największego elementu), więc naprawienie przyczyn FCP nie obiecuje naprawionego LCP. To właściwe pierwsze miejsce do szukania, nie ostatni krok.

To jest wartość FCP dla SEO: to tani, wczesny odczyt, czy ścieżka ładowania jest zdrowa, zanim bardziej selektywny pomiar LCP w ogóle się zakończy.

Add an expert note

Pin an expert quote

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