Shopware Accessibility Checklist 2026 | WCAG 2.1 AA & EAA
Last updated: 2026-06-02
Shopware is a German open-source commerce platform that is widely used across Europe, which puts it squarely in the path of the European Accessibility Act - and that matters, because the merchants most likely to be audited under the EAA are exactly the mid-market European brands Shopware targets. Shopware 6's storefront is built on the Bootstrap front end and a Twig templating layer, so it starts from a reasonably semantic, responsive base with real buttons and form controls. The accessibility risk lives in the layers merchants build on top. The biggest is Shopping Experiences, Shopware's drag-and-drop CMS for product, category, and landing pages: it lets a merchant assemble pages from blocks and elements with full control over heading text, image alt, and order, which means it equally lets them ship pages with no real headings, images with empty alt, and a focus order that does not match the visual layout. The product detail page adds a configurator (variant property selectors), an image slider/gallery, and an off-canvas cart that slides in when an item is added - each a common failure point for labelling, focus management, and status announcements. Shopware's off-canvas navigation and cart are overlays that must trap focus and respond to Escape but often do not in customised themes. The newsletter and registration forms inherit the theme's field markup, which is decent by default but easily broken by custom blocks. And Flow Builder, which fires confirmations and notifications, controls on-page messaging that needs to reach assistive technology through live regions rather than silent toasts. Shopware ships no built-in accessibility checker, so every fix below is verified with axe, WAVE, or Lighthouse plus a manual keyboard and screen reader pass on the storefront. This checklist follows a shopper from a Shopping Experiences landing page through the configurator to a confirmed order.
Common Accessibility Issues
In the Shopping Experiences editor, text and 'image + text' blocks let merchants style large headline text without marking it as a heading, and category/landing pages are often assembled with no H1 or with heading levels chosen for size rather than hierarchy. Screen reader users who navigate by headings find no outline, or one that jumps levels, and cannot scan the page.
In each text element, use the rich-text editor's paragraph/heading format to mark the page's main title as H1 and section titles as H2/H3 in logical order, rather than only enlarging the font. Keep exactly one H1 per page, do not skip levels, and verify the rendered outline with a headings tool on the published page.
<div class="cms-element-text">
<p style="font-size:2.5rem;font-weight:700">Summer Collection</p>
</div> <div class="cms-element-text">
<h1 style="font-size:2.5rem;font-weight:700">Summer Collection</h1>
</div> The Shopware product configurator renders variant properties (size, colour, material) as selectable swatches or buttons. When these are styled <div>/<span> or buttons whose only label is a colour swatch, screen reader users cannot tell what property they are setting or read the selected value - 'button' with no name, repeated across a row.
Group each property with a programmatic label: use a <fieldset>/<legend> or an element with role="radiogroup" and aria-label carrying the property name, and give each option an accessible name (the colour or size text, not just a swatch). Mark the chosen option with aria-checked/aria-pressed, and ensure options are reachable and operable by keyboard.
<div class="product-detail-configurator-options">
<span class="swatch" style="background:#c00"></span>
<span class="swatch" style="background:#00c"></span>
</div> <div role="radiogroup" aria-label="Colour">
<button role="radio" aria-checked="true" aria-label="Red">
<span class="swatch" style="background:#c00"></span></button>
<button role="radio" aria-checked="false" aria-label="Blue">
<span class="swatch" style="background:#00c"></span></button>
</div> Adding a product slides in Shopware's off-canvas cart, and the mobile menu opens the same off-canvas pattern. In customised themes these overlays frequently open without moving focus into themselves, leave focus on the page behind them, cannot be closed with Escape, and do not return focus to the trigger on close - trapping keyboard and screen reader users behind the panel.
Treat the off-canvas cart and menu as modal dialogs: on open, move focus to the panel (or its close button); trap Tab order within it while open; support Escape to close; and return focus to the element that opened it. Mark the panel with role="dialog" and aria-modal="true" and give it an accessible name.
<div class="offcanvas">
<!-- slides in; focus stays on the page behind -->
<div class="cart-items">...</div>
</div> <div class="offcanvas" role="dialog" aria-modal="true"
aria-label="Shopping cart">
<button class="offcanvas-close" aria-label="Close cart">x</button>
<div class="cart-items">...</div>
</div>
<!-- JS: focus the panel on open, Escape closes, focus returns --> Shopware shows toast-style notifications for actions like adding to cart, applying a voucher, or newsletter sign-up, and Flow Builder can trigger on-page messages. When these are rendered as visually-styled toasts without an ARIA live region, screen reader users get no confirmation that the action succeeded or failed.
Render status and error notifications into an ARIA live region. Provide a container with role="status" / aria-live="polite" (use role="alert" / aria-live="assertive" for errors) that is present on load, and write the message text into it when the action completes. Keep messages specific and text-based, not colour-only.
<div class="alert alert-success show">
Product has been added to the shopping cart.
</div> <div class="flashbags" role="status" aria-live="polite"></div>
<script>
document.querySelector('.flashbags').textContent =
'Product has been added to the shopping cart.';
</script> The product gallery slider (and Shopping Experiences image-slider element) often ships next/previous controls that are icon-only buttons with no accessible name, autoplay that cannot be paused, and slide images with empty or duplicated alt text. Screen reader users hear 'button' with no function and miss the product views entirely.
Give every slider control a text accessible name ('Previous image', 'Next image'), provide a visible pause control if the slider autoplays (and prefer not to autoplay), and give each slide image meaningful, distinct alt text describing that view. Ensure the controls and slides are keyboard operable and have visible focus.
<button class="gallery-prev"><i class="icon-arrow-left"></i></button>
<img src="v2.jpg" alt=""> <button class="gallery-prev" aria-label="Previous image">
<i class="icon-arrow-left" aria-hidden="true"></i>
</button>
<img src="v2.jpg" alt="Leather bag, interior pocket detail"> Shopware's theme manager makes it easy to set a brand primary colour for buttons, links, and badges, and merchants frequently choose a light or low-contrast brand colour that fails the 4.5:1 ratio for button text and sale/special prices. Low-vision shoppers then struggle to read the 'Add to cart' and 'Checkout' actions.
Check the theme's primary/secondary/buy-button colours and the sale-price and badge colours against WCAG: text needs at least 4.5:1 (3:1 for large text). Adjust the theme variables until the pairs pass, and never use colour as the only signal of a sale - keep a text label too.
$sw-color-buy-button: #7fb3ff; /* white text fails */
.product-price--special { color:#ff7a7a; } /* fails on white */ $sw-color-buy-button: #1f5fc2; /* white text passes */
.product-price--special { color:#c0392b; } /* passes on white */ Custom Shopping Experiences form blocks and some theme overrides render newsletter and registration inputs with placeholder-only prompts or labels that are visually hidden in a way that also removes them from the accessibility tree. The result is fields a screen reader announces as 'edit text' with no name, and prompts that vanish on input.
Give every form field a persistent, programmatically associated <label> (visually-hidden is fine only if it remains in the accessibility tree via the correct sr-only technique), add autocomplete attributes, and surface required state and validation errors as text tied to the field with aria-describedby. Test each form field with a screen reader on focus.
<input type="email" name="email" placeholder="Your email address"> <label for="newsletter-email">Email address</label>
<input type="email" id="newsletter-email" name="email"
autocomplete="email" required> Shopware's plugin ecosystem (Shopware Store) lets developers add storefront widgets - cookie banners, product comparison, wishlists, quick buy - and these are not held to an accessibility standard. Plugins built from non-semantic <div>/<span> elements add controls with no role, name, or keyboard support, regressing an otherwise compliant storefront.
Audit each storefront plugin: run axe/WAVE and a keyboard-only pass on the pages it affects, and prefer plugins that use native HTML controls. For custom or bespoke widgets, ensure every control is a real button/link or has a correct role and accessible name, is keyboard operable, and shows a visible focus indicator before shipping.
<div class="wishlist-toggle" data-id="42"
onclick="toggleWishlist(42)"></div> <button type="button" class="wishlist-toggle" data-id="42"
onclick="toggleWishlist(42)"
aria-pressed="false" aria-label="Add Leather Bag to wishlist">
</button> Shopware-Specific Tips
- Build Shopping Experiences pages with the same heading discipline you would hand-code: one H1, logical H2/H3 order, and meaningful alt on every image element. The editor gives you full control, so the accessibility of every CMS page is your responsibility, not the theme's.
- Audit the off-canvas cart and off-canvas menu specifically with the keyboard: open each, confirm focus moves into the panel, Tab stays trapped inside, Escape closes it, and focus returns to the trigger. These two overlays are the most common Shopware keyboard traps.
- Override the configurator template so each variant property is a labelled radiogroup with named options and aria-checked state - swatch-only buttons are the single biggest screen reader blocker on Shopware product pages.
- Route flash messages and Flow Builder on-page notifications through an aria-live region so add-to-cart, voucher, and newsletter confirmations are announced. Shopware's default toasts are visual-only.
- Because Shopware is heavily used by EU merchants, treat WCAG 2.1 AA as a hard requirement under the EAA and EN 301 549, and re-test the storefront after every plugin install or theme update - the plugin store has no accessibility review.
Recommended Tools
axe DevTools (browser extension)
A free browser extension that scans rendered Shopware storefront pages for WCAG issues like missing labels, contrast failures, and ARIA errors. Run it on Shopping Experiences pages, product detail, cart, and checkout after any theme or plugin change.
WAVE Web Accessibility Evaluation Tool
A free WebAIM tool that visually flags missing form labels, empty buttons, heading-structure issues, and contrast problems - helpful for catching swatch-only configurator buttons and placeholder-only newsletter fields in the Bootstrap storefront.
NVDA screen reader
A free, open-source Windows screen reader for confirming the things scanners miss: that the off-canvas cart traps and returns focus, the configurator announces property and value, and add-to-cart notifications are read aloud.
Where Shopware Accessibility Issues Concentrate
| Plugin / Tool | Area | Storefront Risk | What To Check |
|---|---|---|---|
| Shopping Experiences CMS layouts | Text/image blocks | Medium - merchant controls headings, alt, order | One H1, logical heading order, meaningful alt, focus order matches layout |
| Configurator variant options | Colour/size swatches | High - swatch-only buttons, no group label | Radiogroup + aria-label, named options, aria-checked state |
| Off-canvas cart and menu | Sliding panels | High - no focus trap, no Escape, no focus return | Modal dialog pattern: trap, Escape, return focus |
| Notifications toasts / Flow Builder | Add-to-cart, voucher, newsletter | Medium - visual-only toasts | aria-live / role=status (alert for errors) updated on action |
| Theme colours buttons, sale prices | Brand primary colour | Medium - low-contrast buy button and special price | 4.5:1 text contrast, never colour-only for sale state |
Frequently Asked Questions
Is Shopware 6 accessible out of the box?
The default Shopware 6 storefront is built on Bootstrap and Twig, so it starts from a fairly semantic, responsive, keyboard-operable base with real buttons and form controls. But it is not compliant by default: the product configurator often renders swatch-only options without group labels, the off-canvas cart and menu frequently fail to trap and return focus, toast notifications are not announced, and Shopping Experiences pages are only as accessible as the merchant builds them. Reaching WCAG 2.1 AA requires manual work on these areas.
Does Shopware need to meet the European Accessibility Act?
For most Shopware merchants selling to EU consumers, yes. The European Accessibility Act (EAA) has applied since 28 June 2025 and treats consumer e-commerce as a covered service; it references EN 301 549, which requires WCAG 2.1 Level AA for web content. Because Shopware is concentrated in the European market, its merchants are a natural audit target, so product pages, cart, and checkout need to meet WCAG 2.1 AA. This is general information, not legal advice.
How do I make the Shopware product configurator accessible?
Mark each variant property as a labelled group. Use a
Why are my Shopware off-canvas cart and menu a keyboard trap?
Because in many customised themes they slide in without moving focus into the panel, leave focus on the page behind them, and offer no Escape key or focus return. Fix this by treating them as modal dialogs: on open, move focus to the panel or its close button; trap Tab within it; support Escape to close; and return focus to the trigger. Add role="dialog", aria-modal="true", and an accessible name to each panel.
Do Shopware plugins affect accessibility?
Yes. The Shopware Store does not enforce an accessibility standard, so storefront plugins - cookie banners, wishlists, comparison, quick buy - can add non-semantic widgets with no roles, names, or keyboard support and regress an otherwise compliant storefront. Run axe/WAVE and a keyboard pass on every page a plugin touches, before and after installing, and prefer plugins whose authors document accessibility or use native HTML controls.
Are Shopping Experiences (CMS) pages automatically accessible?
No. Shopping Experiences gives merchants full control over heading text, image alt, block order, and styling, which means the accessibility of each CMS page is entirely down to how it is built. Common mistakes are styling large text without marking it as a heading, leaving image elements with empty alt, and arranging blocks so the focus order does not match the visual layout. Apply the same heading and alt-text discipline you would when hand-coding a page.
Further Reading
- Eaa Compliance Checklist 2026
- Accessible Ecommerce Checkout Guide
- Product Variant Swatches Screen Reader Accessibility
- Accessible Modals Popups Guide
- Color Contrast Guide
Other CMS Checklists
- Magento Accessibility Checklist
- Woocommerce Accessibility Checklist
- Prestashop Accessibility Checklist
Get our free accessibility toolkit
We're building a simple accessibility checker for non-developers. Join the waitlist for early access and a free EAA compliance checklist.
No spam. Unsubscribe anytime.