PS PrestaShop Gemiddeld

AI People Also Ask — Complete documentatie (dfaipaa)

Complete handleiding voor de module dfaipaa: installatie, configuratie van scrapingproviders (SerpApi, DataForSEO) en AI (Mistral, OpenAI, Anthropic), redactionele workflow, FAQ-weergave, JSON-LD FAQPage en cronautomatisering.

Bijgewerkt Moduleversie 1.0.0

Presentatie

AI People Also Ask (technische slug: dfaipaa) vangt de vragen op die uw klanten echt aan Google stellen (de “People Also Ask”-blokken), genereert de antwoorden met een AI naar keuze en publiceert een schema.org-gemarkeerde FAQ op uw productpagina’s en categoriepagina’s.

De module industrialiseert een complete pipeline in vier stappen:

  • Scraping: vastleggen van de PAA-vragen op uw doelzoekwoorden via SerpApi, DataForSEO of handmatige invoer.
  • AI-generatie: schrijven van de antwoorden via Mistral, OpenAI of Anthropic, met configureerbare toon en merkidentiteit.
  • Redactionele workflow: revisie, toewijzing aan producten en categorieën, publicatie (handmatig of automatisch).
  • Publicatie: toegankelijk FAQ-accordeon in de winkel + JSON-LD FAQPage voor Google en de generatieve zoekmachines.
Opmerking: er is geen composer install nodig. Een minimale PSR-4-autoloader is ingebouwd in de module onder de namespace DataFirefly Dfaipaa.

Vereisten

  • PrestaShop 8.0.0 → 9.99.99
  • PHP 8.1, 8.2 of 8.3
  • MySQL 5.7 / MariaDB 10.4 of hoger
  • Een API-sleutel voor minstens één AI-provider (Mistral, OpenAI of Anthropic)
  • Optioneel: een SerpApi-sleutel of een DataForSEO-account om de scraping te automatiseren
  • Toestemming voor uitgaande HTTPS-verbindingen (cURL) vanaf uw hosting
Tip: met de modus “handmatige invoer” kunt u de module zonder scraping-abonnement gebruiken: u voert zelf de vragen in, de AI zorgt voor de antwoorden.

Installatie

  1. Download de ZIP dfaipaa.zip via uw DataFirefly-account.
  2. Ga in de PrestaShop-backoffice naar Modules › Modulebeheer › Een module uploaden.
  3. Sleep de ZIP erin, wacht op de bevestiging en klik op Installeren.
  4. Een nieuw menu AI People Also Ask verschijnt in de linkerkolom, met drie tabbladen: Configuratie, Zoekwoorden, Vragen.

De installatie maakt 4 tabellen aan (voorvoegsel ps_dfaipaa_), stelt de standaardconfiguratiewaarden in en installeert 4 beheertabbladen (één parent + drie kinderen) met gelokaliseerde labels in FR, EN, ES, DE, IT en NL.

Belangrijk: als uw uitpaktool de mappen vendor/ overslaat, ontbreekt de autoloader en geeft de module een “Class not found”-fout. Pak uit met unzip of upload de ZIP rechtstreeks via de backoffice, die de mappenstructuur correct verwerkt.

Configuratie — Scraping

Tabblad AI People Also Ask › Configuratie, eerste sectie.

Veld Beschrijving Standaard
Provider serpapi, dataforseo of manual serpapi
API-sleutel SerpApi-sleutel, of DataForSEO-inloggegevens in het formaat login:password leeg
Taal ISO-code van 2 letters gebruikt in de Google-query fr
Land ISO-code van 2 letters van de doelmarkt FR
Max. vragen per zoekwoord Limiet per scraping-operatie 8
Verversingsinterval In dagen; daarna geldt een zoekwoord als verouderd 30

Een SerpApi-sleutel verkrijgen

Maak een account aan op serpapi.com. Het gratis plan biedt 100 requests per maand, wat overeenkomt met ongeveer 100 gescrapete zoekwoorden. De sleutel vindt u in uw dashboard, sectie “Your Account”. De module bevraagt het Google-zoekendpoint en gebruikt het blok related_questions van het antwoord.

Een DataForSEO-account verkrijgen

Maak een account aan op dataforseo.com. U ontvangt een combinatie van gebruikersnaam en wachtwoord die u in het veld API-sleutel plakt in de vorm login:password (de module verzorgt de HTTP Basic-authenticatie). DataForSEO factureert per gebruik, wat beter past bij grote volumes. De module gebruikt het endpoint SERP Google organic live advanced en extraheert de elementen people_also_ask.

De mapping van de locatiecodes is ingebouwd voor de volgende markten: FR, BE, CH, LU, CA, US, UK, IE, ES, PT, IT, DE, AT, NL, PL, BR en MX.

Modus handmatige invoer

