SEO PrestaShop: Techniczny przewodnik po URL-ach, Schema, Sitemapach i Core Web Vitals
Kompletny przewodnik SEO dla PrestaShop — przyjazne URL, tagi canonical, hreflang, dane strukturalne, mapy XML, Core Web Vitals i kontrola indeksacji.
SEO w PrestaShop to konfiguracja, nie magia
Większość sklepów PrestaShop marnuje 30-50% potencjału ruchu organicznego — nie z powodu brakujących treści, ale przez źle skonfigurowane adresy URL, brakujące tagi canonical, uszkodzone dane strukturalne i marnowanie budżetu indeksowania. To jest techniczny poradnik z dokładnymi ścieżkami ustawień, tabelami bazy danych i fragmentami kodu dla każdego zalecenia.
Sklep z 10 000 produktów i prawidłowym technicznym SEO pokona w rankingu konkurenta z 50 000 produktów i bałaganem zduplikowanych URL-i. Chodzi o eliminowanie barier, nie o sztuczki.
Struktura URL i przyjazne adresy
Przejdź do Shop Parameters → Traffic & SEO → SEO & URLs i włącz Friendly URL. To przepisuje adresy URL z index.php?id_product=42 na /mens-leather-wallet-42.html. Na Apache PrestaShop generuje .htaccess automatycznie. Na Nginx potrzebujesz ręcznych reguł rewrite.
Po włączeniu kliknij Generate .htaccess file. Jeśli Twój sklep jest w podkatalogu, sprawdź, czy RewriteBase odpowiada Twojej ścieżce.
Usuwanie ID z URL-i (PS 8+)
W Shop Parameters → Traffic & SEO znajdź Route to products i Route to categories:
# Default (with ID)
{category:/}{id}-{rewrite}.html
# Clean URL (no ID) — PS 8+
{category:/}{rewrite}.html
Usunięcie ID daje czystsze URL-e, ale stwarza ryzyko: PrestaShop rozpoznaje URL-e przez ps_product_lang.link_rewrite. Jeśli dwa produkty mają ten sam slug, wygrywa pierwsze dopasowanie.
Przed usunięciem ID sprawdź zduplikowane slugi:SELECT link_rewrite, id_lang, COUNT(*) as cnt FROM ps_product_lang GROUP BY link_rewrite, id_lang HAVING cnt > 1;
Najpierw napraw wszystkie duplikaty, w przeciwnym razie produkty staną się nieosiągalne.
Najlepsze praktyki dotyczące URL-i
- Końcowe ukośniki: Kategorie kończą się na
/, produkty na.html. Spójność w ramach każdego typu ma znaczenie — jeśli zarówno/shoesjak i/shoes/zwracają 200, masz zduplikowaną treść. Wymuś jeden wzorzec przekierowaniem 301. - Krótkie slugi: 3-5 słów.
/mens-leather-wallet.htmljest lepsze niż/mens-genuine-italian-leather-bifold-wallet-brown.html. - Łączniki, nie podkreślenia: Google traktuje łączniki jako separatory słów. PrestaShop robi to domyślnie.
- Nigdy nie zmieniaj działających URL-i bez przekierowań: Użyj strony SEO & URLs, aby dodać przekierowania 301 dla starych URL-i.
Meta tagi i tytuły
Każda strona w PrestaShop może mieć własny meta tytuł i opis. Dane są przechowywane dla każdego języka w tabelach _lang:
# Products: ps_product_lang → meta_title, meta_description, link_rewrite
# Categories: ps_category_lang → meta_title, meta_description, link_rewrite
# CMS pages: ps_cms_lang → meta_title, meta_description, link_rewrite
# Static pages: ps_meta_lang → title, description, url_rewrite
Jeśli produkt nie ma własnego meta tytułu, PrestaShop używa nazwy produktu — "Classic T-Shirt" otrzyma <title>Classic T-Shirt</title>, bez marki i nazwy sklepu.
Wzorce meta tytułów
Google wyświetla około 50-60 znaków. Umieszczaj ważne słowa na początku, nazwę sklepu na końcu:
# Product: Primary Keyword - Key Feature | Store Name
# Category: Category Name - Differentiator | Store Name
# CMS: Page Topic - Store Name
Meta opis
Meta opisy nie wpływają bezpośrednio na rankingi, ale mają ogromny wpływ na współczynnik kllikalności (CTR). Google wyświetla około 155 znaków na desktopie i około 120 na urządzeniach mobilnych. Dodaj wezwanie do działania, wspomij o cenie lub dostępności i unikaj duplikatów wśród produktów.
Jeśli masz tysiące produktów i nie jesteś w stanie napisać indywidualnych meta opisów, zostaw je puste zamiast wypełniać ogólnym tekstem. Google automatycznie wygeneruje fragment z treści strony, który jest zwykle bardziej trafny niż szablon.
Masowe aktualizacje meta danych
Dla dużych katalogów użyj SQL, aby ustawić szablonowe meta tytuły. Połącz ps_product_lang z ps_category_lang po domyślnej kategorii i użyj CONCAT() do połączenia nazwy produktu z nazwą kategorii. Zawsze najpierw SELECT, aby zobaczyć podgląd, zawsze wykonaj kopię zapasową przed masowymi aktualizacjami.
Adresy kanoniczne (Canonical URLs)
PrestaShop generuje tagi canonical automatycznie przez head.tpl motywu. Produkty wskazują na bazowy URL produktu, kategorie na niefiltrowaną bazę. To obsługuje typowe duplikaty, ale kilka problemów pozostaje:
- Paginacja:
/wallets/?page=2i/wallets/?page=3są domyślnie indeksowalne. Każda strona paginacji powinna mieć self-referencing canonical. Użyjnoindexna głębokich stronach, jeśli nie chcesz, aby były rankowane indywidualnie. - Sortowanie:
?order=product.price.asctworzy indeksowalne duplikaty. Zablokuj w robots.txt lub dodaj noindex. - Nawigacja fasetowa: Parametry filtrów tworzą kombinatoryczną eksplozję URL-i. Zablokuj URL-e filtrów w robots.txt ORAZ dodaj noindex do filtrowanych stron.
- Produkt w wielu kategoriach: PrestaShop kanonizuje do domyślnej kategorii — to prawidłowe zachowanie.
Google wycofał rel="prev"/rel="next" w 2019 roku. Skup się na tagach canonical i noindex do kontroli paginacji.
Canonical w multistore
Każdy sklep powinien kanonizować do własnej domeny — nigdy między domenami, chyba że jeden sklep jest celowo podrzędny. PrestaShop obsługuje to prawidłowo, gdy sklepy mają oddzielne domeny. Szczegóły znajdziesz w naszym poradniku multistore.
Hreflang dla sklepów wielojęzycznych
Jeśli Twój sklep obsługuje wiele języków, hreflang informuje Google, którą wersję pokazać na każdym rynku. Bez nich Google wybiera jedną wersję i tłumi pozostałe.
<link rel="alternate" hreflang="en" href="https://shop.com/en/wallet.html">
<link rel="alternate" hreflang="fr" href="https://shop.com/fr/portefeuille.html">
<link rel="alternate" hreflang="x-default" href="https://shop.com/en/wallet.html">
Używaj kodów język-kraj (en-GB, en-US), gdy masz ceny lub treści specyficzne dla regionu. Używaj kodów samego języka (en, fr) w pozostałych przypadkach. Zawsze dołączaj x-default jako wersję zapasową.
Częste błędy w hreflang
- Brakujące tagi zwrotne: Strona A wskazuje na B, ale B nie wskazuje z powrotem na A. Google ignoruje oba.
- Złe kody:
en-UKjest błędne (poprawnie:en-GB). Używaj ISO 639-1 dla języka, ISO 3166-1 Alpha 2 dla kraju. - Hreflang na niekanonicznych URL-ach: Jeśli strona ma canonical wskazujący gdzie indziej, jej hreflang jest ignorowany.
- Hreflang z noindex: Strony z noindex nie mogą być celami hreflang.
Zweryfikuj za pomocą walidatora hreflang TechnicalSEO.com. Jeden uszkodzony tag zwrotny unieważnia cały klaster dla danej strony.
W przypadku multistore z oddzielnymi domenami dla każdego języka, międzydomenowy hreflang wymaga modyfikacji head.tpl, aby odpytywać ps_shop_url i budować URL-e dla każdego sklepu — domyślne rozwiązanie obsługuje tylko języki w ramach jednego sklepu.
Dane strukturalne / Schema.org
Dane strukturalne umożliwiają wyniki rozszerzone — oceny gwiazdkowe, etykiety cenowe, wskaźniki dostępności w wynikach wyszukiwania. Motywy PrestaShop zawierają podstawowy schemat Product, ale jest on często niekompletny.
Schemat Product
Każda strona produktu potrzebuje kompletnego schematu Product + Offer. Minimalne pola wymagane przez Google do wyników rozszerzonych: name, image, price, priceCurrency, availability. Brak któregokolwiek i wyniki rozszerzone się nie pojawią. Dołącz sku, brand i aggregateRating, gdy są dostępne.
W klasycznych motywach schemat produktu znajduje się w templates/catalog/product.tpl lub w pliku cząstkowym jak _partials/microdata/product-jsonld.tpl. W Hummingbird (PS 8+/9.x) sprawdź templates/catalog/_partials/product-details.tpl. Implementacje różnią się w zależności od motywu.
Schemat BreadcrumbList i Organization
Okruszki nawigacyjne w wynikach wyszukiwania pokazują hierarchię strony. Moduł breadcrumb w PrestaShop powinien automatycznie generować JSON-LD BreadcrumbList — zweryfikuj za pomocą Rich Results Test. Dodaj schemat Organization na całej stronie przez hook displayHeader z nazwą firmy, URL-em logo, danymi kontaktowymi i linkami do mediów społecznościowych.
Schemat FAQ i niestandardowy JSON-LD
Strony CMS z treścią w formacie pytań i odpowiedzi mogą używać schematu FAQPage do rozszerzonych fragmentów. Dla dowolnego typu schematu, którego Twój motyw nie obsługuje, wstrzyknij JSON-LD przez hook displayHeader: wykryj typ kontrolera, zbuduj tablicę schematu i wyprowadź ją za pomocą json_encode() opakowanego w tag <script type="application/ld+json">.
Zawsze waliduj dane strukturalne za pomocą testu wyników rozszerzonych Google. Niekompletny schemat jest gorszy niż brak schematu — sygnalizuje niską jakość.
Mapa strony XML
PrestaShop jest dostarczany z modułem Google Sitemap (gsitemap). Skonfiguruj w Modules → Module Manager. Uwzględnij produkty, kategorie i strony CMS. Wyklucz dostawców, chyba że mają wartość dla klientów. Moduł generuje sitemap.xml w katalogu głównym, dzieląc go na wiele plików dla dużych katalogów.
Zautomatyzuj regenerację codziennym cronem wywołującym modules/gsitemap/gsitemap-cron.php z Twoim kluczem bezpieczeństwa. Zgłoś do Google Search Console i monitoruj raport pokrycia. W multistore każdy sklep otrzymuje własną mapę strony z domeną tego sklepu automatycznie.
Mapa strony to sugestia, nie gwarancja. Uwzględniaj tylko kanoniczne, indeksowalne URL-e, które naprawdę chcesz rankować. Żadnych wyłączonych produktów, stron filtrowanych, URL-i koszyka/zamówienia.
Robots.txt
Wygeneruj robots.txt z Shop Parameters → Traffic & SEO → Robots file generation. Domyślne ustawienia blokują katalogi administratora, ale pomijają ważne wzorce. Dodaj te reguły poza domyślnymi:
# Block shopping flow (no SEO value)
Disallow: /cart
Disallow: /order
Disallow: /my-account
Disallow: /search
# Block filtered/sorted duplicates (crawl budget killers)
Disallow: /*?order=
Disallow: /*?q=
Disallow: /*&order=
Disallow: /*&q=
Sitemap: https://your-domain.com/sitemap.xml
Blokowanie parametrów filtrów zapobiega indeksowaniu kombinatorycznych zduplikowanych stron, oszczędzając budżet indeksowania dla prawdziwych stron produktów i kategorii.
robots.txt blokuje indeksowanie, nie indeksację. Jeśli zewnętrzna strona linkuje do zablokowanego URL-a, Google może go nadal zaindeksować bez indeksowania. Aby naprawdę usunąć z indeksu, użyj meta tagównoindexlub nagłówkówX-Robots-Tag.
SEO obrazów
Zdjęcia produktów generują znaczący ruch z Google Images. PrestaShop automatycznie generuje tagi alt z nazwy produktu i przepisuje nazwy plików na podstawie link_rewrite. Skonfiguruj szablon tekstu alt w Shop Parameters → Traffic & SEO — rozważ dodanie kategorii lub marki do domyślnego wzorca.
Nowoczesne formaty: PS 8+ obsługuje WebP, PS 9.x dodaje AVIF. Włącz w Design → Image Settings, ustaw jakość na 80-85 i zregeneruj miniaturki. Leniwe ładowanie: nowoczesne motywy dodają loading="lazy" poniżej zgięcia strony. Nigdy nie stosuj leniwego ładowania do głównego zdjęcia produktu — to Twój element LCP. Mapa strony obrazów: moduł gsitemap może uwzględniać zdjęcia produktów, aby pomóc Google odkryć obrazy nieznalezione podczas zwykłego indeksowania.
Core Web Vitals
Core Web Vitals są potwierdzonym czynnikiem rankingowym. PrestaShop ma specyficzne wzorce, które powodują niepowodzenia.
CLS (Layout Shift) — Cel: poniżej 0,1
Typowe przyczyny w PrestaShop: obrazy bez atrybutów width/height, czcionki webowe powodujące FOUT (napraw za pomocą font-display: swap + preload), banery ładowane przez JS przesuwające treść w dół (napraw za pomocą CSS min-height) oraz paski zgody na pliki cookie wstawiane do przepływu dokumentu zamiast użycia pozycjonowania fixed/sticky.
LCP (Largest Contentful Paint) — Cel: poniżej 2,5s
Na stronach produktów LCP to główne zdjęcie produktu. Kompresuj agresywnie, używaj WebP/AVIF i preload z <link rel="preload" as="image" fetchpriority="high">. Nigdy nie stosuj leniwego ładowania do obrazu LCP. Jeśli TTFB serwera przekracza 1,5s, żadna sztuczka frontendowa nie pomoże — zobacz nasz poradnik wydajności.
INP (Interaction to Next Paint) — Cel: poniżej 200ms
Każdy moduł podłączony do hooków displayHeader/displayFooter dodaje JS blokujący główny wątek. Skrypty firm trzecich (analityka, czat, piksele) powinny być ładowane z defer/async lub przez Tag Manager. Mierz CWV w danych terenowych w PageSpeed Insights — jeśli terenowy INP jest zły, ale laboratoryjny jest w porządku, skrypty firm trzecich są prawdopodobną przyczyną.
Szybkość strony a SEO
Aby dokładnie poznać optymalizację serwera, cache i infrastrukturę, zobacz nasz poradnik optymalizacji wydajności. Oto czynniki szybkości krytyczne dla SEO:
CCC (Combine, Compress, Cache)
Włącz wszystkie opcje w Advanced Parameters → Performance. CCC redukuje liczbę zapytań HTTP z 20-40 do 3-5 dla CSS/JS, często oszczędzając 1-2 sekundy przy pierwszej wizycie.
Ładowanie czcionek
Hostuj czcionki samodzielnie (eliminuje zapytanie DNS do fonts.googleapis.com), używaj font-display: swap, załaduj wstępnie główną czcionkę body za pomocą <link rel="preload" as="font" type="font/woff2" crossorigin> i usuń nieużywane zakresy znaków (subsetting).
Strategia JS modułów
Moduły powinny rejestrować JS z 'attributes' => 'defer' w swoich wywołaniach registerJavascript(). JS z defer/async pozostaje oddzielny od paczek CCC (celowo), ale nie blokuje renderowania. Przejrzyj kod modułów, które używają pozycji bottom bez defer.
Linkowanie wewnętrzne
Twoja struktura kategorii TO Twoja architektura linkowania wewnętrznego. Każda strona kategorii jest potencjalną stroną rankującą na klaster słów kluczowych.
Hierarchia kategorii
Strukturyzuj kategorie tak, aby odpowiadały intencjom wyszukiwania: "Buty" celuje w ogólne hasło, "Męskie buty do biegania" celuje w długi ogon (long tail). Płaska kategoria z 1000 produktów marnuje możliwość rankowania na dziesiątki konkretnych słów kluczowych. Drzewo kategorii PrestaShop tworzy hierarchię linkowania automatycznie przez okruszki nawigacyjne i menu nawigacji.
Okruszki nawigacyjne (Breadcrumbs)
Upewnij się, że okruszki nawigacyjne pojawiają się na każdym typie strony. Gdy produkt istnieje w wielu kategoriach, PrestaShop używa domyślnej kategorii dla ścieżki okruszków. Ustaw domyślną kategorię każdego produktu na jego najbardziej szczegółową odpowiednią kategorię.
Sprzedaż krzyżowa (Cross-Selling)
Akcesoria i powiązane produkty tworzą linki wewnętrzne między stronami produktów — dystrybując wartość linków, jednocześnie zwiększając średnią wartość zamówienia. Skonfiguruj w Catalog → Products → Associated products. Nie pozwól, aby strony CMS stały się sierocinami — linkuj przewodniki rozmiarowe i polityki wysyłki z odpowiednich opisów produktów.
Kontrola indeksacji
Nie każda strona powinna być indeksowana. Pozwolenie Google na indeksowanie tysięcy filtrowanych URL-i rozrzedza budżet indeksowania.
Nawigacja fasetowa
Kategoria z 5 kolorami, 8 rozmiarami i 4 przedziałami cenowymi generuje 160 filtrowanych URL-i — na kategorię. Pomnóż przez 100 kategorii, a otrzymasz 16 000 niemal zduplikowanych stron. Rozwiązanie:
- Zablokuj parametry filtrów w robots.txt (zapobiega indeksowaniu)
- Dodaj
noindexdo filtrowanych stron (zapobiega indeksacji, jeśli zostaną zindeksowane) - Kanonizuj filtrowane strony do bazowej kategorii (konsoliduje sygnały)
Wyjątek: kombinacje filtrów odpowiadające rzeczywistym zapytaniom wyszukiwania ("czarne skórzane portfele") powinny być indeksowane z unikalnymi meta danymi. Zablokuj wszystko inne.
Strategia paginacji
- Self-referencing canonical na każdej stronie paginacji.
- Noindex na głębokich stronach: Strony 4+ rzadko mają wartość SEO. Zachowaj je jako followable, aby Google odkrywał linkowane produkty.
- Zwiększ liczbę produktów na stronę: Wyświetlanie 48 zamiast 12 produktów na stronę redukuje paginację z 17 stron do 5, koncentrując wartość linków.
Częste błędy SEO w PrestaShop
Zduplikowana strona główna
Strona główna jest często dostępna pod adresami /, /index.php, /en/ i /en/index.php. Przekieruj index.php na root za pomocą 301:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ / [R=301,L]
Normalizacja WWW i HTTPS
Wybierz www lub bez www, wybierz HTTPS. Przekieruj całą resztę jednoskokowo za pomocą 301. Ustawienie "Enable SSL" w PrestaShop wpływa tylko na generowanie linków — musisz dodać przekierowania na poziomie serwera w .htaccess. Kolejność ma znaczenie: najpierw wymuś HTTPS, potem normalizację www. Sprawdź łańcuchy przekierowań za pomocą curl -I -L — każdy dodatkowy skok zwiększa opóźnienie i traci wartość linków.
Inne częste problemy
- Duplikat strony 1 kategorii: Zarówno
/shoes/jak i/shoes/?page=1zwracają 200. Przekieruj?page=1na bazowy URL. - Skopiowane opisy produktów: Jeśli importujesz opisy dostawców, robi to też każdy inny. Napisz unikalne opisy przynajmniej dla 20% najlepszych produktów pod względem przychodów.
- Puste kategorie: Aktywne kategorie z zerem produktów to treść niskiej jakości. Zapytaj
ps_categoryzłączoną zCOUNTnaps_category_product, aby znaleźć i dodać noindex lub usunąć je. - Brakujące meta tytuły: Zapytaj
ps_product_lango wiersze, gdziemeta_titlejest pusty — te produkty polegają na samej nazwie produktu jako tagu title.
Lista kontrolna audytu SEO
Przechodzź ją co kwartał lub po każdej dużej zmianie w sklepie.
Fundament techniczny
- Przyjazne URL-e włączone — żadnych URL-i
index.php?id_product=w Google. - SSL włączony i wymuszony — wszystkie HTTP przekierowują 301 na HTTPS.
- Normalizacja WWW — jednoetapowe przekierowanie, bez łańcuchów.
- Robots.txt blokuje admin, koszyk, checkout, wyszukiwanie i parametry filtrów.
- Mapa strony XML wygenerowana, aktualna, zgłoszona do Search Console.
Na stronie (On-Page)
- Unikalne meta tytuły na każdym produkcie i kategorii, poniżej 60 znaków.
- Meta opisy unikalne lub celowo puste — żadnych szablonowych duplikatów.
- Jeden H1 na stronę odpowiadający tematowi strony.
- Wszystkie zdjęcia produktów mają opisowy tekst alt.
- Tagi canonical obecne na każdej stronie, poprawne przy paginacji.
- Tagi hreflang poprawne, jeśli sklep jest wielojęzyczny: dwukierunkowe, x-default obecny.
Dane strukturalne
- Schemat Product przechodzi walidację w teście wyników rozszerzonych z name, image, price, availability.
- Schemat BreadcrumbList obecny na stronach produktów i kategorii.
- Schemat Organization obecny na całej stronie.
Indeksowalność
- Raport pokrycia Google Search Console — brak nieoczekiwanych błędów lub wykluczonych stron.
- Filtrowane URL-e nie eksplodują w indeksie Google.
- Żadne puste kategorie nie są indeksowane.
- Brak miękkich 404 (niedostępne produkty zwracające 200 z pustą treścią).
Wydajność
- Core Web Vitals przechodzą w danych terenowych (Search Console → Core Web Vitals).
- Brak błędów użyteczności mobilnej.
- Strony produktów ładują się poniżej 3s. Zobacz nasz poradnik wydajności.
Polecane narzędzia
Google Search Console (indeksacja, CWV, wydajność), Screaming Frog (crawl strony, darmowy do 500 URL-i), PageSpeed Insights (CWV dane laboratoryjne + terenowe), Rich Results Test (walidacja danych strukturalnych), Ahrefs Webmaster Tools (darmowy audyt techniczny + backlinki).
SEO to nie jest "ustaw i zapomnij". Aktualizacje motywu psują schematy, nowe moduły tworzą pętle przekierowań, importy generują zduplikowane meta dane. 30-minutowa kwartalna kontrola wykrywa problemy, zanim zaczną kosztować Cię ruch.
More guides available
Browse our knowledge base for more practical PrestaShop tutorials, or reach out if you need help.