PS PrestaShop Gemiddeld

Thin Content Detector: documentatie

Automatisch schrale inhoud, dubbels en standaardtekst in uw PrestaShop-catalogus opsporen, met verrijkingsvoorstellen door AI. Installatie, drempels instellen, AI-aanbieders, cronscan en probleemoplossing.

Bijgewerkt Moduleversie 1.0.0

DataFirefly Thin Content Detector scant automatisch uw producten, categorieën en CMS-pagina’s in alle actieve talen van uw winkel. Hij spoort drie patronen op die uw SEO schaden (te schrale inhoud, dubbele beschrijvingen en pagina’s die door standaardtekst worden overheerst) en maakt met AI verrijkingsvoorstellen die u meteen kunt plakken. Deze gids behandelt de installatie, de configuratie, het dagelijkse gebruik, het plannen via cron en de probleemoplossing.

Overzicht

Sinds de Helpful Content Update zet Google pagina’s actief lager wanneer hun inhoud te kort is, te sterk op andere pagina’s lijkt, of te veel uit herhaalde onderdelen bestaat. In een webshopcatalogus gaat het meestal om fiches die letterlijk van de leverancier komen, categorieën met twee algemene zinnen, of varianten die 95 % van hun beschrijving delen. Op 500 producten valt dat met het blote oog niet op, maar opgeteld is het precies wat uw site belet te scoren.

De drie soorten detectie

  • Schrale inhoud (thin content): pagina’s onder de instelbare woorddrempel. Drie ernstniveaus volgens de afstand tot de drempel (kritiek onder 25 %, waarschuwing tussen 25 en 75 %, opmerking tussen 75 en 100 %).
  • Dubbels: detectie in twee doorlopen, met een SHA1-hash voor exacte dubbels (ernst 3) en daarna een Jaccard-gelijkenis boven de instelbare drempel voor bijna-dubbels (ernst 2).
  • Verhouding sjabloon tegenover inhoud: spoort de tokens op die met de zusterpagina’s worden gedeeld (dezelfde bovenliggende categorie) en berekent het percentage unieke tokens per pagina. Een pagina met 200 woorden waarvan 90 % standaardtekst is, schaadt evenveel als een pagina van 30 woorden.

Installatie

  1. Upload de ZIP van de module via Modules > Modulebeheer > Een module uploaden.
  2. Klik op Installeren. De module maakt twee tabellen aan (ps_dfthincontent_issue en ps_dfthincontent_scan) en een beheertabblad onder Catalogus.
  3. Open de module via Catalogus > Thin Content (DataFirefly).
Compatibiliteit. PrestaShop 8.0 tot 9.x, PHP 7.4 tot 8.3, MySQL 5.6+ of MariaDB 10.3+. Multistore wordt native ondersteund (de unieke sleutel van de problemen bevat id_shop). Er is geen Composer-afhankelijkheid nodig.

Configuratie

Klik op de knop Configuratie in de banner van de module. Er zijn drie panelen.

Detectiedrempels

  • Minimum aantal woorden product: standaard 150. Elk product waarvan de lange en de korte beschrijving samen minder dan 150 woorden tellen, wordt gemeld.
  • Minimum aantal woorden categorie: standaard 100.
  • Minimum aantal woorden CMS-pagina: standaard 250.
  • Drempel voor Jaccard-gelijkenis: standaard 85 %. Daarboven gelden twee pagina’s als bijna-dubbels.
  • Minimale sjabloonverhouding: standaard 30 %. Daaronder geldt de pagina als te sterk door standaardtekst overheerst.
Welke drempel kiezen? 150 woorden per product is voor de meeste winkels een goed vertrekpunt. Bij textiel of verbruiksartikelen kunt u naar 100 zakken. Bij technische elektronica of woninginrichting gaat u beter naar 250. Voor de Jaccard-gelijkenis vangt 85 % de echte dubbels zonder elke legitieme variant te melden; ga naar 75 % als u veel sterk gelijkende varianten wilt onderscheiden.

Doelen van de scan

  • De producten scannen (standaard aan).
  • De categorieën scannen (standaard aan).
  • De CMS-pagina’s scannen (standaard aan).
  • Automatisch opnieuw scannen bij het opslaan (standaard uit). Staat die aan, dan leidt elke opslag van een product, een categorie of een CMS-pagina tot een gerichte hertest van enkel dat object. U ziet meteen of uw herschrijving volstaat om boven de drempels te komen.

AI-configuratie

De verrijkingsvoorstellen gebruiken een endpoint dat met OpenAI samengaat (chat completions). Dat dekt een brede waaier aan aanbieders:

  • OpenAI: endpoint https://api.openai.com/v1/chat/completions, met gpt-4o-mini als aanbevolen model (ongeveer 0,001 € per voorstel).
  • Mistral AI: endpoint https://api.mistral.ai/v1/chat/completions, model mistral-small-latest.
  • Groq: endpoint https://api.groq.com/openai/v1/chat/completions, model llama-3.3-70b-versatile. Erg snel.
  • Ollama lokaal: endpoint http://localhost:11434/v1/chat/completions, met elk model dat u hebt gedownload. Geen kosten.
  • Anthropic via een proxy die met OpenAI samengaat.

