PS PrestaShop Początkujący

Dokumentacja modułu Zaawansowana mapa XML dla PrestaShop (dfsitemap)

Instalacja i konfiguracja dfsitemap: treści, obrazy i filmy, hreflang, reguły wykluczeń, generowanie partiami, cron, IndexNow i wiele sklepów.

Zaktualizowano Wersja modułu 1.1.0

Moduł Advanced XML Sitemap (dfsitemap) tworzy mapy witryny XML dla PrestaShop 8 i 9: jeden indeks na sklep, jeden plik na język i typ treści, z obrazami, filmami i znacznikami hreflang. Ta strona opisuje instalację, ustawienia, reguły wykluczeń, harmonogram i rozwiązywanie problemów.

Instalacja

  1. Pobierz plik ZIP z konta klienta DataFirefly.
  2. W panelu administracyjnym przejdź do Moduły > Menedżer modułów > Załaduj moduł i wyślij plik ZIP.
  3. Otwórz Preferencje sklepu > Ruch i SEO > Zaawansowana mapa XML. Trzy zakładki u góry strony prowadzą do map i ustawień, reguł wykluczeń oraz filmów produktów.
  4. Jeśli natywny moduł Google sitemap (gsitemap) jest włączony, wyłącz go i usuń jego pliki *_sitemap.xml z katalogu głównego sklepu. Dopóki gsitemap jest włączony, moduł pokazuje ostrzeżenie.
  5. Kliknij Generuj teraz, a następnie Zadeklaruj mapy witryny w robots.txt.
  6. Zgłoś wyświetlony adres indeksu w Google Search Console i Bing Webmaster Tools.

Moduł działa od PrestaShop 8.0 do 9.x z tym samym plikiem ZIP, w trybie wielu sklepów i wielu języków. Potrzebuje prawa zapisu w katalogu głównym sklepu, gdzie publikowane są pliki dfsitemap-*.xml, oraz w modules/dfsitemap/var/tmp/. Jeśli któryś z nich nie jest zapisywalny, pojawia się komunikat.

Tworzone pliki

Dla każdego sklepu moduł publikuje indeks dfsitemap-{id sklepu}-index.xml, który wskazuje pliki nazwane według języka i typu, na przykład dfsitemap-1-pl-product-1.xml. Gdy plik osiągnie ustawioną liczbę adresów lub 45 MB, reszta trafia do -2, -3 itd. Własne adresy URL bez języka są zbierane w dfsitemap-1-all-custom-1.xml.

Gdy przyjazne adresy URL są włączone, indeks jest dostępny także pod /sitemap.xml w domenie każdego sklepu. Fizyczny plik sitemap.xml w katalogu głównym ma pierwszeństwo przed tym adresem: moduł to sygnalizuje.

Pliki powstają w folderze tymczasowym i są publikowane sklep po sklepie. Stare mapy pozostają online w trakcie generowania, a niepotrzebne już pliki są usuwane podczas publikacji.

Ustawienia

Ustawienia zależą od kontekstu wielu sklepów: w kontekście jednego sklepu zapisane wartości dotyczą tylko tego sklepu.

Treść

  • Typy treści: strony statyczne, produkty, kategorie, strony CMS, kategorie CMS, marki, dostawcy, własne adresy URL. Wymieniane są tylko aktywne treści.
  • Strony statyczne: strona główna, najczęściej kupowane, nowości, promocje, lista marek i dostawców, sklepy, kontakt, strona mapy witryny. Listy marek i dostawców są pomijane, jeśli ich strona jest wyłączona w preferencjach sklepu.
  • Języki: pozostaw wszystko zaznaczone, aby automatycznie uwzględniać aktywne języki każdego sklepu.
  • Produkty widoczne tylko w wyszukiwarce: domyślnie wymieniane są tylko produkty z widocznością Wszędzie lub Tylko katalog.
  • Własne adresy URL: jeden w wierszu. Ścieżka względna, np. /blog/, jest dodawana do adresu sklepu.
  • Dodatkowe mapy witryny: bezwzględne adresy map tworzonych gdzie indziej, na przykład przez moduł bloga lub stronę WordPress w tej samej domenie. Są dodawane do indeksu sklepu.

Strona CMS z wyłączoną opcją Indeksowanie przez wyszukiwarki jest wyświetlana przez PrestaShop ze znacznikiem noindex. Moduł jej nie wymienia i pokazuje, ilu stron to dotyczy. Włącz tę opcję na stronach, które mają być indeksowane.

Obrazy i filmy

  • Mapa obrazów i wszystkie zdjęcia produktu (w przeciwnym razie tylko zdjęcie główne), w wybranym rozmiarze, domyślnie large_default.
  • Obrazy kategorii, marek i dostawców: oryginalny obraz każdego elementu, jeśli istnieje.
  • Mapa filmów i wykrywanie YouTube i Vimeo: moduł znajduje filmy osadzone w opisach produktów i stronach CMS. Tytuły i czas trwania filmów Vimeo są pobierane raz i zapisywane w pamięci podręcznej.

