PS PrestaShop Średnio zaawansowany

LLMs.txt dla PrestaShop: widoczność w AI dla ChatGPT, Claude i Perplexity

Automatycznie generuje pliki llms.txt i llms-full.txt, aby udostępnić Twój katalog PrestaShop modelom LLM (ChatGPT, Claude, Perplexity, Gemini).

Zaktualizowano Wersja modułu 1.0.0

Wprowadzenie

LLMs.txt dla PrestaShop automatycznie generuje standardowe pliki /llms.txt i /llms-full.txt w katalogu głównym Twojego sklepu, zgodnie ze specyfikacją llmstxt.org. Te pliki udostępniają Twój katalog w ustrukturyzowanej formie modelom LLM (ChatGPT, Claude, Perplexity, Gemini): to odpowiednik pliku sitemap.xml, tyle że dla generatywnej sztucznej inteligencji.

Do zapamiętania: modele LLM czytają te pliki, aby zrozumieć Twój sklep bez crawlowania każdej strony produktowej z osobna. Im lepiej udostępniony katalog, tym częściej będzie cytowany i rekomendowany w ich odpowiedziach.

Dwa pliki, dwa zastosowania

  • /llms.txt: skondensowany indeks, czyli tytuł, adres i krótki opis każdej pozycji. Format Markdown, zwykle kilkaset kilobajtów.
  • /llms-full.txt: pełna oczyszczona treść każdej pozycji. Wzbogacony Markdown, przy dużych katalogach może ważyć kilka megabajtów. Opcjonalny od wersji 1.0.0.

Instalacja

  1. Wgraj plik ZIP w Moduły → Menedżer modułów → Wgraj moduł.
  2. Kliknij Zainstaluj.
  3. Kliknij Konfiguruj, aby otworzyć pulpit.

Podczas instalacji moduł:

  • Tworzy 4 tabele SQL: cache, sekcje własne (z językiem i sklepem), logi.
  • Dodaje 3 pozycje w menu administracyjnym pod ukrytą kategorią AdminDfLlmsTxtParent.
  • Rejestruje się na hookach katalogu (utworzenie, edycja i usunięcie produktu, kategorii, strony CMS, producenta, dostawcy), aby automatycznie unieważniać cache.
  • Dodaje blok w pliku .htaccess w katalogu głównym PrestaShop, aby serwować pliki w UTF-8 z właściwymi nagłówkami.
  • Generuje losowy 32-znakowy token crona.

Konfiguracja

Ekran konfiguracji jest podzielony na 5 sekcji.

1. Ogólne

  • Włącz moduł: przełącznik globalny. Po wyłączeniu adresy /llms.txt i /llms-full.txt zwracają 404, a pliki fizyczne są usuwane.
  • Nazwa witryny (wielojęzyczna, multistore): pojawia się jako główny nagłówek # Nazwa witryny na górze pliku.
  • Krótki opis witryny (wielojęzyczny, multistore): jedno lub dwa zdania podsumowujące ofertę sklepu. Wyświetlany jako cytat blokowy > ... tuż pod nazwą.
  • Wstęp (wielojęzyczny, multistore): dowolny tekst w Markdown. Idealny, aby dać modelom LLM dodatkowy kontekst (polityka zwrotów, dostawa, wartości marki).
  • Format wyjściowy: wzbogacony Markdown (zalecany, wspierany przez wszystkie główne modele LLM) albo czysty tekst.
  • Generuj także llms-full.txt: po wyłączeniu generowany jest wyłącznie /llms.txt. Pozwala zaoszczędzić kilka megabajtów przestrzeni i kilka sekund generowania przy dużych katalogach.

2. Źródła treści

  • Uwzględnij strony CMS: strony treściowe (O nas, FAQ, Regulamin i podobne).
  • Uwzględnij kategorie: lista aktywnych kategorii wraz z opisami.
  • Uwzględnij produkty: lista aktywnych produktów.
  • Uwzględnij producentów: marki wraz z opisem.
  • Uwzględnij dostawców: lista dostawców.
  • Uwzględnij ceny produktów: formatowane zgodnie z bieżącą lokalizacją.
  • Uwzględnij cechy produktów: cechy w formie klucz i wartość.
  • Uwzględnij warianty: kombinacje (rozmiar, kolor i podobne) wraz z różnicą w cenie.
  • Uwzględnij produkty niedostępne: domyślnie wyłączone.
  • Pole opisu produktu: krótki, długi albo obydwa.
  • Limit produktów: maksymalna liczba pozycji produktowych w pliku. Domyślnie 500, zwiększ zależnie od wielkości katalogu (rozsądny zakres to 1000 do 5000).

