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.
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
- Upload de ZIP van de module via Modules > Modulebeheer > Een module uploaden.
- Klik op Installeren. De module maakt twee tabellen aan (
ps_dfthincontent_issueenps_dfthincontent_scan) en een beheertabblad onder Catalogus. - Open de module via Catalogus > Thin Content (DataFirefly).
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.
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, metgpt-4o-minials aanbevolen model (ongeveer 0,001 € per voorstel). - Mistral AI: endpoint
https://api.mistral.ai/v1/chat/completions, modelmistral-small-latest. - Groq: endpoint
https://api.groq.com/openai/v1/chat/completions, modelllama-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.
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).
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.
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.
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_nameenobject_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 viaMedia::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
- Open het netwerkpaneel van uw browser, klik op Een volledige scan starten en bekijk het AJAX-verzoek naar
action=scanFull. - 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. - Is het antwoord een 404, controleer dan of de controller
AdminDfThinContentwel is geregistreerd (tabelps_tab). - 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.
Bronnen
- Productpagina: datafirefly.com/product/dfthincontent/
- Ondersteuning: support@datafirefly.com