SEO techniczne i optymalizacja szybkości to dwie różne prace, które w sklepie internetowym pracują na ten sam wynik: więcej wejść z Google i więcej zamówień. SEO techniczne pilnuje dostępu do indeksu i poprawnej struktury — crawlowania, indeksacji, canonicali i danych strukturalnych. Optymalizacja szybkości zajmuje się czasem odpowiedzi serwera i renderowaniem po stronie klienta. Poniżej znajdziesz część organizacyjną: jak odróżnić jedno od drugiego, jak zmierzyć problem i jak zgłosić go wykonawcy, żeby nie przepalić budżetu na naprawę złego elementu.

Czym jest SEO techniczne i optymalizacja szybkości w sklepie internetowym

SEO techniczne i optymalizacja szybkości to dwie różne prace. SEO techniczne pilnuje dostępu do indeksu i poprawnej struktury: budżetu crawlowania, indeksacji, canonicali, przekierowań, mapy strony i danych strukturalnych. Optymalizacja szybkości zajmuje się czasem odpowiedzi serwera i renderowaniem po stronie klienta — czyli tym, co dzieje się od wysłania żądania do pojawienia się treści na ekranie.

Granica między nimi bywa płynna i to jest najczęstszy powód przepalonego budżetu. Googlebot przy TTFB 3 s indeksuje mniej podstron w jednej sesji, więc wolny serwer staje się problemem SEO. Z kolei canonical wskazujący na /koszyk potrafi wyrzucić z indeksu 200 kart produktów — i żadna kompresja obrazków tego nie naprawi. Dlatego obie prace planuje się razem; zakres pierwszej z nich opisujemy w sekcji SEO techniczne.

Szybki test, czy masz problem — pięć sygnałów:

Dwa z tych sygnałów naraz to zwykle nie przypadek, a jedna przyczyna: brak cache, wolne zapytanie SQL albo zewnętrzny skrypt ładowany przed treścią.

Najważniejsze zdanie tego tekstu: szybkość i techniczne SEO są środkiem do konwersji, nie celem samym w sobie. Zielone kółko w Lighthouse przy koszyku porzuconym na etapie płatności nic nie znaczy. Zanim zamówisz optymalizację, ustal, który element blokuje zakup.

Core Web Vitals w 2025: progi LCP, INP i CLS w praktyce sklepu

Progi „dobry” w Core Web Vitals wynoszą: LCP ≤ 2,5 s, INP ≤ 200 ms, CLS ≤ 0,1. Nie mierzy się ich jednak na Twoim laptopie ani w pojedynczym teście. Google liczy 75. percentyl realnych wizyt — 75% wizyt musi zmieścić się w progu, a 25% może być gorszych. Osobno dla mobile i desktopu. W sklepie oznacza to, że jeden szybki desktop nic nie zmieni, jeśli trzy czwarte ruchu mobilnego czeka 4 s na banner.

12 marca 2024 INP zastąpił FID. Różnica jest praktyczna: FID mierzył tylko opóźnienie pierwszej reakcji, INP mierzy całą interakcję do momentu, gdy przeglądarka pokaże efekt. W sklepie to konkretnie: dodanie do koszyka, klikanie w filtry, otwarcie mini-koszyka, zmianę wariantu. Jeśli po kliknięciu „Do koszyka” przycisk reaguje po 400 ms, bo w tym czasie wykonuje się skrypt analityczny — INP to pokaże, FID nie.

Dane polowe (raport CrUX, Search Console) to 28 dni realnego ruchu. Dane labowe (Lighthouse) to symulacja na wybranym sprzęcie, bez Twoich użytkowników, cache i rozszerzeń przeglądarki. Rozjazd jest normalny. Zasada: decyzję podejmuj na danych polowych, labowe służą do znalezienia przyczyny.

Gdzie w sklepie najczęściej pada LCP: banner hero w PNG ważący 1,5 MB, slider z 5 slajdami ładowany w całości, zdjęcia produktów bez atrybutów width i height, fonty z Google Fonts bez preconnect i font-display: swap, skrypt czatu wstawiony przed treścią.

Zgłoszenie do dewelopera brzmi: „LCP karty produktu to 4,1 s na mobile (dane polowe CrUX), element LCP to img.hero, plik 1,2 MB PNG”, a nie „strona jest wolna”. Metryki i sposób ich zbierania opisuje dokumentacja Google Search Central – Core Web Vitals.