Selecteer manual om elke externe aanroep uit te schakelen. U voegt de vragen dan zelf toe via het tabblad Vragen; de AI-generatie blijft volledig functioneel.

Configuratie — Artificiële intelligentie

Tweede sectie van het tabblad Configuratie.

Veld Beschrijving Standaard
Provider mistral, openai of anthropic mistral
Model Modelidentificatie bij de provider mistral-large-latest
API-sleutel Sleutel van de geselecteerde provider leeg
Temperatuur 0.0 tot 1.0; lager = feitelijker 0.3
Max. tokens Maximale lengte van het gegenereerde antwoord 500
Toon Vrije tekst: expert, pedagogisch, commercieel, warm… leeg
Merkidentiteit Aanvullende instructies om de redactionele stijl uit te lijnen leeg
Autopublicatie Publiceert automatisch elk gegenereerd antwoord uitgeschakeld

Aanbevolen modellen

  • Mistral: mistral-large-latest voor kwaliteit, mistral-small-latest om de kosten bij grote volumes te drukken.
  • OpenAI: gpt-4o-mini biedt een uitstekende prijs-kwaliteitverhouding; gpt-4o voor veeleisende technische catalogi.
  • Anthropic: claude-sonnet-4-6 voor genuanceerde en goed gestructureerde antwoorden.

Opgelegde beperkingen aan het model

De module bouwt een strikte systeemprompt, onafhankelijk van de provider: antwoorden van 60 tot 120 woorden, alleen eenvoudige HTML (paragrafen, vet, cursief, lijsten), verbod op markdown, kopelementen en elk script. De context van de entiteit (naam en beschrijving van het product of de categorie, afgekapt op 1200 tekens) en het oorspronkelijke zoekwoord worden geïnjecteerd om het antwoord te verankeren. De oorspronkelijke Google-snippet wordt als referentie meegegeven met een expliciete instructie tot herformuleren, nooit kopiëren.

Tip: als een kleiner model toch markdown teruggeeft, verlaag dan de temperatuur naar 0.2 en vermeld “alleen HTML, geen markdown” in het veld Merkidentiteit.

Configuratie — Weergave

Derde sectie van het tabblad Configuratie.

Veld Beschrijving Standaard
Productmodus tab (tabblad) of footer (blok onderaan de productpagina) tab
Inschakelen op product Toont de FAQ op de productpagina’s ingeschakeld
Inschakelen op categorie Toont de FAQ onderaan de categoriepagina ingeschakeld
Titel tabblad Gelokaliseerd label van het producttabblad “Veelgestelde vragen”
Titel product Titel van het blok in footer-modus gelokaliseerd
Titel categorie Titel van het categorieblok gelokaliseerd
JSON-LD uitsturen Injecteert de FAQPage-markering ingeschakeld

In de tab-modus steunt de module op het native mechanisme ProductExtraContent van PrestaShop: de FAQ verschijnt als tabblad naast “Beschrijving” en “Productdetails”, zonder template-overrides.

Redactionele workflow

Stap 1 — Zoekwoorden toevoegen

Tabblad Zoekwoorden. Plak uw lijst in het tekstveld, één zoekwoord per regel, en bevestig. Duplicaten worden automatisch genegeerd (de toevoeging is idempotent per zoekwoord, taal en winkel).

Kies zoekwoorden die aansluiten bij koopintentie: “automatische koffiemachine”, “beste koffiebonen”, “onderhoud koffiezetapparaat”. Vermijd pure merkzoekopdrachten, die zelden PAA-blokken opleveren.

Stap 2 — Scrapen

Twee opties:

  • Scrapen: individuele knop op elke zoekwoordregel, handig om de configuratie te testen.
  • Alle verouderde scrapen: verwerkt in batches van 20 de zoekwoorden waarvan de laatste vastlegging het verversingsinterval overschrijdt.

Elke vastgelegde vraag wordt geregistreerd met een uniciteitshash (vraag + taal + winkel): een zoekwoord opnieuw scrapen creëert nooit duplicaten, het werkt alleen de datum van de laatste vastlegging bij.

Stap 3 — Antwoorden genereren

Tabblad Vragen. Filter op status pending, selecteer de vragen via de selectievakjes en start de massa-actie Genereren. Op elke regel is ook een individuele knop beschikbaar.

De entiteitscontext wordt opgebouwd vanuit de eerste toewijzing van de vraag. Wijs voor betere antwoorden de vraag toe aan een product of categorie voordat u genereert: de AI beschikt dan over de naam en de beschrijving van de entiteit.

Stap 4 — Reviseren en toewijzen

Klik op een vraag om het bewerkingsformulier te openen. U kunt:

  • het HTML-antwoord corrigeren in de rich-texteditor;
  • de vraag toewijzen aan een of meer producten en categorieën (N-op-N-relatie);
  • de toewijzingen herordenen om de weergavevolgorde van het accordeon te bepalen;
  • een irrelevante vraag afwijzen (status rejected, bewaard in de database maar nooit getoond).

