Panel klienta
SEO

TTFB w sklepie internetowym: jak znaleźć wolny serwer

TTFB w sklepie internetowym pozwala sprawdzić, ile czasu mija od wysłania żądania do rozpoczęcia odpowiedzi serwera. Sam wynik nie mówi jednak, czy winny jest hosting, PHP, baza danych, cache czy kod sklepu, dlatego trzeba rozłożyć czas odpowiedzi na poszczególne etapy.

Tomasz Wierzba 13 min czytania
TTFB w sklepie internetowym: jak znaleźć wolny serwer

TTFB w sklepie internetowym: co właściwie mierzy ten parametr

TTFB to czas od rozpoczęcia żądania do momentu, w którym przeglądarka zaczyna otrzymywać pierwsze dane odpowiedzi. Skrót pochodzi od angielskiego Time to First Byte. W praktyce wynik obejmuje nie tylko pracę samej aplikacji, ale również część drogi sieciowej, zestawienie połączenia, DNS, TLS oraz czas oczekiwania na odpowiedź serwera.

To istotne rozróżnienie, ponieważ wysoki TTFB nie zawsze oznacza słaby hosting. Jeżeli sklep przez długi czas generuje HTML, przyczyną może być wolny kod PHP, zapytania do MySQL lub MariaDB, zewnętrzne API, brak cache albo przeciążony proces PHP. Z kolei jeżeli nawet bardzo prosta, statyczna odpowiedź z tego samego serwera pojawia się z dużym opóźnieniem, podejrzenie powinno paść raczej na infrastrukturę lub sieć.

TTFB jest mierzony przed FCP i LCP, więc opóźnienie na tym etapie może przesunąć kolejne momenty ładowania strony. Nie oznacza to jednak, że każdą stronę trzeba doprowadzić do identycznego wyniku. W dokumentacji web.dev wartość około 0,8 sekundy jest podawana jako orientacyjny cel dla większości witryn, natomiast sam TTFB nie jest Core Web Vitals. Wynik trzeba interpretować razem z tym, jak sklep generuje i dostarcza treść.

Jeżeli podczas audytu widzisz wysoki TTFB, nie zaczynaj od zmiany hostingu. Najpierw ustal, gdzie dokładnie powstaje opóźnienie.

Jak sprawdzić TTFB sklepu bez zgadywania

Najprostszy pomiar możesz wykonać w Chrome. Otwórz stronę sklepu, uruchom Narzędzia deweloperskie i przejdź do zakładki Network. Odśwież stronę, wybierz główne żądanie dokumentu HTML i sprawdź szczegóły czasu oczekiwania na odpowiedź.

W widoku Network interesuje Cię przede wszystkim żądanie typu Document. Nie analizuj w pierwszej kolejności obrazów, plików CSS czy JavaScriptu, ponieważ odpowiadają one za inne etapy ładowania. Jeżeli główna odpowiedź HTML długo czeka na pierwszy bajt, problem znajduje się przed dostarczeniem dokumentu do przeglądarki.

Możesz również sprawdzić TTFB z poziomu JavaScriptu za pomocą Navigation Timing API. W konsoli przeglądarki przydatny jest prosty pomiar:

performance.getEntriesByType('navigation')[0].responseStart

Otrzymana wartość jest podawana w milisekundach od początku nawigacji. MDN wskazuje responseStart jako parametr pozwalający odczytać TTFB dla głównego żądania nawigacji.

Nie opieraj diagnozy na jednym odświeżeniu. Wykonaj kilka pomiarów, najlepiej w trybie bez cache oraz po ponownym załadowaniu strony. Porównaj również stronę główną, kategorię, produkt, koszyk i wyszukiwanie. Jeżeli każda z nich ma podobnie wysoki czas oczekiwania, szukaj przyczyny wspólnej dla całego sklepu. Jeżeli tylko jedna sekcja jest wolna, bardziej prawdopodobna jest przyczyna związana z generowaniem konkretnego widoku.

Przydatny jest również test z kilku lokalizacji. TTFB obejmuje część czasu potrzebnego na DNS, zestawienie połączenia i przesłanie żądania do serwera. Sklep obsługujący klientów w Polsce może mieć inny wynik mierzony z Polski niż z odległego regionu. Różnica między lokalizacjami może wskazywać na problem sieciowy, geograficzne oddalenie serwera albo konfigurację CDN.

