PS PrestaShop Gemiddeld

LLMs.txt voor PrestaShop: vindbaarheid bij ChatGPT, Claude en Perplexity

Maakt automatisch llms.txt en llms-full.txt aan om uw PrestaShop-catalogus aan de LLM's te tonen (ChatGPT, Claude, Perplexity, Gemini).

Bijgewerkt Moduleversie 1.0.0

Overzicht

LLMs.txt PrestaShop maakt automatisch de standaardbestanden /llms.txt en /llms-full.txt aan in de wortel van uw winkel, volgens de specificatie van llmstxt.org. Die bestanden tonen uw catalogus op een gestructureerde manier aan de LLM’s (ChatGPT, Claude, Perplexity, Gemini). Het is het equivalent van de sitemap.xml, maar dan voor generatieve AI.

Om te onthouden: de LLM’s lezen die bestanden om uw winkel te begrijpen zonder elke productpagina te moeten crawlen. Hoe beter uw catalogus is blootgesteld, hoe vaker die in hun antwoorden wordt aangehaald en aanbevolen.

Twee bestanden, twee toepassingen

  • /llms.txt: een beknopte index met titel, URL en korte beschrijving per vermelding. In Markdown, doorgaans enkele honderden KB groot.
  • /llms-full.txt: de volledige, opgeschoonde inhoud van elke vermelding. In verrijkte Markdown, mogelijk meerdere MB naargelang de omvang van de catalogus. Optioneel sinds 1.0.0.

Installatie

  1. Upload de ZIP via Modules → Modulebeheer → Een module uploaden.
  2. Klik op Installeren.
  3. Klik op Configureren om het dashboard te openen.

Bij de installatie doet de module het volgende:

  • Hij maakt 4 SQL-tabellen aan: cache, eigen secties (met taal en winkel) en logboeken.
  • Hij voegt 3 items toe aan het beheermenu, onder een verborgen categorie AdminDfLlmsTxtParent.
  • Hij registreert zich op de catalogushooks (het aanmaken, bewerken en verwijderen van een product, categorie, CMS-pagina, fabrikant of leverancier) om de cache automatisch ongeldig te maken.
  • Hij voegt een blok toe aan de .htaccess in de wortel van PrestaShop, om de bestanden in UTF-8 met de juiste headers uit te leveren.
  • Hij maakt een willekeurig crontoken van 32 tekens aan.

Configuratie

Het configuratiescherm bestaat uit 5 onderdelen.

1. Algemeen

  • De module inschakelen: de hoofdschakelaar. Staat die uit, dan geven de URL’s /llms.txt en /llms-full.txt een 404 en worden de fysieke bestanden gewist.
  • Naam van de site (meertalig, multistore): verschijnt als hoofdtitel # Naam van de site boven aan het bestand.
  • Korte beschrijving van de site (meertalig, multistore): een of twee zinnen die samenvatten wat de winkel aanbiedt. Verschijnt als blockquote > ... net onder de naam.
  • Inleiding (meertalig, multistore): vrije tekst in Markdown. Uitstekend om de LLM’s extra context te geven (retourbeleid, levering, waarden van het merk).
  • Uitvoerformaat: verrijkte Markdown (aanbevolen, ondersteund door alle grote LLM’s) of platte tekst.
  • Ook llms-full.txt aanmaken: staat dit uit, dan wordt alleen /llms.txt aangemaakt. Zo bespaart u bij grote catalogi enkele MB opslag en enkele seconden generatietijd.