Stap 5 — Publiceren

Zet de status op published. De FAQ verschijnt direct in de winkel, samen met de bijbehorende JSON-LD.

Als de optie Autopublicatie in de configuratie is ingeschakeld, worden stappen 4 en 5 samengevoegd: de generatie publiceert direct. Handig voor een volledig geautomatiseerde pipeline, voor te behouden aan catalogi waar menselijke controle niet kritiek is.

Statussen van de vragen

Status Betekenis Getoond in de winkel
pending Vraag vastgelegd, nog geen AI-antwoord Nee
generated Antwoord gegenereerd, wacht op validatie Nee
published Gevalideerd en gepubliceerd Ja
rejected Handmatig afgewezen Nee

Weergave in de winkel

Het accordeon steunt op de native HTML-elementen details en summary, wat het volgende garandeert:

  • een werkende toetsenbordnavigatie zonder JavaScript;
  • inhoud die ook ingeklapt door zoekmachines geïndexeerd wordt;
  • compatibiliteit met alle moderne browsers.

Het eerste element is standaard geopend. Er wordt een licht CSS-bestand geladen, volledig overschrijfbaar vanuit uw child theme. Alle classes gebruiken het voorvoegsel dfaipaa-faq om conflicten te vermijden.

JavaScript-events

Het frontscript stuurt twee aangepaste events uit die u op uw analyticstool kunt aansluiten:

document.addEventListener('dfaipaa:open', function (e) {
  // e.detail.question, e.detail.index, e.detail.type, e.detail.entityId
  gtag('event', 'faq_open', { question: e.detail.question });
});

document.addEventListener('dfaipaa:close', function (e) {
  console.log('FAQ gesloten:', e.detail.question);
});

Het bestand views/js/front.js bevat ook een constante SINGLE_OPEN (standaard false): zet deze op true om slechts één paneel tegelijk open te laten.

Deep-linking

Een anker in de vorm #dfaipaa-q-123 opent automatisch de bijbehorende vraag en scrolt de pagina ernaartoe. Handig om een specifiek antwoord te delen vanuit een e-mail of een supportticket.

JSON-LD FAQPage-markering

Bij elke lading van een product- of categoriepagina met minstens één gepubliceerde vraag injecteert de module een JSON-LD-blok vlak voor het sluiten van de documentbody (hook displayBeforeBodyClosingTag).

Uitgestuurde structuur: een FAQPage-node, een mainEntity-array, en voor elk item een Question-node met een acceptedAnswer van het type Answer. De HTML-inhoud van de antwoorden wordt vóór uitgifte opgeschoond: script- en style-elementen en event-attributen worden verwijderd.

Tip: valideer uw markering met de Google-tool voor het testen van rich results. Merk op dat Google de weergave van FAQ rich snippets heeft beperkt tot overheids- en gezondheidssites, maar de markering blijft waardevol voor de generatieve zoekmachines (ChatGPT, Perplexity, Gemini) die haar actief gebruiken.

Automatisering via cron

Er wordt een CLI-script meegeleverd om de pipeline zonder handmatige tussenkomst uit te voeren.

# Verouderde zoekwoorden scrapen (standaard max. 20)
php modules/dfaipaa/cli/cron.php scrape --limit=20

# AI-antwoorden genereren voor de openstaande vragen
php modules/dfaipaa/cli/cron.php generate --limit=10

# Scraping en generatie na elkaar uitvoeren
php modules/dfaipaa/cli/cron.php all --limit=20

Voorbeeld van een crontab, nachtelijke uitvoering om 3 uur:

0 3 * * * cd /var/www/prestashop && php modules/dfaipaa/cli/cron.php all --limit=30 >> /var/log/dfaipaa.log 2>&1
Belangrijk: stem de parameter --limit af op uw API-quota. Een batch van 30 zoekwoorden verbruikt 30 SerpApi-requests; met het gratis plan (100 per maand) is een wekelijkse uitvoering geschikter dan een dagelijkse.

Meertalig en multistore

De vragen worden geïndexeerd op id_lang en id_shop. Concreet:

  • hetzelfde zoekwoord gescrapet in het Frans en het Engels levert twee afzonderlijke vragensets op;
  • de antwoorden worden gegenereerd in de taal van de vraag, waarbij de prompt een expliciete taaldirectief toepast (fr, en, es, de, it, nl, pt, pl);
  • in multistore verschijnen de vragen en toewijzingen van een winkel nooit op een andere;
  • de weergavetitels (tabblad, product, categorie) worden opgeslagen als gelokaliseerde configuratie.

Probleemoplossing