Nie porównuj bezpośrednio wyników z różnych narzędzi bez sprawdzenia, co dokładnie mierzą. TTFB może być przedstawiany w różny sposób zależnie od narzędzia i konfiguracji odpowiedzi HTTP.

Wolny serwer sklepu czy wolna aplikacja?

To najważniejsze pytanie podczas diagnozy. Sklep może działać na dobrym VPS-ie, a mimo to generować stronę przez kilka sekund. Może też mieć prostą aplikację, która odpowiada szybko, ale serwer jest przeciążony i opóźnia każdą odpowiedź.

Dobrym testem jest porównanie kilku rodzajów zasobów. Jeżeli masz możliwość, przygotuj prosty statyczny plik HTML umieszczony na tym samym serwerze i domenie lub w tej samej infrastrukturze. Następnie porównaj jego odpowiedź z odpowiedzią generowaną przez sklep.

Jeżeli statyczny plik odpowiada szybko, a strona produktu ma wysoki TTFB, infrastruktura sieciowa prawdopodobnie nie jest jedynym problemem. Wtedy przechodzisz do PHP, bazy danych, modułów i logiki aplikacji.

Jeżeli także statyczny plik odpowiada wolno, trzeba sprawdzić serwer, sieć, DNS, reverse proxy, obciążenie CPU, pamięć, dysk oraz konfigurację usług. W takim przypadku instalowanie kolejnych wtyczek cache może tylko zamaskować problem.

Podobny test możesz wykonać na kilku stronach sklepu. Jeżeli strona główna odpowiada szybko, ale wyszukiwanie produktów potrzebuje dużo więcej czasu, nie ma sensu zaczynać od wymiany całego hostingu. Szukasz wtedy operacji wykonywanych podczas wyszukiwania.

Jeżeli natomiast nawet prosta strona kategorii, która powinna korzystać z cache, ma wysoki czas odpowiedzi, sprawdź konfigurację cache oraz serwer WWW. Przy okazji można ocenić, czy opóźnienia widoczne w INP sklepu nie wynikają z osobnego problemu po stronie przeglądarki. INP i TTFB mierzą inne fragmenty procesu, dlatego nie należy traktować ich jako zamiennych wskaźników.

Nowoczesny serwer symbolizujący szybki czas odpowiedzi TTFB sklepu internetowego

Co powoduje wysoki TTFB w sklepie internetowym

Hosting i zasoby serwera

Pierwszym podejrzanym jest infrastruktura, ale nie zawsze słusznie. Sprawdź obciążenie CPU, wykorzystanie pamięci RAM, swap, obciążenie dysku oraz liczbę aktywnych procesów PHP. Na hostingu współdzielonym dodatkowym problemem może być konkurencja o zasoby z innymi stronami.

Jeżeli TTFB rośnie w godzinach największego ruchu, korelacja z obciążeniem serwera jest mocnym sygnałem diagnostycznym. Nie oznacza jeszcze, że trzeba kupić większy serwer. Najpierw sprawdź, co zużywa zasoby.

Na VPS-ie zweryfikuj między innymi procesy PHP-FPM, serwer WWW oraz bazę danych. Warto sprawdzić również limity procesów PHP i sytuacje, w których wszystkie dostępne workery są zajęte. Sklep może wtedy czekać na wolny proces, nawet jeżeli średnie wykorzystanie CPU nie wygląda dramatycznie.

PHP i aplikacja sklepu

WooCommerce, PrestaShop i inne platformy e-commerce wykonują podczas generowania strony wiele operacji. Ładowane są moduły, wykonywane są zapytania do bazy, sprawdzane są ceny, stany magazynowe, reguły promocji, warianty, koszyki i dane użytkownika.

Problemem może być również moduł, który wykonuje kosztowną operację przy każdym żądaniu. Dotyczy to szczególnie dodatków integrujących sklep z zewnętrznymi usługami, systemami magazynowymi, porównywarkami cen czy API.

Jeżeli po wyłączeniu konkretnego modułu TTFB wyraźnie się zmienia, masz punkt zaczepienia. Test wykonuj na kopii sklepu lub w kontrolowanym środowisku, ponieważ wyłączanie modułów na produkcji może zmienić działanie sklepu.

