Jak przyspieszyć stronę na WordPress? Optymalizacja WP

Arkadiusz Meszka    23 marca 2019 | Ostatnia modyfikacja: 20 stycznia 2020

WordPress to najpopularniejszy system CMS Open Source na świecie. Około 30% stron internetowych opartych jest na tej platformie. Jest łatwy w obsłudze, ma mnóstwo przydatnych funkcji, stosunkowo łatwo jest programować na nim zmiany. W dodatku jest mnóstwo gotowych szablonów i wtyczek, które czasem mogą pozwolić zaoszczędzić mnóstwo czasu i środków.

Niemniej jednak system ten ma swoje wady. Jedną z nich jest to, że jest powolny, gdy stronę na WordPress postawimy w nieumiejętny sposób lub podejmiemy złe decyzje.

W tym artykule podpowiem wam, jak przyspieszyć stronę na WordPress i jakich błędów nie popełnić, aby strona mogła działać szybko i stabilnie.

Zleć stworzenie szablonu profesjonaliście – nie kupuj gotowego

Stworzono dotychczas dziesiątki tysięcy darmowych i płatnych szablonów pod system WordPress. Proste gotowe szablony zazwyczaj są w miarę wydajne, ale ciężko jest na nich samodzielnie cokolwiek zmienić. Rozbudowane gotowe szablony pozwalają nam na wiele rzeczy, ale kosztem wydajności.

Gotowy, rozbudowany szablon musi spełniać mnóstwo wymagań / nadawać się do wielu sytuacji, dlatego będzie znacznie cięższy, niż szablon szyty na miarę pod nasze potrzeby.

Dodatkowo, w przypadku wielu gotowych szablonów wyglądają one pięknie, ale tylko w wersji demo. Gdy przychodzi do uzupełnienia ich realną treścią, mogą pojawić się następujące problemy:

  • Zdjęcia nie komponują się z resztą designu. Te w wersji demo wyglądają lepiej, ale my mamy całkiem inne.
  • Choćby delikatna zmiana długości tekstu powoduje, że wszystko się rozlatuje
  • Sposób edycji jest bardzo skomplikowany i najczęściej odbywa się w kilku / kilkunastu miejscach w panelu.
  • Szablon wymaga do działania mnóstwa pluginów, dodatkowo tworzących potencjalne luki w bezpieczeństwie i spowalniających stronę. Nierzadko są to pluginy płatne i po pewnym czasie koszt utrzymania strony zaczyna wzrastać.

Jeśli chcecie zbudować stronę, gdzie nie zależy wam na dopracowaniu detali i będzie bardzo niewielki ruch i ma być jak najtaniej się da – wtedy gotowy szablon może być jedynym rozwiązaniem.

Jeśli zaś chcecie mieć stabilną, dobrze działającą stronę internetową opartą o WordPress, którą łatwo będzie obsłużyć i będzie bezpieczna – zdecydowanie lepiej wybrać autorski szablon.

Więcej na temat gotowych i autorskich szablonów znajdziecie tutaj.

Serwer, który Cię nie zawiedzie

Nie będę tutaj owijać w bawełnę – najlepszą firmą hostingową obecnie pod strony www oparte o WP (i nie tylko), w mojej opinii jest dhosting.pl

Jest to jedyna firma w Polsce wg mojej aktualnej wiedzy, która pozwala wykorzystywać niemal nieograniczone zasoby, a płaci się za to tylko wtedy, gdy te zasoby de facto wykorzystujemy. A w bazowym pakiecie jest aż 1 GB RAMu i bardzo duży przydział procesora. Strony na WP bardzo szybko chodzą na tym hostingu.

Więcej na temat tego, dlaczego warto mieć dhosting, znajdziecie w tym artykule:

Na co zwrócić uwagę, zamawiając hosting i jaki hosting wybrać?

Strona wielojęzyczna? Użyj WPML

WPML to najlepszy dostępny na rynku plugin do wielojęzyczności i można go kupić za rozsądną cenę tutaj. Jest pakiet na jedną stronę, 3 strony oraz pakiet nielimitowany. Gdy używa się nie najwyższego pakietu, można w dowolnej chwili zrobić upgrade.

WPML jest kompatybilny z ogromną liczbą wtyczek, twórcy w ciągu lat rozwijania i utrzymywania tej wtyczki, w wyniku zdobytych doświadczeń i rozpatrzonych zgłoszeń, wyposażyli go we wszystkie funkcje, jakie mogą się tylko przyśnić użytkownikowi.

