Przejdź do treści
Podobają Ci się nasze treści?
Sięgnij po unikalną wiedzę prosto od developerów i marketingowców. Zapisz się do newslettera.
CAPTCHA
Dziękujemy za zapisanie się do newslettera!
Aby otrzymywać najświeższe, branżowe informacje, potwierdź subskrypcję w mailu, który od nas dostałeś.
PS. Nawet tak ważne wiadomości lubią czasem pomylić folder, dlatego upewnij się, że mail nie trafił do SPAMU
Otwórz swoją skrzynkę e-mail

Optymalizacja obrazów w WordPressie. Jak to zrobić?

Kategoria: 
Opublikowane: 
Czas czytania
: 8 min

Z danych zbieranych przez HTTP Archive wynika, że średnia waga strony internetowej obecnie wynosi niemal dokładnie 3 MB… z czego aż 1/3 stanowią grafiki. Wniosek jest prosty: jeśli chcesz przyspieszyć stronę na WordPressie, żeby nie zniechęcała do siebie potencjalnych klientów, to właśnie zdjęciom trzeba się przyjrzeć bliżej. Poniżej podpowiemy m.in. jak zmniejszyć rozmiar zdjęć na stronie oraz jaki format grafik najlepiej wybrać.

Jak optymalizować obrazy w WordPress

Wpływ wagi mediów na Core Web Vitals i konwersję

Zasada jest prosta: im lepiej zoptymalizowane będą pliki graficzne, tym szybciej strona wyświetli się w pełnej okazałości na ekranie użytkownika. Ma to ogromne znaczenie, ponieważ każdy kolejny ułamek sekundy czekania, aż witryna się załaduje, zwiększa szanse, że użytkownik po prostu opuści stronę.

Z analiz Google publikowanych w ramach projektu Think with Google wynika, że strony ładujące się powyżej 3 sekund tracą średnio… 53% potencjalnych użytkowników. Z kolei badanie przeprowadzone kilka lat temu przez giganta z Mountain View we współpracy z Deloitte – o tytule, który mówi sam za siebie, „Milliseconds Make Millions” – pokazało, że skrócenie czasu ładowania strony o zaledwie 0,1 sekundy potrafi przełożyć się na wzrost konwersji aż o 8% (na przykładzie e-commerce).

Na tym jednak nie koniec. Przypomnijmy tylko, że od 2021 roku Google uwzględnia Core Web Vitals, czyli wskaźniki opisujące wydajność strony, w swoim algorytmie rankingowym. Dwa z nich – LCP oraz CLS – są bardzo mocno uzależnione od konfiguracji obrazów. Do drugiego wrócimy na końcu artykułu, teraz zatrzymajmy się przy LCP.

Largest Contentful Paint mierzy czas od początku ładowania strony do momentu, w którym największy widoczny element witryny zostaje w pełni wyrenderowany. Łatwo się domyślić, że na większości stron tym elementem jest właśnie jakaś grafika – baner reklamowy, obrazek ilustrujący artykuł itp. Nawet jeśli cały interfejs strony wczyta się błyskawicznie, to wolno ładujący się obraz i tak podbije wartość LCP… tym samym obniżając szanse witryny na dobre pozycje w Google.

Nowoczesne formaty obrazów: od WebP po natywne wsparcie AVIF

Co zatem można zrobić, aby zoptymalizować pliki graficzne na stronie? W pierwszej kolejności, jeśli cały czas korzystasz z JPEG i PNG, to zmienić ich format. Sam JPEG ma przecież swoje lata – powstał w 1992 roku i choć ma mnóstwo zalet, dziś po prostu istnieją lepsze opcje.

Obecnie standardem są formaty WebP i AVIF. Oba oferują kompresję lepszą od JPEG o kilkadziesiąt procent przy zachowaniu tej samej jakości, do tego obsługują przezroczystość – co wcześniej było domeną wyłącznie PNG – oraz znacznie lepiej radzą sobie z gradientami i szczegółami w cieniach.

 

WebP

AVIF

Kiedy został wprowadzony?

2010 r.

2019 r.

O ile redukuje wagę zdjęcia względem JPEG, według twórców formatu?

O ok. 25-35%

O ok. 40-50%