MetrykaPróg „dobry” (75. percentyl)Co mierzyTypowe miejsce awarii w sklepie
LCP≤ 2,5 sCzas do wyrenderowania największego elementu widokuBanner hero w PNG, slider z 5 slajdami, zdjęcie produktu bez width/height
INP≤ 200 msOpóźnienie reakcji na kliknięcie lub dotknięcieDodanie do koszyka, filtry, mini-koszyk, przełączanie wariantów
CLS≤ 0,1Suma nieoczekiwanych przesunięć layoutuObrazy bez wymiarów, banner cookies, podmiana fontu, wstrzykiwany pasek promocyjny

Jak zmierzyć szybkość sklepu: 6 narzędzi i co z nich wyczytać

Zacznij od PageSpeed Insights, ale wpisz osobno URL karty produktu, kategorii i strony głównej. Wynik dla strony głównej rzadko pokazuje problem sklepu. Patrz najpierw na dane polowe z CrUX (ostatnie 28 dni), dopiero potem na listę „Diagnostyka”. Puste dane polowe oznaczają zbyt mały ruch — wtedy labowe traktuj jako wskazówkę, nie wyrok.

Raport Core Web Vitals w Search Console grupuje adresy po typie: karty produktów, kategorie, strona główna, inne. Jeśli na czerwono są tylko karty produktów, problem siedzi w szablonie product.tpl i tym, co ładuje, a nie w serwerze. Jeśli czerwone jest wszystko, zaczynaj od TTFB, cache i bazy.

Lighthouse w Chrome DevTools uruchamiaj w trybie incognito, na zimnym cache, z profilem Mobile. Te same warunki powtórz w WebPageTest (lokalizacja Frankfurt, urządzenie Moto G4, „First View”) — dostaniesz waterfall z rozbiciem na DNS, TLS, TTFB i pobieranie zasobów. GTmetrix ustaw jako monitoring: ten sam URL raz w tygodniu, porównuj wykres w czasie, nie jeden wynik.

Kluczowa interpretacja: TTFB powyżej ~600 ms to problem serwera, PHP albo bazy — nie grafik. W tym momencie kompresja obrazków nic nie da. Żeby odróżnić brak cache od wolnych zapytań SQL, włącz cache (PrestaShop: Zaawansowane → Wydajność, opcje CCC) i powtórz test. Spadek z 1,2 s do 300 ms oznacza brak cache. Jeśli TTFB zostało na 900 ms, włącz slow query log (long_query_time = 0.5), przejrzyj najdłuższe zapytania i sprawdź indeksy na tabelach ps_product, ps_category_product, ps_orders.

Na koniec Waterfall w DevTools Network: szukaj zasobów blokujących render — CSS w sekcji head, skryptów bez async i defer — oraz zewnętrznych domen (czat, piksele, GA). Każda to dodatkowy DNS i TLS, a skrypt czatu wstawiony przed bannerem potrafi sam odpowiadać za LCP. Kolejność takich wdrożeń opisujemy w materiale SEO techniczne i optymalizacja szybkości w Zamościu dla firm, a definicje metryk znajdziesz na web.dev – Core Web Vitals.

NarzędzieCo pokazujeKiedy myli
PageSpeed InsightsDane polowe (CrUX, 28 dni) obok labowychPrzy małym ruchu brak danych polowych — zostaje symulacja
Raport Core Web Vitals w Search ConsoleGrupowanie po typie URL: produkty, kategorie, szablonDane dochodzą z opóźnieniem do 28 dni
Lighthouse w Chrome DevToolsTest lokalny z symulowanym throttlingiemNie uwzględnia Twojego ruchu ani cache użytkownika
WebPageTestZimny cache, wybór lokalizacji i urządzenia, pełny waterfallPojedynczy przebieg bywa niereprezentatywny
GTmetrixHistoria testów i film poklatkowy renderowaniaDarmowy plan ogranicza liczbę testów i lokalizacji
DevTools Network (Waterfall)Kolejność, blokowanie i rozmiar zasobów, domeny zewnętrzneTrzeba wiedzieć, czego szukać — inaczej to lista plików

Najczęstsze problemy techniczne w PrestaShop i WooCommerce