Do niedawna WPML bardzo spowalniał strony internetowe, szczególnie w połączeniu z WooCommerce, ale ostatnio twórcy znacznie poprawili jego wydajność i zarówno edycja w panelu admina, jak i front strony działają z taką prędkością, z jaką powinny.

Trzeba oczywiście wtyczkę odpowiednio skonfigurować i używać tego, co potrzeba. Ustawień jest mnóstwo, na szczęście WPML ma obszerną i intuicyjną dokumentację, w której łatwo jest się odnaleźć.

Cache – pamięć podręczna

Jest mnóstwo pluginów, które pozwalają uruchomić pamięć podręczną. Jak dla mnie najlepiej sprawdza się WP Rocket, czasem używam WP Fastest Cache, ale darmowa wersja ma wiele ograniczeń, a płatna jest bardzo droga. Równie dobrze działa WP Super Cache. Bardzo popularnym pluginem jest także W3 Total Cache, niemniej jednak w moim przypadku się nie sprawdził. Uruchamiałem go na 3 stronach internetowych i na wszystkich trzech odnotowałem spowolnienie po zainstalowaniu i poprawnym skonfigurowaniu tej wtyczki (a powinno być oczywiście na odwrót).

WP Rocket wspomniany w akapicie wyżej jest wtyczką płatną, ale jest najbardziej funkcjonalny i najbardziej skuteczny. Support także jest bardzo pomocny w przypadku problemów z poprawnym działaniem wtyczki lub jej uruchomieniem.

Na serwerach LiteSpeed, takich jak wymieniony powyżej dhosting, bardzo dobrze sprawdza się wtyczka LiteSpeed Cache. Różnica w prędkości działania strony jest spora, gdy uruchomi się ten plugin. LiteSpeed Cache przyspieszy stronę również na innych serwerach, nie jest wymagany serwer LiteSpeed. Niemniej jednak nie jest to tak szybkie, jak WP Rocket.

Technologię LiteSpeed oprócz wymienionego powyżej dhostingu obsługuje także firma JCHost. Mają oni ofertę bardzo szybkiego hostingu pod WordPress:

Hosting LiteSpeed pod WordPress

Ich serwery są świetnie zoptymalizowane i strony oparte na WordPress chodzą tam niemal tak szybko, jak strony bez systemu CMS. Cena za hosting również jest niewielka w stosunku do tego, jak szybko działa strona.

Pluginów do cache jest oczywiście znacznie więcej, niż te 4 wymienione powyżej. Te powyższe to wtyczki najbardziej popularne i często używane.

Gdy już korzystacie z takiej wtyczki, trzeba ją odpowiednio skonfigurować. Niech ten cache nie tworzy się za szybko i za dużo na raz. Jeśli np. korzystacie z funkcji preload w WP Fastest Cache, powinny się cache’ować 2-4 strony na minutę.

Czy korzystać z CDN (Content Delivery Networks) – z reguły nie zwiększa to wydajności na stronach, na których to testowałem. Warto uaktywnić wszelkie dostępne opcje cache’owania – browser cache, object cache itd. Warto również zminifikować pliki css i js oraz połączyć je. Niemniej jednak, zarówno przed uruchomieniem tego wszystkiego, jak i po, przetestujcie swoją stronę. Minifikowanie js oraz łączenie nierzadko powoduje błędy na stronie. Należy wtedy naprawić swój kod, albo wyłączyć tę opcję we wtyczce.

Skanery bezpieczeństwa, automatyczne backupy – niekoniecznie

Pluginy, które regularnie wykonują backup instalacji WP, mają tendencję do zawieszania się, spowalniania strony i wykonywania niepełnych backupów. Znacznie lepiej jest polegać na backupie wykonywanym przez firmę hostingową. W każdej porządnej firmie hostingowej macie dostęp do backupów – również w tej, o której wspomniałem wyżej.

Dostępne są backupy plików oraz bazy danych z ostatnich 2 dni. Jak potrzeba starszych, może być konieczność drobnej opłaty. Raz potrzebowałem backup bazy sprzed 7 dni i zapłaciłem za to 10 zł.

Analogicznie jest ze skanerami. Jeśli korzystacie z wtyczki, która ma zwiększyć bezpieczeństwo waszej instalacji WordPress, najważniejsze rzeczy to:

  • Zmiana prefixu w bazie danych z domyślnego na inny
  • Zmiana adresu logowania
  • Wykrywanie brute force
  • Mile widziany Firewall
  • Ochrona przed botami spamowymi
  • Wykrywanie, gdy ktoś np. poprzez formularz komentarzy próbuje wstrzyknąć złośliwy kod