Jeżeli sklep zwraca błędy PHP, nie ignoruj ich tylko dlatego, że strona finalnie się wyświetla. Ostrzeżenia, wyjątki i nieefektywne operacje mogą zwiększać czas generowania odpowiedzi. Gdy TTFB jest bardzo wysoki i jednocześnie występują błędy aplikacji, pomocna będzie również diagnostyka błędów 500 w sklepie, ponieważ część problemów z wydajnością może mieć wspólną przyczynę w kodzie lub konfiguracji.

Baza danych

W sklepie internetowym baza danych często jest miejscem, którego nie widać w zwykłym pomiarze TTFB. Przeglądarka widzi tylko to, że długo czeka na pierwszy bajt. PHP może w tym czasie wykonywać serię zapytań SQL.

Szczególnie podejrzane są zapytania wykonywane na dużych tabelach bez odpowiednich indeksów, pobieranie zbyt wielu rekordów, wielokrotne odpytywanie tej samej tabeli oraz zapytania związane z filtrowaniem produktów, wariantami i wyszukiwaniem.

Jeżeli wolna jest przede wszystkim wyszukiwarka sklepu, zacznij od analizy zapytań wykonywanych dla wyszukiwania. Jeżeli wolne są strony produktów, sprawdź zapytania dotyczące atrybutów, wariantów, cen, stanów magazynowych i powiązanych produktów.

Nie zakładaj, że baza danych jest wolna tylko dlatego, że ma dużo rekordów. Liczy się sposób wykonywania zapytań, indeksy, konfiguracja serwera bazy i ilość pracy wykonywanej podczas pojedynczego żądania.

Cache

Brak cache może sprawić, że każda wizyta uruchamia pełne generowanie strony. W przypadku sklepu część stron może być jednak cache’owana, a część musi być generowana dynamicznie.

Sprawdź nagłówki odpowiedzi oraz konfigurację mechanizmu cache. Jeżeli po pierwszym wejściu odpowiedź jest wolna, a kolejne wejścia są znacznie szybsze, cache prawdopodobnie uczestniczy w obsłudze żądania. Jeżeli każda odpowiedź trwa podobnie długo, sprawdź, czy cache rzeczywiście działa i czy nie jest omijany przez ciasteczka, parametry URL lub konfigurację aplikacji.

Parametry śledzące w adresach mogą również wpływać na wykorzystanie cache. web.dev zwraca uwagę, że unikalne parametry URL mogą powodować kierowanie żądań do serwera źródłowego zamiast wykorzystania wcześniej zapisanej odpowiedzi z warstwy cache.

Sieć, DNS i TLS

TTFB obejmuje również etap poprzedzający właściwe generowanie strony. DNS, zestawienie połączenia TCP oraz negocjacja TLS mogą dołożyć własne opóźnienie.

Jeżeli problem występuje głównie dla użytkowników z określonych regionów, porównaj wyniki z różnych lokalizacji. Sprawdź rekordy DNS, miejsce uruchomienia serwera, CDN oraz trasę połączenia.

Wysoki TTFB wynikający z sieci będzie wyglądał inaczej niż wysoki TTFB spowodowany przez PHP. W pierwszym przypadku opóźnienie pojawia się przed rozpoczęciem właściwej odpowiedzi aplikacji. W drugim przeglądarka nawiązuje połączenie, ale potem długo czeka na dane.

Jak odróżnić problem całego serwera od jednej strony

Najprostsza metoda to porównanie kilku adresów o różnym stopniu złożoności. Sprawdź stronę główną, kategorię, produkt, wyszukiwarkę, koszyk oraz prosty zasób statyczny.

Jeżeli wszystkie odpowiedzi mają podobnie wysoki TTFB, zacznij od infrastruktury, sieci, serwera WWW, PHP-FPM i wspólnych elementów aplikacji. Jeżeli tylko produkt jest wolny, sprawdzaj logikę strony produktu. Jeżeli wolne jest wyszukiwanie, analizuj wyszukiwanie i zapytania SQL. Jeżeli koszyk jest wolny, sprawdź operacje zależne od sesji i danych użytkownika.