Problemy z szybkością wracają w tych samych miejscach. W PrestaShop pierwszy to nadmiar modułów: po 4–5 latach sklep ma ich zwykle 40–60, a część jest podpięta pod hook displayHeader i ładuje się na każdej stronie, także tam, gdzie nie jest potrzebna. Drugi to brak cache obiektowego (Redis albo Memcached). Domyślny cache plikowy w var/cache nie zdejmuje z bazy powtarzalnych zapytań — przy katalogu 5 tys. produktów i 200 sesjach na godzinę baza wykonuje te same kwerendy setki razy. Trzeci to brak indeksów na kolumnach używanych w filtrach (tabele produkt–atrybut, produkt–kategoria); bez nich każde kliknięcie filtra to pełne skanowanie tabeli. Czwarty to kategorie z tysiącami kombinacji atrybutów: 6 atrybutów po 20 wartości daje dziesiątki tysięcy adresów generowanych przez blok fasetowy. Dokumentacja deweloperska PrestaShop opisuje, jak diagnozować własne moduły i hooki: PrestaShop Developer Documentation.

W WooCommerce typowe przyczyny są inne. Wtyczki (filtry, rekomendacje, liczone na żywo produkty powiązane) budują kosztowne zapytania z wieloma JOIN-ami. Przerośnięta tabela wp_options z autoloadem to norma po kilku latach — sprawdzisz to jednym zapytaniem: SELECT SUM(LENGTH(option_value)) FROM wp_options WHERE autoload = 'yes'. Jeśli wynik przekracza 1–2 MB, każda odsłona ładuje to do pamięci. WP-Cron odpalany przy każdym żądaniu (wp-cron.php) dokłada obciążenie przy ruchu i nie wykonuje zadań, gdy ruchu nie ma — lepiej wyłączyć go w wp-config.php i ustawić prawdziwy cron co minutę. Brak object cache przy dużym katalogu daje ten sam efekt co w PrestaShop.

Poza platformą zostają obrazy i zasoby blokujące renderowanie: brak WebP/AVIF, brak srcset dla różnych szerokości ekranu i — najczęstsza przyczyna CLS w sklepach — brak atrybutów width i height. Do tego fonty bez font-display: swap oraz widgety czatu i piksele ładowane synchronicznie. Osobna kategoria to higiena indeksu: łańcuchy przekierowań, ten sam produkt pod kilkoma adresami, a w indeksie koszyk, panel klienta i wyniki wyszukiwania wewnętrznego. Pułapka, która kosztuje najwięcej: dokupienie kolejnej wtyczki do cache, gdy wąskim gardłem jest baza danych. Koszt rośnie, efekt zerowy.

PlatformaTypowy problemJak to sprawdzić
PrestaShopNadmiar modułów w hookach nagłówkaLista modułów + pozycje hooków, pomiar liczby żądań w waterfall
PrestaShopBrak cache obiektowego i indeksów w bazieSlow query log, EXPLAIN na zapytaniach filtrów
WooCommerceAutoload w wp_options i kosztowne zapytania wtyczekZapytanie SUM(LENGTH(option_value)), Query Monitor
WooCommerceWP-Cron przy żądaniu, brak object cacheKontrola wp-cron.php w logach dostępu, test Redis
WspólneObrazy bez WebP/srcset/wymiarów, zasoby blokującePageSpeed Insights, zakładka CLS i LCP w raporcie

Optymalizacja szybkości krok po kroku: od serwera po frontend

Kolejność ma znaczenie większe niż liczba wdrożonych poprawek. Zacznij od serwera, bo wszystko poniżej jest ograniczone jego czasem odpowiedzi.

Krok 1 — serwer i TTFB. PHP 8.1 lub 8.2 zamiast 7.4, z włączonym OPcache, PHP-FPM z pulą dopasowaną do liczby rdzeni (start np. 2 × rdzenie, potem korekta na podstawie zajętości workerów). Dalej: HTTP/2 albo HTTP/3, kompresja Brotli (z fallbackiem gzip) i CDN dla plików statycznych. Cel: TTFB poniżej 400 ms na typowej stronie kategorii.

Krok 2 — backend. Cache obiektowy (Redis), cache pełnych stron dla niezalogowanych, indeksy na kolumnach filtrowanych, przepisanie 3–5 najcięższych zapytań wykrytych w slow query logu, wyłączenie modułów i wtyczek, które realnie obciążają żądania. Ten krok daje zwykle największy zwrot, a bywa pomijany.

Krok 3 — frontend. Lazy loading poza pierwszym ekranem, preload dla elementu LCP, critical CSS inline, self-hosting fontów z font-display: swap, usunięcie nieużywanego JS i CSS. Tu wchodzą też wymiary obrazów — bez nich CLS się nie poprawi.