Skanery, które regularnie będą przeszukiwać waszą instalację w poszukiwaniu złośliwego kodu, są bezużyteczne – chyba, że macie własny serwer VPS lub dedykowany i nie stosujecie żadnych systemów bezpieczeństwa.

Gdy WP jest na hostingu, nie na serwerze dedykowanym lub VPS, firma hostingowa z reguły wykrywa włamanie w takim samym tempie, w jakim wykryłby go skaner.

Jak najmniej pluginów

Jest wiele pluginów WP, które można zastąpić kilkoma linijkami kodu w szablonie. W takiej sytuacji znacznie bezpieczniej jest to właśnie zrobić. Każdy dodatkowy plugin to powierzenie bezpieczeństwa naszej strony osobie trzeciej. Musimy zaufać, że twórca pluginu wie, co robi i nie zostawił żadnej luki. Im większej liczbie osób / firm musimy to zaufanie powierzyć, tym większa szansa, że do włamania dojdzie prędzej czy później, nawet jeśli będziemy je na bieżąco aktualizować.

Ma to też związek z prędkością – wiele pluginów importuje własne style, własny kod js, często tego kodu jest dużo i jest on niepotrzebny. Nawet, jeśli za pomocą wtyczki cache łączymy te pliki w jeden, to i tak tego kodu w tym jednym pliku jest za dużo.

Warto także pamiętać, że czasami jeden plugin może zastąpić kilka innych. Dla przykładu – All in One Seo Pack pozwala nam zarówno ustawić istotne dla nas opcje związane z SEO, jak i wkleić kod śledzący Google Analitycs, włączyć social meta, wygenerować mapę strony, a nawet zablokować złośliwe boty.

Contact Form 7 – importuj kod tam, gdzie jest potrzebny

Wtyczka contact form 7 importuje swoje style i kod javascript na każdej podstronie serwisu, w którym jest zainstalowana. Jeśli używamy formularza kontaktowego np. tylko w zakładce “kontakt”, nie ma to sensu. Aby temu zapobiec, wystarczy w functions.php wpisać następujący kod:

add_filter( 'wpcf7_load_js', '__return_false' );
add_filter( 'wpcf7_load_css', '__return_false' );

Następnie w szablonie podstrony, na której jest umieszczony formularz kontaktowy, zastosować następujący kod:

<?php
    if ( function_exists( 'wpcf7_enqueue_scripts' ) ) {
        wpcf7_enqueue_scripts();
    }
 
    if ( function_exists( 'wpcf7_enqueue_styles' ) ) {
        wpcf7_enqueue_styles();
    }
?>

Dlaczego wspominam tutaj o Contact Form 7? Jest to najpopularniejsza wtyczka do tworzenia formularzy na WordPress i w moim doświadczeniu – najbardziej elastyczna. Szczególnie, jeśli zna się HTML / CSS / JS.

Optymalizacja obrazów

Najważniejsze jest to, aby obrazy były realnie takiego rozmiaru, w jakim są wyświetlane. Jeśli mamy listę artykułów na blogu, na tej liście miniaturki, ale te miniaturki mają np. 2000x2000px i są pomniejszone – jest to niepotrzebne spowolnienie strony.

Twórca waszego szablonu powinien zaprogramować go tak, aby miniatury w danym miejscu były dopasowane rozmiarowo do swojej przestrzeni (system WordPress je przytnie, trzeba tylko wgrywać odpowiednio duże obrazy i odpowiednio zaprogramować to w szablonie).

Pluginy optymalizujące obrazy też bywają przydatne, ale wystarczy wgrywać pliki w formacie jpg, zamiast png, zastosować się do tego powyżej i to już rozwiązuje wiele problemów. Pliki png są z reguły o wiele cięższe, dlatego warto stosować jpg. Oczywiście jest też format webp, który jest najbardziej wydajny, ale nie testowałem dotychczas rozwiązań z formatem webp.

WordPress Revisions

Kiedy aktualizujemy dany wpis lub stronę w panelu admina, zapisywana jest kopia poprzedniej wersji. W ten sposób, jeśli np. mamy podstronę “O nas” i w ciągu roku edytowaliśmy ją 20 razy, wszystkie 20 kopii przechowywanych jest w bazie danych. Przechowywanie tylu kopii danego wpisu jest moim zdaniem zbędne i niepotrzebnie obciąża bazę danych.

