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).
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.
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
- Wgraj plik ZIP w Moduły → Menedżer modułów → Wgraj moduł.
- Kliknij Zainstaluj.
- 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
.htaccessw 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.txti/llms-full.txtzwracają 404, a pliki fizyczne są usuwane. - Nazwa witryny (wielojęzyczna, multistore): pojawia się jako główny nagłówek
# Nazwa witrynyna 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.
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.txthttps://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ł.
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 dollms.txtw formacie['title', 'url', 'description'].getFullEntries(): lista wpisów dollms-full.txtw 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_headersopcjonalny, 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:
- Uprawnienia do zapisu: katalog główny PrestaShop musi być zapisywalny dla użytkownika PHP. Sprawdź poleceniem
ls -la. Jeśli plik/llms.txtnie istnieje po regeneracji, prawie zawsze chodzi właśnie o to. - Moduł wyłączony: sprawdź przełącznik „Włącz moduł” na górze konfiguracji.
- 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:
- Sprawdź, czy blok
# ~~ dfllmstxt-datafirefly start ~~jest obecny w pliku.htaccessw katalogu głównym PrestaShop. - Jeśli go brakuje: odinstaluj i zainstaluj moduł ponownie (to wymusza ponowne wstawienie bloku).
- Sprawdź poleceniem
curl -I https://twoj-sklep.pl/llms.txt, czy odpowiedź zawieraContent-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:
- Sprawdź, czy plik fizyczny istnieje w katalogu głównym:
ls -la /sciezka/prestashop/llms.txt. - Jeśli istnieje, a Apache zwraca 404, prawdopodobnie chodzi o regułę w
.htaccessblokującą pliki.txt. Sprawdź reguły w pliku.htaccessw katalogu głównym. - 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.txti/llms-full.txtz 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.txti/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
.htaccessw katalogu głównym dla Content-Type w UTF-8 i nagłówka X-Robots-Tag. - Opcja wyłączenia generowania pliku
/llms-full.txt.