Hreflang

  • Alternatywy hreflang: każdy adres wymienia swoje tłumaczenia. Przydatne, gdy sklep ma kilka języków.
  • Kod hreflang: język i region (pl-PL, z kodu języka ustawionego w Międzynarodowe > Języki) lub sam język (pl).
  • Język x-default: domyślny język sklepu, wybrany język lub brak.

Znaczniki i wyświetlanie

  • lastmod: data ostatniej modyfikacji produktów, kategorii, kategorii CMS, marek i dostawców.
  • changefreq i priority: domyślnie wyłączone, Google je ignoruje.
  • Czytelny widok: arkusz stylów XSL pokazuje indeks i pliki jako tabelę w przeglądarce. Wyszukiwarki go ignorują.

Generowanie

  • Częstotliwość: od co godzinę do raz w tygodniu, używana przez cron.
  • Generuj ponownie po zmianie treści: po zapisaniu produktu, kategorii, strony CMS, marki lub dostawcy następne wywołanie cron generuje mapę bez czekania na częstotliwość, najwyżej raz na godzinę.
  • Adresy URL na plik: domyślnie 10 000, od 100 do 50 000.
  • Elementy na partię: domyślnie 50. Zmniejsz na wolnym serwerze.
  • Limit czasu na żądanie: domyślnie 20 sekund, poniżej max_execution_time serwera. Z panelu administracyjnego każde żądanie jest ograniczone do 15 sekund.

Reguły wykluczeń

Zakładka Reguły wykluczeń pokazuje aktywne reguły. Każda reguła dotyczy wszystkich sklepów lub jednego i działa od następnego generowania.

  • Produkty: według ID, w kategorii (każde powiązanie, łącznie z podkategoriami), danej marki, danego dostawcy domyślnego, niedostępne, z ceną zero, bez zdjęcia.
  • Kategorie: według ID lub kategoria ze wszystkimi podkategoriami. Produkty pozostają na liście, chyba że usunie je reguła produktowa.
  • Strony CMS: według ID lub kategoria CMS z jej stronami.
  • Marki i dostawcy: według ID.
  • URL zawiera tekst: jeden tekst w wierszu, bez rozróżniania wielkości liter, na przykład ?q=.
  • URL pasuje do wyrażenia regularnego: jedno wyrażenie w wierszu, bez ograniczników, bez rozróżniania wielkości liter, na przykład /pl/.*-test$. Nieprawidłowe wyrażenie jest odrzucane przy zapisie.

ID wpisuje się oddzielone przecinkami lub znakami nowej linii. Adres wykluczony regułą znika też z alternatyw hreflang swoich tłumaczeń.

Filmy produktów

Zakładka Filmy produktów służy do filmów hostowanych poza YouTube i Vimeo lub do ustawienia własnego tytułu i opisu. Dla każdego filmu: produkt (wyszukiwanie po nazwie, indeksie lub ID), tytuł i opis w każdym języku, adres miniatury, adres pliku wideo lub odtwarzacza, czas trwania w sekundach i sklep. Pusty tytuł w danym języku przejmuje tytuł z innego języka, a w ostateczności nazwę produktu.

Uruchamianie generowania

Z panelu administracyjnego

Generuj teraz uruchamia generowanie dla sklepów bieżącego kontekstu, z paskiem postępu. Strona wysyła kolejne żądania aż do końca. Jeśli zamkniesz stronę, zadanie zostaje zapisane: przycisk Wznów w tym oknie je kontynuuje albo przejmuje je cron. Anuluj zatrzymuje zadanie, a mapy online pozostają bez zmian.

Przez cron

Panel pokazuje adres w postaci https://twoj-sklep.pl/module/dfsitemap/cron?token=.... Wywołuj go co 5 minut z menedżera cron na hostingu lub z modułu zadań cron PrestaShop. Każde wywołanie pracuje przez limit czasu, a następne wznawia zadanie. Sklep jest generowany ponownie po osiągnięciu jego częstotliwości lub po zmianie treści, jeśli ta opcja jest włączona. Parametry opcjonalne: force=1, aby wygenerować od razu, id_shop=1,2, aby ograniczyć sklepy. Przycisk Wygeneruj nowy token unieważnia stary adres.

Z wiersza poleceń

Z dostępem SSH skrypt wykonuje całe zadanie za jednym razem, niezależnie od wielkości katalogu:

php /sciezka/do/prestashop/modules/dfsitemap/cron.php
php /sciezka/do/prestashop/modules/dfsitemap/cron.php --force --shop=1

