{"id":38,"date":"2026-03-04T19:46:42","date_gmt":"2026-03-04T19:46:42","guid":{"rendered":"https:\/\/news.jurskitech.pl\/blog\/uncategorized\/dlaczego-twoja-strona-jest-wolna-5-ukrytych-winowajcow-ktorych-nie-widac-w-google-pagespeed\/"},"modified":"2026-03-09T00:54:47","modified_gmt":"2026-03-09T00:54:47","slug":"dlaczego-twoja-strona-jest-wolna-5-ukrytych-winowajcow-ktorych-nie-widac-w-google-pagespeed","status":"publish","type":"post","link":"https:\/\/news.jurskitech.pl\/blog\/technologia\/dlaczego-twoja-strona-jest-wolna-5-ukrytych-winowajcow-ktorych-nie-widac-w-google-pagespeed\/","title":{"rendered":"Dlaczego Twoja strona jest wolna? 5 ukrytych winowajc\u00f3w, kt\u00f3rych nie wida\u0107 w Google PageSpeed"},"content":{"rendered":"<article>\n<h1>Dlaczego Twoja strona jest wolna? 5 ukrytych winowajc\u00f3w, kt\u00f3rych nie wida\u0107 w Google PageSpeed<\/h1>\n<p>Wyobra\u017a sobie t\u0119 scen\u0119. Wpadasz na Google PageSpeed Insights, wklejasz adres swojej strony, czekasz z niepokojem. Wynik: 92 na mobile, 98 na desktop. <strong>Odruchowo odpuszczasz.<\/strong> \u201eSkoro Google m\u00f3wi, \u017ce jest dobrze, to znaczy, \u017ce jest dobrze\u201d. Tymczasem u\u017cytkownicy wci\u0105\u017c skar\u017c\u0105 si\u0119, \u017ce strona \u201eci\u0105gnie\u201d, blog \u0142aduje si\u0119 sekund\u0119 d\u0142u\u017cej ni\u017c powinien, a w sklepie koszyk czasem zawiesza interfejs. Klienci odchodz\u0105, a ty nie wiesz dlaczego.<\/p>\n<p>To jeden z najcz\u0119stszych paradoks\u00f3w wsp\u00f3\u0142czesnego web developmentu. Narz\u0119dzia audytowe, takie jak PageSpeed, Lighthouse czy GTmetrix, sta\u0142y si\u0119 wyroczni\u0105. Ale s\u0105 jak prze\u015bwietlenie RTG \u2013 pokazuj\u0105 z\u0142amania, ale nie widz\u0105 stanu zapalnego mi\u0119\u015bni czy ukrytej infekcji. Koncentruj\u0105 si\u0119 na tym, co dzieje si\u0119 <em>w przegl\u0105darce u\u017cytkownika<\/em> (tzw. front-end), cz\u0119sto pomijaj\u0105c ca\u0142\u0105 reszt\u0119 \u0142a\u0144cucha dostaw tre\u015bci.<\/p>\n<p>Jako firma, kt\u00f3ra na co dzie\u0144 <a href=\"https:\/\/jurskitech.pl\" title=\"JurskiTech - Web Development i Optymalizacja\">naprawia i optymalizuje strony<\/a>, widzimy ten schemat non-stop. Klient przychodzi z \u201eidealnym\u201d wynikiem PageSpeed i poczuciem bezsilno\u015bci. A prawda jest taka, \u017ce <strong>prawdziwe w\u0105skie gard\u0142a wydajno\u015bci cz\u0119sto ukrywaj\u0105 si\u0119 g\u0142\u0119biej<\/strong>. W miejscach, do kt\u00f3rych standardowy audyt nie si\u0119ga. Oto pi\u0119\u0107 najcz\u0119stszych ukrytych winowajc\u00f3w, kt\u00f3rzy psuj\u0105 do\u015bwiadczenie u\u017cytkownik\u00f3w, mimo zielonych znaczk\u00f3w w raporcie.<\/p>\n<h2>1. Hosting i sie\u0107: fundament, kt\u00f3ry trzeszczy<\/h2>\n<p>To jest absolutna podstawa, a wci\u0105\u017c traktowana po macoszemu. Mo\u017cesz mie\u0107 \u015bwietnie zoptymalizowany kod, ale je\u015bli hostujesz go na taniej, prze\u0142adowanej maszynie wsp\u00f3\u0142dzielonej bez SSD, w centrum danych w Holandii, podczas gdy twoja grupa docelowa jest w Polsce \u2013 przegra\u0142e\u015b, zanim zacz\u0105\u0142e\u015b.<\/p>\n<p><strong>Na co PageSpeed nie patrzy?<\/strong> Na czas odpowiedzi serwera (TTFB \u2013 Time To First Byte). Cho\u0107 Lighthouse zwraca na to uwag\u0119, cz\u0119sto traktuje to jako \u201ewskaz\u00f3wk\u0119\u201d. Tymczasem wysoki TTFB (powy\u017cej 500ms) to wyrok. Oznacza, \u017ce zanim przegl\u0105darka dostanie pierwszy bajt HTML do przetworzenia, musi czeka\u0107. A w tym czasie nie renderuje si\u0119 nic.<\/p>\n<ul>\n<li><strong>Wsp\u00f3\u0142dzielony hosting vs. VPS\/Cloud:<\/strong> Na hostingu wsp\u00f3\u0142dzielonym dzielisz zas\u0142y (CPU, RAM) z setkami innych stron. Gdy s\u0105siedzi dostaj\u0105 ruch, twoja strona zwalnia. To jak mieszkanie w bloku z jedn\u0105 wind\u0105 na osiedle w godzinach szczytu.<\/li>\n<li><strong>Lokalizacja serwera:<\/strong> Fizyki nie oszukasz. Sygna\u0142 z Frankfurtu do Warszawy leci ok. 20-30ms. Z San Francisco \u2013 150-200ms. Ka\u017cde op\u00f3\u017anienie w sieci mno\u017cy si\u0119.<\/li>\n<li><strong>Rozwi\u0105zanie:<\/strong> Inwestycja w dobry VPS lub hosting cloud (np. z lokalizacj\u0105 w Polsce lub Niemczech), skonfigurowany pod k\u0105tem wydajno\u015bci (OPcache dla PHP, prawid\u0142owo ustawiony Nginx\/Apache). Czasem sama zmiana hosta potrafi skr\u00f3ci\u0107 czas \u0142adowania o 2-3 sekundy.<\/li>\n<\/ul>\n<h2>2. Backend i baza danych: niewidzialny ci\u0119\u017car<\/h2>\n<p>PageSpeed analizuje to, co dostaje przegl\u0105darka: HTML, CSS, JS, obrazy. Nie widzi, jak ten HTML zosta\u0142 wygenerowany. A to cz\u0119sto jest \u017ar\u00f3d\u0142o problem\u00f3w, zw\u0142aszcza na dynamicznych stronach (WordPress, WooCommerce, custom CMS).<\/p>\n<p><strong>Przyk\u0142ad z \u017cycia:<\/strong> Strona g\u0142\u00f3wna sklepu z WooCommerce. Na PageSpeed wygl\u0105da dobrze. Ale pod spodem dzieje si\u0119 masakra: 15 zapyta\u0144 do bazy danych, by wyrenderowa\u0107 stron\u0119, w tym kilka bez indeks\u00f3w, kt\u00f3re skanuj\u0105 ca\u0142e tabele zam\u00f3wie\u0144. Do tego ci\u0119\u017ckie zapytania transients w WordPress, kt\u00f3re nie s\u0105 czyszczone. Ka\u017cde od\u015bwie\u017cenie strony to tortura dla serwera bazy danych.<\/p>\n<p><strong>Na co zwr\u00f3ci\u0107 uwag\u0119?<\/strong><\/p>\n<ul>\n<li><strong>N+1 queries:<\/strong> Cz\u0119sty problem w WordPress (zw\u0142aszcza z kiepskimi motywami) i frameworkach. Aby wy\u015bwietli\u0107 list\u0119 10 produkt\u00f3w, system wykonuje 1 zapytanie o produkty, a potem po 1 osobnym zapytaniu o metadane ka\u017cdego z nich. Zamiast 2 zapyta\u0144, robi 11.<\/li>\n<li><strong>Brak cache&#8217;owania obiektowego (Object Cache):<\/strong> Dla WordPress kluczowe jest Redis lub Memcached. Przechowuj\u0105 wyniki zapyta\u0144 do bazy w pami\u0119ci RAM, zamiast za ka\u017cdym razem m\u0119czy\u0107 MySQL.<\/li>\n<li><strong>Rozwi\u0105zanie:<\/strong> U\u017cycie narz\u0119dzi do profilowania zapyta\u0144 (np. Query Monitor dla WordPress), optymalizacja indeks\u00f3w w bazie, wdro\u017cenie Object Cache i agresywnego cache&#8217;owania ca\u0142ych stron dla u\u017cytkownik\u00f3w niezalogowanych.<\/li>\n<\/ul>\n<h2>3. Cache&#8217;owanie: nie tylko \u201ew\u0142\u0105cz cache w wtyczce\u201d<\/h2>\n<p>\u201eMam W3 Total Cache, wszystko jest ok\u201d \u2013 s\u0142yszymy cz\u0119sto. Niestety, samo w\u0142\u0105czenie wtyczki to dopiero pocz\u0105tek. \u0179le skonfigurowany cache mo\u017ce by\u0107 gorszy ni\u017c jego brak, powoduj\u0105c problemy z wy\u015bwietlaniem aktualnych tre\u015bci lub nawet b\u0142\u0119d\u00f3w.<\/p>\n<p><strong>Warstwy cache&#8217;owania, o kt\u00f3rych si\u0119 nie m\u00f3wi:<\/strong><\/p>\n<ol>\n<li><strong>Cache HTTP \/ CDN:<\/strong> Czy nag\u0142\u00f3wki Cache-Control s\u0105 prawid\u0142owo ustawione dla r\u00f3\u017cnych typ\u00f3w zasob\u00f3w? Obrazy powinny by\u0107 cache&#8217;owane na miesi\u0105c, CSS\/JS na tydzie\u0144, a HTML dynamiczny na kilka minut. Brak tych nag\u0142\u00f3wk\u00f3w powoduje, \u017ce przegl\u0105darka za ka\u017cdym razem pyta serwer, czy zas\u00f3b si\u0119 nie zmieni\u0142.<\/li>\n<li><strong>Cache strony serwerowej (Page Cache):<\/strong> Czy cache jest skuteczny? Cz\u0119sto widzimy konfiguracje, gdzie cache omija strony z parametrami w URL (np. trackery utm), ale te\u017c\u2026 omija koszyk, wyszukiwark\u0119, co prowadzi do wolnego \u0142adowania kluczowych \u015bcie\u017cek konwersji.<\/li>\n<li><strong>Cache Varnish \/ Nginx FastCGI:<\/strong> To cache na poziomie serwera WWW, przed aplikacj\u0105 PHP. Jest b\u0142yskawiczny. Ale jego konfiguracja wymaga wiedzy systemowej. Wiele hosting\u00f3w go nie oferuje.<\/li>\n<\/ol>\n<p>Rozwi\u0105zaniem jest <strong>strategiczne podej\u015bcie do cache&#8217;owania<\/strong>, a nie tylko odhaczenie checkboxa. Czasem lepsze efekty ni\u017c jedna ci\u0119\u017cka wtyczka do wszystkiego daje po\u0142\u0105czenie lekkiej wtyczki do cache&#8217;owania strony z dobrym skonfigurowaniem nag\u0142\u00f3wk\u00f3w HTTP przez .htaccess i u\u017cyciem CDN.<\/p>\n<h2>4. Zewn\u0119trzne integracje i skrypty: trucizna w ma\u0142ych dawkach<\/h2>\n<p>To ulubiony temat narz\u0119dzi audytowych, ale one widz\u0105 tylko skutek (du\u017cy JS, blokuj\u0105ce renderowanie), a nie przyczyn\u0119. Ka\u017cdy zewn\u0119trzny skrypt (chat, heatmapa, pixel reklamowy, widget social media, system komentarzy) to losowo\u015b\u0107.<\/p>\n<p><strong>Dlaczego s\u0105 tak z\u0142e?<\/strong><\/p>\n<ul>\n<li><strong>Blokuj\u0105 w\u0105tek g\u0142\u00f3wny:<\/strong> Je\u015bli zewn\u0119trzny serwer (np. z Facebookiem) odpowiada wolno, tw\u00f3j JS czeka na t\u0119 odpowied\u017a, blokuj\u0105c wykonanie innych skrypt\u00f3w.<\/li>\n<li><strong>Nieprzewidywalna wydajno\u015b\u0107:<\/strong> Nie masz kontroli nad kodem ani nad serwerem, z kt\u00f3rego pochodzi. Awaria u dostawcy chat-bota = awaria szybko\u015bci \u0142adowania twojej strony.<\/li>\n<li><strong>\u0141a\u0144cuch zale\u017cno\u015bci:<\/strong> Jeden skrypt cz\u0119sto \u0142aduje kolejne, a te kolejne. Pixel Facebooka to nie jeden ma\u0142y plik.<\/li>\n<\/ul>\n<p><strong>Rozwi\u0105zanie:<\/strong> Bezwzgl\u0119dna higiena. Zastosuj zasad\u0119: <em>\u201eCzy to jest absolutnie niezb\u0119dne dla funkcjonalno\u015bci biznesowej przy pierwszym wej\u015bciu u\u017cytkownika?\u201d<\/em><\/p>\n<ul>\n<li><strong>Op\u00f3\u017aniaj \u0142adowanie (defer, async):<\/strong> Wszystkie skrypty analityczne, chaty, pixele \u0142aduj asynchronicznie lub op\u00f3\u017anij, a\u017c strona si\u0119 wyrenderuje.<\/li>\n<li><strong>U\u017cywaj zarz\u0105dzania tagami (GTM):<\/strong> Ale te\u017c rozs\u0105dnie. Prze\u0142adowany kontener GTM sam w sobie staje si\u0119 problemem.<\/li>\n<li><strong>Rozwa\u017c hostowanie lokalnie:<\/strong> Je\u015bli mo\u017cesz, hostuj fonty Google Fonts na swoim serwerze. Ka\u017cde po\u0142\u0105czenie zewn\u0119trzne to ryzyko.<\/li>\n<\/ul>\n<h2>5. \u201eNiewidzialny\u201d JavaScript i Cumulative Layout Shift (CLS) po fakcie<\/h2>\n<p>Nawet je\u015bli LCP (Largest Contentful Paint) jest dobry, strona mo\u017ce <em>czu\u0107 si\u0119<\/em> wolna i niestabilna. Winowajc\u0105 jest cz\u0119sto JavaScript, kt\u00f3ry wykonuje si\u0119 d\u0142ugo po za\u0142adowaniu strony, powoduj\u0105c tzw. \u201ejank\u201d (szarpanie interfejsu) i p\u00f3\u017ane przesuni\u0119cia layoutu (CLS).<\/p>\n<p><strong>Scenariusz:<\/strong> Strona \u0142aduje si\u0119 szybko. U\u017cytkownik zaczyna scrollowa\u0107, chce klikn\u0105\u0107 w link menu. W tym momencie \u0142aduje si\u0119 skrypt zarz\u0105dzaj\u0105cy \u201esticky headerem\u201d lub w tle uruchamia si\u0119 ci\u0119\u017cka biblioteka do animacji. Nagle interfejs zastyga na 200ms, klik nie dzia\u0142a, header przeskakuje. Do\u015bwiadczenie zrujnowane, mimo \u017ce PageSpeed mierzy\u0142 tylko inicjalne \u0142adowanie.<\/p>\n<p><strong>Jak to diagnozowa\u0107?<\/strong> Nie w Lighthouse, a w narz\u0119dziach developerskich przegl\u0105darki:<\/p>\n<ul>\n<li><strong>Performance tab:<\/strong> Nagraj interakcj\u0119 u\u017cytkownika (scroll, klik). Szukaj d\u0142ugich zada\u0144 (Long Tasks) powy\u017cej 50ms, kt\u00f3re blokuj\u0105 w\u0105tek g\u0142\u00f3wny.<\/li>\n<li><strong>Web Vitals w czasie rzeczywistym:<\/strong> U\u017cyj biblioteki web-vitals, by mierzy\u0107 CLS i INP (Interaction to Next Paint) u prawdziwych u\u017cytkownik\u00f3w.<\/li>\n<\/ul>\n<p><strong>Rozwi\u0105zanie:<\/strong> Dzielenie kodu (code splitting), leniwe \u0142adowanie komponent\u00f3w niekrytycznych, u\u017cycie `requestIdleCallback` dla niskopriorytetowych zada\u0144 i optymalizacja tzw. \u201eruntime JavaScript\u201d. Czasem warto zrezygnowa\u0107 z ci\u0119\u017ckiego slidera na rzecz prostszego, ale stabilnego rozwi\u0105zania.<\/p>\n<h2>Podsumowanie: Wyjd\u017a poza zielony znaczek<\/h2>\n<p>Optymalizacja wydajno\u015bci to nie gra w zdobywanie punkt\u00f3w w Lighthouse. To <strong>in\u017cynieria do\u015bwiadczenia u\u017cytkownika<\/strong>, kt\u00f3ra zaczyna si\u0119 od serwera w centrum danych, a ko\u0144czy na p\u0142ynno\u015bci interakcji na smartfonie twojego klienta.<\/p>\n<p>Kluczowe wnioski:<\/p>\n<ul>\n<li><strong>PageSpeed Insights to \u015bwietne narz\u0119dzie diagnostyczne, ale nie jest wyroczni\u0105.<\/strong> Traktuj je jako punkt wyj\u015bcia, a nie cel sam w sobie.<\/li>\n<li><strong>Wydajno\u015b\u0107 to \u0142a\u0144cuch.<\/strong> Jest tak szybka, jak jego najs\u0142absze ogniwo. Cz\u0119sto znajduje si\u0119 ono poza przegl\u0105dark\u0105.<\/li>\n<li><strong>Mierz, co si\u0119 dzieje u prawdziwych u\u017cytkownik\u00f3w (RUM \u2013 Real User Monitoring).<\/strong> Narz\u0119dzia jak Google Search Console (raport Core Web Vitals) czy Cloudflare Analytics pokazuj\u0105, jak naprawd\u0119 czuje si\u0119 twoja strona w r\u00f3\u017cnych lokalizacjach i na r\u00f3\u017cnych urz\u0105dzeniach.<\/li>\n<li><strong>Optymalizacja to proces, nie jednorazowy zabieg.<\/strong> Ka\u017cda nowa wtyczka, widget, linijka kodu mo\u017ce wprowadzi\u0107 regresj\u0119.<\/li>\n<\/ul>\n<p>Je\u015bli masz wra\u017cenie, \u017ce pomimo dobrych wynik\u00f3w w testach, twoja strona nie dzia\u0142a tak szybko, jakby mog\u0142a, to znak, \u017ce czas zajrze\u0107 g\u0142\u0119biej. Cz\u0119sto rozwi\u0105zanie le\u017cy w architekturze backendu, konfiguracji infrastruktury lub czystej higienie kodu \u2013 obszarach, gdzie standardowy audyt SEO tylko muskaj\u0105 powierzchni\u0119. W <a href=\"https:\/\/jurskitech.pl\" title=\"JurskiTech - Audyty Wydajno\u015bci i Web Development\">JurskiTech<\/a> patrzymy na wydajno\u015b\u0107 w\u0142a\u015bnie w ten holistyczny spos\u00f3b, \u0142\u0105cz\u0105c optymalizacj\u0119 front-endu z in\u017cynieri\u0105 backendu i infrastruktury, bo tylko takie podej\u015bcie przynosi trwa\u0142e i odczuwalne dla biznesu efekty.<\/p>\n<\/article>\n","protected":false},"excerpt":{"rendered":"<p>Dlaczego Twoja strona jest wolna? 5 ukrytych winowajc\u00f3w, kt\u00f3rych nie wida\u0107 w Google PageSpeed Wyobra\u017a sobie t\u0119 scen\u0119. Wpadasz na Google PageSpeed Insights, wklejasz adres swojej strony, czekasz z niepokojem. Wynik: 92 na mobile, 98 na desktop. Odruchowo odpuszczasz. \u201eSkoro Google m\u00f3wi, \u017ce jest dobrze, to znaczy, \u017ce jest dobrze\u201d. Tymczasem u\u017cytkownicy wci\u0105\u017c skar\u017c\u0105 si\u0119,<\/p>\n","protected":false},"author":2,"featured_media":134,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[41],"tags":[46,44,45,43,42],"class_list":["post-38","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technologia","tag-cache","tag-core-web-vitals","tag-hosting","tag-optymalizacja-stron","tag-wydajnosc-stron"],"_links":{"self":[{"href":"https:\/\/news.jurskitech.pl\/blog\/wp-json\/wp\/v2\/posts\/38","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/news.jurskitech.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/news.jurskitech.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/news.jurskitech.pl\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/news.jurskitech.pl\/blog\/wp-json\/wp\/v2\/comments?post=38"}],"version-history":[{"count":1,"href":"https:\/\/news.jurskitech.pl\/blog\/wp-json\/wp\/v2\/posts\/38\/revisions"}],"predecessor-version":[{"id":135,"href":"https:\/\/news.jurskitech.pl\/blog\/wp-json\/wp\/v2\/posts\/38\/revisions\/135"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/news.jurskitech.pl\/blog\/wp-json\/wp\/v2\/media\/134"}],"wp:attachment":[{"href":"https:\/\/news.jurskitech.pl\/blog\/wp-json\/wp\/v2\/media?parent=38"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/news.jurskitech.pl\/blog\/wp-json\/wp\/v2\/categories?post=38"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/news.jurskitech.pl\/blog\/wp-json\/wp\/v2\/tags?post=38"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}