3. Wykluczenia

Listy identyfikatorów rozdzielone przecinkami. Pozwalają wykluczyć konkretne treści bez ruszania reszty katalogu.

  • Identyfikatory wykluczonych kategorii: na przykład produkty B2B, kategorie wewnętrzne, kategorie nieaktualne.
  • Identyfikatory wykluczonych produktów: produkty wycofywane, próbki, gratisy.
  • Identyfikatory wykluczonych stron CMS: wewnętrzne strony serwisowe, szkice.
Wskazówka: aby znaleźć identyfikatory, przejdź do odpowiedniej listy (Katalog → Kategorie i podobne). Identyfikator znajduje się w pierwszej kolumnie albo w adresie edycji.

4. Cache i cron

  • Czas życia cache (TTL w sekundach): domyślnie 86400, czyli 24 godziny. Cache jest serwowany, dopóki nie wygaśnie.
  • Automatyczne unieważnianie przy zmianach w katalogu: gdy modyfikujesz, dodajesz albo usuwasz produkt, kategorię i tak dalej, cache jest unieważniany, a plik zostanie wygenerowany ponownie przy następnym żądaniu albo następnym uruchomieniu crona.
  • Token crona: losowy ciąg 32 znaków. Można go zregenerować z pulpitu, wtedy stare adresy crona natychmiast przestają działać.
  • Gotowy do skopiowania adres crona: w formacie https://twoj-sklep.pl/index.php?fc=module&module=dfllmstxt&controller=cron&token=XXX

5. Zaawansowane

  • Retencja logów: liczba dni, przez które przechowywane są logi generowania. Domyślnie 30.
  • Respektuj robots.txt: do zastosowań zaawansowanych. Domyślnie włączone.

Konfiguracja crona

Cron generuje cache z wyprzedzeniem dla wszystkich sklepów i wszystkich aktywnych języków w jednym wywołaniu. Idealny przy dużych katalogach, aby uniknąć sytuacji, w której to użytkownik końcowy wyzwala ponowne generowanie.

Adres do wywołania:

https://twoj-sklep.pl/index.php?fc=module&module=dfllmstxt&controller=cron&token=TWOJ_TOKEN

Przykładowy wpis w crontabie (codziennie o 4:00):

0 4 * * * curl -s "https://twoj-sklep.pl/index.php?fc=module&module=dfllmstxt&controller=cron&token=TWOJ_TOKEN" > /dev/null

Parametry opcjonalne:

  • &id_shop=2: ograniczenie do konkretnego sklepu.
  • &id_lang=1: ograniczenie do konkretnego języka.

Odpowiedź JSON opisuje wynik każdego generowania (powodzenie, rozmiar plików, czas trwania).

Sekcje własne

Poza surowym katalogiem możesz wstrzyknąć dowolną treść do generowanych plików. Zakładka LLMs.txt → Sekcje własne w menu administracyjnym.

Typowe zastosowania:

  • Streszczenie polityki zwrotów
  • Wartości i zobowiązania marki
  • Krótkie FAQ
  • Warunki dostawy
  • Instrukcje skierowane wprost do modeli LLM (na przykład prośba, aby nie porównywać z konkretną marką konkurencyjną)

Każda sekcja:

  • Ma wielojęzyczny tytuł i treść (z obsługą Markdown).
  • Jest multistore: wybierasz, w których sklepach się pojawia.
  • Ma umiejscowienie: przed źródłami, po źródłach albo w stopce pliku.
  • Ma pozycję ustawianą przez przeciąganie i upuszczanie.
  • Można ją włączyć albo wyłączyć bez usuwania.

Adresy generowanych plików

Pliki są dostępne w katalogu głównym Twojego sklepu:

  • https://twoj-sklep.pl/llms.txt
  • https://twoj-sklep.pl/llms-full.txt (jeśli opcja jest włączona)

Jak są serwowane

