Lazy loading to technika optymalizacji wydajności stron, polegająca na odroczeniu ładowania zasobów (obrazów, iframe, wideo) do momentu, gdy użytkownik przewinie stronę do miejsca, gdzie te zasoby stają się widoczne. Efekt: szybszy initial load, mniej requestów HTTP, lepsze Core Web Vitals. Dane z Ahrefs: fraza „lazy loading” generuje w Polsce 300 wyszukiwań miesięcznie (KD 53, traffic potential 150). Według theStacc (marzec 2026), 29% stron internetowych używa natywnego lazy loading – z czego 84% adopcji pochodzi z WordPressa 5.5+, który dodał atrybut loading=”lazy” do wszystkich obrazów domyślnie.
Ale lazy loading to miecz obosieczny. Źle zaimplementowany potrafi obniżyć ruch o 20% – nawet przy wzroście PageSpeed Score. Jak opisuje case study z PPC.land (listopad 2025): agencja Apollo Digital wdrożyła lazy loading na wszystkie obrazy (w tym hero image), PageSpeed wzrósł z 65 do 92, ale ruch spadł o 20%, a LCP pogorszył się z 1,8s do 4,2s. Przyczyna: lazy loading na obrazie hero opóźnił ładowanie najważniejszego elementu above the fold.
Semgence – agencja SEO z Warszawy – weryfikuje implementację lazy loading jako element audytu technicznego SEO. Kluczowa zasada: nigdy nie stosuj lazy loading na elementach above the fold (hero image, LCP element). Lazy loading to narzędzie do below the fold.

