Optymalizacja PrestaShop 2026 – kompletny przewodnik (szybkość, cache, baza)
Optymalizacja PrestaShop w 2026 roku polega na poprawie szybkości ładowania stron poprzez odpowiednie ustawienia serwera, wykorzystanie mechanizmów cache oraz czyszczenie i optymalizację bazy danych. Dzięki temu sklep działa płynniej, co przekłada się na lepsze doświadczenie klientów i wyższą pozycję w wynikach wyszukiwania.
Dlaczego szybkość sklepu ma znaczenie
Szybkość ładowania stron ma bezpośredni wpływ na zachowanie odwiedzających. Gdy strona ładuje się wolno, użytkownicy często rezygnują z dalszego przeglądania i przechodzą do konkurencji. Szybkie działanie zwiększa szanse na ukończenie zakupu, ponieważ klient nie musi czekać na wyświetlenie produktów czy formularza zamówienia. Ponadto wyszukiwarki uwzględniają czas ładowania jako jeden z czynników rankingowych, więc lepsza wydajność może poprawić widoczność sklepu w wynikach organicznych. Warto również zauważyć, że szybkie strony lepiej radzą sobie w urządzeniach mobilnych, gdzie połączenia sieciowe są często mniej stabilne. Dzięki optymalizacji można zmniejszyć współczynnik odrzuceń i zwiększyć średnią wartość koszyka. W dłuższej perspektywie poprawa szybkości przekłada się na wyższe przychody bez konieczności zwiększania budżetu na reklamę. Dlatego warto poświęcić czas na analizę i wprowadzenie zmian, które przyspieszą działanie sklepu.
Wpływ na współczynnik konwersji
Każde dodatkowe sekundy ładowania strony mogą obniżać współczynnik konwersji o kilka procent. Klient, który czeka na wyświetlenie zdjęcia produktu, jest bardziej skłonny porzucić koszyk i poszukać oferty u innego sprzedawcy. Szybkie ładowanie zmniejsza frustrację i buduje zaufanie do marki, co zachęca do powrotu i ponownych zakupów. Testy A/B pokazują, że nawet drobne przyspieszenie o 0,5 sekundy może zwiększyć sprzedaż o zauważalny procent, szczególnie w segmentach o wysokiej konkurencji cenowej.
Wpływ na pozycjonowanie
Algorytmy Google uwzględniają sygnały związane z doświadczeniem strony, takie jak Largest Contentful Paint (LCP), First Input Delay (FID) i Cumulative Layout Shift (CLS). Sklep, który spełnia progi Core Web Vitals, otrzymuje lepszą ocenę w algorytmie rankingowym. Ponadto szybkie strony są częściej indeksowane, co oznacza, że nowe produkty i aktualizacje pojawiają się w wynikach wyszukiwania szybciej. To z kolei zwiększa ruch organiczny bez dodatkowych nakładów na kampanie płatne.
Jak mierzyć wydajność sklepu
Przed rozpoczęciem optymalizacji konieczne jest zrozumienie aktualnego stanu wydajności. Istnieje wiele darmowych i płatnych narzędzi, które pozwalają zmierzyć czas ładowania, rozmiar zasobów oraz liczbę zapytań do serwera. Narzędzia takie jak Google PageSpeed Insights, GTmetrix czy WebPageTest generują raporty zawierające wskazówki dotyczące poprawy. Warto przeprowadzić testy zarówno na komputerze stacjonarnym, jak i na urządzeniach mobilnych, aby uzyskać pełny obraz. Podczas analizy zwraca się uwagę na takie wskaźniki jak czas do pierwszego bajtu, czas do pełnego załadowania oraz liczba żądań HTTP. Raporty często wskazują na elementy, które można zoptymalizować, na przykład duże obrazy, nieoptymalizowane skrypty JavaScript czy brak nagłówków cache. Regularne monitorowanie pozwala śledzić postępy i szybko reagować na ewentualne pogorszenie wydajności spowodowane aktualizacjami modułów czy zmianami w ruchu. Dzięki systematycznym pomiarom można stworzyć bazę referencyjną, względem której będzie się oceniać skuteczność wprowadzonych działań.
Google PageSpeed Insights
Narzędzie dostarcza ocenę zarówno dla wersji mobilnej, jak i desktopowej, wraz z listą możliwości optymalizacji. Wyniki są podzielone na sekcje: „ możliwości ” i „ diagnostyka ”. W sekcji możliwości znajdują się sugestie takie jak wykorzystanie cache przeglądarki, optymalizacja obrazów czy eliminacja zasobów blokujących renderowanie. Diagnostyka pokazuje, które zasoby są największym obciążeniem dla głównego wątku. Regularne sprawdzanie tego raportu pozwala śledzić trendy i priorytetyzować działania.
GTmetrix i WebPageTest
GTmetrix łączy dane z Lighthouse i WebPageTest, oferując wykresy wodospadowe, które pokazują kolejność ładowania poszczególnych plików. Dzięki temu można zidentyfikować, które żądania są najwolniejsze i czy występują opóźnienia spowodowane przez serwer lub sieć. WebPageTest umożliwia symulację połączeń o różnej przepustowości i opóźnieniu, co jest przydatne przy optymalizacji dla rynków o słabszej infrastrukturze internetowej. Oba narzędzia pozwalają zapisywać historię testów, co ułatwia porównanie efektów przed i po wprowadzeniu zmian.
Monitorowanie logów serwera
Analiza logów dostępu i błędów serwera WWW (Apache lub Nginx) dostarcza informacji o czasie odpowiedzi dla poszczególnych żądań oraz o kodach statusu. Narzędzia takie jak GoAccess lub AWStats generują raporty dotyczące najwolniejszych ścieżek, częstotliwości błędów 5xx oraz rozmiaru przesyłanych danych. Regularne przeglądanie tych logów pomaga wykryć problemy, które nie są widoczne w testach syntetycznych, na przykład wzrost czasu odpowiedzi spowodowany dużą liczbą jednoczesnych połączeń.
Optymalizacja środowiska serwerowego
Wybór odpowiedniego hostingu ma kluczowe znaczenie dla szybkości działania sklepu. Serwer powinien zapewniać wystarczającą moc obliczeniową, szybką pamięć RAM oraz szybki dysk SSD. Warto zwrócić uwagę na wersję PHP, ponieważ nowsze release często wprowadzają poprawki wydajnościowe i lepsze zarządzanie pamięcią. Włączenie opcode cache, takiego jak OPcache, pozwala na przechowywanie skompilowanego kodu PHP w pamięci, co eliminuje potrzebę ponownego kompilowania przy każdym żądaniu. Konfiguracja serwera WWW, niezależnie czy używa się Apache czy Nginx, powinna uwzględniać odpowiednie buforowanie statycznych plików oraz kompresję gzip lub Brotli. Dodatkowo warto rozważyć wykorzystanie sieci dostarczania treści (CDN), która rozprowadza kopie statycznych zasobów na serwerach położonych bliżej użytkowników. Dzięki temu odległość między serwerem a przeglądarką zmniejsza się, co skraca czas ładowania. Regularne aktualizacje oprogramowania serwerowego oraz monitorowanie obciążenia pozwalają utrzymać optymalne warunki pracy sklepu.
Wybór wersji PHP i OPcache
PHP 8.2 lub nowsze oferuje lepszą obsługę JIT oraz ulepszone zarządzanie pamięcią, co może skrócić czas wykonania skryptów nawet o 10‑15 % w porównaniu z PHP 7.4. Po aktualizacji warto włączyć OPcache i ustawić odpowiednie wartości dyrektyw: opcache.memory_consumption na 128 MB lub więcej, opcache.max_accelerated_files na 10000 oraz opcache.validate_timestamps na 0 w środowisku produkcyjnym (z ręcznym czyszczeniem po deployu). Takie ustawienia zmniejszają obciążenie CPU i przyspiesza odpowiedź na żądania.
Konfiguracja Apache
W pliku .htaccess lub w konfiguracji wirtualnego hosta warto włączyć mod_expires i ustawić długie okresy ważności dla plików statycznych (obrazy, CSS, JS) na przykład „ExpiresDefault „access plus 1 month”“. Mod_deflate lub mod_brotli umożliwia kompresję tekstowych zasobów, co zmniejsza rozmiar przesyłanych danych. Dodatkowo warto ustawić KeepAlive On oraz odpowiednio wysokie wartości MaxKeepAliveRequests i KeepAliveTimeout, aby umożliwić ponowne wykorzystanie połączenia TCP dla wielu żądań od tego samego klienta.
Konfiguracja Nginx
W bloku server można dodać dyrektywę gzip on; oraz gzip_types text/plain text/css application/json application/javascript text/xml application/xml;. Jeśli dostępny jest moduł Brotli, warto włączyć brotli on; i ustawić odpowiednie poziomy kompresji. Dodatkowo można skonfigurować buforowanie proxy lub fastcgi, aby przechowywać odpowiedzi PHP na krótki czas (np. fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=PHP:10m inactive=60m;). Takie podejście zmniejsza liczbę zapytań do PHP‑FPM i przyspiesza dostarczanie stron.
Wykorzystanie CDN
Sieć CDN powinna być skonfigurowana tak, aby obsługiwała wszystkie statyczne zasoby: obrazy, pliki CSS, JavaScript oraz czcionki. Warto wybrać dostawcę z punktami obecności w regionach, skąd pochodzi większość klientów. Po włączeniu CDN należy ustawić odpowiednie nagłówki Cache-Control (np. max‑age=31536000) oraz zapewnić, że wersje plików są unikalne (np. poprzez dodanie wersji w nazwie pliku lub parametru query string). Dzięki temu przeglądarka i serwery CDN będą mogły skutecznie wykorzystywać pamięć podręczną, a aktualizacje będą widoczne po zmianie nazwy pliku.
Monitorowanie obciążenia
Na serwerze Linux można używać poleceń top, htop oraz iostat do obserwacji wykorzystania CPU, pamięci i dysku w czasie rzeczywistym. Warto skonfigurować progi alarmowe w systemie monitoringu (np. Nagios, Zabbix lub Prometheus) które powiadomią administratora, gdy wykorzystanie przekroczy 80 % zasobów. Regularne raporty pomagają planować skalowanie pionowe (więcej RAM lub szybszy dysk) lub poziome (dodanie kolejnego serwera aplikacji) przed wystąpieniem spadku wydajności.
Mechanizmy cache w PrestaShop
Cache to technika przechowywania już przetworzonych danych w celu szybszego ich udostępnienia przy kolejnych żądaniach. PrestaShop oferuje kilka wbudowanych mechanizmów cache, które można aktywować w panelu administracyjnym. Cache stron pozwala na przechowywanie gotowego kodu HTML całych stron, co znacznie redukuje czas generowania przy kolejnych odwiedzinach tego samego adresu. Cache obiektów natomiast przechowuje wyniki kosztownych operacji, takich jak zapytania do bazy danych czy wywołania zewnętrznych interfejsów API. Do przechowywania cache można wykorzystać różne backendi, na przykład pliki systemowe, APCu, Memcached lub Redis. Wybór odpowiedniego backendu zależy od dostępnych zasobów serwera oraz wymagań co do szybkości i skalowalności. Ważne jest również odpowiednie ustawienie czasu ważności cache, aby zapewnić, że użytkownicy otrzymują aktualne treści, jednocześnie korzystając z przyspieszenia. Regularne czyszczenie cache po aktualizacji produktów, modułów czy szablonów zapobiega wyświetlaniu nieaktualnych danych. Dzięki właściwej konfiguracji cache można osiągnąć znaczną redukcję czasu odpowiedzi serwera.
Cache stron (HTML)
W panelu administracyjnym przechodzimy do „Zaawansowane parametry → Wydajność” i włączamy opcję „Cache”. Po aktywacji PrestaShop zapisuje wygenerowane HTML każdej strony w wybranym backendzie. Przy kolejnym wejściu na tę samą adres URL serwer odczytuje gotowy plik zamiast uruchamiać pełny cykl renderowania szablonu i wykonywania zapytań do bazy. Efekt jest szczególnie widoczny na stronach kategorii i produktów, które są często odwiedzane przez wielu użytkowników. Warto ustawić czas życia cache na kilka godzin dla stron statycznych i krótszy okres (np. 15 minut) dla stron z często zmieniającą się ceną lub stanem magazynowym.
Cache obiektów
Cache obiektów przechowuje wyniki konkretnych wywołań funkcji lub metod, na przykład wynik zapytania SELECT pobierającego listę producentów. W panelu wybieramy backend obiektów (APCu, Memcached lub Redis) oraz definiujemy czas życia. Dzięki temu kosztowne operacje są wykonywane tylko raz w danym przedziale czasowym, a kolejne żądania odczytują już przygotowany wynik. Warto monitorować wskaźniki trafień (hit ratio) w wybranym backendzie – wartość powyżej 80 % wskazuje na dobrze dobrany rozmiar pamięci cache.
Cache szablonów i SQL
PrestaShop umożliwia również cache’owanie skompilowanych szablonów Smarty oraz wyników zapytań SQL. Cache szablonów przyspiesza renderowanie stron poprzez unikanie ponownej kompilacji plików .tpl. Cache SQL jest szczególnie przydatny przy złożonych zapytaniach łączących wiele tabel (np. zamówienia z adresami i produktami). Oba rodzaje cache można włączyć osobno w ustawieniach wydajności, a ich skuteczność zwiększa się przy użyciu szybkiego backendu takiego jak Redis, który oferuje niskie opóźnienia odczytu i zapisu.
Wyбор backendu i konfiguracja w panelu
Jeśli serwer posiada wystarczającą ilość RAM, Redis jest często najlepszym wyborem dzięki swojej strukturze klucz‑wartość i możliwości przechowywania różnych typów danych (stringi, hasety, listy). W panelu wybieramy Redis, podajemy adres serwera (np. 127.0.0.1:6379) oraz ewentualnie hasło. W przypadku ograniczonej pamięci można użyć APCu, który działa lokalnie na każdym procesie PHP‑FPM, ale nie udostępnia danych między procesami – w takiej sytuacji warto rozważyć równoważenie obciążenia z sticky sessions lub przejście na Memcached/Redis. Po zapisaniu zmian należy wyczyścić cały cache, aby upewnić się, że nowe ustawienia zostaną przyjęte.
Czyszczenie i podgrzewanie cache
Po każdej aktualizacji produktu, kategorii lub modułu zaleca się ręczne wyczyszczenie cache poprzez panel lub konsolę komendy `php bin/console cache:clear`. Aby uniknąć spadku wydajności bezpośrednio po czyszczeniu, można wykonać podgrzewanie cache (cache warming) – czyli automatyczne odwiedzenie najważniejszych stron (strona główna, kategorie topowe, produkty bestsellerowe) przy pomocy skryptu lub narzędzia takiego jak `wget` w pętli. Dzięki temu pierwsze rzeczywiste żądania od użytkowników trafiają już do przygotowanej pamięci podręcznej, co minimalizuje opóźnienia.
Optymalizacja bazy danych
Baza danych stanowi serce sklepu PrestaShop, dlatego jej wydajność ma bezpośredni wpływ na szybkość działania całego systemu. Regularne czyszczenie tabel tymczasowych, historii połączeń oraz logów pozwala zmniejszyć rozmiar bazy i przyspieszyć wykonywanie zapytań. Warto również sprawdzić, czy tabele posiadają odpowiednie indeksy, które przysyszukują wyszukiwanie rekordów. Nieoptymalizowane zapytania, które skanują całe tabele, mogą znacząco obciążać serwer, dlatego warto analizować wolne zapytania przy pomocy narzędzi takich jak slow query log. Optymalizacja zapytań często polega na przepisaniu ich w sposób bardziej efektywny, na przykład przez ograniczenie liczby zwracanych kolumn lub zastosowanie odpowiednich klauzul WHERE. Dodatkowo warto rozważyć partycjonowanie dużych tabel, co pozwala na szybszy dostęp do_subset danych. Regularne tworzenie kopii zapasowych zapewnia bezpieczeństwo danych, a jednocześnie umożliwia testowanie zmian w środowisku deweloperskim bez ryzyka dla sklepu produkcyjnego. Dzięki systematycznej konserwacji bazy danych można utrzymać jej wydajność na wysokim poziomie nawet przy rosnącej liczbie produktów i zamówień.
Czyszczenie tabel tymczasowych i archiwizacja
Tabele takie jak `ps_connections`, `ps_connections_page` czy `ps_search_index` mogą rosnąć w czasie, zwłaszcza w sklepach o dużym ruchu. Zaleca się okresowe usuwanie rekordów starszych niż określony okres (np. 30 dni) przy pomocy zapytania DELETE z odpowiednim warunkiem DATETIME. Dodatkowo warto rozważyć archiwizację starszych zamówień do osobnej tabeli lub bazy danych analitycznej, co zmniejsza obciążenie tabeli głównej `ps_orders` i przyspiesza operacje związane z przetwarzaniem nowych zamówień.
Indeksowanie i analiza slow query log
Włączamy slow query log w konfiguracji MySQL/MariaDB (np. `slow_query_log = 1`, `long_query_time = 1`). Następnie analizujemy plik logu za pomocą narzędzia `pt-query-digest` lub `mysqldumpslow` aby zidentyfikować zapytania przekraczające ustawiony próg czasu. Często pojawiają się zapytania bez indeksu na kolumnach używanych w klauzulach WHERE lub JOIN. Dodanie odpowiedniego indeksu (np. `ALTER TABLE ps_product ADD INDEX idx_price (price);`) może zmniejszyć czas wykonania z sekund do milisekund. Należy jednak pamiętać, że każdy dodatkowy indeks zwiększa koszt operacji INSERT/UPDATE, więc warto zachować równowagę.
Optymalizacja zapytań
Przy przeglądzie kodu własnych modułów lub szablonów warto zwrócić uwagę na zapytania typu `SELECT * FROM ps_product WHERE id_category = X`. Zamiast pobierać wszystkie kolumny lepiej określić tylko potrzebne pola (np. `SELECT id_product, name, price FROM ps_product WHERE id_category = X`). Ponadto warto unikać funkcji w klauzuli WHERE, które uniemożliwiają wykorzystanie indeksu (np. `WHERE DATE(date_add) = CURDATE()` lepiej zamienić na `WHERE date_add >= CURDATE() AND date_add < DATE_ADD(CURDATE(), INTERVAL 1 DAY)`). Takie zmniejszenie ilości przetwarzanych danych bezpośrednio przekłada się na krótszy czas odpowiedzi serwera.
Partycjonowanie dużych tabel
Tabele zawierające historię zamówień (`ps_orders`) lub szczegółów zamówienia (`ps_order_detail`) mogą osiągać miliony wierszy. Partycjonowanie według zakresu dat (np. miesięczne) pozwala silnikowi bazy danych skanować tylko odpowiednie partycje przy wykonywaniu zapytań o ostatnie miesiące. Przykładowa komenda: `ALTER TABLE ps_orders PARTITION BY RANGE (YEAR(date_add)*100 + MONTH(date_add)) (PARTITION p202301 VALUES LESS THAN (202302), PARTITION p202302 VALUES LESS THAN (202303), …);` Po wprowadzeniu partycjonowania warto aktualizować statystyki tabeli (`ANALYZE TABLE ps_orders;`) aby optymalizator mógł wybrać najlepszy plan wykonania.
Ustawienia MySQL/MariaDB
W pliku konfiguracyjnym (`my.cnf`) warto zwiększyć wartość `innodb_buffer_pool_size` do około 60‑70 % dostępnej pamięci RAM, co pozwala na buforowanie częściej używanych stron indeksów i danych. Parametr `query_cache_type` lepiej ustawić na 0 (wyłączony) ponieważ w nowszych wersjach MySQL pamięć podręczna zapytań może powodować więcej problemów niż korzyści. Dodatkowo warto włączyć `innodb_flush_log_at_trx_commit = 2` oraz `sync_binlog = 0` na serwerach replikacji, co zmniejsza liczbę operacji zapisu na dysku przy zachowaniu wystarczającej trwałości dla większości scenariuszy e‑commerce. Po zmianie konfiguracji konieczny jest restart serwera bazy danych lub przeładowanie ustawień przy pomocy `SET GLOBAL` gdzie to możliwe.
Najczęstsze pytania (FAQ)
Czy optymalizacja PrestaShop wymaga zaawansowanej wiedzy technicznej?
Optymalizacja można przeprowadzać na różnych poziomach zaawansowania. Podstawowe działania, takie jak włączenie cache, aktualizacja PHP czy kompresja obrazów, są dostępne poprzez panel administracyjny i nie wymagają głębokiej znajomości kodu. Bardziej zaawansowane kroki, takie jak konfiguracja serwera WWW, tuning bazy danych czy wdrożenie Redis, mogą wymagać współpracy z administratorem systemu lub programistą. Warto zacząć od prostych zmian i monitorować ich wpływ, a następnie stopniowo wprowadzać bardziej zaawansowane modyfikacje w zależności od potrzeb i dostępnych zasobów.
Jak często należy przeprowadzać audyt wydajności sklepu?
Audyt wydajności warto przeprowadzać regularnie, szczególnie po każdej większej aktualizacji sklepu, dodaniu nowych modułów lub zmianie szablonu. Dodatkowo warto monitorować wskaźniki wydajności co miesiąc, aby szybko wykryć ewentualne pogorszenie spowodowane wzrostem ruchu lub zmianami w zachowaniu użytkowników. Jeśli sklep działa w branży o dużym ruchu sezonowym, warto zwiększyć częstotliwość audytów przed okresami szczytowymi, aby mieć pewność, że serwer jest przygotowany na większe obciążenie.
Czy korzystanie z zewnętrznych usług CDN jest konieczne?
Korzystanie z CDN nie jest obowiązkowe, ale może znacząco poprawić czas ładowania dla użytkowników znajdujących się daleko od lokalizacji serwera głównego. CDN przechowuje kopie statycznych plików, takich jak obrazy, arkusze stylów czy skrypty, na serwerach rozmieszczonych w różnych lokalizacjach geograficznych. Dzięki temu odległość między użytkownikiem a serwerem dostarczającym zawartość jest mniejsza, co przekłada się na szybsze pobieranie zasobów. Jeśli większość klientów pochodzi z jednego regionu i serwer znajduje się blisko tej lokalizacji, korzyści z CDN mogą być mniejsze, ale w przypadku międzynarodowej sprzedaży warto rozważyć jej wdrożenie.
Czy optymalizacja bazy danych może spowodować utratę danych?
Optymalizacja bazy danych, gdy jest przeprowadzana zgodnie z najlepszymi praktykami, nie prowadzi do utraty danych. Operacje takie jak dodawanie indeksów, czyszczenie tabel tymczasowych czy optymalizacja zapytań są bezpieczne, pod warunkiem że wykonuje się je na kopii zapasowej lub w środowisku testowym przed zastosowaniem na produkcji. Zawsze zaleca się wykonanie pełnej kopii zapasowej przed przystąpieniem do jakichkolwiek zmian w strukturze bazy danych, aby mieć możliwość przywrócenia stanu sprzed modyfikacji w razie potrzeby.
Jakie narzędzia pomagają w identyfikacji wąskich gardeł w sklepie?
Do identyfikacji wąskich gardeł można wykorzystać zarówno narzędzia zewnętrzne, jak i wbudowane funkcje serwera. Zewnętrzne rozwiązania takie jak New Relic, Blackfire czy Tideways pozwalają na profilowanie kodu PHP i monitorowanie czasu wykonywania poszczególnych funkcji. Poziom serwera oferuje narzędzia takie jak mysqltuner dla MySQL czy pgBadger dla PostgreSQL, które analizują logi bazy danych i wskazują na nieefektywne zapytania. Dodatkowo warto korzystać z raportów generowanych przez narzędzia do testowania szybkości stron, które wskazują na elementy powodujące opóźnienia, na przykład duże obrazy czy brak nagłówków cache.
Czy istnieją uniwersalne zasady optymalizacji stosowane niezależnie od wersji PrestaShop?
Tak, istnieje kilka zasad, które są skuteczne niezależnie od wersji platformy. Należy zapewnić aktualne środowisko PHP, wykorzystać mechanizmy cache, zoptymalizować obrazy poprzez kompresję i odpowiednie formaty, włączyć kompresję gzip lub Brotli na serwerze oraz zadbać o minimalną liczbę zapytań do bazy danych poprzez odpowiednie indeksy i efektywne kodowanie modułów. Stosowanie tych praktyk pomaga utrzymać wysoką wydajność niezależnie od tego, czy sklep działa na wersji 1.6, 1.7, 8 czy 9. Regularne przeglądanie i dostosowywanie tych elementów pozwala na utrzymanie optymalnej pracy sklepu w dłuższym okresie.
Masz pytania związane z tym tematem? Skontaktuj się ze mną:
Chętnie Ci pomogę w tym zakresie
Email: [email protected]
Telefon: +48 888 830 888
Strona: https://helpguru.eu