Krok 4 — pomiar po każdym kroku. Zapisz w arkuszu datę, TTFB, LCP, CLS, INP dla mobile i desktop z PageSpeed Insights. Bez tego nie wiesz, co zadziałało, a przy sporze z wykonawcą nie masz żadnego dowodu.

Zasada: najpierw TTFB, potem LCP, na końcu CLS i INP. Poprawianie CLS przy serwerze odpowiadającym w 1,5 s to strata czasu — użytkownik i tak czeka. Metryki i progi opisuje web.dev – Web Vitals. Jeśli nie masz zespołu in-house, ten zakres prac realizujemy w ramach wdrożenia optymalizacji szybkości sklepu.

KrokCo robimyNarzędzie lub ustawienieEfekt, który mierzymy
1. SerwerPHP 8.2, OPcache, PHP-FPM, HTTP/2, Brotli, CDNphp.ini, konfiguracja FPM, panel CDNTTFB poniżej 400 ms
2. BackendRedis, cache stron, indeksy, przepisanie ciężkich zapytańSlow query log, EXPLAIN, panel cacheCzas generowania strony, obciążenie bazy
3. FrontendLazy loading, preload LCP, critical CSS, wymiary obrazówDevTools, PageSpeed InsightsLCP i CLS w mobile
4. WeryfikacjaPowtórny pomiar i zapis wyniku po każdym krokuArkusz z datami i metrykamiRóżnica przed i po, nie jednorazowy odczyt

SEO techniczne sklepu: indeksacja, duplikaty i dane strukturalne

Ta część decyduje o tym, czy poprawki szybkości w ogóle zamienią się na wejścia. Zacznij od sitemap.xml i robots.txt. Sitemapę generuj automatycznie i wyklucz z niej koszyk, konto klienta, wyniki wyszukiwania wewnętrznego oraz adresy z parametrami filtrów. Robots.txt powinien blokować śmieciowe ścieżki, ale nie całe katalogi z produktami. Weryfikacja jest prosta: w Search Console sprawdź, czy sitemapa ma status Sukces i czy liczba wykrytych adresów zgadza się z liczbą, którą sam policzysz w sklepie.

Druga rzecz to canonical przy filtrach fasetowych i sortowaniu. Ustal jedną regułę dla całego sklepu i trzymaj się jej: filtr i sortowanie = noindex albo canonical na wersję bazową kategorii, kategoria bez parametrów = canonical na siebie. Najgorszy scenariusz to mieszanka — część widoków indeksowana, część nie, w zależności od tego, jak szablon złożył link. Paginacja i breadcrumbs muszą być linkowalne w HTML, bo odpowiadają za wewnętrzne linkowanie kategorii i podkategorii. Sam rel=next/prev nie wystarczy, jeśli kolejne strony kategorii są generowane wyłącznie JavaScriptem.

Dane strukturalne Product, Offer i BreadcrumbList dają w sklepie realny efekt: cena, dostępność i okruszki w wynikach wyszukiwania. Waliduj je w teście wyników z obrazami i w walidatorze Schema Markup — lista obsługiwanych typów jest w Google Search Central – dane strukturalne. Wymagane pola to nazwa, oferta z ceną i walutą, dostępność; brak ich oznacza ostrzeżenie zamiast wyniku rozszerzonego.

Potem raport Strony w GSC. Szukaj statusu Zaindeksowane, choć nie powinno być i wykluczaj koszyk, konto, wyniki wyszukiwania. Na koniec logi serwera: sprawdź, po co naprawdę chodzi Googlebot. Jeśli połowę żądań generują URL-e z parametrami sortowania, budżet crawlowania pracuje na śmieciach. Szerzej o całym zakresie prac przeczytasz w sekcji SEO techniczne.

ElementReguła w sklepieJak zweryfikować
sitemap.xmlTylko produkty, kategorie, strony informacyjneStatus i liczba adresów w Search Console
robots.txtBlokada ścieżek technicznych, nie katalogów produktowychTest robots.txt w GSC
Canonical i filtryFiltr i sortowanie = noindex, kategoria = canonical na siebieSprawdzenie kodu strony po dodaniu parametru
Paginacja i breadcrumbsLinki w HTML, widoczne dla crawleraWyłączenie JS i sprawdzenie linków
Dane strukturalneProduct, Offer, BreadcrumbList z ceną i dostępnościąTest wyników z obrazami, walidator Schema Markup
Logi serweraAnaliza żądań Googlebota pod kątem śmieciowych URL-iGrep po user-agencie i parametrach filtrów

