Koffieabonnementen, supplement-boxes, refill-producten, SaaS-diensten voor webshops — de abonnementseconomie groeit explosief. Maar de meeste subscription-webshops missen een cruciale kans: AI-zoekmachines zoals ChatGPT en Perplexity citeren nauwelijks abonnementsdiensten, omdat die het schema en de FAQ-content missen die AI nodig heeft om het herhalingsmodel te begrijpen. Dit artikel legt uit hoe je dat verandert.
Een eenmalige productaankoop en een abonnement zijn voor AI fundamenteel verschillende entiteiten — maar de meeste webshops behandelen ze identiek. Het gevolg: ChatGPT weet niet dat jouw "Premium Koffie Box" een maandelijks abonnement is dat je kunt pauzeren, dat je daarmee 15% bespaart per levering, en dat je binnen 24 uur kunt opzeggen. Zonder die informatie in machine-leesbare vorm citeert AI je niet bij de meest waardevolle zoekvragen.
AI-gebruikers stellen andere vragen over subscriptions dan over losse producten. Ze willen weten: Kan ik pauzeren? Hoeveel bespaar ik? Hoe flexibel is de levering? Wat krijg ik precies elke maand? Als jouw productpagina die vragen niet expliciet beantwoordt — en zeker niet in structured data — laat je de meest waardevolle AI-citaties liggen.
AI kan alleen citeren wat het begrijpt. Maak het verschil tussen eenmalige en recurring prijs expliciet via UnitPriceSpecification schema met unitCode 'MON' of 'ANN'. Voeg de besparingen toe als concreet eurobedrag, niet alleen als percentage.
Beantwoord de vier kritische subscription-vragen: opzegging, pauze, leverings-flexibiliteit, en pakketinhoud. FAQPage JSON-LD maakt deze antwoorden direct citeerbaar. AI kiest altijd de meest directe en feitelijke bron.
Welke producten zitten er in jouw box of bundel? Gebruik hasOfferCatalog of IsRelatedTo om de inhoud te koppelen. AI-antwoorden op "wat zit er in" vragen verwijzen naar webshops die dit expliciet declareren.
Schrijf citeerbare content over de waarde van het abonnement: besparingen cumulatief berekend, kwaliteitsgaranties per levering, aanpassingsopties. AI citeert concrete voordelen — "elke levering €4,20 goedkoper dan los kopen" werkt beter dan "grote besparing".
Het grootste schema-gat in subscription-webshops is het ontbreken van een gestructureerd recurring prijsmodel. Standaard Offer schema toont alleen een prijs — maar voor abonnementen heb je priceSpecification met UnitPriceSpecification nodig om te verduidelijken dat het om een terugkerende betaling gaat.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Dagverse Koffie Abonnement — Premium Blend",
"description": "Maandelijks 500g versgemalen specialty koffie, direct van de boer. Bespaart €4,20 per levering vergeleken met losse aankoop. Pauzeer of stop altijd voor de volgende levering.",
"brand": {
"@type": "Brand",
"name": "KoffieKracht"
},
"image": "https://voorbeeld.nl/images/koffie-abonnement.jpg",
"offers": {
"@type": "Offer",
"url": "https://voorbeeld.nl/koffie-abonnement",
"priceCurrency": "EUR",
"price": "19.95",
"priceSpecification": [
{
"@type": "UnitPriceSpecification",
"price": "19.95",
"priceCurrency": "EUR",
"unitCode": "MON",
"name": "Maandelijks abonnement",
"description": "Automatische levering elke 4 weken. Minimale looptijd: geen. Opzegbaar vóór volgende levering."
},
{
"@type": "UnitPriceSpecification",
"price": "24.15",
"priceCurrency": "EUR",
"unitCode": "C62",
"name": "Eenmalige aankoop",
"description": "Los kopen zonder abonnement"
}
],
"availability": "https://schema.org/InStock",
"deliveryLeadTime": {
"@type": "QuantitativeValue",
"minValue": 1,
"maxValue": 3,
"unitCode": "DAY"
},
"seller": {
"@type": "Organization",
"name": "KoffieKracht",
"@id": "https://voorbeeld.nl/#organization"
}
},
"additionalProperty": [
{
"@type": "PropertyValue",
"name": "Leveringsfrequentie",
"value": "Elke 4 weken"
},
{
"@type": "PropertyValue",
"name": "Hoeveelheid per levering",
"value": "500g versgemalen koffie"
},
{
"@type": "PropertyValue",
"name": "Besparing t.o.v. los kopen",
"value": "€4,20 per levering (17%)"
},
{
"@type": "PropertyValue",
"name": "Opzegtermijn",
"value": "Voor de volgende levering, altijd kosteloos"
},
{
"@type": "PropertyValue",
"name": "Pauzemogelijkheid",
"value": "Ja, via klantenaccount"
}
],
"potentialAction": {
"@type": "SubscribeAction",
"target": "https://voorbeeld.nl/koffie-abonnement/starten"
}
}
| Schema element | Wat het doet voor AI | GEO impact | Prioriteit |
|---|---|---|---|
priceSpecification.unitCode: "MON" |
Declareert recurring maandprijs | Hoog | 1 |
additionalProperty: opzegtermijn |
Beantwoordt "kan ik opzeggen?" automatisch | Hoog | 2 |
potentialAction: SubscribeAction |
Vertelt AI-agents hoe te subscriben | Medium | 3 |
description: besparing in euro's |
Citeerbaar feit voor vergelijkingsvragen | Hoog | 2 |
additionalProperty: leveringsfrequentie |
Beantwoordt "hoe vaak?" direct | Medium | 3 |
deliveryLeadTime |
Concrete levertijd per levering | Medium | 4 |
De gemiddelde subscription-koper stelt vier typen vragen voordat hij of zij converteert. AI citeert jou alleen als die vragen op jouw pagina direct en feitelijk beantwoord worden. Hier zijn de vier verplichte FAQ-categorieen voor elke subscription-webshop:
"Ons abonnement is volledig flexibel en je kunt altijd stoppen wanneer je wilt."
"Opzeggen kan tot 48 uur vóór de volgende levering, kosteloos, via jouw klantenaccount of email. Er is geen minimale contractduur."
"Met ons abonnement bespaar je flink ten opzichte van losse aankopen!"
"Een maandabonnement kost €19,95 per levering. Hetzelfde pakket los kopen kost €24,15. Je bespaart dus €4,20 per levering, ofwel €50,40 per jaar bij maandelijkse levering."
Bij curated boxes en mystery-boxes willen AI-gebruikers weten wat ze elke maand krijgen. Beschrijf de selectiecriteria, het gemiddeld aantal producten, de waarde per box, en of de inhoud aanpasbaar is. Webshops die dit expliciet beschrijven worden 4,2× vaker geciteerd bij "beste [product] box Nederland" vragen.
Leveringsfrequentie, leadtime, verpakkingstype (duurzaam?), en aanpassingsopties zijn differentiators. "Elke eerste maandag van de maand bezorgd, in 100% recyclebare verpakking, gratis boven €15" is een feit dat AI graag citeert. "Snelle levering" is dat niet.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Kan ik mijn koffieabonnement pauzeren of opzeggen?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Ja. Je kunt pauzeren (1 tot 3 maanden) of opzeggen via jouw klantenaccount. Opzeggen is kosteloos, zonder minimale looptijd, tot 48 uur vóór de volgende bezorgdatum. Er zijn geen opzegkosten."
}
},
{
"@type": "Question",
"name": "Hoeveel bespaar ik met een koffieabonnement?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Je betaalt €19,95 per maandlevering (500g). Dezelfde koffie los kopen kost €24,15. Je bespaart €4,20 per levering, wat neerkomt op €50,40 per jaar bij maandelijkse levering."
}
},
{
"@type": "Question",
"name": "Wanneer wordt mijn koffieabonnement bezorgd?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Je kiest zelf je bezorgdag bij aanmelding. Standaard wordt elke 4 weken bezorgd, op de dag van jouw keuze. Je kunt de bezorgdatum tot 5 dagen van tevoren aanpassen via jouw account."
}
},
{
"@type": "Question",
"name": "Kan ik de koffesoort wijzigen?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Ja. Je kunt per levering kiezen uit 12 specialty koffiesoorten (Arabica, Robusta en blends). Wijzigingen zijn mogelijk tot 48 uur voor de bezorgdatum via jouw account of via chat."
}
}
]
}
Refill-boxes en curated bundles hebben een extra GEO-uitdaging: AI moet begrijpen wat er in de box zit. hasOfferCatalog of meerdere IsRelatedTo verbindingen helpen AI om de inhoud te koppelen. Maar het meest effectief is een duidelijke bundel-beschrijving in de tekst én in structured data.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Maandelijkse Supplement Refill Box — Actief Pakket",
"description": "Elke maand automatisch aangevuld: 1× Omega-3 (90 capsules), 1× Vitamine D3 (60 capsules), 1× Magnesium Bisglycinaat (120 capsules). Alle producten zijn gecertificeerd door NHDA. Totale waarde: €54,85. Met abonnement: €39,95/maand. Besparing: €14,90 per maand.",
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Inhoud Actief Pakket",
"itemListElement": [
{
"@type": "Offer",
"itemOffered": {
"@type": "Product",
"name": "Omega-3 Visolie 1000mg",
"description": "90 capsules, voldoende voor 3 maanden bij dagelijks gebruik"
}
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Product",
"name": "Vitamine D3 2000 IE",
"description": "60 capsules, voldoende voor 2 maanden bij dagelijks gebruik"
}
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Product",
"name": "Magnesium Bisglycinaat 300mg",
"description": "120 capsules, hoog-absorbeerbare vorm, voldoende voor 2 maanden"
}
}
]
}
}
| Platform | Subscription plugin/feature | JSON-LD aanpak | Moeilijkheid |
|---|---|---|---|
| WooCommerce | WooCommerce Subscriptions | functions.php: filter woocommerce_structured_data_product om priceSpecification toe te voegen |
Medium |
| Shopware 6 | Subscription plugin (B2B Suite of custom) | Twig template override: product-detail.html.twig, priceSpecification via custom fields | Medium |
| Shopify | Recharge, Bold Subscriptions | product.liquid aanpassen, subscription metafields injecteren in JSON-LD | Laag |
| Magento 2 | Amasty Subscriptions | PHTML template override, priceSpecification via ViewModels | Hoog |
| Headless/Custom | Stripe Billing, Chargebee | Server-side rendering van JSON-LD via API data, volledig controleerbaar | Laag |
// functions.php — WooCommerce Subscriptions JSON-LD uitbreiden
add_filter('woocommerce_structured_data_product', function($markup, $product) {
if (!class_exists('WC_Subscriptions_Product') || !WC_Subscriptions_Product::is_subscription($product)) {
return $markup;
}
$period = WC_Subscriptions_Product::get_period($product); // 'month', 'year', etc.
$price = WC_Subscriptions_Product::get_price($product);
$regular = $product->get_regular_price();
$unit_map = ['month' => 'MON', 'year' => 'ANN', 'week' => 'WEE', 'day' => 'DAY'];
$unit_code = $unit_map[$period] ?? 'MON';
$price_spec = [
[
'@type' => 'UnitPriceSpecification',
'price' => $price,
'priceCurrency'=> get_woocommerce_currency(),
'unitCode' => $unit_code,
'name' => sprintf('Abonnement per %s', $period === 'month' ? 'maand' : $period),
'description' => sprintf('Opzegbaar per %s, geen minimale looptijd', $period === 'month' ? 'maand' : $period),
]
];
if ($regular && $regular > $price) {
$besparing = number_format($regular - $price, 2, ',', '.');
$price_spec[] = [
'@type' => 'UnitPriceSpecification',
'price' => $regular,
'priceCurrency'=> get_woocommerce_currency(),
'unitCode' => 'C62',
'name' => 'Eenmalige aankoop',
'description' => sprintf('Los kopen, €%s duurder per levering', $besparing),
];
}
if (isset($markup['offers'])) {
$markup['offers']['priceSpecification'] = $price_spec;
}
return $markup;
}, 10, 2);
{# product-detail.html.twig (vereenvoudigd) #}
{% set isSubscription = product.customFields.subscription_enabled ?? false %}
{% if isSubscription %}
{% endif %}
Naast schema en FAQ is er een derde laag die subscription GEO bepaalt: de contentformules die je gebruikt in je productbeschrijvingen en landingspagina's. AI kiest citaten op basis van concreetheid, feitelijkheid en directe relevantie voor de vraag.
| Contentformule | Voorbeeld | Citatiepotentieel |
|---|---|---|
| BESPARING-EXACT | "Bespaar €4,20 per levering. Bij maandelijkse levering is dat €50,40 per jaar." | Hoog |
| OPZEGGING-FEIT | "Opzeggen kan elke maand, tot 48 uur voor levering, via account of email. Geen boetes." | Hoog |
| LEVERING-SPEC | "Elke 4 weken bezorgd, keuze uit 3 leveringsfrequenties (2, 4 of 6 weken), gratis verzending." | Hoog |
| INHOUD-WAARDE | "Box bevat 4-6 producten met een totale verkoopwaarde van minimaal €45. Jij betaalt €29,95." | Hoog |
| CUMULATIEF-VOORDEEL | "Na 6 maanden heb je €25,20 bespaard. Na een jaar €50,40." | Medium |
| FLEXIBILITEIT-CLAIM | "Volledig flexibel!" (zonder specificatie) | Laag |
| Type | Primaire AI-zoekvragen | GEO focus | Top schema-element |
|---|---|---|---|
| Koffie/thee-abonnement | "beste koffieabonnement NL", "koffiebox vergelijken" | Besparing + herkomst kwaliteit | UnitPriceSpecification + additionalProperty:origin |
| Supplement box | "supplement abonnement Nederland", "vitamine box maandelijks" | Certificeringen + inhoud exact | hasOfferCatalog + hasCredential |
| Curated lifestyle box | "maandelijkse verassingsdoos", "lifestyle box abonnement" | Waarde per box + unboxing-beschrijving | AggregateRating + description:waarde |
| Huishoudproducten refill | "refill wasmiddel abonnement", "zero waste schoonmaak box" | Duurzaamheid + gemak + kostenvoordeel | additionalProperty:sustainabilityNote |
| Pet food subscription | "hondenvoer abonnement goedkoop", "kattenvoer box" | Aanpasbaar + diëet-specificaties | additionalProperty:dietaryRestrictions + pauze FAQ |
| SaaS/Software | "beste [tool] abonnement", "goedkoopste [categorie] software" | Feature-vergelijking + jaarkorting | SoftwareApplication + UnitPriceSpecification:ANN |
| Beauty/skincare box | "beauty box Nederland vergelijken", "maandelijkse make-up box" | Merkprestige + inhoud waarde | hasOfferCatalog + brand.@id |
| Fout | Gevolg | Fix |
|---|---|---|
| Geen recurring prijs in schema, alleen de abonnementsprijs als normale prijs | AI ziet product als eenmalig item, geen subscription-citaties | UnitPriceSpecification met unitCode: "MON" toevoegen |
| Opzeggingsinfo alleen in algemene voorwaarden (geen FAQ) | AI vindt de informatie niet; gebruiker overtuigt zich niet via AI-antwoord | FAQPage JSON-LD met directe opzeginformatie op productpagina |
| Besparingen alleen als percentage ("15% korting"), niet als eurobedrag | AI citeert concrete getallen; percentages zijn minder citeerbaar | Voeg "€X per levering goedkoper" toe aan description én additionalProperty |
| Bundelinhoud alleen beschreven in afbeeldingen, geen tekst | AI kan afbeeldingen niet indexeren; "wat zit erin" vragen worden niet beantwoord | hasOfferCatalog met itemListElement per product + tekstbeschrijving |
| Geen onderscheid tussen abonnement en eenmalige aankoop in schema | AI begrijpt het verschil niet en vergelijkt je verkeerd met eenmalige producten | Twee UnitPriceSpecification entries: MON + C62 (eenmalig) |
| Pauzeer-optie niet beschreven, alleen opzegging | Gebruikers die willen pauzeren worden niet geholpen via AI; churn stijgt | Aparte FAQ entry over pauzeren met exacte termijnen en stappenplan |
Het meten van GEO impact op subscriptions vraagt om een specifieke meetopzet in GA4, omdat AI-verkeer anders geattribueerd wordt dan gewone organische traffic.
session_source bevat "chatgpt", "perplexity", "claude", "gemini" of session_medium = "referral" van AI-domeinenpurchase met item_category: "subscription" als afzonderlijk eventDe GEO Tool analyseert of jouw subscription-pagina's correct schema, FAQ-dekking en herhalingswaarde-signalen hebben. Gratis, geen registratie nodig.
Gratis GEO scan starten →
AI-systemen herkennen subscriptions via UnitPriceSpecification.unitCode (MON/ANN), via FAQ-content over billing en opzegging, en via keywords in productbeschrijvingen ("maandelijks", "automatisch", "herhaald"). Zonder deze signalen behandelt AI jouw subscription als een gewoon product.
Gebruik Product met een Offer die priceSpecification bevat. Daarbinnen gebruik je UnitPriceSpecification met unitCode: "MON" (maandelijks) of "ANN" (jaarlijks). Voeg SubscribeAction als potentialAction toe.
Beantwoord de vier kritische subscription-vragen direct en feitelijk: (1) opzegtermijn exact, (2) leveringsfrequentie en aanpassingsopties, (3) besparing in euro's vs. losse aankoop, (4) inhoud per levering gedetailleerd. AI citeert concrete cijfers, geen marketingtaal.
Gebruik twee UnitPriceSpecification entries: één voor de abonnementsprijs (MON) en één voor de losse prijs (C62). Beschrijf de besparing in euro's per levering én cumulatief per jaar in de description. AI pikt exacte bedragen op.
Maak in GA4 een AI-segment op session_source voor chatgpt.com, perplexity.ai, en gerelateerde domeinen. Track subscription conversies als apart event. Vergelijk MRR-groei vóór en na implementatie en test maandelijks of je geciteerd wordt bij relevante AI-zoekvragen.