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

> Pełna dokumentacja modułu DataFirefly LLMs.txt Generator dla PrestaShop: instalacja, konfiguracja, cron, sekcje własne, hooki dla deweloperów i rozwiązywanie problemów.

- Strona: <https://www.datafirefly.com/pl/documentation/llms-txt-prestashop-seo-ia-chatgpt/>
- Język: pl
- Zaktualizowano: 2026-08-01
- Inne języki: [fr](https://www.datafirefly.com/documentation/llms-txt-prestashop-seo-ia-chatgpt/index.md), [en](https://www.datafirefly.com/en/documentation/llms-txt-prestashop-seo-ia-chatgpt/index.md), [es](https://www.datafirefly.com/es/documentation/llms-txt-prestashop-seo-ia-chatgpt/index.md), [de](https://www.datafirefly.com/de/documentation/llms-txt-prestashop-seo-ia-chatgpt/index.md), [it](https://www.datafirefly.com/it/documentation/llms-txt-prestashop-seo-ia-chatgpt/index.md), [pt](https://www.datafirefly.com/pt/documentation/llms-txt-prestashop-seo-ia-chatgpt/index.md), [nl](https://www.datafirefly.com/nl/documentation/llms-txt-prestashop-seo-ia-chatgpt/index.md)
- Indeks: <https://www.datafirefly.com/pl/documentation/llms.txt>

## 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](https://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`.