In te vullen parameters:

  • Endpoint: de volledige URL naar /v1/chat/completions.
  • Model: de identificatie van het model bij de aanbieder.
  • API-sleutel: het bearer-token. Versleuteld bewaard via het configuratiesysteem van PrestaShop.
  • Max tokens: standaard 600. Genoeg voor een gewoon verrijkingsvoorstel.
De API-sleutel is niet verplicht. Het opsporen en opvolgen van de problemen werkt zonder AI. Alleen de verrijkingsvoorstellen vragen een ingesteld endpoint. U kunt de module dus perfect als zuiver auditinstrument gebruiken.

Gebruik: dashboard

Het dashboard is de startpagina van de module. Het toont:

  • Drie hoofdtellers: het totaal aan open, opgeloste en genegeerde problemen.
  • Verdeling per soort probleem: schraal, dubbel of sjabloon.
  • Verdeling per soort object: product, categorie of CMS-pagina.
  • Huidige drempels: een herinnering aan de ingestelde waarden.
  • De 5 laatste scans: datum, duur en aantal geanalyseerde objecten.
  • Knop « Een volledige scan starten »: start een synchrone scan via AJAX. Een venster toont de voortgang en op het einde de samenvatting.

Een scan starten

Klik op Een volledige scan starten. De scan doorloopt alle actieve talen, past de drie analyses op de ingeschakelde doelen toe, bewaart de gevonden problemen in ps_dfthincontent_issue, en zet de problemen die niet meer opduiken op opgelost (bijvoorbeeld wanneer u een fiche sinds de vorige scan hebt verrijkt).

Bij een grote catalogus (boven 5 000 producten) gebruikt u beter de scan via cron (zie verderop). De synchrone scan blijft bruikbaar, maar kan de standaard PHP-tijdslimiet overschrijden. De cronscan heft set_time_limit(0) en memory_limit 512M automatisch op.

Gebruik: lijst met problemen

Bereikbaar via De problemen bekijken in de banner. De weergave is gepagineerd (50 per pagina) met uitgebreide filters:

  • Status: open, opgelost of genegeerd.
  • Soort probleem: schraal, dubbel of sjabloon.
  • Soort object: product, categorie of CMS.
  • Taal: een filter op een van de actieve talen.
  • Vrij zoeken: op de naam van het object.

Elke regel toont de ernst (een rood, oranje of blauw bolletje), het soort probleem, het soort object met een pictogram, de naam, de taal, het aantal woorden, de relevante meting (percentage gelijkenis of uniekheid) en drie actieknoppen:

  • AI-voorstel: opent een venster met een HTML-verrijkingsvoorstel dat op aanvraag wordt aangemaakt (zie het volgende onderdeel).
  • Als opgelost markeren: zet het probleem op fixed. Het blijft in de historiek staan maar vervuilt de tellers niet meer.
  • Negeren: zet het probleem op ignored. Handig voor pagina’s die bewust kort zijn (bijvoorbeeld een korte maar legitieme CMS-pagina « Contact »).

CSV-export

De knop CSV exporteren downloadt alle problemen van het huidige filter. De export wordt gestreamd (in blokken van 500 regels) om grote catalogi aan te kunnen zonder het geheugen te verzadigen. De codering is UTF-8 met BOM, zodat het bestand meteen in Excel opent. Het scheidingsteken is een puntkomma.

AI-voorstellen

Klik op de knop AI op eender welke regel. De module stuurt een verzoek naar het ingestelde endpoint, met een prompt die uit het soort probleem en het soort object wordt opgebouwd:

  • Schraal product: verrijken met verkoopargumenten, materialen, gebruik, herkomst en waarborgen.
  • Schrale categorie: verrijken met de sterke punten van het gamma, aankoopadvies en een vergelijking van de subcategorieën.
  • Schrale CMS-pagina: redactionele uitwerking, context en voorbeelden.
  • Dubbel: de fiche onderscheiden door te focussen op wat haar uniek maakt tegenover haar dubbels.
  • Sjabloon: de standaardtekst weghalen en elementen toevoegen die alleen op die pagina slaan.

Het systeembericht legt een antwoord in propere HTML op: alleen de tags p, ul, li en h3. Geen markdown en geen omhullende tags. U kunt het resultaat rechtstreeks in het beschrijvingsveld van TinyMCE plakken, zonder op te schonen.

Het voorstel wordt in de database bewaard. Opent u het venster later opnieuw, dan verschijnt het meteen, zonder nieuwe API-aanroep.

Aanbevolen werkwijze. Filter op de ernst « kritiek », maak de voorstellen een voor een aan, plak elk voorstel in de bijbehorende fiche en sla op. Staat het automatisch opnieuw scannen aan, dan gaat het probleem vanzelf op opgelost zodra de opslag u boven de drempels brengt.

Cron: geplande scans

De module biedt een cron-endpoint dat met een token is beveiligd, ideaal voor nachtelijke scans:

https://uw-winkel.nl/modules/dfthincontent/cron.php?token=UW_TOKEN