Migracja sklepu bez utraty ruchu: co najczęściej zabija pozycje

Migracja to najczęstszy moment, w którym sklep traci ruch. Nie dlatego, że nowa platforma jest gorsza, ale dlatego, że nikt nie zrobił mapy przekierowań i nie przetestował nowej wersji przed startem. Kolejność prac jest zawsze taka sama: inwentaryzacja adresów, mapa 301, testy na kopii, start poza sezonem, monitoring.

Mapa przekierowań 301 w relacji 1:1. Wyeksportuj z Search Console (Indeksowanie → Strony → Eksport) adresy z kliknięciami i wyświetleniami, dodaj adresy z logów serwera (access.log) oraz z crawla, np. darmową wersją Screaming Frog do 500 URL-i. Dla każdego starego adresu przypisz konkretny nowy adres. Reguła „przekieruj cały katalog na stronę główną” to najgorsze możliwe rozwiązanie — Google traktuje takie przekierowania jak soft 404 i wygasza ruch. Produkt usunięty bez następnika zgłaszaj jako 410, nie jako 301 na stronę główną.

Testy na staging przed startem. Na kopii testowej sprawdź cztery rzeczy: te same adresy URL, brak noindex w kodzie i w nagłówku X-Robots-Tag, brak blokady w robots.txt, canonicale wskazujące docelowe adresy. Przetestuj losowo 200 przekierowań i całą sitemapę — każdy adres musi zwracać 200, a nie łańcuch 301 → 301 → 200.

Czego nie przenosić mechanicznie. Nie kopiuj treści, na których Ci nie zależy: pustych opisów z hurtowni, duplikatów, starych tagów bez ruchu. Lepiej je zostawić niż wrzucać do indeksu — Google jasno opisuje, jak odróżnia treści tworzone dla ludzi od zaplecza robionego pod wyszukiwarkę. Nie przenoś też parametrów śledzących i sortowania (?utm_, ?sort=, ?page=) jako osobnych adresów — obsłuż je canonicalem lub wyklucz w robots.txt.

Monitoring po starcie. Search Console nie wysyła alertu o spadku kliknięć, więc potrzebujesz własnego monitoringu: Looker Studio połączone z Search Console API albo narzędzie z alertem mailowym. Najczęstszy błąd organizacyjny to start nowej wersji w środku sezonu sprzedażowego — w listopadzie albo w maju przed sezonem. Przenieś wdrożenie na styczeń lub luty, nawet kosztem dwóch tygodni opóźnienia.

Kiedy po starcieCo sprawdzaszSygnał ostrzegawczy
7. dzieńPokrycie indeksu w GSC, statusy 301/404 w logach, TTFBNowe błędy 404 na adresach, które wcześniej miały kliknięcia
30. dzieńKliknięcia i wyświetlenia per szablon, Core Web Vitals w GSCSpadek kliknięć powyżej 10% bez zmian w ofercie i cenniku
60. dzieńCzy stare adresy przestały generować ruch, czy nowe weszły do indeksuStare URL-e nadal w wynikach, bez przekierowania
90. dzieńPrzychód i konwersja z ruchu organicznego, frazy brand i non-brandRuch wrócił, ale konwersja nie

Ile to kosztuje i kiedy warto zlecić zewnętrznie

Widełki poniżej dotyczą typowego sklepu na PrestaShop lub WooCommerce z katalogiem od 500 do 5000 produktów. To nie jest cennik — ostateczna kwota to liczba godzin pomnożona przez stawkę wykonawcy. Chodzi o to, żebyś wiedział, ile pracy realnie stoi za ofertą.

Co wpływa na liczbę godzin. Nie liczba produktów, a liczba unikalnych szablonów stron: inny szablon ma strona główna, kategoria, karta produktu, koszyk, wynik wyszukiwania i strona CMS. Do tego rozmiar katalogu i liczba kombinacji filtrów, liczba integracji (płatności, kurierzy, ERP, magazyn) oraz liczba modułów pisanych pod ten konkretny sklep.

Standardowa wtyczka czy własny moduł. Cache, kompresja obrazów, sitemapa, przekierowania — tu wystarczy dobra wtyczka za kilkaset złotych rocznie. Własny moduł jest potrzebny, gdy: płatność ratalna działa przez API banku bez gotowego modułu dla Twojej wersji PrestaShop, albo filtr na 20 cechach generuje 30 000 adresów kombinacji. W drugim przypadku gotowy moduł filtrowania tworzy dziesiątki tysięcy URL-i zduplikowanych treści — trzeba dopisać canonical i noindex dla kombinacji bez ruchu. Bez tego SEO techniczne zjada efekt optymalizacji szybkości.