Bez --force generowane są tylko sklepy, dla których nadszedł termin. W razie błędu skrypt kończy się kodem 1.

Jeśli serwer przerwie żądanie w trakcie generowania, zadanie wznawia się od ostatniej zapisanej pozycji, a rozpoczęte pliki są naprawiane. Blokada pozostawiona przez przerwane żądanie wygasa po limicie czasu plus 90 sekund: panel pokazuje pozostały czas.

IndexNow

IndexNow zgłasza nową lub zmienioną stronę do Bing, Yandex, Seznam, Naver i innych wyszukiwarek protokołu, bez czekania na ich kolejną wizytę. Google nie korzysta z IndexNow i nadal czyta mapę witryny.

  1. Włącz Wysyłaj zmienione strony przez IndexNow w bloku Natychmiastowe indeksowanie. Moduł zapisuje plik klucza w katalogu głównym sklepu.
  2. Przy każdym zapisie produktu, kategorii, strony CMS, marki lub dostawcy obiekt trafia do kolejki.
  3. Przy następnym wywołaniu cron moduł wylicza adresy tych treści we wszystkich językach i wysyła je domena po domenie. Wysyłane są tylko treści z mapy witryny: nieaktywny produkt lub wykluczony regułą nie jest wysyłany.

Blok IndexNow w panelu pokazuje kolejkę, obecność pliku klucza i ostatnie wysłanie z kodem HTTP (200 lub 202 przy powodzeniu). Przy odpowiedzi 429 lub 5xx kolejka jest zachowywana do następnego wywołania. Przycisk Wyślij teraz uruchamia natychmiastowe wysłanie.

robots.txt i Search Console

Przycisk Zadeklaruj mapy witryny w robots.txt dodaje po jednej linii Sitemap: dla każdego sklepu między znacznikami # BEGIN dfsitemap i # END dfsitemap. Gdy PrestaShop generuje robots.txt ponownie w Ruch i SEO, moduł zapisuje blok od nowa. Odinstalowanie go usuwa.

W Google Search Console zgłoś adres indeksu każdego sklepu (lub /sitemap.xml) we właściwości odpowiedniej domeny.

Wiele sklepów

Każdy sklep ma własny indeks we własnej domenie, własne języki i ustawienia. Wybierz sklep w menu wielu sklepów, aby nadać mu własne wartości; w kontekście Wszystkie sklepy wartości dotyczą sklepów bez własnych ustawień. Dla każdego sklepu z kontekstu panel pokazuje adres indeksu, datę ostatniego generowania oraz liczbę adresów według typu, obrazów, filmów i plików.

Dla programistów: dodawanie adresów URL

Moduł może dodać swoje strony do mapy przez hook actionDfSitemapUrls, wywoływany podczas przetwarzania typu Własne adresy URL. Hook otrzymuje id_shop, languages (id_lang => kod ISO) i link, i zwraca listę wpisów:

public function hookActionDfSitemapUrls($params)
{
    $loc = [];
    foreach ($params['languages'] as $idLang => $iso) {
        $loc[$idLang] = $params['link']->getBaseLink($params['id_shop']) . $iso . '/blog/moj-artykul';
    }

    return [
        ['loc' => $loc, 'lastmod' => '2026-09-01 10:00:00', 'images' => ['https://.../obraz.jpg']],
        ['loc' => 'https://twoj-sklep.pl/pojedyncza-strona'],
    ];
}

Wpis, którego loc jest indeksowany językami, otrzymuje znaczniki hreflang jak strona natywna. Nieprawidłowe wpisy są pomijane bez przerywania generowania.

Najczęstsze pytania

Mapa nie zawiera żadnej strony CMS

Sprawdź opcję Indeksowanie przez wyszukiwarki każdej strony CMS. Strona bez tej opcji ma noindex i nie trafia do mapy.

Nie widać marek ani dostawców

Moduł stosuje preferencje sklepu: jeśli strona marek lub dostawców jest wyłączona, ten typ jest pomijany.

Generowanie zatrzymuje się na „Inny proces pracuje nad zadaniem”

Inne żądanie trzyma blokadę, często cron. Jeśli to żądanie zostało przerwane, blokada wygasa po wyświetlonym czasie i generowanie wznawia się samo.

Generowanie kończy się błędem

Komunikat pojawia się u góry panelu i w Zaawansowane > Logi. Najczęstszą przyczyną jest katalog główny bez prawa zapisu. Poprzednie mapy pozostają online.

IndexNow zwraca 403 lub 422

Wyszukiwarka nie znajduje pliku klucza albo odrzuca hosta. Otwórz adres pliku klucza pokazany w bloku IndexNow: powinien wyświetlić klucz. Sprawdź też, czy domena sklepu jest zgodna z domeną wysyłanych adresów.

Czy ta strona była pomocna?

Nadal utknąłeś? Napisz do wsparcia