JTL states that the NOVA template is accessible from JTL-Shop 5.5.0 [3]. That is a sound baseline, but it does not make your shop conformant. Legally, what counts is what reaches your customers: your child template, your plugins, your OnPage Composer content and the product data from JTL-Wawi. JTL says the same in its own BFSG FAQ.
Does the BFSG apply to your JTL shop?
If you sell to consumers through JTL-Shop, you provide an e-commerce service – a "Dienstleistung im elektronischen Geschäftsverkehr" (§ 1(3) no. 5 BFSG). In Germany the BFSG has applied to such services since 28 June 2025. It transposes the European Accessibility Act, so other EU markets have equivalent laws [1][5].
Micro-enterprises that provide services are exempt: fewer than 10 employees and an annual turnover or balance sheet total of no more than €2 million (§ 2 no. 17, § 3(3) BFSG) [1]. Purely B2B shops that serve only business customers do not provide a service to consumers. Many JTL merchants also sell on Amazon, eBay or other marketplaces through JTL's connectors; what that means for the marketplace side is covered on our page on the micro-enterprise exemption and marketplace sellers. Your own JTL-Shop is assessed as the service it is.
Scope, market surveillance and the information you have to publish: BFSG for online shops.
What the platform gives you, and what it does not
You get:
- A reworked default template. With version 5.5, JTL optimised NOVA for accessibility and names semantic markup with ARIA attributes for dynamic content, keyboard operation with visible focus, contrast, form labels, a logical heading hierarchy and captions and transcripts for embedded video [2][3].
- An alt-text field at the source. You maintain alt text for product images in JTL-Wawi through the
img_altattribute, or in the OnPage Composer's image portlet [3]. Kept up to date, it flows through to the shop. - A consent manager in the core. JTL-Shop 5 ships its own consent manager for third-party content, configured in the back end, so you do not necessarily need a plugin for it [4].
- Native variation types. In JTL-Wawi you choose how each variation appears in the shop: dropdown, radio buttons, image swatches, text boxes or a free-text field [6]. Dropdowns and radio buttons are native form controls and the easiest to get right.
- A child-template mechanism designed for updates. JTL's developer documentation recommends changing individual Smarty blocks rather than replacing whole
.tplfiles, precisely so that a shop stays updatable [7].
You do not get:
- An accessible child template. Where your child template replaces whole
.tplfiles instead of single blocks, those files keep their old markup after the update. JTL itself warns that a replaced file has to be checked after every update [7]. Third-party templates have their own state. - Accessible plugins. JTL puts it plainly: "Sie sind verantwortlich für die Barrierefreiheit Ihres gesamten Onlineauftritts. Dies schließt auch Module oder Funktionen (z. B. Buchungskalender, Bezahl-Plugins) von Drittanbietern ein." – you are responsible for your whole online presence, including third-party modules such as booking calendars and payment plugins (our translation) [3].
- Maintained data. Empty
img_altfields, product descriptions pasted in with marketplace HTML, and videos without captions stay your job.
What we find on JTL shops
Child templates stuck on old markup
Many shops customised their NOVA child before 5.5: the header, product list and product detail page. Where those customisations replace whole files, the shop keeps rendering the old markup after the update – links acting as buttons, icons with no names, removed focus outlines. The shop is "on 5.5" but behaves as it did before.
Swatches and configurators
Image swatches and text boxes are the variation types most likely to fail: colour-only images with no text, a selected state shown only by a border, and prices that change without being announced. Configurator products with many steps make this worse, because every step is another place for focus to get lost.
Stock traffic light
JTL-Shop shows availability as a traffic light in green, yellow and red, with texts such as "Sofort verfügbar" and "Momentan nicht verfügbar" behind the colours [8]. When a child template or a listing view shows only the coloured dot, or offers the text only as a title tooltip, availability is conveyed by colour alone. That fails 1.4.1 Use of Color.
Mega menu and attribute filters
Child templates often rebuild the category mega menu to open on hover. Attribute filters and search plugins load results with JavaScript without announcing the number of hits, and they send focus back to the top of the page.
OnPage Composer content
Editors build landing pages with sliders, galleries and headings in the Composer. They pick heading levels for font size rather than structure. Sliders autoplay with no pause control. Composer images get no alt text because nobody asks for it.
Checkout, payment plugins and CAPTCHAs
The multi-step checkout in NOVA is a good base. But payment plugins embed iframes and express buttons whose focus order and labels you do not control. CAPTCHA plugins on registration and contact forms can fail 3.3.8 Accessible Authentication (Minimum) when a login depends on solving a puzzle with no alternative. And consent banners from third-party plugins, where they replace the built-in consent manager, sit in front of every page.
Where to look first
| Criterion | Why on JTL-Shop | Automation |
|---|---|---|
| 2.1.1 Keyboard (A) | Swatches, mega menu, configurator | Partly automated |
| 2.4.3 Focus Order (A) | Filters, basket pop-up, payment iframe | Partly automated |
| 2.4.7 Focus Visible (AA) | Child-template CSS | Partly automated |
| 4.1.2 Name, Role, Value (A) | Icon buttons, swatches | Partly automated |
| 1.4.1 Use of Color (A) | Stock traffic light, colour swatches | Manual only |
| 1.1.1 Non-text Content (A) | Empty img_alt, Composer images | Partly automated |
| 1.3.1 Info and Relationships (A) | Composer headings, tier-price tables | Partly automated |
| 4.1.3 Status Messages (AA) | "Add to basket", filter results | Manual only |
| 3.3.1 Error Identification (A) | Checkout, registration | Manual only |
| 3.3.8 Accessible Authentication (Minimum) (AA) | CAPTCHA at login or registration | Manual only |
The full list is in WCAG 2.2 AA, criterion by criterion.
A sensible order of work
- Update to a current JTL-Shop 5 release. Without the 5.5 NOVA baseline you would be fixing defects JTL has already fixed. JTL's list of supported product versions shows which releases still receive fixes; JTL-Shop 4 is no longer on it [9].
- Diff your child template against NOVA. Every fully replaced
.tplfile is a candidate. Move changes into Smarty blocks where you can, merge in the 5.5 markup, and delete overrides you no longer need. - Fill
img_altin JTL-Wawi. Start with best-sellers and category images. One fix in the Wawi applies everywhere that data flows. - Review the variation types. Where an image swatch carries only a colour, add a text value or switch that variation to radio buttons or a dropdown.
- Inventory your plugins. Consent, payment, search, filters, reviews: for each one, decide whether to get it fixed, replace it, or document it as a known limitation. Ask vendors for test evidence.
- Walk the checkout with a keyboard, and re-test after every update. Category → filter → product → variation → basket → guest checkout → payment in test mode. Shop and plugin updates are when regressions arrive; a scheduled crawl shows them before customers do.
What Reviseberg checks on JTL-Shop – and what you still test yourself
Reviseberg crawls your shop, including category and product pages, and runs every axe-core rule on every page at a desktop width of 1280 pixels, repeating the layout-dependent rules – contrast and target size among them – at 360 pixels. Results are mapped to WCAG 2.2 A/AA and EN 301 549. Findings are grouped into issues by rule, with the pages each one appears on, so you can see quickly whether a defect comes from the child template (every product page) or from data (a handful of products). Issues are ranked by the points you gain by fixing them.
The keyboard agent opens the pages of a journey you name – a category, a product, the basket – and presses Tab, Shift+Tab and Escape through each one, recording every step. It reports keyboard traps, invisible focus, missing skip links and unreachable elements. It does not choose a variation, fill in the checkout or pay, so those steps are walked by hand. The free report covers up to 100 pages and runs the keyboard agent on one page you choose.
For missing alt text, Reviseberg can suggest wording; a person decides what goes back into the Wawi, and nothing is written to your shop. You still check some things yourself: whether alt text is correct, whether the stock indicator makes sense without colour, and how the shop behaves with a screen reader and zoom. Screen-reader, zoom and voice-control agents are not built yet. Guided manual tests cover those criteria, and an untested criterion is reported as untested, never as passed. There is no JTL plugin and no overlay script.
Written to be useful, not as legal advice. As of 27 September 2026.