Czy jest wspierany przez wszystkie duże przeglądarki (Chrome’a, Firefoxa, Safari, Edge oraz Operę?

Tak, włącznie z ich starszymi wersjami

Tak, ale tylko w najnowszych wersjach

Czy ma natywne wsparcie WordPressa?

Tak, od wersji 5.8

Tak, od wersji 6.5

Na pierwszy rzut oka AVIF jest co prawda lepszy od WebP, ale ma jedną wadę, oczywiście poza kwestią kompatybilności ze starszymi przeglądarkami. Otóż kodowanie plików w tym formacie wiąże się z o wiele większym obciążeniem serwera niż w przypadku WebP. Jeśli więc korzystasz z wtyczki, która konwertuje i kompresuje obrazy bezpośrednio na serwerze, może to być odczuwalne.

Architektura serwera vs wtyczki. Jak nie spowolnić własnej strony?

W przypadku WordPressa optymalizacja obrazów jest o tyle prosta, że do dyspozycji masz dziesiątki sprawdzonych pluginów pokroju Imagify czy Smush, które zrobią to za Ciebie. Na małej-średniej wielkości stronie nie ma w tym żadnego problemu, to świetna opcja – co innego, jeśli grafik do skompresowania jest kilka tysięcy.

Większość darmowych wtyczek do optymalizacji zdjęć WordPress działa na takiej zasadzie: przechwytują obraz w momencie wgrania na serwer, a następnie uruchamiają proces kompresji bezpośrednio w PHP… na tym samym serwerze, który obsługuje też ruch na stronie. Możesz wyobrazić sobie sklep na WooCommerce, do którego właśnie ktoś wgrał nową kolekcję 200 produktów. Każdy z nich ma 3-4 zdjęcia, które trzeba skompresować, przeskalować i zapisać w kilku rozmiarach miniatur; jeśli strona stoi na hostingu z raczej niższej półki cenowej, szansa, że ten się „zadławi”, nie jest wcale zerowa.

Jakub Czyż

Doradca Klienta Biznesowego, Smartbees

Na małej stronie firmowej czy blogu zwykle wystarczy dobrze skonfigurowana wtyczka do kompresji obrazów. Sytuacja zmienia się przy rozbudowanych sklepach internetowych i portalach, gdzie setki nowych zdjęć mogą jednocześnie obciążać serwer i wpływać na stabilność całej witryny. W takich projektach warto od początku zaplanować skalowalne rozwiązanie — np. CDN lub zewnętrzne przetwarzanie grafik — zamiast później gasić problemy z wydajnością.

Dlatego też na większą skalę warto przemyśleć całą architekturę back-endu i wyjąć optymalizację obrazów poza główny wątek serwera. Można to zrobić:

  • po stronie CDN-u – czyli zamiast serwować obrazy bezpośrednio z serwera, przesyłasz je przez sieć CDN (np. przez Cloudflare Images), która konwertuje i kompresuje je automatycznie na swoich węzłach brzegowych, jak najbliżej użytkownika;
  • po stronie zewnętrznego serwisu, przez API – niektóre wtyczki, choćby wspomniane Imagify, działają właśnie w ten sposób, że wysyłają obraz do zewnętrznego serwera, a potem odbierają już zoptymalizowaną wersję i zapisują ją na Twoim hostingu.

Jedno zdjęcie, dziesięć plików. Jak zablokować zbędne miniatury w WP?

Na początku pracy z WordPressem wiele osób nie wie, że gdy do biblioteki mediów WP trafia nowe zdjęcie, to CMS… automatycznie generuje dla niego miniatury w różnych rozmiarach. Więcej – niemal wszystkie motywy też tworzą kopie obrazów dostosowane do własnych szablonów, podobnie jest zresztą z niektórymi wtyczkami (np. WooCommerce generuje osobne miniatury dla kart produktów, strony produktu i koszyka).

Problem polega na tym, że większość stron przynajmniej z części tych miniatur w ogóle nie korzysta, więc zajmują niepotrzebnie miejsce na serwerze i zwiększają liczbę i-nodes.

I-node (węzeł indeksowy) to struktura danych, którą system plików tworzy dla każdego pliku i katalogu na serwerze, niezależnie od jego rozmiaru. Nawet plik ważący 1 KB zajmuje jeden i-node. Hostingodawcy niemal zawsze narzucają limit i-nodes na konto – jeśli go przekroczysz, serwer odmówi tworzenia nowych plików, nawet jeśli przestrzeni na dysku jest jeszcze dużo.

Rozwiązanie jest dosyć proste, wystarczy dodać do pliku functions.php – koniecznie w motywie potomnym! – fragment kodu:

function remove_unnecessary_image_sizes( $sizes ) { unset( $sizes['zbędny rozmiar'] ); unset( $sizes['zbędny rozmiar'] ); unset( $sizes['zbędny rozmiar'] ); return $sizes; } add_filter( 'intermediate_image_sizes_advanced', 'remove_unnecessary_image_sizes' )

Oczywiście, zanim wyłączysz generowanie miniatur, koniecznie sprawdź w szablonach motywu oraz dokumentacji wtyczek, których używasz, jakie konkretnie rozmiary zdjęć one wywołują!

Atrybuty wymiarów i lazy loading – klucz do stabilności wizualnej

Przy okazji Core Web Vitals wspomnieliśmy o CLS, czyli Cumulative Layout Shift. Wskaźnik ten mierzy stabilność wizualną strony, czyli to, czy elementy „skaczą" podczas ładowania. Do przesunięć layoutu dochodzi najczęściej wtedy, gdy przeglądarka nie zna z góry wymiarów obrazka i musi je ustalić dopiero po jego pobraniu – pozostałe elementy interfejsu muszą zrobić miejsce dla tej grafiki, dlatego się przesuwają.

Aby tego uniknąć, każda grafika na stronie powinna mieć jawnie zdefiniowane atrybuty width oraz height.

<img src="zdjecie.avif" alt="Opis zdjęcia" width="1200" height="800" loading="”lazy”">

Od wersji 5.5 WordPress dodaje je automatycznie dla obrazków wstawianych przez edytor Gutenberg lub bibliotekę mediów; problemy mogą natomiast pojawić się przy grafikach umieszczonych ręcznie w szablonach PHP albo przez page buildery – wtedy musisz to zrobić samemu.

Z reguły nie trzeba się za to martwić o lazy loading – jak wyżej, WordPress sam dodaje atrybut loading="lazy" do wszystkich plików graficznych, tak aby przeglądarka wczytywała je dopiero, gdy użytkownik faktycznie do nich dotrze (a nie od razu przy pierwszym renderowaniu, wydłużając czas ładowania).

Jest tylko jeden wyjątek: grafika, która na danej stronie jest największym widocznym elementem po załadowaniu, nigdy nie powinna mieć atrybutu loading="lazy", bo odbije się to na wskaźniku LCP. Dla takich plików najlepiej dodać instrukcję z atrybutami loading="eager" oraz fetchpriority="high" – ten drugi to wskazówka dla przeglądarki, że dany zasób powinien być wczytany w pierwszej kolejności. I znów, od wersji 6.3 WordPress sam określa fetchpriority dla grafiki, którą rozpoznaje jako główny element strony… jednak warto to weryfikować w DevTools, bo mechanizm ten nie zawsze działa poprawnie, zwłaszcza z niestandardowymi motywami.

Jak zoptymalizować zdjęcia w WordPressie bez obciążania serwera?

Najprościej zrobić to za pomocą wtyczki, która kompresuje grafiki na zewnętrznym serwerze – tak działa np. Imagify, ShortPixel czy Optimole – a na hosting zwraca już gotowy, zoptymalizowany plik. A jeśli masz większy budżet, możesz przenieść grafiki i cały proces kompresji na CDN.

Jaki format zdjęć do WordPressa jest najlepszy?

W tym momencie bezapelacyjnie najlepszym formatem jest AVIF, które oferuje średnio 40-50% mniejszy rozmiar pliku niż JPEG przy tej samej jakości. Trzeba tylko pamiętać, że starsze wersje przeglądarek mogą go nie obsługiwać, dlatego warto korzystać też z WebP, przynajmniej jako fallback.

Jak wyłączyć automatyczne tworzenie miniatur w WordPressie?

Wystarczy dodać odpowiednią instrukcję w pliku functions.php, która odfiltruje rozmiary miniatur zbędne dla Twojej strony. Możesz to zrobić za pomocą filtra intermediate_image_sizes_advanced – przykład znajdziesz w artykule.

Oceń wpis
0

Dziękujemy za ocenę postu!

Mamy więcej darmowych treści. Nie rezygnuj z nich!
Technologie, SEO, marketing - newsletter z poradami, które od razu możesz wdrożyć! Prosto na Twoją skrzynkę. Za darmo i bez spam
CAPTCHA