De scraping levert geen enkele vraag op

  • Controleer uw quotum bij de provider: SerpApi kapt stilzwijgend af boven het gratis plan.
  • Controleer de consistentie tussen taal en land: “fr” met “US” geeft grillige resultaten.
  • Sommige zoekwoorden triggeren bij Google simpelweg geen PAA-blok. Test de zoekopdracht handmatig in een browser in incognitomodus.
  • Controleer voor DataForSEO het formaat login:password van het veld API-sleutel.

De AI geeft markdown terug in plaats van HTML

Verlaag de temperatuur naar 0.2, of stap over op een capabeler model. De prompt legt al strikte HTML-regels op, maar de lichtste modellen kunnen ze deels negeren.

De FAQ wordt niet in de winkel getoond

  • Controleer of minstens één vraag de status published heeft.
  • Controleer of ze daadwerkelijk is toegewezen aan de bezochte entiteit (product of categorie).
  • Controleer of de weergave voor dat type entiteit in de configuratie is ingeschakeld.
  • Leeg de Smarty-cache via Geavanceerde instellingen › Prestaties.

De JSON-LD verschijnt niet in de broncode

Controleer of de optie “JSON-LD uitsturen” is ingeschakeld en of het thema de hook displayBeforeBodyClosingTag daadwerkelijk aanroept. Sommige thema’s van derden laten hem weg: voeg dan {hook h='displayBeforeBodyClosingTag'} toe vóór het sluiten van de body in uw layouts/layout-both-columns.tpl.

Fout “Class not found” na installatie

De map vendor/ is niet uitgepakt. Herinstalleer de module door de ZIP via de backoffice te uploaden in plaats van handmatig uit te pakken.

De operatielogs raadplegen

Alle operaties (scraping, generatie, publicatie) worden gelogd. Om te onderzoeken:

SELECT * FROM ps_dfaipaa_log ORDER BY date_add DESC LIMIT 50;

Deïnstallatie

Klik in Modules › Modulebeheer op Deïnstalleren. De operatie verwijdert de 4 tabellen ps_dfaipaa_*, de 4 beheertabbladen en alle configuratiesleutels DFAIPAA_. De gegenereerde inhoud gaat definitief verloren: exporteer vooraf uw vragen als u ze wilt bewaren.

Technische referentie

  • Technische slug: dfaipaa
  • Namespace: DataFirefly Dfaipaa (PSR-4, ingebouwde autoloader)
  • Aangemaakte tabellen: ps_dfaipaa_keyword, ps_dfaipaa_question, ps_dfaipaa_assignment, ps_dfaipaa_log
  • Gebruikte hooks: displayHeader, displayProductExtraContent, displayFooterProduct, displayCategoryFooter, displayBeforeBodyClosingTag, actionFrontControllerSetMedia, actionAdminControllerSetMedia, actionProductUpdate, actionProductSave, actionCategoryUpdate, actionObjectProductDeleteAfter, actionObjectCategoryDeleteAfter
  • Backoffice-tabbladen: AdminDfaipaa (parent), AdminDfaipaaConfig, AdminDfaipaaKeywords, AdminDfaipaaQuestions
  • Configuratiesleutels: DFAIPAA_SCRAPER_PROVIDER, DFAIPAA_SCRAPER_API_KEY, DFAIPAA_SCRAPER_LANG, DFAIPAA_SCRAPER_COUNTRY, DFAIPAA_SCRAPER_MAX_PER_KEYWORD, DFAIPAA_AI_PROVIDER, DFAIPAA_AI_MODEL, DFAIPAA_AI_API_KEY, DFAIPAA_AI_TEMPERATURE, DFAIPAA_AI_MAX_TOKENS, DFAIPAA_AI_TONE, DFAIPAA_AI_BRAND_VOICE, DFAIPAA_AUTO_PUBLISH, DFAIPAA_REFRESH_INTERVAL, DFAIPAA_PRODUCT_MODE, DFAIPAA_EMIT_JSONLD, DFAIPAA_TAB_TITLE, DFAIPAA_PRODUCT_TITLE, DFAIPAA_CATEGORY_TITLE
  • CLI: modules/dfaipaa/cli/cron.php (commando’s scrape, generate, all)
  • Fronttemplate: views/templates/hook/faq.tpl

AVG-conformiteit

De module verzamelt en bewaart geen enkele vorm van persoonsgegevens: alleen zoekwoorden, vragen, gegenereerde antwoorden en technische operatielogs worden geregistreerd. Er wordt geen cookie geplaatst in de winkel. De aanroepen naar de externe API’s (scraping, AI) versturen alleen het zoekwoord, de vraag en de productcontext, nooit klantgegevens.

Support

Neem voor technische vragen contact op met het DataFirefly-team via contact@datafirefly.com of raadpleeg uw klantomgeving op datafirefly.com.

Was deze pagina nuttig?

Loopt u nog vast? Neem contact op met support