Można to domyślne działanie WordPressa w bardzo łatwy sposób zmodyfikować, aby przechowywał on w bazie np. 5 ostatnich wersji wpisu, zamiast wszystkich. Aby to zrobić, wystarczy w pliku wp-config.php w katalogu głównym WP, nad linią:

define('WP_DEBUG', false);

Wprowadzić kod:

define( 'WP_POST_REVISIONS', 5 );

Liczba w nawiasie odpowiada za to, ile kopii danego wpisu chcemy przechowywać. Możemy też całkowicie wyłączyć przechowywanie kopii, ale odradzam to robić – niejednokrotnie te kopie zapasowe pozwoliły mi zaoszczędzić mnóstwo czasu. Jeśli jednak chcesz to wyłączyć, należy użyć następującego kodu:

define('WP_POST_REVISIONS', false);

WP-Cron

WP Cron to przydatne narzędzie, jeśli chcemy stworzyć jakieś zadania wykonywane przez WordPress i nie mamy możliwości zdefiniowania zadań cron na serwerze (albo często zmieniamy serwer i definiowanie tych zadań na serwerze byłoby niewygodne).

Ma on jednak pewną wadę i czasem warto wyłączyć tę funkcję. Tą wadą jest oczywiście dodatkowe obciążenie serwera (potencjalne spowolnienie strony). WP-Cron uruchamia się za każdym razem, gdy ktoś odwiedza naszą witrynę. W przypadku kilkudziesięciu czy nawet kilkuset wejść dziennie, może to nie robić większej różnicy, ale gdy mamy kilka, kilkanaście lub więcej tysięcy wejść dziennie, może to robić drastyczną różnicę w wykorzystaniu zasobów serwera.

Zadanie WP-Cron sprawdza nie tylko, czy nie zdefiniowaliśmy jakichś zadań w szablonie czy wtyczkach, ale też sprawdza, czy nie została wydana nowsza wersja WP.

Jeśli zdecydujecie się, aby wyłączyć WP-Cron, można to zrobić następującym kodem w pliku wp-config.php:

define('DISABLE_WP_CRON', 'true');

Kod ten najlepiej umieścić po liniach odpowiedzialnych za łączenie z bazą danych, czyli w okolicach linii 38, po następującej linijce kodu:

define('DB_COLLATE', '');

Regularne aktualizacje

Należy pamiętać, aby system WordPress aktualizować. Analogicznie wtyczki, których używamy w danej instalacji WordPress. Nie mam tu na myśli aktualizacji, jak tylko zostanie wydana nowa wersja. Takich aktualizacji odradzam, ponieważ świeżo wydane wersje systemu czy pluginów czasem zawierają błędy. Najbezpieczniejszą opcją jest aktualizacja raz na kilka tygodni, chyba że mamy informację, iż obecna wersja posiada poważne luki w bezpieczeństwie.

Jeśli zaś korzystacie z systemu WooCommerce i robiliście dużo przeróbek (korzystając z możliwości przerabiania plików szablonowych WooCommerce) tutaj aktualizacje można wykonywać nawet rzadziej, raz na kilka miesięcy. Wyjątek stanowi sytuacja, gdy są luki w bezpieczeństwie, lub wprowadzono bardzo znaczny wzrost wydajności. Wtedy warto zaktualizować od razu.

Wraz z aktualizacją systemu należy pamiętać, aby używać rekomendowanej wersji PHP dla danej wersji systemu WordPress. Jeśli posiadasz aktualną wersję systemu WordPress (20.01.2020 r.), powinieneś używać PHP w wersji 7.3 lub wyższej. Gwarantuje to większą wydajność systemu. Pod warunkiem, iż wszystko w twojej witrynie (szablon, wtyczki), są w miarę aktualne i kompatybilne z wersją PHP 7.3 lub wyższą.

Podsumowując

Artykuł ten prawdopodobnie będę rozszerzać w przyszłości o dodatkowe informacje. W tym momencie to najważniejsze wskazówki dotyczące zwiększenia wydajności strony opartej o WordPress. Mam nadzieję, że przydadzą się wam w waszej przygodzie z WordPressem.

Warto też wiedzieć, o co zadbać, aby strona internetowa była przyjazna SEO. Jeśli powyższy artykuł zainteresował Cię i rozszerzył twoją wiedzę na temat optymalizacji WordPress pod względem prędkości, na pewno z chęcią przeczytasz także ten artykuł:

