Herroepingsknop webshop Belgie: verplicht 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. Dit vereiste komt uit Richtlijn (EU) 2023/2673, die een nieuw artikel 11a invoegt in de Richtlijn consumentenrechten. De verplichting geldt horizontaal voor alle online B2C-overeenkomsten met een herroepingsrecht. Belgie heeft de omzettingsdeadline van 19 december 2025 niet gehaald. Het verplichte knopopschrift: "hier de overeenkomst ontbinden".
Staat de herroepingsinformatie op je webshop?
Onze scanner controleert of je webshop herroepingsinformatie en het modelformulier vermeldt.
Ik begrijp dat dit een technische scan is, geen juridisch advies, en ik accepteer de voorwaarden.
Wat artikel 11a vereist
Zes concrete vereisten. De handelaar moet een herroepingsfunctie aanbieden op zijn online interface. De knop draagt het opschrift "hier de overeenkomst ontbinden" of een ondubbelzinnig alternatief ("hier koop herroepen", "bestelling annuleren"). De knop moet zichtbaar en doorlopend beschikbaar zijn gedurende de 14-dagentermijn.
Het herroepingsproces verloopt in twee stappen. De consument klikt op de knop, vult een verklaring in (naam, contractnummer, bevestigingskanaal) en klikt op "ontbinding bevestigen". De handelaar bevestigt de ontvangst per e-mail. De bewijslast voor de tijdigheid van de herroeping ligt bij de handelaar.
Het herroepingsrecht: 14 dagen
Het herroepingsrecht geldt voor overeenkomsten op afstand en buiten de verkoopruimte gesloten B2C-overeenkomsten. De termijn van 14 dagen begint bij ontvangst van de goederen of bij sluiting van de overeenkomst voor diensten.
De uitzonderingen staan in het WER, artikelen VI.53. Maatwerk, geopende hygienische producten, verzegelde media, bederfelijke waren en datum-gebonden reserveringen zijn uitgesloten.
De 12-maanden verlengingsregel is het grootste risico. Heeft de consument geen informatie ontvangen over het bestaan en de plaatsing van de herroepingsknop? Dan verlengt de termijn naar 14 dagen plus 12 maanden. Tijdens die periode is waardevermindering niet aftrekbaar.
Digitale inhoud zonder materiele drager
Volgens art. VI.53, 13° WER vervalt het herroepingsrecht voor digitale inhoud zonder materiële drager onder drie cumulatieve voorwaarden: (a) voorafgaande uitdrukkelijke toestemming, (b) erkenning verlies herroepingsrecht en (c) bevestiging door de onderneming overeenkomstig art. VI.46, § 7.
Praktisch betekent dit dat de post-purchase bevestigingsmail (op duurzame gegevensdrager) de waivertekst moet hernemen. Een vinkje in de checkout volstaat dus niet als de e-mail die nadien wordt verstuurd, deze toestemming en erkenning niet bevestigt.
Stand van de omzetting in Belgie
De Belgische herroepingsregels staan in het Wetboek van economisch recht (WER) Boek VI, met name in de artikelen VI.45 e.v. (herroepingsrecht), VI.47 (14 dagen + 12-maanden verlenging) en VI.49 plus Bijlage 2 (modelformulier voor herroeping). Voor een volledige uitleg van de 14-dagen bedenktijd, de uitzonderingen en de terugbetalingsplichten zie onze gids over het herroepingsrecht voor Belgische webshops.
Belgie heeft de omzettingsdeadline van 19 december 2025 niet gehaald. De transpositie via aanpassing van het WER is nog niet afgerond per april 2026. De FOD Economie (Economische Inspectie) is de toezichthouder.
In de praktijk geldt hetzelfde als voor Nederland: richtlijnconforme interpretatie verplicht de rechter om het nationale recht zoveel mogelijk in overeenstemming met de richtlijn uit te leggen, ook voor de aanname van de omzettingswet. Wacht niet op de wetgever.
Realistisch risico
Het primaire risico is civielrechtelijk: verlenging van de herroepingstermijn naar 14 dagen plus 12 maanden. Bestuursrechtelijke handhaving is mogelijk via de FOD Economie. Boetes bestaan, maar toezichthouders zetten eerst in op herstel.
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 werkt op bodytekst en linkankers met meertalige patronen (Nederlands, Frans rétractation, Engels, Duits Widerrufsrecht, Italiaans recesso, Spaans desistimiento).
De scanner draait ook ECOM-02b (vergelijking van het exacte knopopschrift uit artikel 11a met de door de richtlijn voorgeschreven tekst per pagina-taal — HIGH op klant- / bestelpagina's) en ECOM-02c (aanwezigheid van het modelformulier als download of als inline formulier).
Wat de scanner nog niet controleert:
- Het tweestappenproces (verklaring → bevestiging) van begin tot eind.
- De duurzame-medium-bevestiging per e-mail.
- De doorlopende beschikbaarheid van de knop tijdens de hele 14-dagentermijn.
Die drie blijven handmatig te verifiëren. Scannerbevindingen zijn technische signalen, geen juridische verdicts.
Implementatie: knop + formulier per platform
De richtlijn beschrijft het resultaat, niet de implementatie. De vijf samples hieronder vullen samen de zes vereisten van artikel 11a in. Kies de stack die past, vertaal labels naar de taal van de webshop en test elke stap met een proeforder voor 19 juni 2026.
Alle samples gebruiken het knopopschrift "hier de overeenkomst ontbinden". Een ondubbelzinnig alternatief ("hier koop herroepen", "bestelling annuleren") mag; "neem contact op" niet.
Shopify (Liquid)
Snippet voor customers/order.liquid:
{%- comment -%}
Herroepingsknop — Richtlijn (EU) 2023/2673 Art. 11a, geldig vanaf 19 juni 2026.
WER Boek VI (BE) bevat de Belgische context, zie boven.
{%- 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 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 / WER VI.47" />
<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 %}
In Shopify Flow maak je een workflow met trigger "Contact us form submitted" en de conditie subject contains "Herroeping". De actie "Send email to customer" stuurt een mail naar het in het formulier opgegeven adres. Die mail is de bevestiging op duurzame gegevensdrager die artikel 11a lid 5 en art. VI.46 §7 WER vereisen.
WooCommerce (PHP / hook)
In functions.php van je childtheme of als kleine plugin:
<?php
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
}
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 CRD / WER VI.47.' );
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 bevestiging op duurzame gegevensdrager (artikel VI.46 § 7 WER, art. 11a lid 5 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 render je een tussenliggende bevestigingspagina vóór de annulering.
Lightspeed eCom (template + Apps API)
Lightspeed eCom heeft geen server-side templatinghook voor formulierverwerking. De compliant aanpak:
- Themetemplate: pas
templates/customer/account/orders.rainaan:
{% 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:
/pages/herroepenmet het tweestappenformulier. Submission gaat naar een eigen backend (Node, PHP, Cloudflare Worker) diePUT /orders/{id}.json(Lightspeed eCom API) aanroept met{"order":{"status":"cancelled"}}en daarna een transactionele e-mail verstuurt. -
Auth: API-key uit het Lightspeed-merchantpaneel met read+write op orders, alleen op de backend.
Geen backend? Een statische pagina met mailto: en een interactief invulbaar herroepingsformulier-PDF voldoet aan art. 11a lid 1, mits de bevestiging op duurzame gegevensdrager (de uitgaande mail) wordt verstuurd.
Magento (Adobe Commerce)
Eigen module met layout + block + controller. Layout 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>
Template:
<?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>
De controller annuleert de bestelling en triggert een transactionele e-mail via TransportBuilder met een eigen template waarin artikel 11a lid 5 / VI.46 § 7 WER wordt genoemd.
Custom / headless (HTML + serverless)
<!-- 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');
await db.herroepingen.insert({ order, name, email, at: new Date() });
await commerce.orders.cancel(order, { reason: 'Art. 11a CRD / WER VI.47' });
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 bevestiging op duurzame gegevensdrager (artikel VI.46 § 7 WER, art. 11a lid 5 Richtlijn consumentenrechten).`,
].join('\n\n'),
});
return Response.redirect(`/bestellingen/${order}?herroeping=bevestigd`, 303);
}
De serverless-functie maakt de drie verplichtingen, annuleren, registreren, bevestigen, expliciet en afzonderlijk testbaar.
Praktische checklist
| Vereiste | Wettelijke basis | Actie |
|---|---|---|
| Herroepingsfunctie op online interface | Art. 11a lid 1 (EU) / Art. VI.45 WER | Knop toevoegen |
| Opschrift "hier de overeenkomst ontbinden" | Art. 11a lid 2 | Exacte of ondubbelzinnige tekst |
| Zichtbaar en doorlopend beschikbaar | Art. 11a lid 3 | Knop tonen tijdens 14-dagentermijn |
| Tweestappenproces | Art. 11a lid 4 | Verklaring + bevestigingsknop |
| Ontvangstbevestiging per e-mail | Art. 11a lid 5 | Automatische mail |
| Modelformulier beschikbaar | Bijlage 2 WER | PDF of inline formulier |
| 14-dagentermijn in voorwaarden | Art. VI.47 WER | Termijn en uitzonderingen |
| Retourkostenbeleid vermeld | Art. VI.50 WER | Wie betaalt retour? |
De consument krijgt een uitweg
De deadline van 19 juni 2026 is een datum. Het punt is dat consumenten een blijvende, ondubbelzinnige uitweg krijgen. De 12-maanden verlenging zorgt ervoor dat uitstel de handelaar meer kost dan de consument.
Bronnen
- EUR-Lex, Richtlijn (EU) 2023/2673
- WER Boek VI, Marktpraktijken en consumentenbescherming (e-Justice)
- FOD Economie, consumentenbescherming
Gerelateerde guides
- Bouton de rétractation pour webshops belges (FR), Franstalige zusterpagina met dezelfde code-samples.
- Herroepingsknop voor Nederlandse webshops (NL), Nederlandse situatie en transpositie.
- Withdrawal button for Irish webshops (EN), Engelse versie.
- Widerrufsbutton im Onlineshop (DE), Duitse versie met BGB-kader en de afbakening tegenover § 312k BGB Kündigungsbutton.
- Widerrufsbutton voor Oostenrijkse webshops (AT), Oostenrijkse versie met FAGG-kader.
- Ondernemingsnummer op je Belgische website, aanvullende WER-verplichting.
Start een gratis scan op TrustYourWebsite.com om te zien of ECOM-02 op jouw webshop afgaat.
Dit artikel is technische analyse, geen juridisch advies. Raadpleeg een jurist voor advies over jouw specifieke situatie.