Lazy loading - jak włączyć i przyspieszyć stronę?
Lazy loading odkłada pobranie obrazów i ramek do momentu, w którym użytkownik zbliża się do nich przewijaniem. Strona pobiera na start to, co widać, a nie wszystko, co na niej jest. Zysk jest największy tam, gdzie treści jest dużo: długie artykuły, galerie, listy produktów. Jest jednak jeden przypadek, w którym ta technika szkodzi, i większość błędnych wdrożeń polega właśnie na nim.
Co to jest lazy loading i jak działa?
Domyślnie przeglądarka pobiera wszystkie obrazy z kodu strony, niezależnie od tego, czy użytkownik do nich dotrze. Przy artykule z dwudziestoma zdjęciami oznacza to pobranie dwudziestu plików, z których widać jeden.
Lazy loading odwraca tę kolejność. Przeglądarka rezerwuje miejsce, ale pobiera plik dopiero wtedy, gdy zbliża się on do widocznego obszaru. Dla użytkownika, który nie przewinie do końca, część zdjęć nie zostanie pobrana nigdy.
Przeciwieństwem jest ładowanie natychmiastowe, stosowane do tego, co widać od razu. Sztuka polega na rozdzieleniu jednego od drugiego, a nie na objęciu techniką wszystkiego.
Jak włączyć lazy loading w WordPressie?
Od wersji 5.5 WordPress dodaje atrybut `loading="lazy"` sam, do obrazów wstawianych przez edytor i do obrazów wyróżniających. W większości witryn nie trzeba więc robić nic.
Ręcznej uwagi wymagają trzy przypadki:
- obrazy wstawiane przez kreatory stron, które generują kod po swojemu
- suwaki i galerie z własnym mechanizmem ładowania
- obrazy tła wstawiane w stylach zamiast znacznikiem `
`
W czystym kodzie wystarczy jeden atrybut:
<img src="zdjecie.webp" width="800" height="600" loading="lazy" alt="opis">Ramki z wideo i mapami obsługuje ten sam atrybut na znaczniku `
Najczęstszy błąd: pierwszy ekran pod lazy loadingiem
Obraz widoczny bez przewijania musi ładować się natychmiast. Objęcie go opóźnieniem opóźnia moment, w którym pojawia się największy element strony, czyli pogarsza wskaźnik LCP z Core Web Vitals.
Skutek jest paradoksalny: technika wdrożona po to, żeby przyspieszyć stronę, pogarsza dokładnie tę metrykę, którą Google mierzy jako szybkość ładowania.
Praktyczna zasada: pierwsze jeden do dwóch zdjęć na stronie, licząc od góry, ładują się natychmiast. Reszta leniwie. Przy zdjęciu nagłówkowym warto dodatkowo zasygnalizować przeglądarce priorytet atrybutem `fetchpriority="high"`.
Połowa wdrożeń lazy loadingu, które poprawiamy, obejmuje slajder na górze strony. Wynik PageSpeed spada po wdrożeniu i nikt nie rozumie dlaczego.
Krzysztof Czapnik, KC Mobile
Lazy loading a pozycje w Google
Poprawnie wdrożony nie szkodzi indeksowaniu. Googlebot renderuje stronę i pobiera obrazy, które pojawiają się w trakcie przewijania.
Problemy pojawiają się przy rozwiązaniach opartych wyłącznie na skryptach, gdzie adres obrazu siedzi w atrybucie niestandardowym, a prawdziwy `src` pojawia się dopiero po wykonaniu kodu. Wtedy wyszukiwarka grafiki może nie zobaczyć zdjęcia w ogóle.
Bezpieczne minimum: korzystaj z natywnego atrybutu `loading`, a jeśli używasz biblioteki, sprawdź w narzędziu Sprawdzenie adresu URL w Search Console, czy w wyrenderowanym kodzie widać właściwe adresy obrazów.
Sprawdź też, czy treść tekstowa nie jest ładowana leniwie razem z obrazami. Tekst pojawiający się dopiero po przewinięciu bywa dla wyszukiwarki niewidoczny.
Kiedy lazy loading nie ma sensu?
| Sytuacja | Czy stosować |
|---|---|
| Długi artykuł ze zdjęciami | tak, poza pierwszym obrazem |
| Lista produktów w sklepie | tak, poza pierwszym rzędem |
| Galeria realizacji | tak, to najlepszy przypadek |
| Strona kontaktowa z jedną mapą | mapa tak, reszta bez znaczenia |
| Landing z jednym ekranem | nie, nie ma czego odkładać |
| Logo i ikony | nie, ważą kilobajty, a opóźnienie widać |
Przy krótkiej stronie z trzema obrazami zysk jest zerowy, a ryzyko pogorszenia LCP realne. Technika opłaca się proporcjonalnie do tego, ile treści zostaje poniżej pierwszego ekranu.
Osobny przypadek to strony drukowane i wersje do zapisu w formacie PDF. Obrazy ładowane leniwie potrafią się tam nie pojawić, bo przeglądarka generuje dokument bez przewijania. Jeśli klienci drukują u Ciebie karty produktów albo cenniki, warto to sprawdzić przed wdrożeniem.
Wymiary obrazów: warunek, o którym się zapomina
Obraz ładowany leniwie musi mieć podaną szerokość i wysokość w kodzie. Bez nich przeglądarka nie wie, ile miejsca zarezerwować, więc treść przeskakuje w momencie, gdy zdjęcie się pojawi.
To pogarsza wskaźnik CLS, czyli stabilność układu, i jest odczuwalne dla użytkownika: czyta akapit, a tekst nagle ucieka mu w dół.
Rozwiązanie kosztuje zero kilobajtów. Atrybuty `width` i `height` przy każdym obrazie wystarczą, żeby przeglądarka wyliczyła proporcje i zostawiła miejsce z góry. Więcej o samych obrazach opisujemy w poradniku optymalizacja zdjęć na stronie.
Obrazy tła, czyli przypadek pomijany przez automat
Natywny atrybut `loading` działa wyłącznie na znacznikach `` i `
To dotyczy przede wszystkim sekcji nagłówkowych, banerów i kafelków budowanych kreatorem stron. Bywa, że najcięższy plik na stronie siedzi właśnie tam i nie widać go w żadnym raporcie dotyczącym obrazów.
Są dwa wyjścia. Pierwsze to zamiana tła na zwykły znacznik `` z pozycjonowaniem przez style, co od razu włącza cały standardowy mechanizm. Drugie to podanie różnych wersji tła dla różnych szerokości ekranu, żeby telefon nie pobierał pliku przygotowanego pod monitor.
Przy sekcji nagłówkowej i tak nie chcesz jej opóźniać, więc rozwiązaniem jest zmniejszenie pliku, nie odkładanie go w czasie.
Jak sprawdzić, czy działa?
Otwórz zakładkę Sieć w narzędziach przeglądarki, odśwież stronę bez przewijania i policz pobrane obrazy. Potem przewiń do końca i sprawdź, czy pojawiły się kolejne żądania. Jeśli tak, mechanizm działa.
Drugi test to waga strony przy wejściu. Powinna spaść o tyle, ile ważyły zdjęcia poniżej pierwszego ekranu.
Na koniec zmierz LCP w PageSpeed przed i po. Jeśli wskaźnik się pogorszył, prawie na pewno objąłeś opóźnieniem obraz z pierwszego ekranu i wystarczy go wyłączyć z mechanizmu.
Warto też porównać dane od prawdziwych użytkowników, a nie tylko wynik z laboratorium. Raport Core Web Vitals w Search Console opiera się na oknie 28 dni, więc efekt zmiany wdrożonej dziś zobaczysz tam dopiero za kilka tygodni. Pojedynczy pomiar w narzędziu potrafi się wahać, dlatego rozstrzygające są serie, nie jeden wynik.
Pełną kolejność optymalizacji opisujemy w poradniku jak przyspieszyć wolną stronę, a same wskaźniki w Core Web Vitals.
Ile to daje i ile kosztuje?
Lazy loading jest jedną z najtańszych optymalizacji, bo w WordPressie zwykle działa bez żadnej pracy. Koszt pojawia się wtedy, gdy trzeba naprawić wdrożenie kreatora stron albo wyłączyć z mechanizmu pierwszy ekran.
Według naszego cennika wchodzi to w zakres podstawowej optymalizacji, czyli 500-1500 zł razem z obrazami, cache i minifikacją. Dane z naszych wdrożeń pokazują, że na stronach z galeriami sama ta zmiana zdejmuje z wejścia 50-80% początkowej wagi obrazów.
Wdrożenie zajmuje zwykle 1-2 godziny. Jeśli chcesz to zlecić razem z resztą, napisz przez formularz na stronie kontakt albo zajrzyj do opieki nad stroną WordPress.
Korzyści
- Strona pobiera na start tylko to, co widać, zamiast całej galerii
- Pierwszy ekran zostaje wyłączony z mechanizmu, żeby nie zepsuć wskaźnika LCP
- Ramki z wideo i mapami też objęte, bo to one ważą najwięcej
- Sprawdzamy wyrenderowaną wersję strony, żeby wyszukiwarka grafiki widziała zdjęcia