Pytania do wykonawcy przed podpisaniem umowy. Ile dokładnie szablonów i URL-i obejmuje zakres? W jakiej formie dostanę raport — lista zmian z pomiarem przed i po, czy zdanie „zoptymalizowane”? Jaki jest czas reakcji na zgłoszenie: 24 godziny czy 5 dni roboczych? Co obejmuje opieka po wdrożeniu: monitoring, poprawki regresji, limit godzin? Czy praca idzie na staging, czy od razu na produkcję, i jak wygląda powrót do poprzedniej wersji? Jeśli wykonawca nie potrafi rozbić oferty na godziny i etapy, prawdopodobnie sam nie wie, co będzie robił.

Blok pracWidełkiCo wchodzi
Audyt8–20 hPomiar PSI i WebPageTest dla 5–10 szablonów, eksport GSC i logów, crawl, raport z priorytetami P0/P1/P2
Wdrożenie: serwer4–12 hPHP 8.2/8.3, OPcache, HTTP/2 lub HTTP/3, Brotli, cache na poziomie serwera, TTFB
Wdrożenie: backend6–20 hCache obiektowy Redis lub Memcached, blokujące moduły i zapytania do bazy, integracje
Wdrożenie: frontend10–30 hObrazy WebP/AVIF, srcset, preload elementu LCP, fonty, krytyczny CSS, CLS
Utrzymanie i monitoring4–10 h/mies.Kontrole Core Web Vitals i GSC, aktualizacje, regresje po nowych modułach

Plan działania na pierwsze 30 dni: od czego zacząć

Tydzień 1 — pomiar bazowy. Zanim ktokolwiek dotknie serwera, zapisz stan wyjściowy. PageSpeed Insights dla pięciu szablonów: strona główna, kategoria, karta produktu, koszyk, wynik wyszukiwania. Z Search Console pobierz do CSV raport „Strony” (Indeksowanie) i raport „Core Web Vitals” — z datą w nazwie pliku, żeby po miesiącu było z czym porównać. WebPageTest: test z Frankfurtu, profil Moto G4 z throttlingiem 4G, minimum 3 przebiegi. Na koniec kopia zapasowa plików i bazy (mysqldump albo snapshot hostingu) plus zapisana wersja PHP i lista aktywnych modułów.

Tydzień 2 — TTFB. Najpierw serwer, potem frontend. Optymalizacja obrazków przy TTFB 1,5 s to strata czasu. Kolejność: aktualizacja PHP do 8.2 lub 8.3, OPcache (opcache.enable=1, pamięć 128–256 MB, w produkcji validate_timestamps=0 z restartem przy deployu), Redis lub Memcached jako cache obiektowy, przegląd modułów ładujących się na każdej stronie i wyłączenie zbędnych. Cel: TTFB poniżej 600 ms, a na dobrym hostingu poniżej 300 ms.

Tydzień 3 — obrazy, LCP, CLS. Konwersja do WebP lub AVIF, poprawne wymiary width i height w każdym img, srcset z 3–4 szerokościami. Lazy loading dla obrazów poniżej pierwszego ekranu, ale nigdy dla obrazu LCP — ten dostaje preload. Fonty: self-hosting, font-display: swap, preload pliku woff2. CLS: zarezerwuj miejsce pod bannery i moduły wstrzykiwane nad treścią, ustawiając stałą wysokość kontenera.

Tydzień 4 — indeksacja. Sitemapa tylko z produktami, kategoriami i stronami CMS — bez koszyka i konta. Canonicale na paginacji i filtrach, Disallow w robots.txt dla /koszyk, /zamowienie, /moje-konto i parametrów sortowania. Dane strukturalne: Product, Offer, BreadcrumbList — punkt odniesienia masz w dokumentacji Google dotyczącej obsługiwanych typów danych strukturalnych, a walidacja w teście wyników z Google.

Po 30 dniach. Raz w tygodniu sprawdzaj kliknięcia i wyświetlenia w GSC, raz w miesiącu Core Web Vitals z raportu Web Vitals na web.dev — dane są 28-dniowe, więc na trend potrzebujesz 2–3 miesięcy. Porównuj rok do roku, nie tydzień do tygodnia; spadek na kilku frazach to zwykle konkurencja, spadek na wszystkich — problem techniczny. Wskaźnikiem końcowym nie jest zielone kółko w Lighthouse, ale wzrost konwersji i spadek odrzuceń na mobile.