Dla sklepu domyślnego w jego języku domyślnym moduł zapisuje plik fizyczny w katalogu głównym PrestaShop. Apache serwuje go następnie bezpośrednio, niezależnie od dispatchera PrestaShop, przyjaznych adresów i cache tras. To ten sam mechanizm, z którego korzysta oficjalny moduł gsitemap dla pliku /sitemap.xml.

Dla pozostałych sklepów w konfiguracji multistore (inny Host, wspólny katalog główny) pliki są serwowane przez hook moduleRoutes, który wybiera właściwy sklep na podstawie nagłówka Host.

Nagłówki HTTP

Moduł automatycznie dodaje blok w pliku .htaccess w katalogu głównym PrestaShop, aby wymusić właściwe nagłówki:

# ~~ dfllmstxt-datafirefly start ~~
<Files "llms.txt">
    ForceType "text/plain; charset=utf-8"
    <IfModule mod_headers.c>
        Header set Content-Type "text/plain; charset=utf-8"
        Header set X-Robots-Tag "noindex, follow"
    </IfModule>
</Files>
<Files "llms-full.txt">
    ForceType "text/plain; charset=utf-8"
    <IfModule mod_headers.c>
        Header set Content-Type "text/plain; charset=utf-8"
        Header set X-Robots-Tag "noindex, follow"
    </IfModule>
</Files>
# ~~ dfllmstxt-datafirefly end ~~

Ten blok jest umieszczony poza blokiem PrestaShop # ~~ start ~~ ... # ~~ end ~~, dzięki czemu przetrwa automatyczne regeneracje pliku przez PrestaShop. Jest też samonaprawiany przy każdej regeneracji cache (operacja idempotentna), na wypadek gdyby ktoś go zmodyfikował.

X-Robots-Tag noindex: dodany celowo. Plik llms.txt celuje w crawlery AI, a nie w indeks Google. Modele LLM czytają te pliki bezpośrednio, bez potrzeby pojawiania się w wynikach wyszukiwania. Twoje klasyczne SEO pozostaje nienaruszone.

Rozszerzalna architektura (dla deweloperów)

Moduł udostępnia system dostawców treści, który inne moduły mogą wzbogacać przez hook. Jeśli masz moduł blogowy, FAQ produktowe, opinie klientów albo słownik pojęć, może on publikować swoją treść w pliku llms.txt bez modyfikowania dfllmstxt.

Hook actionDfLlmsTxtRegisterProviders

W Twoim module zewnętrznym:

public function hookActionDfLlmsTxtRegisterProviders($params)
{
    require_once _PS_MODULE_DIR_ . 'mojmodul/classes/MyBlogProvider.php';
    $params['registry']->register(new MyBlogProvider());
}

Twoja klasa musi rozszerzać DfLlmsTxtAbstractContentProvider (albo implementować DfLlmsTxtContentProviderInterface) i dostarczać co najmniej:

  • getKey(): unikalny identyfikator (na przykład "blog").
  • getSectionTitle(): tytuł sekcji wyświetlany w pliku (na przykład "Blog").
  • isEnabled(): wartość logiczna wskazująca, czy dostawca ma produkować wpisy.
  • getShortEntries(): lista wpisów do llms.txt w formacie ['title', 'url', 'description'].
  • getFullEntries(): lista wpisów do llms-full.txt w formacie ['title', 'url', 'body'].

Hooki generowania

Dwa hooki pozwalają filtrować albo wzbogacać treść tuż przed jej wydaniem:

  • actionDfLlmsTxtBeforeGenerate: przed generowaniem. Pozwala zmodyfikować konfigurację albo listę aktywnych dostawców.
  • actionDfLlmsTxtAfterGenerate: po generowaniu, ale przed zapisem do cache. Pozwala przekształcić finalną treść.

Zgodność

  • PrestaShop 8.0.0 do 8.99.99 (wsparcie dla PS 9 w przygotowaniu)
  • PHP minimum 7.4, zalecane 8.1+
  • MySQL 5.7+ / MariaDB 10.4+
  • Multistore pełny (konfiguracja i cache zakresowane per sklep)
  • Wielojęzyczność pełna (wszystkie aktywne języki)
  • Apache 2.x z modułem mod_mime (uniwersalny). mod_headers opcjonalny, ale zalecany dla poprawnych nagłówków HTTP.