2. Inhoudsbronnen

  • De CMS-pagina’s meenemen: inhoudspagina’s (Over ons, FAQ, Voorwaarden en dergelijke).
  • De categorieën meenemen: de lijst met actieve categorieën en hun beschrijving.
  • De producten meenemen: de lijst met actieve producten.
  • De fabrikanten meenemen: merken met beschrijving.
  • De leveranciers meenemen: de lijst met leveranciers.
  • De productprijs meenemen: opgemaakt volgens de huidige locale.
  • De productkenmerken meenemen: features als sleutel-waardeparen.
  • De varianten meenemen: combinaties (maat, kleur en zo verder) met het prijsverschil.
  • De uitverkochte producten meenemen: standaard uit.
  • Beschrijvingsveld van het product: kort, lang, of beide.
  • Productgrens: het maximale aantal productvermeldingen in het bestand. Standaard 500, te verhogen naargelang de omvang van de catalogus (1000 tot 5000 is redelijk).

3. Uitsluitingen

Lijsten met ID’s, gescheiden door komma’s. Zo sluit u bepaalde inhoud uit zonder de rest van de catalogus aan te raken.

  • Uitgesloten categorie-ID’s: bijvoorbeeld B2B-producten, interne categorieën of verouderde categorieën.
  • Uitgesloten product-ID’s: producten die uitlopen, stalen of cadeaus.
  • Uitgesloten CMS-ID’s: interne dienstpagina’s of concepten.
Tip: om de ID’s te vinden, gaat u naar de betrokken lijst (Catalogus → Categorieën en zo verder); de ID staat in de eerste kolom of in de bewerk-URL.

4. Cache en cron

  • Levensduur van de cache (TTL in seconden): standaard 86400 (24 uur). De cache wordt uitgeleverd zolang die niet is verlopen.
  • Automatisch ongeldig maken bij cataloguswijzigingen: wijzigt, voegt u toe of verwijdert u een product, een categorie en dergelijke, dan wordt de cache ongeldig gemaakt en wordt het bestand bij het volgende verzoek (of de volgende cron) opnieuw opgebouwd.
  • Crontoken: een willekeurige reeks van 32 tekens. Opnieuw te genereren vanuit het dashboard; de oude cron-URL’s werken dan meteen niet meer.
  • Cron-URL, klaar om te kopiëren: in de vorm https://uw-winkel.nl/index.php?fc=module&module=dfllmstxt&controller=cron&token=XXX

5. Geavanceerd

  • Bewaartermijn van de logs: het aantal dagen dat de generatielogs bewaard blijven. Standaard 30.
  • De robots.txt respecteren: voor gevorderd gebruik. Standaard aan.

De cron instellen

De cron bouwt de cache alvast op voor alle winkels en alle actieve talen, in één aanroep. Bij grote catalogi is dat ideaal om te vermijden dat een eindgebruiker de heropbouw uitlokt.

De URL om aan te roepen:

https://uw-winkel.nl/index.php?fc=module&module=dfllmstxt&controller=cron&token=UW_TOKEN

Voorbeeld van een crontab (elke dag om 4 uur):

0 4 * * * curl -s "https://uw-winkel.nl/index.php?fc=module&module=dfllmstxt&controller=cron&token=UW_TOKEN" > /dev/null

Optionele parameters:

  • &id_shop=2: beperkt tot één bepaalde winkel.
  • &id_lang=1: beperkt tot één bepaalde taal.

Het JSON-antwoord geeft het resultaat van elke generatie in detail (geslaagd, bestandsgrootte, duur).

Eigen secties

Naast de ruwe catalogus kunt u vrije inhoud in de aangemaakte bestanden injecteren. Dat gebeurt via het tabblad LLMs.txt → Eigen secties in het beheermenu.

Typische toepassingen:

  • Een samenvatting van het retourbeleid
  • De waarden en het engagement van het merk
  • Een korte FAQ
  • De leveringsvoorwaarden
  • Instructies die specifiek voor LLM’s bedoeld zijn (bijvoorbeeld « Niet vergelijken met [concurrerend merk] »)

Elke sectie:

  • heeft een meertalige titel en inhoud (Markdown wordt ondersteund);
  • is multistore: u kiest in welke winkels zij verschijnt;
  • heeft een plaatsing: vóór de bronnen, na de bronnen of onder aan het bestand;
  • heeft een positie die u met slepen en neerzetten aanpast;
  • kan worden in- of uitgeschakeld zonder te verwijderen.