Optymalizacja SEO strony internetowej (w tym stron na wordpress)

Udostępnij wpis
1 Gwiazdka2 Gwiazdki3 Gwiazdki4 Gwiazdki5 Gwiazdek (8 głosów, średnia: 5,00 z 5)
Loading...

7 komentarzy

  1. robby pisze:

    Zgadzam się w 100 procentach, jeśli chodzi o WPML. Mam ten sam problem, czasem niektóre strony w panelu potrafią mi się wczytywać kilka minut i jest to wina WPML, które się zwiesza, ciągle powoduje zacinanie się strony. Masakra. Ale tyle pracy włożyłem w stronę, że nie opłaca mi się przechodzić na inny plugin, na szczęście rzadko dokonuję edycji.

    Ale też dodam, że nie dzieje się to zawsze. Czasem jest tak, że strona nagle zamula, wszystko się wczytuje po kilka minut, ale czasem chodzi w miarę szybko. Niemniej jednak powinno chodzić szybko cały czas, serwer mam bardzo mocny.

  2. lox pisze:

    Co do WPML, to ja mam podobny problem. Tzn. zauważyłem, że jak zaczynam edycję, to jest ok. Ale im więcej rzeczy zmienię, im więcej zapiszę, tym bardziej spowalnia wszystko. I po około 10 minutach zmian w panelu dochodzi do takiego momentu, że nic się nie da robić i trzeba zaprzestać i wrócić po jakimś czasie, np. po 15 minutach.

  3. Krzysiek pisze:

    WPML jest dość zasobożerny to prawda, ale tu też może być problem wąskiego gardła po stronie serwera, czy raczej dostępnych zasobów dla procesów.

    Odnośnie rozszerzeń cache, to warto się przyjrzeć wtyczce LiteSpeed Cache. Kombajn, który przy odpowiedniej konfiguracji potrafi dać niezłego kopa.

  4. garry pisze:

    Dzięki za wszystkie informacje w artykule. Posłuchałem twoich porad i strona w pomiarze prędkości na komputery skoczyła mi 25 punktów do góry, a na mobilnych o 22 punkty do góry. Po prostu super! Sporo też zawiniał w tej kwestii mój stary hosting, musiałem się przenieść – dziękuję również za wskazówki w tym temacie.

  5. łukasheq pisze:

    Ja już zrobiłem wszystko co się da, ale nadal strona mi wolno chodzi. To chyba przez gotowy szablon, pytałem 2 niezależnych ekspertów i napisali mi mniej więcej to, co Ty powyżej na temat szablonów.

    Mam właśnie taki szablon, na którym można zrobić wszystko, kilkadziesiąt całkiem innych wyglądów. Ale mimo szybkiego serwera, wtyczek od cache i optymalizacji, bardzo lekkich zdjęć, nadal w Google PageSpeed Insights wypada słabo i gołym okiem widać, że strona się długo wczytuje. Szczególnie poważny jest problem na mobilnej.

    Znajomy mi postawił za niewielkie pieniądze stronę na nim (1200 zł), ale chyba będą to pieniądze wyrzucone w błoto.

  6. lukasz pisze:

    To ja polecam jeszcze przetestować stronę pod kątem użycia ładowanych plików CSS i JS. Szczególnie w tym stronach opartych na gotowych szablonach. Bardzo dobre narzędzie znajdziecie w dev toolsach Chrome, nazywa się Coverage ( More tools -> Coverage). W kolumnie “Unused Bytes” można zobaczyć ile tak na prawdę kodu w danym pliku jest wykorzystywane na stronie. Gdy testowałem w ten sposób strony oparte na gotowych szablonach to okazało się czasami można było śmiało usunąć całe pliki (albo raczej pominąć podczas importu).

  7. Piotrr pisze:

    Konkretny artykuł 🙂 Nie ma co się jarać wynikiem w PageSpeed i tak jest to tylko symulacja ładowania strony na internecie 3G. Narzędzia testujące głównie pozwalają zlokalizować problemy, które negatywnie wpływają na ładowanie naszej stronki. Warto wspomnieć jeszcze o wersji PHP na serwerze, bo przyspiesza ona wykonywanie skryptów. Ładowanie zasobów protokołem http/2 też jest ważne, podobnie jak eliminacja skryptów blokujących renderowanie, czy kompresja brotli. O kilku elementach się dowiedziałem niedawno z tego arta http://www.kampanieseo.pl/blog/jak-przyspieszyc-strone-internetowa takie małe uzupełnienie 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *