Since 19 June 2026, an online shop has to offer the way out of a purchase as visibly as the way in. § 356a of the German Civil Code (BGB) requires an electronic withdrawal function for distance contracts concluded online, and for subscriptions the cancellation button under § 312k BGB applies alongside it. Most guides explain which words have to appear on the buttons. This article answers a different question: what does “permanently available, prominently placed and easily accessible” mean for people who shop with a keyboard, a screen reader, voice control or strong magnification? We walk through the flow step by step – entry point, input page, confirmation, acknowledgement of receipt – and name for each step the failure patterns that show up in an audit and the WCAG criteria they are measured against. The implementation belongs in the same test scope as the rest of an accessible online shop.
Key takeaways
- Since 19 June 2026, § 356a BGB requires a withdrawal function labelled „Vertrag widerrufen“ (withdraw from contract) or an equivalent unambiguous wording (Directive (EU) 2023/2673, Art. 2; § 356a(1) BGB).
- The function must be permanently available, prominently placed and easily accessible throughout the withdrawal period of 14 days (§ 355(2), § 356a(1) BGB). For screen readers, keyboards and zoom, “easily accessible” only becomes measurable through WCAG.
- Visible label and accessible name must match (W3C, WCAG 2.2, SC 2.5.3). An icon button with a diverging aria-label misses the labelling duty of the statute and the standard at the same time.
- 51 per cent of home pages contain form fields without a label (WebAIM Million, 2026). The withdrawal input page asks for only three items, and each of them needs a visible label (W3C, WCAG 2.2, SC 3.3.2).
- After submission, the confirmation has to be announced without the focus having to jump there (W3C, WCAG 2.2, SC 4.1.3). A silent success page leaves open whether the withdrawal has arrived.
- 49 per cent of online shoppers have kept a product at least once because returning it was too complicated (Bitkom, 2025). An inaccessible withdrawal flow raises exactly this hurdle for people with disabilities.
What § 356a and § 312k BGB require at the interface
§ 356a BGB applies to distance contracts concluded via an online interface, which covers the typical purchase in an online shop. The trader has to ensure that consumers can submit a declaration of withdrawal via a withdrawal function. The function must be clearly legible and labelled „Vertrag widerrufen“ or another equivalent unambiguous wording (§ 356a(1) BGB). The provision transposes Directive (EU) 2023/2673, whose provisions member states apply from 19 June 2026 and under which the function remains available throughout the entire withdrawal period (Directive (EU) 2023/2673). The withdrawal period is 14 days (§ 355(2) BGB).
Behind the entry point follows an input page with three items: the consumer's name, details identifying the contract or the affected part of it, and the electronic means of communication through which the acknowledgement of receipt should arrive (§ 356a(2) BGB). Submission happens through a confirmation function labelled „Widerruf bestätigen“ (confirm withdrawal) or an equivalent unambiguous wording (§ 356a(3) BGB). The trader then has to send, without undue delay, an acknowledgement of receipt on a durable medium that contains at least the content of the declaration and the date and time of receipt (§ 356a(4) BGB).
For subscriptions and other continuing obligations that can be concluded on a website, § 312k BGB applies alongside. The cancellation button carries „Verträge hier kündigen“ (cancel contracts here) or a corresponding unambiguous wording and leads directly to a confirmation page. That page asks for the type of termination, identification, the contract, the desired end date and the channel for the cancellation confirmation; submission happens through a button labelled „jetzt kündigen“ (cancel now) (§ 312k(2) BGB). Buttons and confirmation page must be permanently available as well as directly and easily accessible. Websites relating to financial services and contracts for financial services are expressly excluded by § 312k(1) BGB.
| Aspect | Withdrawal function under § 356a BGB | Cancellation button under § 312k BGB |
|---|---|---|
| Scope | Distance contract via an online interface | Continuing obligation that can be concluded on the website |
| Label of the entry point | „Vertrag widerrufen“ or equivalent unambiguous wording | „Verträge hier kündigen“ or corresponding unambiguous wording |
| Requested details | Name, contract or part of it, means of communication for the acknowledgement | Type of termination, identification, contract, end date, channel for the confirmation |
| Submission | „Widerruf bestätigen“ or equivalent unambiguous wording | „jetzt kündigen“ or corresponding unambiguous wording |
| Availability | permanently available, prominently placed, easily accessible during the withdrawal period | permanently available as well as directly and easily accessible |
| Evidence | Acknowledgement on a durable medium with date and time | Saving the declaration with date and time, confirmation in text form |
| WCAG focus | SC 2.5.3 label in name, SC 3.3.2 labels, SC 4.1.3 status messages | the same criteria, plus SC 3.3.8 where a login comes first |
“Easily accessible” is not a design term
Why the post-purchase flow belongs in the BFSG test scope
The BFSG applies to e-commerce services provided to consumers after 28 June 2025 (§ 1(3) BFSG). The definition refers to services provided via websites and apps with a view to concluding a consumer contract (§ 2 no. 26 BFSG). The implementing ordinance requires perceivable, operable, understandable and robust design for websites including the associated online applications (§ 12 no. 3 BFSGV). Withdrawal and cancellation happen after the contract is concluded, but on the same website, in the same customer account and with the same components as the purchase. In an audit we therefore do not separate this flow from the accessible checkout but test it as its continuation.
There is a second anchor. Identification and authentication functions provided as part of a service must be designed to be perceivable, operable, understandable and robust (§ 19 no. 2 BFSGV). If a shop requires a login before the withdrawal, that login falls under exactly this provision. For a service that is offered or provided contrary to the requirements, the BFSG provides for a fine of up to one hundred thousand euros (§ 37 BFSG). The cancellation button adds a civil-law consequence: if buttons and confirmation page are not provided as prescribed, consumers can cancel at any time and without observing a notice period (§ 312k(6) BGB).
When the way back is too complicated, the goods stay
Step 1: Finding and reaching the entry point
“Permanently available” and “prominently placed” are quick to tick off visually: a button in the customer account, a link in the footer. For screen reader users the question starts earlier. They take in a page through headings, landmarks and link lists. A withdrawal function that sits in the footer as an icon without text does not appear in any of these lists with an understandable name. For keyboard users, all functionality must be operable through the keyboard interface (W3C, WCAG 2.2, SC 2.1.1), and the focus has to stay visible along the way (W3C, WCAG 2.2, SC 2.4.7). What matters for tab order and the focus outline is covered in our article on keyboard navigation in web development.
People who work with strong magnification only see a section of the page. Text must be resizable up to 200 per cent without assistive technology (W3C, WCAG 2.2, SC 1.4.4), and content must work at a width of 320 CSS pixels without horizontal scrolling, which corresponds to 400 per cent zoom at a starting width of 1280 CSS pixels (W3C, WCAG 2.2, SC 1.4.10). If the withdrawal function disappears into a collapsed menu that only opens on mouse hover, it is neither prominent nor easily accessible for this group. A consent banner covering the footer has a similar effect: when the button receives focus, it must not be entirely hidden (W3C, WCAG 2.2, SC 2.4.11). How such a banner should be built is described in the article on accessible cookie banners.
The name matters most at this point. For controls with a visible label, the accessible name must contain the visible text (W3C, WCAG 2.2, SC 2.5.3). If the button reads „Vertrag widerrufen“ but the code says aria-label="Retoure starten", a screen reader user hears something different from what her sighted colleague reads, and the voice command “click Vertrag widerrufen” goes nowhere. About 9 per cent of buttons on desktop pages and 11 per cent on mobile pages have no accessible name at all (Web Almanac, 2025); empty buttons appear on 30.6 per cent of home pages (WebAIM Million, 2026). An icon button with an arrow or a parcel symbol quickly joins these statistics.
- Place the entry point in a fixed, recurring location, for example in the footer and in the customer account, in the same order on every page
- Use the visible text „Vertrag widerrufen“; an icon may add to it but never replace it
- Set the accessible name so that it fully contains the visible text, ideally starting with it
- Mark it up as a real link or a real button, not as a clickable div without a role and without keyboard support
- Make the target at least 24 × 24 CSS pixels or give it sufficient spacing (W3C, WCAG 2.2, SC 2.5.8)
- Check at 200 per cent text size and a width of 320 CSS pixels whether the entry point stays visible and operable
- Build consent banners, chat windows and sticky bars so that they do not cover the focused entry point
Step 2: An input page without hurdles
By law, the input page asks for only three items: name, contract and channel of communication (§ 356a(2) BGB). That sounds like a small form, and that is precisely the trap, because small forms are rarely built with the same care as the checkout. According to WebAIM, 51 per cent of home pages contain form fields without a label, and one third of all recorded form inputs (33.1 per cent) were not properly labelled (WebAIM Million, 2026). The Web Almanac counts almost a quarter of inputs with no accessible name at all, 24.65 per cent on desktop and 24.93 per cent on mobile; nearly as many take their name only from placeholder text, 24.49 per cent on desktop (Web Almanac, 2025). For input, WCAG requires labels or instructions (W3C, WCAG 2.2, SC 3.3.2). A placeholder is not enough, because it disappears while typing.
For signed-in customers, the contract can be preselected. A selection list of orders with date and item name helps people with cognitive impairments more than a free field “order number” whose format nobody remembers. If a shop spreads the flow over several pages, a further rule applies: information previously entered or provided in the same process is either auto-populated or available for selection (W3C, WCAG 2.2, SC 3.3.7). For name and email address, the matching autocomplete values make it easier to fill in stored data. How labels, required-field markers and error messages are built in detail is shown in the article on accessible forms with labels and validation.
The login is the trickier part. For the withdrawal, the law asks for name, contract and channel of communication; a customer account is not among these items (§ 356a(2) BGB). Many shops still put a login in front of the function because the orders live there. Whether that is compatible with “easily accessible” is a legal question. Technically, the rule is: if a login comes first, no step may require a cognitive function test, such as remembering a password or solving a puzzle, unless an alternative or a supporting mechanism is offered (W3C, WCAG 2.2, SC 3.3.8). A CAPTCHA with distorted characters or a password field that blocks pasting becomes a double obstacle in front of the withdrawal form. Alternatives are described in the article on accessible authentication without CAPTCHA hurdles; how areas behind the login are tested is covered in auditing accessibility behind the login.
SC 2.1.1 Keyboard
Entry point, input fields, contract selection and confirmation work without a mouse, in a logical order (W3C, WCAG 2.2, SC 2.1.1 and 2.4.3).
SC 2.5.3 Label in name
„Vertrag widerrufen“, „Widerruf bestätigen“, „Verträge hier kündigen“ and „jetzt kündigen“ appear visibly on the element and in the accessible name (W3C, WCAG 2.2, SC 2.5.3).
SC 3.3.2 Labels
Name, contract and channel of communication have visible labels that are programmatically associated with the field (W3C, WCAG 2.2, SC 3.3.2).
SC 3.3.1 Error identification
If an item is missing, the field is identified and the error is described in text, not just outlined in red (W3C, WCAG 2.2, SC 3.3.1).
SC 3.3.8 Authentication
A login placed in front works without a transcription CAPTCHA and without a paste block in the password field (W3C, WCAG 2.2, SC 3.3.8).
SC 4.1.3 Status messages
The confirmation after submission is announced without the focus having to move there (W3C, WCAG 2.2, SC 4.1.3).
Step 3: Confirm, report errors, announce the status
The confirmation function is the moment in which the withdrawal is submitted. If an input error occurs here, the affected field has to be identified and the error described in text (W3C, WCAG 2.2, SC 3.3.1). A red outline alone reaches neither people with colour vision deficiency nor screen reader users. A proven pattern is an error summary at the top of the form that receives focus and links to the individual fields, plus a message directly at the field, attached via aria-describedby. Just as important is what must not happen: data already entered is not lost on error, and the page does not reload with an empty form.
After a successful submission, the person needs clear feedback. Status messages must be marked up so that assistive technologies can present them without them receiving focus (W3C, WCAG 2.2, SC 4.1.3). In practice there are two clean ways: either a new page loads whose title and main heading read „Widerruf eingegangen“ (withdrawal received) and whose heading receives focus, or the message appears on the same page in a region with role="status". Only about 33 per cent of websites use the aria-live attribute at all (Web Almanac, 2025). A confirmation page without focus and without an announcement is a typical pattern that makes an otherwise tidy flow fail at the last step: the person hears nothing, presses again and afterwards does not know whether they have withdrawn twice.
The acknowledgement of receipt must contain the content of the declaration and the date and time of receipt (§ 356a(4) BGB). The status message on the page should name the same details, so that nobody has to wait for the email to know what has arrived. How live regions are set up robustly without producing duplicate announcements is described in the article on accessible error and status messages. In single-page applications where the confirmation appears without a page change, focus management in single-page apps comes on top. The following skeleton shows the input page with entry point, labels, error summary and status region.
<!-- Entry point: visible text and accessible name are identical (SC 2.5.3) -->
<a class="widerruf-einstieg" href="/konto/widerruf/">Vertrag widerrufen</a>
<!-- Input page -->
<main>
<h1 id="widerruf-titel" tabindex="-1">Vertrag widerrufen</h1>
<!-- Error summary: receives focus when an error occurs (SC 3.3.1) -->
<div id="fehlerliste" tabindex="-1" hidden>
<h2>Bitte prüfen Sie eine Angabe</h2>
<ul><li><a href="#vertrag">Wählen Sie die Bestellung, die Sie widerrufen möchten.</a></li></ul>
</div>
<form method="post" aria-labelledby="widerruf-titel" novalidate>
<label for="name">Ihr Name</label>
<input id="name" name="name" autocomplete="name" required>
<label for="vertrag">Welche Bestellung oder welchen Artikel möchten Sie widerrufen?</label>
<select id="vertrag" name="vertrag" required aria-describedby="vertrag-fehler">
<option value="">Bitte wählen</option>
<option value="a">Bestellung vom Vormonat, Winterjacke</option>
</select>
<p id="vertrag-fehler" class="feldfehler" hidden>Bitte wählen Sie eine Bestellung aus.</p>
<label for="email">E-Mail-Adresse für die Eingangsbestätigung</label>
<input id="email" name="email" type="email" autocomplete="email" required>
<button type="submit">Widerruf bestätigen</button>
</form>
<!-- Status message without moving focus (SC 4.1.3) -->
<p id="widerruf-status" role="status"></p>
</main>
<script>
// After a successful submission: write the message into the live region
// and lock the form so nobody withdraws twice by accident.
function widerrufEingegangen(zeitpunkt, adresse) {
document.querySelector('form').inert = true;
document.getElementById('widerruf-status').textContent =
'Ihr Widerruf ist am ' + zeitpunkt + ' eingegangen. ' +
'Die Eingangsbestätigung geht an ' + adresse + '.';
}
</script>Step 4: Delivering a readable acknowledgement
The acknowledgement of receipt goes out on a durable medium, usually by email. This is where the fourth failure pattern lives: emails sent as a designed image, with the entire content in one graphic. A screen reader reads at best the alternative text, often just a file name. Non-text content needs a text alternative that serves the equivalent purpose (W3C, WCAG 2.2, SC 1.1.1); for a confirmation with contract details, date and time, only real text achieves that. It also needs a clear subject line such as “Acknowledgement of your withdrawal”, a logical heading structure, a plain-text part and a contrast of at least 4.5:1 for body text (W3C, WCAG 2.2, SC 1.4.3). Guidance on structuring and testing emails is given in the article on accessible newsletters in email marketing; the rules apply to transactional emails just the same.
For cancellation under § 312k BGB, the evidence is split across two places. The person must be able to save their declaration with date and time on a durable medium (§ 312k(3) BGB), and the trader confirms the content, the date and time of receipt and the end date immediately by electronic means in text form (§ 312k(4) BGB). In many implementations, the saving option is a print or download button on the confirmation page. It needs the same care as everything else: an understandable name, keyboard operation and, for a PDF, a tagged file that a screen reader reads in the correct order.
The cancellation flow: same test, different words
For subscriptions, the checklist applies accordingly, only with different labels. The cancellation button carries „Verträge hier kündigen“ or a corresponding unambiguous wording, the confirmation button „jetzt kündigen“ (§ 312k(2) BGB). Both texts also belong in the accessible name. A button “Manage membership” that first leads to a menu with retention offers meets neither the labelling rule nor the requirement to lead directly to the confirmation page. The confirmation page asks for more than the withdrawal, including the type of termination, the end date and the channel for the cancellation confirmation (§ 312k(2) BGB). This quickly turns into radio buttons and a date field, and both need clean markup: radio buttons grouped in a fieldset with a legend, the date field with a visible format hint.
The option “at the earliest possible date” should be offered as a clearly labelled first choice, because without a date the termination takes effect at the earliest possible point in case of doubt anyway (§ 312k(5) BGB). This spares people who can only operate a date field with difficulty one of the hardest steps. Anyone who still offers a calendar picker has to make it fully keyboard-operable and announce the selected value; how that works is shown in the article on accessible appointment booking with a calendar widget.
Four failure patterns and how to fix them
| Failure pattern | Effect on the people affected | Remedy and criterion |
|---|---|---|
| Entry point only as an icon in the footer | The screen reader announces a button without a name, voice control finds no target, under magnification the entry point is out of sight | Visible text „Vertrag widerrufen“, identical accessible name, fixed position (SC 2.5.3 and 2.4.7) |
| Mandatory login with a transcription CAPTCHA | People with visual or reading impairments never reach the form | Allow withdrawal without an account or a login without a cognitive function test (SC 3.3.8, § 19 no. 2 BFSGV) |
| Confirmation page without focus and without an announcement | No feedback, repeated submission, uncertainty about the state | Focus on the heading of the result page or a status region with role="status" (SC 4.1.3) |
| Acknowledgement as an image email | Content, date and time can neither be read aloud nor enlarged | HTML email with real text and a plain-text part (SC 1.1.1) |
The four patterns often go back to the same cause: the post-purchase flow is built as a compulsory exercise and cannot even be reached without a test order. Anyone who only tests the home page, product page and basket never sees it. On top of that, withdrawal and cancellation frequently come from extensions of the shop system that bring their own markup and can change with every update. A flow that has been signed off once therefore only stays accessible if it is included in the recurring review.
How we test the flow up to the acknowledgement
Automated rules alone find missing labels and empty buttons, but not whether a status message is marked up as one or whether the withdrawal can still be found at 400 per cent magnification. We therefore test the flow step by step in the browser: with automated rules and our own measurements of contrast, target size, focus, text spacing and reflow at 320 CSS pixels, in the desktop and smartphone layouts and also in opened states such as the error summary and the confirmation. Every step is run with the keyboard without a mouse, and in the screen reader output we check whether names, roles, states and status messages are marked up so that screen readers can announce them. What the review of the screen reader output covers is described on a separate page. The results go into the WCAG audit as a separate test section with an assessment of every criterion and findings per step.
Two figures show how far practice is from this standard. In the Aktion Mensch test, only 20 of 65 examined shopping sites were operable by keyboard alone (Aktion Mensch, 2025). And 67 per cent of websites explicitly remove the default focus outline (Web Almanac, 2025). A withdrawal flow built in the same design system inherits these weaknesses unless someone measures it on purpose.
- Inventory: where is the entry point today, what is it called in the code, which team or extension delivers the flow?
- Align the labels: visible text and accessible name for all four buttons
- Build the input page as a native form with labels, autocomplete values and error messages in text
- Define status message and focus handling after submission and check them in the screen reader output
- Design the acknowledgement as an HTML email with a plain-text part and check it in the inbox
- Add the flow to the recurring review so that updates of the shop system do not break it unnoticed
A withdrawal button that only mouse users can find is a hiding place for everyone else. It only becomes easily accessible once it can be heard, reached and enlarged.
The effort stays manageable because the flow is short: one entry point, one form with three fields, one confirmation, one email. Building it cleanly once implements the BGB requirements in a way that also works for people with disabilities and closes a gap between checkout and customer account that otherwise easily goes unobserved. The adjacent parts of the shop are covered in the articles on older customers in online shopping and on the accessible product detail page with variants and basket.
Sources and legal basis
Related Articles
Accessible Product Search and Filters in Online Shops
Building search, autocomplete, facet filters and results lists accessibly: the combobox pattern, WCAG 2.2 and a practical test routine for shop teams.
Accessible Checkout for Shops
Accessible checkout: usable payment forms, understandable error messages, address fields and progress indicators for online shops built to WCAG 2.2 AA level.
Keeping Accessibility: Review Cadence After Go-live
The duty does not end at acceptance. Which events trigger a re-test, which sample size holds up and how long the evidence has to stay on file.