Het token wordt bij de installatie willekeurig aangemaakt en staat in het configuratiepaneel. Houd het vertrouwelijk, want het geeft toegang tot het starten van een volledige scan.

Voorbeeld van een crontab (dagelijkse scan om 4 uur)

0 4 * * * curl -s "https://uw-winkel.nl/modules/dfthincontent/cron.php?token=UW_TOKEN" > /dev/null 2>&1

Kenmerken van de cronscan

  • set_time_limit(0): geen PHP-tijdslimiet.
  • memory_limit 512M: automatisch ingesteld.
  • Een JSON-antwoord met het aantal geanalyseerde objecten, het aantal gevonden problemen en de totale duur.
  • Controle met hash_equals, bestand tegen timingaanvallen.
Het token opnieuw aanmaken. Vermoedt u dat het token is uitgelekt, verwijder de module dan en installeer die opnieuw: er komt een nieuw token. U kunt ook rechtstreeks de waarde DFTHIN_CRON_TOKEN in de tabel ps_configuration wijzigen.

Technische architectuur

Structuur van de tabellen

  • ps_dfthincontent_issue: één record per gevonden probleem. Unieke sleutel: (id_object, object_type, id_lang, id_shop, issue_type). Opvallende velden: severity (1 tot 3), word_count, content_hash (SHA1), metric_value (percentage gelijkenis of uniekheid), metric_data (JSON met het detail), ai_suggestion, status, object_name en object_url.
  • ps_dfthincontent_scan: de historiek van de scans. Begin- en einddatum, duur, geanalyseerde items per soort en status.

Gebruikte hooks

  • actionAdminControllerSetMedia: het laden van CSS en JS en het beschikbaar stellen van de AJAX-URL via Media::addJsDef.
  • actionProductUpdate: het opnieuw scannen van het gewijzigde product wanneer het automatisch hertesten aanstaat.
  • actionObjectCategoryUpdateAfter: hetzelfde voor de categorieën.
  • actionObjectCmsUpdateAfter: hetzelfde voor de CMS-pagina’s.

Prestatiegrenzen

Het opsporen van dubbels is van nature O(n²): elke pagina wordt met alle andere pagina’s van hetzelfde soort, dezelfde taal en dezelfde winkel vergeleken. Om een ontploffing bij erg grote catalogi te voorkomen, past de module twee beveiligingen toe:

  • Een veiligheidsplafond van 1 500 items per groep (soort, taal en winkel). Daarboven wordt het opsporen van dubbels voor die groep uitgeschakeld en komt er een waarschuwing in het logboek.
  • Voorfiltering op het aantal woorden: de Jaccard-gelijkenis wordt alleen berekend tussen items waarvan het aantal woorden binnen een venster van plus of min 50 % ligt. Dat schrapt de overgrote meerderheid van de nutteloze vergelijkingen.

Problemen oplossen

De scan start niet

  1. Open het netwerkpaneel van uw browser, klik op Een volledige scan starten en bekijk het AJAX-verzoek naar action=scanFull.
  2. Is het antwoord HTML in plaats van JSON, dan gaat het om een fatale PHP-fout op de server: bekijk de PrestaShop-logboeken (var/logs/) en die van PHP.
  3. Is het antwoord een 404, controleer dan of de controller AdminDfThinContent wel is geregistreerd (tabel ps_tab).
  4. Is het antwoord een 403, dan is het CSRF-token verlopen: herlaad de pagina en probeer opnieuw.

De AI-voorstellen geven een fout

  • Ga na of de API-sleutel juist en actief is bij uw aanbieder.
  • Controleer of de server de URL van het endpoint kan bereiken (uitgaande firewall, DNS).
  • Gebruikt u Ollama lokaal, ga dan na of de dienst draait (ollama serve) en of het model is gedownload (ollama pull llama3.3).
  • Bekijk de PrestaShop-logboeken: de module noteert er de cURL-fouten en de HTTP-codes die niet 200 zijn.

De cron geeft een 401 of een 403

Het meegegeven token klopt niet. Haal het juiste token uit het configuratiepaneel en vervang het in uw crontab. Zonder spatie en zonder regeleinde in de waarde.

Er worden legitieme dubbels gemeld

Dat gebeurt typisch bij sterk gelijkende varianten (maten van hetzelfde model, kleuren). Er zijn drie mogelijkheden:

  • De problemen een voor een als genegeerd markeren.
  • De drempel voor de Jaccard-gelijkenis naar 95 % of hoger brengen.
  • Het scannen van de producten uitzetten en alleen de categorieën en de CMS-pagina’s behouden, als uw gebruik geen productscan vraagt.

Verwijderen

Verwijderen doet u via Modules > Modulebeheer > Verwijderen. De module wist netjes de twee tabellen, het beheertabblad en alle configuratiesleutels. Er blijven geen restanten achter.

Bewaar de CSV-export vóór u verwijdert als u de historiek van de aangemaakte AI-voorstellen wilt houden. Zodra de tabellen weg zijn, zijn de voorstellen verloren.

Bronnen

Was deze pagina nuttig?

Loopt u nog vast? Neem contact op met support