Co to jest lazy loading i jak działa?
Lazy loading odracza ładowanie zasobów – obrazów, iframe, wideo – do momentu, gdy użytkownik zbliży się do nich scrollując stronę. Jak opisuje web.dev w dokumentacji: „obrazy z atrybutem loading=lazy są pobierane dopiero gdy użytkownik zbliży się do nich w viewport.” Bez lazy loading strona z 50 obrazami (typowa kategoria e-commerce) ładuje je wszystkie naraz – 5-10 sekund. Z lazy loading ładowane są 3-5 widocznych, reszta on-demand.
Dwie metody implementacji. Native HTML (zalecane): atrybut loading="lazy" na <img> i <iframe>. Wspierany przez Chrome, Firefox, Edge, Safari – ponad 95% przeglądarek. JS libraries (lazysizes, lozad.js): używają data-src zamiast src – ryzyko SEO, bo Googlebot może nie zobaczyć obrazu jeśli JS się nie wykona. Jak ostrzega theStacc: „jeśli library nie zadziała podczas renderowania Googlebota, obraz nigdy nie dostanie atrybutu src i Google nigdy go nie zaindeksuje.”
Jak lazy loading wpływa na Core Web Vitals?
Lazy loading wpływa bezpośrednio na 2 z 3 metryk Core Web Vitals. LCP (Largest Contentful Paint): poprawia się, bo mniej zasobów ładowanych przy starcie = szybszy paint. Ale UWAGA: lazy loading na hero image (element LCP) pogarsza LCP drastycznie. Jak opisuje web.dev w artykule o LCP i lazy loading: „technika lazy loading stosowana przez WordPress wyraźnie pomaga zredukować bajty obrazów kosztem opóźnionego LCP.” Rozwiązanie: fetchpriority="high" na hero image, lazy loading tylko na obrazach below the fold.
CLS (Cumulative Layout Shift): lazy loading bez width i height na <img> powoduje layout shift – obraz ładuje się z opóźnieniem, strona „skacze.” Rozwiązanie: zawsze podawaj wymiary. INP (Interaction to Next Paint): lazy loading nie ma bezpośredniego wpływu, bo INP mierzy responsywność interakcji, nie ładowanie. INP zastąpił FID w marcu 2024 (Google Search Central).
Jak podsumowuje Search Engine Land (Semrush) w przewodniku po lazy loading: „lazy loading odracza treści takie jak obrazy, wideo i komponenty JavaScript do momentu, gdy są potrzebne – może pomóc poprawić wykorzystanie bandwidth i skrócić czas ładowania.”
Jak poprawnie wdrożyć lazy loading?
Wdrożenie krok po kroku. Krok 1: Zidentyfikuj hero image / LCP element – ten NIE dostaje lazy loading. Użyj fetchpriority="high". Krok 2: Dodaj loading="lazy" do wszystkich obrazów below the fold. Krok 3: Podaj width i height na każdym <img> – zapobiegasz CLS. Krok 4: Testuj w PageSpeed Insights i GSC URL Inspection (sprawdź czy Googlebot widzi obrazy). Screaming Frog z JavaScript rendering pozwala sprawdzić, czy Googlebot renderuje lazy-loaded content.
WordPress 5.5+ automatycznie dodaje loading="lazy" do wszystkich obrazów – ale to obejmuje hero image! WordPress 5.9 naprawił to częściowo, wyłączając lazy loading na pierwszym obrazie. Sprawdź w swoim motywie – w Kadence, Divi i Elementor mechanizm może działać inaczej. Jak zaleca Semrush na blogu: „audytuj kilka najważniejszych stron za pomocą URL Inspection Tool w GSC – sprawdź czy lazy-loaded content, obrazy i linki wewnętrzne są widoczne w renderowanym HTML.”
Najczęstsze błędy lazy loading – case study
Błąd 1: Lazy loading na hero image. Efekt: LCP wzrasta, ruch spada. Case study z PPC.land: PageSpeed ↑ 65→92, ruch ↓ 20%, LCP ↑ 1.8s→4.2s. Fix: hero image z loading="eager" (domyślne) + fetchpriority="high".
Błąd 2: Brak width/height. Efekt: CLS rośnie, Google Page Experience sygnał negatywny. Fix: dodaj wymiary do każdego <img>. Jak pisze web.dev: „lazy loading zapewnia ładowanie na żądanie, ale wymiary muszą być z góry określone.”
Błąd 3: data-src bez src fallback. Efekt: Googlebot nie indeksuje obrazów. JS libraries zastępują src na data-src – jeśli JS się nie wykona (Googlebot timeout), obraz jest niewidoczny. Fix: używaj native loading="lazy", nie JS libraries. Martin Splitt z Google potwierdził w sierpniu 2025 (Google Developers – JS SEO): crawlery indeksują obrazy z prawdziwym atrybutem src i natywnym loading=”lazy” bez problemu.
Lazy loading a widoczność w AI Search
Boty AI (GPTBot, ClaudeBot, PerplexityBot) nie renderują JavaScript – w ogóle. Jak podaje Search Engine Land: „strony wymagające renderowania JavaScript zajmują botom AI 9x dłużej niż statyczny HTML.” Jeśli Twoja treść ładuje się przez JS lazy loading – boty AI jej nie zobaczą. Dlatego treść krytyczna musi być w statycznym HTML, a lazy loading stosowany wyłącznie na mediach (obrazy, wideo). Więcej: audyt widoczności w AI, techniczne SEO.
Case study: lazy loading na stronach z top 10 Google dla „pozycjonowanie” (maj 2026)
Przeskanowaliśmy implementację lazy loading na stronach usługowych 7 polskich agencji SEO rankujących w top 10 Google na frazę „pozycjonowanie stron”. Wyniki poniżej — z realnymi danymi z kodu źródłowego (maj 2026). Audyt przeprowadzony narzędziami Semgence z analizą atrybutów loading, data-src, fetchpriority, width/height na wszystkich <img> w HTML.
Tabela: implementacja lazy loading w top 10 dla „pozycjonowanie”
| Domena | Obrazów | lazy | data-src (JS) | fetchpriority | lazy z w+h | Hero lazy? | Ocena |
|---|---|---|---|---|---|---|---|
| widoczni.com | 223 | 117 | 0 | 0 | 83/117 | ✅ NIE | 🟡 |
| eactive.pl | 45 | 1 | 40 | 0 | 1/1 | ✅ NIE | 🔴 |
| ks.pl | 46 | 30 | 0 | 2 | 30/30 | ✅ NIE | 🟢 |
| delante.pl | 186 | 1 | 0 | 1 | 1/1 | ✅ NIE | 🔴 |
| empressia.pl | 26 | 5 | 0 | 1 | 5/5 | ⚠️ TAK! | 🟡 |
| zgred.pl | 23 | 0 | 0 | 5 | – | ✅ NIE | 🟡 |
| semgence.pl | 0* | – | – | – | – | – | – |
* semgence.pl/pozycjonowanie-stron/ — strona usługowa oparta na Kadence, obrazy ładowane przez CSS background lub JS, brak tagów <img> w statycznym HTML. Audyt: 22 maja 2026, źródło: analiza kodu źródłowego HTML (nie renderowanego DOM).
Co wynika z analizy?
Eactive.pl — 40 obrazów z data-src (JS lazy loading) 🔴. To najpoważniejszy problem w całym zestawieniu. 40 z 45 obrazów używa data-src zamiast src — co oznacza, że Googlebot może nie zobaczyć tych obrazów, jeśli JavaScript się nie wykona w czasie crawlu. Brak fetchpriority na jakimkolwiek obrazie. Rekomendacja: migracja z JS lazy loading na native loading="lazy".
Delante.pl — 186 obrazów, tylko 1 z lazy loading 🔴. Strona ładuje 186 obrazów bez lazy loading (185 bez atrybutu loading). To oznacza, że przeglądarka pobiera wszystkie 186 obrazów naraz — obciążenie bandwidth, wolniejszy initial load. Stąd lab LCP = 10.5s (najgorszy w naszym case study Lighthouse). Pozytyw: fetchpriority na 1 obrazie i hero image nie jest lazy.
Widoczni.com — 223 obrazy, 117 lazy, ale 34 bez width+height 🟡. Dobra implementacja native lazy loading (117 obrazów), ale 34 z tych lazy obrazów nie ma width + height — ryzyko CLS (layout shift). Stąd lab CLS = 0.335 (najgorszy w zestawieniu Lighthouse). Hero image nie jest lazy — poprawnie. Brak fetchpriority — warto dodać na LCP element.
KS.pl — wzorcowa implementacja 🟢. 30 obrazów z loading="lazy", wszystkie 30 z width + height (100%), 2 obrazy z fetchpriority, hero image nie jest lazy. To jedyna strona z zestawienia, która spełnia wszystkie best practices: native lazy loading + wymiary + fetchpriority + brak lazy na hero.
Empressia.pl — hero image z lazy loading ⚠️. Jedyna strona w zestawieniu, gdzie pierwszy obraz (hero) ma loading="lazy". To klasyczny błąd opisany wyżej — LCP element ładowany z opóźnieniem. Pozytyw: fetchpriority na 1 obrazie i wszystkie lazy obrazy mają wymiary. Rekomendacja: usunąć loading="lazy" z hero image, dodać loading="eager" + fetchpriority="high".
Zgred.pl — brak lazy loading, ale najlepsze fetchpriority 🟡. Żaden obraz nie ma loading="lazy", ale za to 5 obrazów ma fetchpriority — najwyższy wynik w zestawieniu. Przy 23 obrazach brak lazy loading nie jest krytyczny, ale przy rozbudowie serwisu warto wdrożyć native lazy na obrazach below the fold.
Wniosek: tylko 1 z 7 zbadanych serwisów (ks.pl) ma wzorcową implementację lazy loading. Najczęstsze błędy: brak lazy loading w ogóle (delante.pl), JS lazy loading z data-src (eactive.pl), lazy bez wymiarów (widoczni.com), lazy na hero image (empressia.pl). Narzędzia do audytu: Screaming Frog (Custom Extraction → loading atrybut na <img>), PageSpeed Insights, Semrush Site Audit.
Najczęściej zadawane pytania o lazy loading
Czy lazy loading szkodzi SEO?
Nie, jeśli jest wdrożony poprawnie. Native loading="lazy" na obrazach below the fold poprawia Core Web Vitals i nie wpływa negatywnie na indeksację. Problemy zaczynają się przy lazy loading na hero image (pogorsza LCP) i przy JS libraries z data-src (Googlebot może nie zobaczyć obrazów). Źródło: web.dev.
Czy powinienem stosować lazy loading na wszystkich obrazach?
Nie. Hero image i pierwszy widoczny obraz powinny ładować się natychmiast (loading="eager" + fetchpriority="high"). Lazy loading stosuj tylko na obrazach below the fold. Jak zaleca Search Engine Land: „natywne lazy loading + fetchpriority to najlepsza kombinacja.”
Jak sprawdzić czy lazy loading działa poprawnie?
Trzy narzędzia: PageSpeed Insights (audyt LCP, CLS), GSC URL Inspection (sprawdź renderowany HTML), Screaming Frog z JavaScript rendering (symulacja crawlu Googlebota). Semrush Site Audit flaguje „Pages Have Slow Load Speed” i problemy z Core Web Vitals.
WordPress automatycznie dodaje lazy loading – czy to problem?
WordPress 5.5+ dodaje loading="lazy" do wszystkich obrazów. WordPress 5.9 wyłączył lazy loading na pierwszym obrazie. Sprawdź source code swoich stron – jeśli hero image ma loading="lazy", zmień na loading="eager". Narzędzia: Screaming Frog (Custom Extraction → szukaj loading=”lazy” na pierwszym img).