Rozwiązywanie problemów

Plik nie pojawia się w katalogu głównym

Trzy możliwe przyczyny, w kolejności prawdopodobieństwa:

  1. Uprawnienia do zapisu: katalog główny PrestaShop musi być zapisywalny dla użytkownika PHP. Sprawdź poleceniem ls -la. Jeśli plik /llms.txt nie istnieje po regeneracji, prawie zawsze chodzi właśnie o to.
  2. Moduł wyłączony: sprawdź przełącznik „Włącz moduł” na górze konfiguracji.
  3. Multistore ze wspólnym katalogiem głównym: tylko sklep domyślny zapisuje plik w katalogu głównym. Pozostałe sklepy są serwowane przez moduleRoutes, co wymaga włączonych przyjaznych adresów w Ustawienia sklepu → Ruch i SEO.

Zepsute kodowanie (znaki w rodzaju „Ä…” zamiast „ą”)

Klasyczny objaw UTF-8 serwowanego bez zestawu znaków w nagłówku HTTP. Moduł automatycznie dodaje niezbędne dyrektywy do pliku .htaccess (patrz sekcja Nagłówki HTTP powyżej). Jeśli problem utrzymuje się po regeneracji:

  1. Sprawdź, czy blok # ~~ dfllmstxt-datafirefly start ~~ jest obecny w pliku .htaccess w katalogu głównym PrestaShop.
  2. Jeśli go brakuje: odinstaluj i zainstaluj moduł ponownie (to wymusza ponowne wstawienie bloku).
  3. Sprawdź poleceniem curl -I https://twoj-sklep.pl/llms.txt, czy odpowiedź zawiera Content-Type: text/plain; charset=utf-8.

Generowanie się udało, ale adres zwraca 404

Jeśli regeneracja kończy się powodzeniem (w logach widać poprawny rozmiar plików), ale adres zwraca 404:

  1. Sprawdź, czy plik fizyczny istnieje w katalogu głównym: ls -la /sciezka/prestashop/llms.txt.
  2. Jeśli istnieje, a Apache zwraca 404, prawdopodobnie chodzi o regułę w .htaccess blokującą pliki .txt. Sprawdź reguły w pliku .htaccess w katalogu głównym.
  3. Jeśli nie istnieje, to problem z uprawnieniami do zapisu (patrz wyżej).

Cache pozostaje nieaktualny po modyfikacji produktu

Automatyczne unieważnianie jest wyłączone. Włącz je w Cache i cron → Automatyczne unieważnianie przy zmianach w katalogu. Możesz też wymusić odświeżenie ręcznie przyciskiem Wyczyść cache na pulpicie.

Plik llms-full.txt waży kilka megabajtów, to za dużo

Wyłącz opcję Generuj także llms-full.txt w konfiguracji ogólnej. Generowany będzie wyłącznie /llms.txt, zwykle poniżej 1 MB. W większości zastosowań AI to wystarcza: nowoczesne modele LLM potrafią podążać za adresami i pobierać pojedyncze strony, gdy tego potrzebują.

Odinstalowanie

Odinstalowanie jest czyste:

  • Usuwane są 4 tabele SQL.
  • Usuwane są pliki fizyczne /llms.txt i /llms-full.txt z katalogu głównego.
  • Usuwany jest dodany blok w pliku .htaccess.
  • Czyszczone są wszystkie zmienne konfiguracyjne DFLLMS_*.
  • Usuwane są zakładki administracyjne.

Historia zmian

1.0.0, maj 2026

  • Pierwsze wydanie.
  • Generowanie zgodne ze specyfikacją llmstxt.org dla plików /llms.txt i /llms-full.txt.
  • 5 natywnych dostawców treści: produkty, kategorie, CMS, producenci, dostawcy.
  • Cache z TTL i automatycznym unieważnianiem.
  • Cron zabezpieczony tokenem.
  • Sekcje własne wielojęzyczne i multistore.
  • Rozszerzalna architektura przez hook.
  • Automatyczne zarządzanie plikiem .htaccess w katalogu głównym dla Content-Type w UTF-8 i nagłówka X-Robots-Tag.
  • Opcja wyłączenia generowania pliku /llms-full.txt.
Czy ta strona była pomocna?

Nadal utknąłeś? Napisz do wsparcia