Przydatne jest również porównanie odpowiedzi z cache i bez cache. Jeżeli wersja z cache odpowiada szybko, a wersja dynamiczna długo, problem leży raczej w generowaniu strony niż w podstawowej komunikacji z serwerem.

W sklepie wielojęzycznym wykonaj test dla kilku języków. Jeżeli tylko jeden wariant językowy ma wysoki TTFB, sprawdź jego moduły, zapytania i sposób generowania danych. Nie zakładaj od razu, że problem wynika z samego serwera.

Jeżeli podczas testów widzisz również błędy przekierowań, najpierw sprawdź ich liczbę. Każdy dodatkowy redirect może dołożyć czas przed uzyskaniem właściwej odpowiedzi HTML. Podobnie trzeba uważać na niepotrzebne przekierowania między wersjami HTTP, HTTPS, www i bez www.

Kelner odbierający zamówienie przy ladzie kawiarni

Diagnostyka krok po kroku

Najpierw wykonaj pomiar strony głównej i kilku reprezentatywnych podstron. Zapisz wyniki osobno dla cache i dla pierwszego żądania. Nie wyciągaj wniosków na podstawie jednej strony.

Następnie sprawdź Network w Chrome i zobacz, jak długo główne żądanie dokumentu czeka na odpowiedź. Jeżeli możesz, porównaj wyniki z różnych lokalizacji.

Kolejny etap to serwer. Sprawdź obciążenie CPU, RAM, swap, dysk, PHP-FPM i bazę danych. Jeżeli TTFB rośnie równocześnie z obciążeniem, przeanalizuj procesy odpowiedzialne za wzrost zużycia zasobów.

Potem przejdź do aplikacji. Sprawdź logi PHP, moduły, wtyczki oraz operacje wykonywane podczas generowania wolnej strony. W razie potrzeby wykonaj profilowanie kodu na środowisku testowym.

Dopiero później analizuj konkretne zapytania SQL. Szukaj zapytań wykonywanych wielokrotnie, operujących na dużej liczbie rekordów albo pozbawionych odpowiednich indeksów.

Na końcu zweryfikuj cache. Sprawdź, czy odpowiedź faktycznie jest cache’owana, kiedy cache jest omijany i czy parametry URL lub cookies nie powodują przejścia do dynamicznego generowania strony.

Jeżeli sklep korzysta z wielu zewnętrznych usług, sprawdź także czas ich odpowiedzi. Moduł może podczas generowania strony czekać na zewnętrzne API. Wtedy nawet mocny serwer nie rozwiąże problemu, ponieważ aplikacja nadal będzie oczekiwać na odpowiedź innego systemu.

Poniższa tabela pozwala szybko przypisać objaw do obszaru, który trzeba sprawdzić:

Źródło opóźnieniaTypowy sygnałCo sprawdzićNastępny krok diagnostyczny
HostingWysoki TTFB na wielu stronachObciążenie CPU, RAM, dysku i limityPorównaj prosty plik statyczny z PHP
Serwer WWWOpóźnienia także dla prostych żądańNginx, Apache, reverse proxy, konfiguracjęSprawdź logi i czasy odpowiedzi
PHPHTML długo czeka na wygenerowaniePHP-FPM, workery, błędy i profilowanieZnajdź wolne fragmenty aplikacji
Baza danychWolne strony produktów, kategorii lub wyszukiwanieZapytania SQL, indeksy, obciążenie DBPrzeanalizuj najwolniejsze zapytania
CacheDuża różnica między pierwszym i kolejnym wejściemNagłówki cache i reguły wykluczeńSprawdź, kiedy cache jest omijany
Zewnętrzne APIWybrane funkcje są znacznie wolniejszeCzas odpowiedzi usług zewnętrznychZmierz każde wywołanie osobno
DNS i siećRóżne wyniki zależnie od lokalizacjiDNS, trasa, TLS, odległość serweraPorównaj pomiary z różnych regionów
Konkretna stronaTylko jeden typ URL jest wolnyKod kontrolera, moduły i SQLProfiluj generowanie danego widoku

Co zrobić, gdy TTFB jest wysoki tylko na produkcji

To częsty przypadek. Środowisko testowe może mieć mniej danych, mniej ruchu, mniej modułów i inną konfigurację cache. Po wdrożeniu sklep zaczyna wykonywać te same operacje na rzeczywistej bazie i przy rzeczywistym obciążeniu.

