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, and Consent Mode v2 switched on for Google tags once the banner and the Google channel are connected. Other trackers are still yours to wire through the privacy API 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 1 September 2026. The monthly pass covered the consent row and corrected one cell: Shopify does switch Consent Mode v2 on for Google tags as soon as the native banner and the Google channel are connected, which this page understated. The cell stays partial, because other trackers still have to be wired. History: 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.

Three extensions now cover the computation: Datafirefly publishes Omnibus Compliance for PrestaShop, Lowest price in 30 days for WooCommerce and Lowest price in 30 days for Shopware 6, the last of these filling the platform’s native field rather than adding a parallel display. The WooCommerce and Shopware versions also handle 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.

One precondition applies to all four platforms and appears on no line of this table: an extension only protects you if the platform hosting it still receives fixes. That has not been the case for PrestaShop 1.7 since 10 June 2025, as our article on the end of maintenance for PrestaShop 1.7 sets out.

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 and the relay to Google tags are native but every other tracker 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 1 September 2026 pass covered consent: Shopify was described as leaving the whole relay to Consent Mode v2 on the merchant, when Google’s documentation states that consent mode switches on by itself once the native banner and the Google channel are connected. The cell stays partial, but for a different reason than stated. The 10 August 2026 pass had 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.

FAQ

Does Shopware compute the thirty-day reference price?

No. The platform has two fields with almost identical names: “cheapest price”, which genuinely is calculated automatically but means the lowest across variants and tiered prices at this instant; and “cheapest price (last 30 days)”, the Omnibus field added in version 6.4.10, which is typed in by hand. The platform’s code contains no price history table at all. The computation therefore needs a plugin.

Does Shopify do it natively?

It does not either. The compare-at price field carries the value, but no history is kept. The computation needs an app.

What about PrestaShop and WooCommerce?

They do not even have the field. On those two platforms the reference price goes entirely through a module, which captures the day-by-day history and computes the value shown.

Is a “module” cell bad news?

No. It signals three things: an expense, one-off or recurring depending on the vendor’s model; a dependency, since you will wait for someone else’s update when the rule moves; and a verification, because an installed module is not a working module.

When was this matrix verified, and how?

On 1 September 2026 for the consent row, and on 10 August 2026 for the whole table, in two passes, every cell against the vendor’s official documentation or on a live instance. The page is revisited one row a month, by rotation. A platform can fill a cell overnight: that is why the page is dated.

Does this table rank the platforms?

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

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.