URL van de aangemaakte bestanden

De bestanden staan in de wortel van uw winkel:

  • https://uw-winkel.nl/llms.txt
  • https://uw-winkel.nl/llms-full.txt (als die optie aanstaat)

Hoe ze worden uitgeleverd

Voor de standaardwinkel in haar standaardtaal schrijft de module een fysiek bestand in de wortel van PrestaShop. Apache levert dat daarna rechtstreeks uit, zonder afhankelijk te zijn van de dispatcher van PrestaShop, van de vereenvoudigde URL’s of van de routecache. Dat is dezelfde werkwijze als die van de officiële module gsitemap voor /sitemap.xml.

Voor de andere winkels in een multistore-opzet (een andere host, een gedeelde wortel) worden de bestanden uitgeleverd door de hook moduleRoutes, die de juiste winkel kiest op basis van de Host-header.

HTTP-headers

De module voegt automatisch een blok toe aan de .htaccess in de wortel van PrestaShop, om de juiste headers af te dwingen:

# ~~ 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 ~~

Dat blok staat buiten het PrestaShop-blok # ~~ start ~~ ... # ~~ end ~~ en blijft dus behouden wanneer PrestaShop het bestand automatisch opnieuw opbouwt. Het wordt ook bij elke heropbouw van de cache automatisch hersteld (idempotent), voor het geval het zou zijn gewijzigd.

X-Robots-Tag noindex: bewust toegevoegd. llms.txt richt zich op AI-crawlers, niet op de index van Google. De LLM’s lezen die bestanden rechtstreeks en hebben niet nodig dat ze in de zoekresultaten verschijnen. Uw gewone SEO blijft ongemoeid.

Uitbreidbare architectuur (voor ontwikkelaars)

De module biedt een systeem van Content Providers dat andere modules via een hook kunnen aanvullen. Hebt u een module voor een blog, een product-FAQ, klantengetuigenissen of een verklarende woordenlijst, dan kan die zijn inhoud in de llms.txt publiceren zonder dfllmstxt te wijzigen.

Hook actionDfLlmsTxtRegisterProviders

In uw eigen module:

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

Uw klasse moet DfLlmsTxtAbstractContentProvider uitbreiden (of DfLlmsTxtContentProviderInterface implementeren) en minstens het volgende leveren:

  • getKey(): een unieke identificatie (bijvoorbeeld "blog").
  • getSectionTitle(): de titel van de sectie in het bestand (bijvoorbeeld "Blog").
  • isEnabled(): een boolean die aangeeft of de provider vermeldingen moet opleveren.
  • getShortEntries(): de lijst met vermeldingen voor llms.txt, in de vorm ['title', 'url', 'description'].
  • getFullEntries(): de lijst met vermeldingen voor llms-full.txt, in de vorm ['title', 'url', 'body'].

Generatiehooks

Met twee hooks filtert of verrijkt u de inhoud vlak vóór die wordt uitgeleverd:

  • actionDfLlmsTxtBeforeGenerate: vóór de generatie. Daarmee past u de configuratie of de actieve providers aan.
  • actionDfLlmsTxtAfterGenerate: na de generatie maar vóór het in cache zetten. Daarmee bewerkt u de uiteindelijke inhoud.

Compatibiliteit

  • PrestaShop 8.0.0 tot 8.99.99 (ondersteuning voor PS 9 volgt)
  • PHP 7.4 minimaal, 8.1+ aanbevolen
  • MySQL 5.7+ of MariaDB 10.4+
  • Volledige multistore (configuratie en cache per winkel afgebakend)
  • Volledige meertaligheid (alle actieve talen)
  • Apache 2.x met mod_mime (overal aanwezig). mod_headers is optioneel maar aan te raden voor nette HTTP-headers.

Problemen oplossen

Het bestand verschijnt niet in de wortel