Nie porównuj więc wyłącznie wersji PHP lub parametrów serwera. Porównaj również dane, liczbę produktów, liczbę wariantów, konfigurację cache oraz zadania cron.

Sprawdź, czy w tle nie działa import produktów, synchronizacja stanów, generowanie indeksów albo integracja z zewnętrznym systemem. Takie zadania mogą chwilowo obciążyć bazę lub CPU i zmienić TTFB stron sklepu.

Jeżeli problem pojawił się po wdrożeniu nowego modułu, aktualizacji platformy albo zmianie konfiguracji serwera, porównaj moment wystąpienia problemu z historią zmian. To często pozwala zawęzić zakres diagnostyki szybciej niż przypadkowe wyłączanie kolejnych funkcji.

Jeżeli jednocześnie występują problemy z innymi sygnałami technicznymi, nie mieszaj ich w jedną diagnozę. Na przykład analiza INP, LCP i CLS w sklepie pomoże rozdzielić opóźnienia backendu od problemów występujących już po dostarczeniu dokumentu do przeglądarki.

Kolejka ludzi czekająca przy okienku

Jak zmniejszyć TTFB sklepu bez wymiany hostingu w ciemno

Po ustaleniu źródła problemu dopiero wybierasz rozwiązanie. Jeżeli winny jest kod PHP, optymalizujesz operacje wykonywane podczas żądania. Jeżeli baza danych, analizujesz zapytania i indeksy. Jeżeli cache, poprawiasz jego konfigurację i reguły wykluczeń. Jeżeli serwer jest przeciążony, oceniasz konfigurację procesów oraz dostępne zasoby.

Nie zaczynaj od instalowania kolejnego systemu cache. Jeżeli strona wykonuje kosztowne zapytania SQL przed zapisaniem odpowiedzi do cache, cache może ograniczyć problem tylko dla części użytkowników i tylko w określonych warunkach.

Nie zaczynaj również od migracji na droższy VPS, jeśli nie wiesz, co obciąża obecny serwer. Większa maszyna może zwiększyć dostępne zasoby, ale nie naprawi błędnego zapytania SQL, wolnego API ani modułu wykonującego niepotrzebną pracę przy każdym żądaniu.

Jeżeli natomiast prosty plik statyczny, strona z cache i dynamiczna strona mają podobne opóźnienia, a problem występuje niezależnie od aplikacji, wtedy analiza hostingu i infrastruktury ma znacznie więcej sensu.

Podczas audytu szybkości można przejść tę ścieżkę metodycznie: najpierw zmierzyć, później rozdzielić sieć od backendu, następnie PHP od bazy danych, a na końcu wskazać konkretny element generujący opóźnienie. Taki sposób pracy jest bardziej użyteczny niż sama informacja, że sklep ma wysoki TTFB.

Jeżeli nie wiesz, czy problem znajduje się po stronie serwera, aplikacji czy bazy danych, audyt szybkości sklepu internetowego pozwala zacząć od pomiarów i wskazania obszaru wymagającego dalszej diagnostyki.

TTFB a SEO sklepu internetowego

TTFB SEO warto traktować jako element technicznej wydajności, a nie jako samodzielny rankingowy cel. Wysoki TTFB opóźnia rozpoczęcie pobierania dokumentu HTML, a przez to może wpływać na dalsze etapy ładowania strony.

W praktyce nie chodzi o to, aby obsesyjnie ścigać pojedynczy wynik z testu. Jeżeli sklep ma dobry TTFB, ale ciężki JavaScript blokuje dalsze renderowanie, użytkownik nadal może czekać na właściwą treść. Jeżeli TTFB jest wysoki, ale reszta strony działa sprawnie, trzeba ustalić, czy poprawa backendu rzeczywiście jest głównym ograniczeniem.

Dlatego pomiar TTFB powinien być częścią większego audytu wydajności. Najpierw ustalasz, ile czasu zajmuje odpowiedź, potem szukasz miejsca powstawania opóźnienia i dopiero na tej podstawie wybierasz zmianę techniczną.

Etapy żądania HTTP wpływające na TTFB

