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 |
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.
