Herroepingsknop verplicht voor webshops vanaf 19 juni 2026
Steven | TrustYourWebsite · 20 april 2026 · Laatst bijgewerkt: mei 2026
Op 19 juni 2026 moet elke EU-webshop een duidelijk gelabelde herroepingsknop tonen op de klantaccount- of besteloverzichtpagina. Dit vereiste komt niet uit de Moderniseringsrichtlijn 2019/2161, zoals veel bronnen melden. De werkelijke bron is Richtlijn (EU) 2023/2673 van 22 november 2023, die een nieuw artikel 11a invoegt in de Richtlijn consumentenrechten 2011/83/EU. Ondanks de titel die verwijst naar financiele diensten op afstand, geldt artikel 11a horizontaal voor alle online B2C-overeenkomsten met een herroepingsrecht. Nederland heeft de omzettingsdeadline van 19 december 2025 niet gehaald. Het wetsvoorstel ligt bij de Tweede Kamer. Het verplichte knopopschrift in het Nederlands: "hier de overeenkomst ontbinden".
Staat de herroepingsinformatie op je webshop?
Onze scanner controleert of je webshop herroepingsinformatie, het modelformulier en de verplichte termijnen vermeldt.
Ik begrijp dat dit een technische scan is, geen juridisch advies, en ik accepteer de voorwaarden.
Wat artikel 11a precies vereist
Het nieuwe artikel 11a legt zes concrete vereisten op aan webshops die onder het herroepingsrecht vallen.
De handelaar moet een herroepingsfunctie aanbieden op zijn online interface. Dit is geen pdf-formulier of een e-mailadres. Het moet een interactieve functie zijn die de consument rechtstreeks kan gebruiken om de overeenkomst te ontbinden.
De knop moet het opschrift "hier de overeenkomst ontbinden" dragen, of een ondubbelzinnig alternatief. Acceptabele alternatieven zijn "hier koop herroepen" of "bestelling annuleren". De formulering moet helder zijn. Een knop met "contact opnemen" of "hulp nodig?" voldoet niet.
De knop moet zichtbaar en doorlopend beschikbaar zijn gedurende de volledige herroepingstermijn van 14 dagen. Dat betekent: op de besteloverzichtpagina of de klantaccountpagina, niet verstopt achter drie klikken.
De herroeping verloopt in een tweestappenproces. Stap 1: de consument klikt op de herroepingsknop en vult een verklaring in met naam, contractidentificatie en bevestigingskanaal. Stap 2: de consument klikt op "ontbinding bevestigen". Pas na die bevestiging is de herroeping geldig.
De handelaar moet de ontvangst bevestigen op een duurzaam medium (in de praktijk: een e-mail). De bevestiging moet onmiddellijk of snel na ontvangst worden verstuurd.
De bewijslast dat de herroeping wel of niet binnen de termijn is ingediend, ligt bij de handelaar. Geen bevestigingsmail gestuurd? Dan kun je niet bewijzen dat de herroeping te laat was.
Het herroepingsrecht in 14 dagen
Het herroepingsrecht geldt voor alle overeenkomsten op afstand en buiten de verkoopruimte gesloten B2C-overeenkomsten. De termijn van 14 dagen begint bij de ontvangst van de goederen (voor producten) of bij het sluiten van de overeenkomst (voor diensten).
Artikel 16 van de Richtlijn consumentenrechten kent uitzonderingen. Het herroepingsrecht geldt niet voor op maat gemaakte producten, geopende hygienische producten, verzegelde audio-/video-opnames of software waarvan de verzegeling is verbroken, bederfelijke waren en specifieke hotel-/transport-/vrijetijdsreserveringen met een vaste datum. Voor een uitgebreide uitleg van BW 6:230o, de acht uitzonderingscategorieen en de terugbetaaltermijn zie onze gids over het herroepingsrecht voor Nederlandse webshops.
De 12-maanden verlengingsregel is het grootste risico voor webshops die de knop niet implementeren. Als je de consument niet hebt geinformeerd over het bestaan en de plaatsing van de herroepingsknop, verlengt de herroepingstermijn naar 14 dagen plus 12 maanden. Tijdens die verlengde periode kun je als handelaar geen normale waardevermindering in rekening brengen voor gebruikte producten. Dat is een aanzienlijk financieel risico bij duurdere producten.
Stand van de omzetting in Nederland
Het wetsvoorstel voor de implementatie van artikel 11a draagt het nummer Kamerstuk 36 860 en is ingediend op 24 november 2025. Het voegt een nieuw artikel 6:230oa BW toe aan Boek 6 van het Burgerlijk Wetboek. De bestaande bepalingen over herroeping staan in de artikelen 6:230m, 6:230o en 6:230p BW.
Nederland heeft de omzettingsdeadline van 19 december 2025 niet gehaald. Het wetsvoorstel ligt bij de Tweede Kamer en is nog niet behandeld. De Autoriteit Consument & Markt (ACM) is de toezichthouder voor consumentenrecht. De Autoriteit Financiele Markten (AFM) is toezichthouder voor financiele diensten.
Wat betekent dit in de praktijk? Ondanks de gemiste deadline ben je als webshop verstandig om tegen 19 juni 2026 klaar te zijn. Consumenten kunnen zich mogelijk rechtstreeks op artikel 11a beroepen via richtlijnconforme interpretatie. De rechter past nationaal recht zoveel mogelijk uit in overeenstemming met de richtlijn, ook als de omzettingswet nog niet is aangenomen. In eerdere gevallen (Faccini Dori, C-91/92) heeft het Hof van Justitie directe werking van richtlijnen tegen particulieren weliswaar afgewezen, maar richtlijnconforme interpretatie is een ander instrument dat de rechter verplicht moet toepassen.
Realistisch risico
Het primaire risico is civielrechtelijk. De herroepingstermijn verlengt naar 14 dagen plus 12 maanden als je de consument niet over het bestaan en de plaatsing van de knop hebt geinformeerd. Tijdens die verlengde periode kun je geen waardevermindering in rekening brengen. Bij een product van 500 euro dat na 6 maanden wordt teruggestuurd, betekent dat volledige terugbetaling zonder aftrek.
Bestuursrechtelijke handhaving is mogelijk via de ACM. Boetes kunnen oplopen tot 4% van de jaaromzet bij grootschalige EU-dimensie-overtredingen onder artikel 24 van de Richtlijn consumentenrechten. In de praktijk signaleren toezichthouders dat ze eerst op herstel inzetten. De kans op een boete voor een individuele webshop die de knop een maand te laat implementeert, is klein. De kans op een verlengde herroepingstermijn bij een geschil met een consument is reeel.
Wat de scanner detecteert
De TrustYourWebsite scanner draait ECOM-02 op je webshop en signaleert pagina's zonder herroepings- of retourtekst en zonder links naar een herroepings-, retour- of voorwaardenpagina in een EU-taal. De check kijkt naar bodytekst en linkankers met meertalige patronen (Nederlands, Engels, Duits Widerrufsrecht, Frans rétractation, Italiaans recesso, Spaans desistimiento).
Wat ECOM-02 niet controleert, en dus handmatige verificatie vraagt:
- Het exacte knopopschrift ("hier de overeenkomst ontbinden" of een ondubbelzinnig alternatief), er staat een toekomstige scannercheck op de planning.
- Het tweestappenproces (verklaring → "ontbinding bevestigen").
- De duurzame-medium-bevestiging per e-mail.
- De doorlopende beschikbaarheid van de knop gedurende de volledige 14-dagentermijn.
- Aanwezigheid en volledigheid van het modelformulier voor herroeping.
Scannerbevindingen zijn technische signalen, geen juridische verdicts. De scanner passeren betekent niet dat de knop, het formulier en de bevestigingsmail end-to-end werken, dat blijft een handmatige check.
Implementatie: knop + formulier per platform
De richtlijn beschrijft het resultaat, niet de implementatie. De vijf voorbeelden hieronder vervullen allemaal dezelfde zes vereisten van artikel 11a. Kies degene die past bij je stack, vertaal de labels naar de taal van je webshop en test elke stap met een proeforder voordat de deadline van 19 juni 2026 verstrijkt.
Alle voorbeelden gebruiken het exacte knopopschrift "hier de overeenkomst ontbinden". Wijzig je dit, gebruik dan een ander ondubbelzinnig alternatief, "hier koop herroepen" en "bestelling annuleren" zijn toegestaan, "neem contact op" is dat niet.
Shopify (Liquid)
Voeg dit snippet toe aan customers/order.liquid zodat de knop op elke klant-orderdetailpagina verschijnt:
{%- comment -%}
Herroepingsknop — Richtlijn (EU) 2023/2673 Art. 11a, van kracht 19 juni 2026.
Wordt alleen getoond voor bestellingen binnen de 14-dagentermijn.
{%- endcomment -%}
{%- assign window_seconds = 1209600 -%}
{%- assign order_age = 'now' | date: '%s' | minus: order.created_at | date: '%s' -%}
{%- if order_age < window_seconds and order.cancelled_at == blank -%}
<a href="{{ shop.url }}/pages/herroepen?order={{ order.name | url_encode }}&email={{ order.email | url_encode }}"
class="btn btn-primary herroepingsknop">
Hier de overeenkomst ontbinden
</a>
{%- endif -%}
Op /pages/herroepen (een gewone paginatemplate) render je het tweestappenformulier:
{% form 'contact' %}
<h1>Overeenkomst ontbinden</h1>
<p>Stap 2 van 2. Bevestig om je herroepingsverklaring te versturen.</p>
<input type="hidden" name="contact[subject]" value="Herroeping — Art. 11a CRD" />
<label>Je naam
<input type="text" name="contact[name]" required />
</label>
<label>Ordernummer of contractidentificatie
<input type="text" name="contact[order_id]" value="{{ request.query_params.order }}" required />
</label>
<label>Bevestigingsmailadres
<input type="email" name="contact[email]" value="{{ request.query_params.email }}" required />
</label>
<button type="submit" name="contact[herroeping]" value="bevestigd">
Ontbinding bevestigen
</button>
{% endform %}
Bevestigingsmail: maak in Shopify Flow een workflow met trigger "Contact us form submitted" en de conditie subject contains "Herroeping". De actie is "Send email to customer" met het in het formulier ingevulde e-mailadres. Deze Flow-actie voldoet aan het duurzame-medium-vereiste van artikel 11a lid 5.
WooCommerce (PHP / hook)
Voeg het volgende toe aan functions.php van je childtheme of aan een eigen pluginbestand. De handler rendert de knop op de klant-orderdetailpagina en verwerkt de herroeping via een nonce-beveiligde POST:
<?php
// Render de knop op elke klant-orderdetailpagina.
add_action( 'woocommerce_order_details_after_order_table', 'tyw_render_herroepingsknop', 10, 1 );
function tyw_render_herroepingsknop( $order ) {
if ( ! is_a( $order, 'WC_Order' ) ) {
return;
}
$age = time() - $order->get_date_created()->getTimestamp();
if ( $age > 14 * DAY_IN_SECONDS || $order->has_status( array( 'cancelled', 'refunded' ) ) ) {
return;
}
$nonce = wp_create_nonce( 'tyw_herroep_' . $order->get_id() );
?>
<form method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>" class="tyw-herroepingsform">
<input type="hidden" name="action" value="tyw_submit_herroeping" />
<input type="hidden" name="order_id" value="<?php echo esc_attr( $order->get_id() ); ?>" />
<input type="hidden" name="_wpnonce" value="<?php echo esc_attr( $nonce ); ?>" />
<button type="submit" class="button">Hier de overeenkomst ontbinden</button>
</form>
<?php
}
// Verwerk de POST. Voor een echte tweestap-UX render je eerst een
// bevestigingspagina voordat deze handler de bestelling annuleert.
add_action( 'admin_post_tyw_submit_herroeping', 'tyw_handle_herroeping' );
add_action( 'admin_post_nopriv_tyw_submit_herroeping', 'tyw_handle_herroeping' );
function tyw_handle_herroeping() {
$order_id = isset( $_POST['order_id'] ) ? (int) $_POST['order_id'] : 0;
if ( ! $order_id || ! wp_verify_nonce( $_POST['_wpnonce'], 'tyw_herroep_' . $order_id ) ) {
wp_die( 'Ongeldig verzoek', 400 );
}
$order = wc_get_order( $order_id );
if ( ! $order ) {
wp_die( 'Bestelling niet gevonden', 404 );
}
$order->update_status( 'cancelled', 'Herroepen door consument onder Art. 11a Rcr.' );
wp_mail(
$order->get_billing_email(),
sprintf( 'Herroeping ontvangen voor bestelling %s', $order->get_order_number() ),
sprintf(
"Je herroeping van bestelling %s is ontvangen op %s.\n\nDe terugbetaling wordt binnen 14 dagen verwerkt.\n\nDeze e-mail is de duurzame-medium-bevestiging zoals vereist door artikel 11a lid 5 van de Richtlijn consumentenrechten.",
$order->get_order_number(),
current_time( 'mysql' )
)
);
wp_safe_redirect( add_query_arg( 'herroeping', 'bevestigd', $order->get_view_order_url() ) );
exit;
}
Voor een echte tweestap-UX (eerst "verklaring indienen", dan "ontbinding bevestigen") render je een tussenliggende template die GET ?order_id= ontvangt en het bevestigingsformulier toont. Pas op de tweede POST wordt de bestelling daadwerkelijk geannuleerd.
Lightspeed eCom (template + Apps API)
Lightspeed eCom (Lightspeed Retail X-Series) heeft geen server-side templatinghook voor willekeurige formulierverwerking. De compliant aanpak:
- Themetemplate: pas
templates/customer/account/orders.rainaan (Rain-templating) zodat de knop op de orderoverzichtspagina verschijnt:
{% for order in orders %}
<div class="order-row">
<a href="/account/orders/{{ order.number }}">Bestelling {{ order.number }}</a>
{% if order.age_seconds < 1209600 and order.cancelled == false %}
<a href="/pages/herroepen?order={{ order.number | url_encode }}"
class="btn btn-primary">Hier de overeenkomst ontbinden</a>
{% endif %}
</div>
{% endfor %}
-
Herroepingspagina: maak
/pages/herroepenmet het tweestappenformulier. Submission gaat naar een kleine backend in eigen beheer (Node, PHP of een Cloudflare Worker) die:- Een PUT-aanroep doet op de Lightspeed eCom API
PUT /orders/{id}.jsonmet{"order":{"status":"cancelled"}}. - Een bevestigingsmail stuurt via je transactionele provider (Postmark / SendGrid / Mailgun).
- Een PUT-aanroep doet op de Lightspeed eCom API
-
Auth: de backend gebruikt een API-key uit het Lightspeed-merchantpaneel met read+write-rechten op orders. Deze key staat niet in de storefront.
Geen backend mogelijk? Dan is het alternatief een statische pagina met mailto:-link en een ondubbelzinnig herroepingsformulier-PDF. Trager dan een knop maar voldoet aan artikel 11a lid 1 zolang het formulier interactief invulbaar is. Verifieer met Lightspeed-accountmanagement of een no-code app uit de Lightspeed App Store de eis afdekt.
Magento (Adobe Commerce)
Magento vraagt om een klein eigen module. Globale opzet:
- Block + template, render de knop op de orderview-pagina via
app/code/Acme/Herroeping/view/frontend/layout/sales_order_view.xml:
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<body>
<referenceContainer name="sales.order.info.buttons">
<block class="Acme\Herroeping\Block\Button"
name="acme.herroeping.button"
template="Acme_Herroeping::button.phtml" />
</referenceContainer>
</body>
</page>
app/code/Acme/Herroeping/view/frontend/templates/button.phtml:
<?php
/** @var \Acme\Herroeping\Block\Button $block */
$order = $block->getOrder();
if ( ! $block->isBinnenTermijn( $order ) ) {
return;
}
$action = $block->getUrl( 'herroeping/cancel/submit', [ 'order_id' => $order->getId() ] );
$key = $block->getFormKey();
?>
<form action="<?= $block->escapeUrl( $action ); ?>" method="post">
<input type="hidden" name="form_key" value="<?= $block->escapeHtml( $key ); ?>" />
<button type="submit" class="action primary">Hier de overeenkomst ontbinden</button>
</form>
-
Controller,
app/code/Acme/Herroeping/Controller/Cancel/Submit.phpvalideert de form key, roept$this->orderManagement->cancel( $orderId )aan, en triggert een transactionele e-mail viaTransportBuilder. Voeg een eigen template toe onderview/frontend/email/herroeping_bevestigd.htmlmet bewoordingen die aansluiten op artikel 11a lid 5. -
Tweestap-UX, toon eerst een bevestigingspagina voordat de controller de bestelling annuleert. Een flash-sessiebericht per order voorkomt dat een refresh een dubbele submission veroorzaakt.
Custom / headless (HTML + serverless)
Voor een eigen frontend zonder e-commerceframework, twee bestanden:
<!-- order-detail.html: knop -->
<form method="get" action="/herroepen">
<input type="hidden" name="order" value="BES-2026-001" />
<button type="submit">Hier de overeenkomst ontbinden</button>
</form>
<!-- /herroepen.html: bevestigingsstap -->
<form method="post" action="/api/herroeping">
<input type="hidden" name="order" value="BES-2026-001" />
<label>Je naam <input type="text" name="name" required /></label>
<label>Bevestigingsmail <input type="email" name="email" required /></label>
<button type="submit">Ontbinding bevestigen</button>
</form>
// api/herroeping.js (Vercel / Cloudflare / Netlify function)
export default async function handler(req) {
if (req.method !== 'POST') return new Response('Methode niet toegestaan', { status: 405 });
const form = await req.formData();
const order = form.get('order');
const email = form.get('email');
const name = form.get('name');
// 1. Registreer de herroeping in je database (id, tijdstip, kanaal).
await db.herroepingen.insert({ order, name, email, at: new Date() });
// 2. Annuleer de bestelling in je commerce-backend.
await commerce.orders.cancel(order, { reason: 'Art. 11a Rcr.' });
// 3. Duurzame-medium-bevestiging — Postmark / SendGrid / Resend.
await mailer.send({
to: email,
subject: `Herroeping ontvangen voor bestelling ${order}`,
text: [
`Je herroeping van bestelling ${order} is ontvangen op ${new Date().toISOString()}.`,
`De terugbetaling wordt binnen 14 dagen verwerkt.`,
`Deze e-mail is de duurzame-medium-bevestiging zoals vereist door artikel 11a lid 5 van de Richtlijn consumentenrechten.`,
].join('\n\n'),
});
return Response.redirect(`/bestellingen/${order}?herroeping=bevestigd`, 303);
}
De serverless-functie is het schoonste patroon: de drie verplichtingen, annuleren, registreren, bevestigen, staan expliciet en zijn afzonderlijk testbaar.
Praktische checklist
| Vereiste | Wettelijke basis | Actie |
|---|---|---|
| Herroepingsfunctie op online interface | Art. 11a lid 1 | Knop toevoegen op besteloverzicht/klantaccount |
| Opschrift "hier de overeenkomst ontbinden" | Art. 11a lid 2 | Exacte of ondubbelzinnige tekst gebruiken |
| Zichtbaar en doorlopend beschikbaar | Art. 11a lid 3 | Knop tonen gedurende volledige 14-dagentermijn |
| Tweestappenproces met bevestiging | Art. 11a lid 4 | Naam, contractnummer, bevestigingsknop |
| Ontvangstbevestiging op duurzaam medium | Art. 11a lid 5 | Automatische bevestigingsmail sturen |
| Modelformulier herroeping beschikbaar | Bijlage I(B) | PDF of inline formulier met vereiste velden |
| 14-dagentermijn vermeld in voorwaarden | Art. 9-10 | Termijn, beginpunt en uitzonderingen opnemen |
| Retourkostenpolicy vermeld | Art. 14 lid 1 | Wie betaalt de retourkosten? |
De deadline is niet het punt
De deadline van 19 juni 2026 is een datum op een kalender. Het punt is dat consumenten een blijvende, ondubbelzinnige uitweg krijgen. Webshops die proberen het herroepingsrecht te begraven door het formulier te verstoppen of de knop weg te laten, zijn precies degenen waarop de toezichthouder zich het eerst zal richten. De 12-maanden verlenging zorgt ervoor dat uitstel de handelaar meer kost dan de consument.
Gerelateerde guides
- Herroepingsknop voor Belgische webshops, zelfde artikel 11a, WER Boek VI als kader.
- Withdrawal button for Irish webshops (EN), sibling-pagina met dezelfde code-samples in Engelse versie.
- Widerrufsbutton im Onlineshop (DE), Duitse versie met BGB-kader en het verschil tot de § 312k BGB Kündigungsbutton.
- Widerrufsbutton voor Oostenrijkse webshops (AT), Oostenrijkse versie met FAGG-kader.
- Bouton de rétractation pour webshops belges (BE-FR), Franstalige Belgische zusterpagina.
- DMCCA cancellation in the UK, zustersituatie voor het Verenigd Koninkrijk (geen Art. 11a, eigen wetgeving).
De herroepingsknop is één verplichting. Je webshop moet ook je KVK-nummer en BTW-nummer zichtbaar vermelden, en het ODR-platform is inmiddels opgeheven. Controleer je volledige webshopverplichtingen via onze AVG-checklist.
Wil je weten of de scanner ECOM-02 op jouw webshop afgaat? Start een gratis scan op TrustYourWebsite.com.
Dit artikel is technische analyse, geen juridisch advies. Raadpleeg een jurist voor advies over jouw specifieke situatie.
Website-handleidingen
Privacyverklaring 2026: dit moet erin volgens de AVG
De 14 verplichte onderdelen van een privacyverklaring onder artikel 13 AVG. Met AP-toezicht 2026, Netflix-boete en concrete checklist voor MKB.
Colofon op je website: wat is verplicht in Nederland?
De 8 verplichte colofon-items voor Nederlandse websites. Handelsregisterwet, Dienstenwet, eenmanszaak-afscherming en ACM-toezicht in 2026.
Cookiebanner dark patterns: wat verboden is in 2026
De 12 verboden cookiebanner-patronen volgens EDPB-taxonomie. AP vuistregels, CNIL Google-boete van EUR 325M en wat de scanner na reject-all detecteert.