TydzieńGłówny celNarzędzia
1Pomiar bazowy i kopia zapasowaPSI, GSC, WebPageTest, mysqldump
2TTFB poniżej 600 msOPcache, Redis, logi serwera
3LCP i CLS w normieWebP/AVIF, srcset, preload, woff2
4Czysta indeksacjasitemap, canonical, robots.txt, dane strukturalne

Najczęstsze błędy i jak je wykryć

Optymalizacja obrazków, gdy wąskie gardło siedzi w serwerze. Kompresja grafik nie ruszy strony, która czeka 1,2 s na odpowiedź PHP i bazy.

Jak wykryć: Sprawdź TTFB w Chrome DevTools (zakładka Network, kolumna Waiting) albo w WebPageTest. Jeśli przekracza około 600 ms, problem jest po stronie serwera, a nie frontendu.

Jak naprawić: Najpierw cache obiektowy (Redis lub Memcached), indeksy na filtrowanych kolumnach, potem dopiero grafiki. Grafiki zostaw na koniec, bo dają najmniejszy zwrot przy tym objawie.

Ocena szybkości na podstawie jednego testu na własnym laptopie. Wynik laboratoryjny z Lighthouse to nie to samo, co doświadczenie realnych użytkowników na telefonach.

Jak wykryć: Porównaj wynik labowy w PageSpeed Insights z sekcją danych polowych (CrUX) na tym samym ekranie. Rozjazd powyżej jednej klasy (np. labowy LCP 1,8 s, polowy 4,1 s) to sygnał, że wierzysz złemu źródłu.

Jak naprawić: Decyduj na podstawie 75. percentyla danych polowych w podziale na mobile i desktop. Test laboratoryjny traktuj wyłącznie jako narzędzie do znalezienia przyczyny.

Traktowanie SEO technicznego i szybkości jako dwóch osobnych projektów, z których jeden można odłożyć.

Jak wykryć: Widoczność w Search Console spada, a Core Web Vitals są w normie — albo odwrotnie: CWV się poprawiły, a ruch nie wrócił. To znaczy, że druga połowa pracy nie została zrobiona.

Jak naprawić: Ustaw jedną listę zadań z priorytetami: najpierw dostęp do indeksu (canonicale, filtry, koszyk), równolegle TTFB, na końcu elementy frontendu pod LCP i INP.

Pozwalanie Google na indeksowanie filtrów, sortowania i koszyka. To generuje tysiące adresów, rozmywa budżet crawlowania i wypycha karty produktów z indeksu.

Jak wykryć: W Search Console sprawdź raport indeksowania i stron wykluczonych, szukając adresów z parametrami typu filtr, sortowanie, page. Dodatkowo komenda site: na Twojej domenie pokaże, co realnie wisi w wynikach.

Jak naprawić: Filtry i koszyk blokuj w robots.txt, dodawaj canonical do wersji bazowej, a parametry sortowania obsłuż przez noindex lub przekierowanie. Zweryfikuj to po dwóch–trzech tygodniach na danych z indeksu.

Założenie, że sama wtyczka cache rozwiązuje problem szybkości. Cache strony to nie cache obiektowy i nie indeksy w bazie.

Jak wykryć: Porównaj czas ładowania na zimnym cache (po wyczyszczeniu) i ciepłym. Jeśli różnica jest ogromna, problem to brak cache. Jeśli TTFB jest wysoki w obu przypadkach, winne są zapytania SQL albo konfiguracja serwera.

Jak naprawić: Włącz cache obiektowy (Redis/Memcached) i sprawdź slow query log. Zapytania dłuższe niż kilkaset milisekund na produkcji to konkretny punkt do naprawy, nie do zgadywania.

Zgłaszanie deweloperowi zgłoszenia o treści strona jest wolna. Bez konkretu każda naprawa to strzelanie i płacenie za przymiarki.

Jak wykryć: Jeśli w zgłoszeniu nie ma adresu URL, urządzenia, nazwy elementu i wartości liczbowej — to nie jest zgłoszenie techniczne.

Jak naprawić: Podaj element LCP, jego wartość, typ urządzenia i konkretny adres, np. baner hero na stronie głównej, LCP 4,3 s na mobile, adres sklepu. Taki opis skraca diagnozę z dni do godzin.

