E-commerce compliance: what your platform does, and what it does not

Six European obligations now weigh on an online shop. No platform documentation says clearly which ones it covers. This matrix says it, platform by platform, with the verification method at the bottom of the page.

How to read this table Native: the platform does it with nothing added. Partial: the building block exists but needs configuration or development to be compliant. Module: an extension is required. On you: no platform can do it in your place, it is organisation or data.

The matrix

Obligation PrestaShop 8 and 9 WooCommerce Shopify Shopware 6
30-day reference price
Price reduction announcements
Module Module Partial: the compare-at price field carries the value, but no history is kept. An app for the tracking Partial: a “cheapest price (last 30 days)” field exists, the value is entered by hand. A plugin for the tracking
Product safety information
Manufacturer, responsible person
Module Module Module Module
Consent and Consent Mode v2 Module Module Partial: native banner and pixel blocking, the relay to Consent Mode v2 is still yours to wire Partial: native banner and Consent Mode v2 wired for the platform’s own Google integration, other trackers still yours to wire
E-invoicing and e-reporting
France
Module Module Module, plus a dependency on an external provider Partial: native EN 16931 invoicing, but no accredited platform and no e-reporting
Accessibility, level AA Partial: PS 8 and 9.0 ship Classic; PS 9.1 ships Hummingbird 2.0 by default, announced at over 95% of the EAA requirements Partial: depends on the theme and on Woo’s own Cart and Checkout blocks Partial: recent themes start higher up Partial: depends on the theme
Transparency on AI use On you On you On you On you
State verified on 10 August 2026, in two passes. The first corrected the reference price row: Shopware is not native, contrary to what this page said on 9 August, its documentation asks you to enter the thirty-day lowest price yourself. The second went back over the five other rows against vendor documentation and source code, and corrected six cells: product safety on Shopify, consent on Shopify and Shopware, e-invoicing on Shopware, accessibility on PrestaShop and WooCommerce. A platform can fill a cell overnight: this page is dated for that reason.

The three lessons that matter

On the reference price, no platform keeps your history. This is the most useful correction on this page, and it cuts against what you read everywhere. Shopware and Shopify do offer a dedicated field, one named “cheapest price (last 30 days)”, the other the compare-at price: in both cases the vendor’s own documentation asks you to enter the value yourself. The field displays, it does not compute. PrestaShop and WooCommerce do not even have the field. So on the most treacherous obligation, the one where the reference does not recalculate from one promotion to the next, all four platforms leave you to keep the history yourself or pay an extension to do it. Which is exactly why the freeze window is steered from a calendar rather than from the shop admin.

Here is where the confusion comes from, and it is everywhere: Shopware has two fields with almost identical names. The first, “cheapest price”, genuinely is calculated automatically, but it means the lowest across variants and tiered prices at this instant, which has nothing to do with the obligation. The second, “cheapest price (last 30 days)”, is the Omnibus field, added in version 6.4.10: that one is typed in by hand. The help text in the Shopware admin says so outright, “you must fill in this field if you want to advertise price reductions in the EU”, and the platform’s code contains no price history table at all. Articles announcing automatic calculation since 6.5 are describing the first field, not the second.

Two extensions now cover the computation on the platforms with no field at all: Datafirefly publishes Omnibus Compliance for PrestaShop and Lowest price in 30 days for WooCommerce, the latter also handling progressive markdowns, where the reference stays the price from before the first step for as long as the discount increases without interruption within a single operation.

On accessibility, no platform saves you. All four rows are partial, though no longer for quite the same reason. Compliance is decided in the theme and in the checkout, not in the platform, and that still holds everywhere; what has changed is that PrestaShop 9.1 now ships by default a theme its publisher announces at over 95% of the European requirements, which moves the starting point without removing the journey work. Choosing Shopify in order to be accessible is still a misreading: its own conformance report, dated March 2026, rates six level AA checkout criteria as partially supported, and a merchant outside the top-tier plan cannot touch them. That holds even if its recent themes start higher up. It is journey work, and it begins with an order placed by keyboard alone.

On AI, the row is empty everywhere, and that is normal. Telling people that content was generated or that a visitor is talking to a machine is an editorial decision, not a feature. No vendor will take it for you.

What this table does not say It does not rank the platforms. A native cell does not make a platform better: it means one expense fewer and one dependency fewer on that precise point. Choosing a platform turns on the catalogue, the team and the flows, a subject we cover in our e-commerce and marketplaces practice.

What “module” means for your budget

A module cell is not bad news in itself. It means three things, best put on the table before you sign.

An expense, one-off or recurring depending on the vendor’s model. On that point, the difference between a one-off purchase and a volume-indexed subscription shows mostly at the three-year mark. A dependency: when the rule moves, you wait for someone else’s update. And a verification: an installed module is not a working module, which matters especially for price history, whose absence only shows at the moment you would need it.

The method, disclosed

A matrix without a method is worth nothing, so here is ours.

Every cell was checked against the vendor’s official documentation or on a live instance, on the date shown. Where a capability exists but needs configuration, it is marked partial rather than native: that is the case for the consent row on Shopify, where the banner is native but the relay to Consent Mode v2 is still yours to wire. Where we could not verify, the cell says so rather than guessing.

This page is dated and will be revisited, one row a month, by rotation. The 10 August 2026 pass covered the reference price and corrected a cell: Shopware was marked native on the strength of a dedicated field existing, when its documentation asks you to fill that field yourself. It is the kind of error a matrix published once and never reread keeps for years. Platforms fill their gaps, and the regulation moves: the AI Act calendar changed in late July 2026, less than two weeks before this table was published.

Going further

Each row points to a subject we cover in depth in Dots Papers, with the matching self-diagnosis method. And the related deadlines sit in our retail calendar, each with the date by which you need to have started.

A question about your platform in particular? Write to us: we answer from evidence, not from a catalogue.