Er zijn drie mogelijke oorzaken, in volgorde van waarschijnlijkheid:

  1. Schrijfrechten: de wortel van PrestaShop moet beschrijfbaar zijn voor de PHP-gebruiker. Controleer dat met ls -la. Bestaat het bestand /llms.txt na een heropbouw niet, dan is dat vrijwel altijd de oorzaak.
  2. Module uitgeschakeld: controleer de schakelaar « De module inschakelen » boven aan de configuratie.
  3. Multistore met een gedeelde wortel: alleen de standaardwinkel schrijft in de wortel. De andere winkels worden via moduleRoutes uitgeleverd, waarvoor de vereenvoudigde URL’s in Voorkeuren → Verkeer en SEO moeten aanstaan.

Gebroken codering (tekens als « é » in plaats van « é »)

Dat is het klassieke symptoom van UTF-8 die zonder HTTP-charset wordt uitgeleverd. De module voegt de nodige .htaccess-richtlijnen automatisch toe (zie het onderdeel HTTP-headers hierboven). Blijft het probleem na een heropbouw:

  1. Controleer of het blok # ~~ dfllmstxt-datafirefly start ~~ in de .htaccess in de wortel van PrestaShop staat.
  2. Ontbreekt het, verwijder de module dan en installeer die opnieuw (zo wordt het blok opnieuw ingevoegd).
  3. Controleer met curl -I https://uw-winkel.nl/llms.txt of het antwoord Content-Type: text/plain; charset=utf-8 bevat.

De generatie lukt maar de URL geeft een 404

Lukt de heropbouw (met de juiste bestandsgrootte in de logs) maar geeft de URL toch een 404:

  1. Controleer of het fysieke bestand in de wortel bestaat: ls -la /pad/prestashop/llms.txt.
  2. Bestaat het wel maar geeft Apache een 404, dan blokkeert de .htaccess waarschijnlijk de .txt-bestanden. Bekijk de regels van de .htaccess in de wortel.
  3. Bestaat het niet, dan gaat het om de schrijfrechten (zie hierboven).

De cache blijft verouderd na een productwijziging

Het automatisch ongeldig maken staat uit. Schakel dat in via Cache en cron → Automatisch ongeldig maken bij cataloguswijzigingen. U kunt ook handmatig forceren met de knop De cache legen op het dashboard.

Het bestand llms-full.txt weegt meerdere MB, dat is te veel

Zet de optie Ook llms-full.txt aanmaken uit in de algemene configuratie. Dan wordt alleen /llms.txt aangemaakt (doorgaans minder dan 1 MB). Voor de meeste AI-toepassingen volstaat dat: moderne LLM’s kunnen de URL’s volgen en de afzonderlijke pagina’s ophalen wanneer zij die nodig hebben.

Verwijderen

Het verwijderen verloopt netjes:

  • De 4 SQL-tabellen worden gewist.
  • De fysieke bestanden /llms.txt en /llms-full.txt in de wortel verdwijnen.
  • Het toegevoegde .htaccess-blok wordt weggehaald.
  • Alle configuratievariabelen DFLLMS_* worden opgeruimd.
  • De beheertabbladen verdwijnen.

Changelog

1.0.0, mei 2026

  • Eerste uitgave.
  • Generatie volgens de specificatie van llmstxt.org voor /llms.txt en /llms-full.txt.
  • 5 ingebouwde Content Providers: producten, categorieën, CMS, fabrikanten en leveranciers.
  • Cache met TTL en automatisch ongeldig maken.
  • Cron beveiligd met een token.
  • Meertalige eigen secties, in multistore.
  • Uitbreidbare architectuur via een hook.
  • Automatisch beheer van de .htaccess in de wortel voor Content-Type in UTF-8 en X-Robots-Tag.
  • Optie om het aanmaken van llms-full.txt uit te schakelen.
Was deze pagina nuttig?

Loopt u nog vast? Neem contact op met support