Lista kontrolna do odklikania

Podsumowanie

Szybkość i techniczne SEO nie są celem samym w sobie — mają zwiększać liczbę zamówień, a nie poprawiać wskaźniki w panelach. Zacznij od rozstrzygnięcia, gdzie jest wąskie gardło: wysoki TTFB oznacza serwer lub bazę, niskie wyniki tylko w INP i CLS wskazują na frontend. Mierz na 75. percentylu danych polowych, oddzielnie dla mobile i desktop, i dopiero potem wybieraj zadania do wdrożenia. Jeśli chcesz uporządkować ten obszar, pomocny będzie przegląd usługi SEO techniczne.

Najczęściej zadawane pytania

Czym różni się SEO techniczne od optymalizacji szybkości?

SEO techniczne pilnuje dostępu do indeksu i struktury: crawlowania, indeksacji, canonicali, danych strukturalnych, obsługi filtrów. Optymalizacja szybkości dotyczy czasu odpowiedzi serwera i renderowania w przeglądarce — TTFB, LCP, INP, CLS. To dwie różne listy zadań, ale nakładają się: wolny sklep pogarsza zarówno doświadczenie użytkownika, jak i skuteczność crawlowania.

Jakie są aktualne progi Core Web Vitals?

Próg dobry to LCP do 2,5 s, INP do 200 ms i CLS do 0,1. Wartości mierzy się na 75. percentylu realnych wizyt, oddzielnie dla mobile i desktop. Przekroczenie progu w jednej grupie urządzeń wystarczy, żeby cała ocena wypadła poniżej normy.

Czym jest INP i co zmieniło jego wprowadzenie?

INP to Interaction to Next Paint — czas reakcji strony na działanie użytkownika, na przykład kliknięcie dodaj do koszyka, filtr kategorii albo otwarcie koszyka. Zastąpił metrykę FID w marcu 2024 roku i jest znacznie bardziej wymagający. FID mierzył tylko opóźnienie pierwszej reakcji, INP ocenia wszystkie interakcje w trakcie wizyty, więc ujawnia problemy, które wcześniej nie były widoczne.

Dlaczego PageSpeed Insights pokazuje inny wynik niż mój test lokalny?

PageSpeed Insights pokazuje obok siebie dane polowe (realni użytkownicy, 75. percentyl) i labowe (jedno uruchomienie w kontrolowanych warunkach). Twój laptop ma zwykle lepszy procesor i szybsze łącze niż przeciętny telefon klienta, dlatego wynik labowy bywa optymistyczny. Decyzje podejmuj na podstawie danych polowych, a labowe traktuj jako narzędzie do znajdowania przyczyny.

Od czego zacząć, gdy TTFB jest wysoki?

Najpierw rozstrzygnij, czy wąskie gardło jest w serwerze, w PHP czy w bazie. Porównaj czas na zimnym i ciepłym cache, włącz slow query log, sprawdź, czy cache obiektowy (Redis lub Memcached) jest faktycznie aktywny. Dopiero po tych krokach sensowne jest zajmowanie się obrazkami czy fontami — przy wysokim TTFB nie przyniosą one odczuwalnej poprawy.

Czy wtyczka do cache wystarczy, żeby sklep przyspieszył?

Nie. Cache stron pomaga przy powtarzalnych wizytach niezalogowanych użytkowników, ale nie skróci ciężkich zapytań SQL ani nie odciąży bazy przy filtrach. W sklepach z dynamicznym koszykiem i logowaniem duża część ruchu i tak omija cache pełnostronicowy. Do tego potrzebny jest cache obiektowy, indeksy i porządek w kodzie szablonu.

Jak zgłosić problem z szybkością wykonawcy, żeby nie tracić czasu?

Zamiast zdania strona jest wolna podaj cztery rzeczy: nazwę elementu, wartość liczbową, typ urządzenia i adres URL. Przykład: baner hero na stronie głównej, LCP 4,3 s, mobile, podany adres. Taki opis pozwala od razu odtworzyć problem i sprawdzić poprawę po wdrożeniu na tym samym zestawie danych.

Jeśli nie wiesz, czy w Twoim sklepie problem leży w serwerze, bazie czy frontendzie — prześlij adres i powiedz, co Cię niepokoi. W DropDigital robimy pomiar, wskazujemy wąskie gardło i dopiero wtedy proponujemy zakres prac.

Źródła i materiały