DataFirefly All in One SEO: volledige gids
Premium alles-in-één SEO-module voor PrestaShop 8 en 9: dynamische meta, JSON-LD-schema's, meertalige sitemap, redirects, 404, slimme robots.txt, tracking en contentanalyzer.
Premium alles-in-één SEO-suite voor PrestaShop 8 en 9: dynamische metatemplates, volledige JSON-LD-schema’s, meertalige XML-sitemap, redirects, 404-monitoring, Open Graph en Twitter Cards, GA4 en GTM, slimme robots.txt met blokkering van AI-crawlers en een contentanalyzer — alles in één module.
Vereisten
- PrestaShop: 8.0 tot 9.x
- PHP: 8.1 of hoger (8.2 en 8.3 aanbevolen)
- MySQL: 5.7+ of MariaDB 10.3+
- Module productcomments (officieel PrestaShop): optioneel, alleen vereist voor AggregateRating op de producten
- mod_rewrite ingeschakeld op de Apache-server (of Nginx-equivalent) voor de herschreven URL’s
id_shop. U kunt per winkel volledig verschillende configuraties hebben.Installatie
- Download het bestand
dfallinoneseo-vX.Y.Z.zipvanuit uw DataFirefly-klantaccount. - Log in op uw PrestaShop back-office.
- Ga naar Modules → Module Manager.
- Klik rechtsboven op Een module installeren.
- Sleep het ZIP-bestand erin of klik op Een bestand selecteren.
- De installatie maakt automatisch de 11 SQL-tabellen aan, registreert de hooks en voegt het menu Verbeteren → DataFirefly SEO toe.
Eerste configuratie in 10 minuten
Deze snelle route laat u het essentiële configureren vóór de eerste Google-crawl.
- Instellingen → Algemeen: schakel de module in, vul de sitenaam en het label “Home” voor het broodkruimelpad in.
- Meta & templates: definieer minimaal een template Product en een template Categorie (zie de aparte sectie).
- Schema → Identiteit van de organisatie: vul logo, telefoon, e-mail, adres en de URL’s van de sociale netwerken (
sameAs) in. - Sitemap: schakel de sitemap in en klik op Nu regenereren.
- Tracking: voeg uw GA4 Measurement ID en/of GTM ID toe.
- Tracking → Verificaties: plak de verificatiewaarde van Google Search Console.
- Robots.txt: klik op Standaardwaarden laden (PS + AI-blokkering) om van een gezonde basis te vertrekken.
Metatemplates
De module vervangt het handmatig invoeren van meta_title en meta_description door dynamische templates per entiteitstype. Bij het opslaan van een fiche waarvan de meta leeg zijn, wordt het bijbehorende template automatisch toegepast.
Ondersteunde entiteitstypes
- Product: productfiches (alle types, inclusief virtuele producten en packs)
- Categorie: categoriepagina’s
- CMS-pagina: statische inhoudspagina’s
- Merk / Fabrikant: fabrikantpagina’s
- Leverancier: leverancierspagina’s
- Home: homepage van de winkel
- Generieke pagina’s:
/contact,/sitemap, enzovoort
Beschikbare tokens
De tokens worden bij het renderen van de pagina vervangen door de werkelijke waarden. Niet alle tokens zijn op elk entiteitstype beschikbaar.
{shop_name}— naam van de winkel{sep}— scheidingsteken (standaard|){product_name}— productnaam (huidige taal){product_reference}— interne referentie{product_sku}— alias van de referentie{product_ean13}— EAN13-barcode{product_brand},{brand}— merk/fabrikant{category}— standaardcategorie (product) of categorienaam (categoriepagina){category_parent}— naam van de bovenliggende categorie{category_description}— korte beschrijving (max. 160 tekens){short_description}— korte productbeschrijving (max. 160 tekens){price}— geformatteerde prijs incl. btw met valuta{price_tax_excl}— geformatteerde prijs excl. btw{title}— titel van de CMS-pagina{summary}— uittreksel van de CMS-inhoud (max. 160 tekens)
Voorwaardelijke blokken
Gebruik om geen leeg token te tonen de voorwaardelijke syntaxis:
{?product_brand}{product_brand} | {/?}{product_name} - {shop_name}
Is product_brand leeg (product zonder merk), dan wordt het hele blok tussen {?token} en {/?} verwijderd. Anders wordt de inhoud gerenderd en worden de tokens erin normaal vervangen.
Aanbevolen voorbeeldtemplates
Product:
Title : {?product_brand}{product_brand} {/?}{product_name} - {category} | {shop_name}
Description : Ontdek {product_name}{?product_brand} van {product_brand}{/?}. {short_description} Snelle levering bij {shop_name}.
Categorie:
Title : {category} - {?category_parent}{category_parent} - {/?}{shop_name}
Description : Alle producten uit de categorie {category} bij {shop_name}. {category_description}
Home:
Title : {shop_name} - Online winkel
Description : Welkom bij {shop_name}. Ontdek onze catalogus, snelle levering, veilig betalen.
Override per entiteit
Om een specifieke fiche te overschrijven (bijvoorbeeld een topproduct), klikt u op het icoon Meta-override in het menu Bulkbewerking of gebruikt u de URL:
?controller=AdminDfSeoMeta&entity=product&entity_id=42
De overridepagina laat toe per taal meta_title, meta_description, de robots-directive (bijvoorbeeld noindex,follow) en een custom canonical te definiëren.
JSON-LD-schema’s
De module genereert één enkel @graph-blok dat alle schema’s van de huidige pagina bundelt, gevalideerd met de Google Rich Results Test.
Automatisch gegenereerde schema’s
- Organization — op alle pagina’s, identiteit van het bedrijf
- WebSite — op de homepage, met
SearchActionom de sitelinks search box te activeren - LocalBusiness — als een fysiek adres is ingevuld
- BreadcrumbList — broodkruimelpad
- Product — op de productfiches, met
offers,priceValidUntil,gtin13/isbn/mpn - AggregateRating — geaggregeerd vanuit de officiële productcomments-module
- Article — op de CMS-pagina’s
- FAQPage — vanuit de FAQ-blokken van product of pagina
Identiteit van de organisatie
Tabblad Schema → Identiteit van de organisatie. In te vullen velden:
- Type: Organization, Corporation, LocalBusiness, Store, OnlineStore, OnlineBusiness
- Logo: absolute URL (aanbevolen minimaal 600×60, vierkante of liggende verhouding)
- Telefoon, E-mail: gebruikt in
contactPoint - Postadres: straat, postcode, plaats, land (ISO-2)
- sameAs: één URL per regel (Facebook, Instagram, LinkedIn, Twitter/X, enzovoort)
Geldigheid van de productaanbiedingen
Het veld Geldigheid van de productaanbiedingen (dagen) bepaalt de waarde van priceValidUntil in Product.offers. Standaard: 60 dagen. Google vereist dit veld om de prijs in de rich results te tonen.
Aangepaste schema’s
Tabblad Schema → Aangepaste schema’s. Laat toe JSON-LD-blokken op maat toe te voegen (HowTo, Recipe, Event, JobPosting, VideoObject, Course, enzovoort) op een precies bereik:
- global: alle pagina’s
- home: alleen de homepage
- product: alle productpagina’s
- product_id: één specifiek product (gebruikt het ID-veld)
- category, category_id: idem categorie
- cms, cms_id: idem CMS-pagina
Beschikbare variabelen in de aangepaste JSON: {shop_name}, {base_url}, {entity_id}, {entity_type}.
@graph ingevoegd. Valideer haar vóór publicatie met de Rich Results Test. Ongeldige JSON wordt stilzwijgend geweigerd.XML-sitemap
De module genereert een XML-sitemap conform de sitemaps.org-specificatie, met hreflang op elke URL en ondersteuning voor afbeeldingen. Architectuur: één sitemap-index per winkel, dan één sitemap per entiteitstype × taal, opgedeeld in chunks.
Configuratie
Tabblad Sitemap. Schakel de sitemap in en vink de op te nemen inhoud aan:
- Producten (standaard alle actieve producten)
- Categorieën
- CMS-pagina’s
- Merken / Fabrikanten
- Leveranciers
- Afbeeldingen (voegt
image:imagetoe aan elke product-URL) - Video’s (indien aanwezig in de fiches)
Extra opties:
- Uitverkochte producten uitsluiten: verwijdert out-of-stock producten
- Gzip: genereert ook de
.xml.gz-varianten (verkleint de door crawlers gedownloade grootte 5 tot 10 keer) - URL’s per bestand: chunkgrootte (aanbevolen 5000-10000, max. 50000 volgens de XML-spec)
Regeneratie
De regeneratie is handmatig vanuit de admin om onverwachte serverbelasting te vermijden. Klik op Nu regenereren.
Plan voor automatisering een cron die het volgende script aanroept (elke 6 of 12 uur, afhankelijk van de updatefrequentie van uw catalogus):
0 */6 * * * php /var/www/html/index.php fc=module&module=dfallinoneseo&controller=sitemap&action=rebuild
Indienen bij de zoekmachines
Klik op De zoekmachines pingen om Google en Bing te notificeren (legacy endpoints maar nog steeds actief). Dien voor Google Search Console de URL van de sitemap-index eenmalig in via GSC → Sitemaps. GSC crawlt automatisch opnieuw bij elke wijziging.
URL van de sitemap-index: https://uw-winkel.com/sitemap.xml
Publieke HTML-sitemap
Een voor mensen leesbare HTML-sitemap wordt automatisch gegenereerd op /plan-du-site. Ze bundelt categorieën (boomstructuur), CMS-pagina’s, merken, leveranciers en de 200 laatste producten. Nuttig voor de interne linking en de toegankelijkheid.
Redirects
De module beheert HTTP-redirects 301 (permanent), 302 (tijdelijk), 307, 308 en 410 (Gone) met drie matchtypes.
Matchtypes
- Exact: de bron-URL moet exact overeenkomen (zonder query string)
- Prefix: de bron-URL is een voorvoegsel van de gevraagde URL. Het achtervoegsel wordt in de bestemming behouden als Query string behouden is aangevinkt. Nuttig om hele mappen te migreren (
/oude-map/→/nieuwe-map/). - Regex: reguliere PHP-expressie (modus
~...~ihoofdlettergevoelig/-ongevoelig). De capturegroepen zijn in de bestemming beschikbaar via$1,$2, enzovoort.
Handmatig aanmaken
Tabblad Redirects → Nieuwe redirect. Velden:
- Bron-URL: pad zonder domein (bijv.
/oude-pagina) - Bestemmings-URL: pad of absolute URL. Leeg laten voor een 410-code.
- Matchtype, HTTP-code, Query string behouden
CSV-import / -export
Verwacht CSV-formaat (met header):
source,destination,type,code
/oud-product,/nieuw-product,exact,301
/oude-map/,/nieuwe-map/,prefix,301
/old-(.*),/new-$1,regex,301
De CSV-export neemt de op dat moment in de lijst gefilterde redirects over.
Automatische redirect bij slugwijziging
Is de optie Instellingen → Monitoring → Automatische 301-redirect bij URL-wijziging aangevinkt, dan maakt de module automatisch een 301 aan wanneer u de slug van een product, categorie, CMS-pagina, merk of leverancier wijzigt. De created_by wordt dan gemarkeerd als auto:urlchange ter onderscheiding.
404-monitoring
Tabblad Monitor 404. Vangt alle door PrestaShop geserveerde 404-URL’s op, met ontdubbeling, hittelling, botdetectie en hashing van de IP-adressen (salt COOKIE_KEY van PrestaShop voor AVG-conformiteit).
Beschikbare filters
- Onopgelost: URL’s zonder dekkende redirect (standaardweergave)
- Opgelost: URL’s waarvoor achteraf een redirect is aangemaakt
- Bots: hits van user-agents die als bots zijn herkend
- Alle
Een redirect aanmaken in één klik
Op elke regel opent de knop Redirecten een inline formulier dat de bron voorinvult. Voer de bestemming in, kies de HTTP-code, bevestig. De 404 wordt automatisch als opgelost gemarkeerd.
Opschoning en onderhoud
Het menu Instellingen → Monitoring biedt een drempel Maximumaantal bewaarde 404-vermeldingen (standaard 5000). Daarboven verwijdert de knop Oude 404’s opschonen de oudste onopgeloste vermeldingen.
Dynamische robots.txt
De module serveert een bij elk verzoek dynamisch gegenereerd bestand /robots.txt, gebaseerd op de regels in Robots.txt.
PrestaShop-presets + AI-blokkering
De knop Standaardwaarden laden (PS + AI-blokkering) overschrijft alle huidige regels en laadt een gezonde preset die:
- De gevoelige PrestaShop-mappen blokkeert (
/admin*/,/cache/,/classes/, enzovoort) - De technische pagina’s blokkeert (
/cart,/order,/my-account, enzovoort) - De belangrijkste niet-respectvolle AI-crawlers blokkeert: GPTBot, ClaudeBot, CCBot, Google-Extended, anthropic-ai
- Naar de sitemap verwijst (
Sitemap: /sitemap.xml)
Aangepaste regels
Elke regel heeft een user-agent, een directive (Allow, Disallow, Crawl-delay), een waarde en een positie (volgorde in het bestand). Schakel een regel in of uit zonder haar te verwijderen via de ON/OFF-knop.
Live voorbeeld
Het blok Voorbeeld van het gegenereerde bestand onderaan de pagina rendert de robots.txt zoals hij zal worden geserveerd, vóór publicatie.
Native llms.txt-bestand
De module serveert een bestand /llms.txt conform de llmstxt.org-specificatie. Dit bestand somt, in markdown, de hoofdsecties van de site op voor respectvolle AI-crawlers die een gestructureerd overzicht willen in plaats van de volledige HTML te scrapen.
Er is geen enkele configuratie vereist — de module genereert het bestand automatisch vanuit uw categorieboom, CMS-pagina’s en merken.
Open Graph en Twitter Cards
Tabblad Social. De module injecteert de tags og:* en twitter:* op alle pagina’s.
Instellingen
- Open Graph en Twitter Cards inschakelen: hoofdschakelaar
- Automatische og:locale: berekend vanuit de contexttaal (bijv.
nl_NL) - Standaard OG-afbeelding: absolute URL van een afbeelding van 1200×630 (gebruikt wanneer de pagina geen eigen afbeelding heeft)
- og:site_name, standaard og:type
- Twitter @handle en kaarttype (
summaryofsummary_large_image) - fb:app_id: Facebook App ID
Tracking: GA4, GTM, pixels
GA4 en Enhanced Ecommerce
Veld GA4 Measurement ID: formaat G-XXXXXXXXXX. Automatische formaatvalidatie.
Vink Enhanced Ecommerce aan om de events view_item, view_item_list, add_to_cart, remove_from_cart, begin_checkout, add_payment_info, purchase te activeren.
Vink Consent Mode v2 respecteren aan om de hits te anonimiseren tot de expliciete toestemming (compatibel met de standaard-CMP’s).
Google Tag Manager
Veld GTM ID: formaat GTM-XXXXXXX. De module injecteert het GTM-snippet in de head en de noscript-fallback direct na de opening van de body.
Advertentiepixels
- Facebook Pixel ID: 15 cijfers
- TikTok Pixel ID: alfanumeriek
Is Consent Mode v2 actief, dan worden deze pixels pas na toestemming geactiveerd.
Eigendomsverificaties
Plak de waarden van de verificatietags (zonder de volledige meta-tag, alleen de inhoud van het content-attribuut):
- Google Search Console
- Bing Webmaster Tools
- Yandex Webmaster
- Baidu
Aangepaste code in head en body-end
Twee vrije velden accepteren willekeurige HTML/JS:
- Code geïnjecteerd in de head: voor scripts van derden, aanvullende meta
- Code geïnjecteerd vlak vóór het sluiten van de body: ideaal voor chatwidgets, late retargeting, asynchrone scripts
Contentanalyzer
Tabblad Analyzer. Leg een product, een categorie, een CMS-pagina of ruwe HTML voor aan de analyzer voor een globale SEO-score en een detail van de metrieken.
Berekende metrieken
- Globale SEO-score (0-100) — gewogen weging van de checks
- Flesch-leesbaarheid — meertalige benadering (lettergreeptelling per klinkergroep)
- Aantal woorden, aantal zinnen
- Dichtheid van het hoofdtrefwoord (in %)
- Interne / externe / nofollow-links
- Afbeeldingen zonder alt-attribuut
- Structuur van de koppen H1 tot H6
- Aanwezigheid van het trefwoord in slug en eerste alinea
Checks
De analyzer geeft een lijst checks terug met status good / warn / bad:
- Lengte van de title (50-60 tekens)
- Lengte van de meta description (140-160 tekens)
- Aanwezigheid en lengte van de slug
- Lengte van de body (minimaal 300 woorden)
- Aanwezigheid van minstens één afbeelding met alt
- Trefwoord in de title, in de eerste alinea, in de slug
- Trefwoorddichtheid tussen 0,5% en 2,5%
- Minstens één H1 en meerdere H2/H3
Bulkbewerking
Tabblad Bulkbewerking. Gepagineerd raster (30 vermeldingen/pagina) met filters om snel meta_title, meta_description en link_rewrite te wijzigen op producten, categorieën of CMS-pagina’s.
Beschikbare filters
- Alle
- Zonder title: alleen vermeldingen met lege meta_title
- Zonder description: alleen vermeldingen met lege meta_description
- Zoeken op naam
Templates in bulk toepassen
De knop Templates toepassen past automatisch het voor het huidige entiteitstype gedefinieerde template toe op de fiches die aan de filters voldoen. Vink Alleen op lege velden toepassen aan om al ingevoerde meta niet te overschrijven.
SEO-metabox op de productfiche
Op de bewerkingspagina van een product in de back-office wordt een kader DataFirefly SEO toegevoegd met:
- Een live SEO-score (7 checks: lengte title, description, slug, body, afbeelding, EAN13, merk)
- Een getrouw gerenderd Google SERP-voorbeeld
- Het gedetecteerde hoofdtrefwoord
Geavanceerde instellingen
Indexering
Tabblad Instellingen → Indexering:
- Meertalige hreflang: genereert de tags
link rel="alternate"op alle pagina’s - x-default-strategie: Standaardtaal (aanbevolen), Engels, of Uitgeschakeld
- Canonical URL: injecteert
link rel="canonical" - Canonical op de paginering: Op de huidige pagina (aanbevolen), Altijd op pagina 1, of Geen canonical
- Automatische noindex: pagina’s /search, winkelwagen, mijn account, nieuwigheden, bestsellers, promoties, facetten
- Canonical naar de moederpagina op facetten: voorkomt duplicate content van de facetnavigatie
Afbeeldingen
- Automatische generatie van alt-attributen: past bij het opslaan van een afbeelding zonder alt het template toe
- Alt-template: standaard
{product_name} - {shop_name} - Native lazyload van afbeeldingen: voegt
loading="lazy"endecoding="async"toe aan alle afbeeldingen, met IntersectionObserver-fallback voordata-src-afbeeldingen
Onderhoud
- Cache legen: schoont de Smarty-cache + PrestaShop-cache op
- Oude 404’s opschonen: past de geconfigureerde drempel toe
- Alle gegevens exporteren (JSON): downloadt een JSON-bestand met alle SEO-tabellen van de huidige winkel (nuttig voor migratie tussen omgevingen of back-up vóór deïnstallatie)
Multistore
Alle functies zijn gescopet op id_shop. Door via de PrestaShop-contextkiezer van winkel te wisselen, ziet en wijzigt u alleen de gegevens van die winkel.
Bijzondere gevallen om te kennen:
- Templates: één template per paar (entiteitstype, winkel). Definieer de templates expliciet voor elke winkel.
- Sitemap: een aparte sitemap_index per winkel, bereikbaar op
https://winkel-1.com/sitemap.xml,https://winkel-2.com/sitemap.xml, enzovoort. - Robots.txt: regels per winkel, geserveerd op het bijbehorende domein
- Redirects: per winkel
- Aangepaste schema’s: per winkel
Probleemoplossing
De sitemap wordt niet gegenereerd
- Controleer of de map
modules/dfallinoneseo/sitemaps/door PHP beschrijfbaar is - Controleer de rechten:
chmod 755 modules/dfallinoneseo/sitemaps/ - Verhoog
max_execution_timein php.ini als u meer dan 50.000 producten hebt
De JSON-LD-schema’s verschijnen niet
- Controleer of de module is ingeschakeld (Instellingen → Algemeen)
- Controleer of het betreffende schematype is ingeschakeld (Schema → Gegenereerde schematypes)
- Leeg de PrestaShop-cache
- Inspecteer de HTML-broncode: de schema’s worden geïnjecteerd in een blok
script type="application/ld+json"
De 301-redirects werken niet
- Controleer of de module is geïnstalleerd en ingeschakeld
- Controleer of de redirects als actief zijn gemarkeerd (ON-knop)
- Test bij regex uw expressie op regex101.com in PCRE-modus
- De prioriteitsvolgorde is: exact → prefix → regex (op aflopende
hit_count)
GA4 / GTM wordt niet geïnjecteerd
- Controleer het formaat van het ID (
G-XXXXXXXofGTM-XXXXXXX) - Is Consent Mode v2 actief, dan staat het snippet standaard in “denied”-modus tot de toestemming. Controleer de CMP-laag.
- Inspecteer de
headvan de pagina: het GA4/GTM-snippet wordt vlak vóór het sluiten geïnjecteerd
De robots.txt verandert niet
- Controleer of er geen statisch
robots.txt-bestand in de siteroot staat (dat zou voorrang hebben op de module). Verwijder het. - De module serveert de robots.txt via een PrestaShop-route — controleer of de herschreven URL’s zijn ingeschakeld
Fout bij het aanmaken van de SQL-tabellen bij de installatie
- Controleer of de MySQL-gebruiker de rechten
CREATEenALTERheeft - Controleer de codering: MySQL moet
utf8mb4met collatieutf8mb4_unicode_ciondersteunen - Als het aangepaste tabelvoorvoegsel van PrestaShop langer is dan 5 tekens, kunnen sommige indexnamen de MySQL-limiet van 64 tekens overschrijden. Neem contact op met de support.
Technische referentie
Gebruikte hooks
De module registreert 18 hooks:
displayHeader— injectie van de metatags, canonical, hreflang, OG, Twitter, JSON-LD, GA4/GTM, verificatiesdisplayBeforeBodyClosingTag— injectie van GTM noscript, FB Pixel noscript, aangepaste body-end codedisplayBackOfficeHeader— CSS/JS van de back-officedisplayAdminProductsExtra— SEO-metabox op de productficheactionDispatcherBefore,actionDispatcherAfter— routing van de redirects en 404-registratieactionObjectProductAddAfter,actionObjectProductUpdateAfter— auto-fill meta + auto-301actionObjectCategoryAddAfter,actionObjectCategoryUpdateAfter— idem categorieactionObjectCmsAddAfter,actionObjectCmsUpdateAfter— idem CMSactionObjectManufacturerUpdateAfter,actionObjectSupplierUpdateAfter— auto-301 bij slugwijzigingactionAdminControllerSetMedia,actionFrontControllerSetMedia— CSS/JS-assetsdisplayProductExtraContent— gereserveerd voor toekomstig gebruikmoduleRoutes— routes/sitemap.xml,/plan-du-site,/robots.txt,/llms.txt
Toegevoegde SQL-tabellen
Alle tabellen gebruiken het voorvoegsel df_seo_, charset utf8mb4, collatie utf8mb4_unicode_ci:
df_seo_meta,df_seo_meta_lang— meta-overrides per entiteitdf_seo_template,df_seo_template_lang— templates per typedf_seo_redirect— redirects 301/302/307/308/410df_seo_404— 404-logboekdf_seo_score— score-snapshots (analyzer)df_seo_keyword— focustrefwoordendf_seo_robots_rule— robots.txt-regelsdf_seo_schema_custom— aangepaste JSON-LD-schema’sdf_seo_log— intern diagnoselogboek
Deïnstallatie
Het deïnstalleren verwijdert de hooks en de back-office tabbladen, maar behoudt de SQL-tabellen en de gegevens. Om volledig op te schonen:
DROP TABLE ps_df_seo_meta, ps_df_seo_meta_lang, ps_df_seo_template, ps_df_seo_template_lang,
ps_df_seo_redirect, ps_df_seo_404, ps_df_seo_score, ps_df_seo_keyword,
ps_df_seo_robots_rule, ps_df_seo_schema_custom, ps_df_seo_log;
DELETE FROM ps_configuration WHERE name LIKE 'DFSEO_%';
Updates en support
- Updates: 12 maanden inbegrepen bij aankoop. Optionele jaarlijkse verlenging voor 49 €.
- Support: 12 maanden per e-mail, antwoord binnen 48 werkuren.
- Changelog en download van de nieuwste versies via uw DataFirefly-klantaccount.