Przebieg żądania zaczyna się od nawigacji i ewentualnych przekierowań. Następnie DNS, zestawienie połączenia TCP oraz negocjacja TLS. Kolejny etap to wysłanie żądania do serwera i oczekiwanie na przetworzenie. W tej fazie źródłem opóźnienia może być serwer WWW, PHP, aplikacja, cache, baza danych albo zewnętrzne API. Ostatni etap to rozpoczęcie odpowiedzi i nadejście pierwszego bajtu, czyli punkt pomiaru TTFB.

TTFB nie oznacza więc wyłącznie czasu pracy PHP. Obejmuje również część komunikacji sieciowej przed rozpoczęciem dostarczania odpowiedzi. Dlatego sam wynik TTFB nie pozwala jeszcze wskazać winnego komponentu.

Podsumowanie: jak znaleźć wolny serwer sklepu

Wysoki TTFB jest sygnałem do diagnostyki, a nie gotową diagnozą. Najpierw zmierz główne żądanie HTML, potem porównaj kilka typów stron i sprawdź, czy problem występuje również dla prostego zasobu statycznego.

Jeżeli wolny jest cały serwer, sprawdź hosting, sieć, DNS, serwer WWW i dostępne zasoby. Jeżeli wolna jest tylko aplikacja, przejdź do PHP, modułów, cache i bazy danych. Jeżeli wolny jest jeden typ strony, analizuj operacje charakterystyczne dla tego widoku.

Tak podejdziesz również do pytania, co powoduje wysoki TTFB: nie szukasz jednej uniwersalnej przyczyny, tylko eliminujesz kolejne warstwy odpowiedzialne za czas odpowiedzi serwera. Dopiero po takim pomiarze można zdecydować, czy potrzebna jest zmiana konfiguracji, optymalizacja kodu, poprawa zapytań SQL, lepszy cache czy zmiana infrastruktury. Takie poprawki po stronie serwera i aplikacji można zlecić w ramach optymalizacji szybkości sklepu.

Najczęstsze pytania

Jak sprawdzić TTFB sklepu internetowego?

Najprościej użyć Chrome DevTools i zakładki Network. Wybierz główne żądanie typu Document i sprawdź czas oczekiwania na rozpoczęcie odpowiedzi. TTFB można również odczytać z Navigation Timing API za pomocą parametru responseStart.

Jaki TTFB jest dobry dla sklepu internetowego?

Web.dev podaje około 0,8 sekundy jako orientacyjny cel dla większości witryn. Nie jest to jednak próg rankingowy ani Core Web Vital. Wynik trzeba analizować razem z FCP, LCP oraz sposobem generowania treści przez sklep.

Czy wysoki TTFB zawsze oznacza słaby hosting?

Nie. Wysoki TTFB może wynikać z wolnego PHP, zapytań do bazy danych, braku cache, zewnętrznego API, przeciążenia procesów albo problemów sieciowych. Porównanie dynamicznej strony z prostym zasobem statycznym pomaga rozdzielić problem infrastruktury od problemu aplikacji.

Co powoduje wysoki TTFB na stronie produktu?

Częstymi obszarami do sprawdzenia są zapytania SQL, warianty produktów, reguły cenowe, moduły, integracje zewnętrzne i brak skutecznego cache. Jeżeli pozostałe strony działają szybko, najpierw analizuj operacje wykonywane podczas generowania strony produktu.

Jak zmniejszyć TTFB sklepu internetowego?

Najpierw trzeba znaleźć źródło opóźnienia. W zależności od wyniku pomiarów może być potrzebna optymalizacja PHP, zapytań SQL, cache, konfiguracji PHP-FPM, serwera WWW, integracji zewnętrznych albo infrastruktury. Sama zmiana hostingu nie rozwiązuje problemów wynikających z aplikacji.

Źródła

  1. Time to First Byte (TTFB) · web.dev
  2. Optimize Time to First Byte · web.dev
  3. Optimize Largest Contentful Paint · web.dev
  4. Time to First Byte (TTFB) · MDN Web Docs
TTFBwydajność sklepuSEO techniczneszybkość sklepuhostingWooCommercePrestaShop

Zacznijmy od tego, co naprawdę hamuje Twoją sprzedaż

Napisz krótko, czym się zajmujesz i co Cię gryzie. Odpiszę osobiście, bez automatów i bez nacisku na sprzedaż.

WhatsApp