Descuentos y precio anterior en Shopify: la regla de los 30 días que te puede costar una sanción
El 26 de septiembre de 2024, el Tribunal de Justicia de la Unión Europea resolvió un asunto que había llegado hasta Luxemburgo por un folleto de ofertas de una cadena de supermercados alemana. Aldi Süd anunciaba rebajas con un porcentaje bien grande y, debajo, un precio tachado. El precio tachado era el que había estado vigente justo antes de la promoción. Una asociación de consumidores dijo que ese no era el precio que había que enseñar, y el tribunal le dio la razón.
La sentencia (asunto C-330/23) cerró la única rendija que le quedaba a medio comercio europeo: el descuento anunciado no se calcula sobre el precio de ayer, sino sobre el precio más bajo que hayas aplicado en los treinta días anteriores. Y eso, traducido a una tienda Shopify, significa que el badge de «-40%» que pinta tu theme puede ser una infracción con un rango sancionador serio detrás.
Qué dice exactamente la norma
La Directiva Ómnibus (2019/2161) metió un artículo nuevo en la vieja Directiva 98/6/CE de indicación de precios. En España se trasladó al artículo 20 del texto refundido de la Ley General para la Defensa de los Consumidores y Usuarios y está en vigor desde mayo de 2022.
La regla, sin adornos: en todo anuncio de reducción de precio hay que indicar el precio anterior, y el precio anterior es el más bajo aplicado durante al menos los 30 días previos. Da igual que sea un producto, una categoría entera o toda la tienda. Da igual que lo llames rebaja, promoción o «precio especial de lanzamiento».
Con un ejemplo se ve mejor. Una camiseta que vale 100 €, con una promo corta a mitad de mes:
| Periodo | Precio aplicado |
|---|---|
| 1 al 11 de octubre | 100 € |
| 12 al 15 de octubre | 70 € |
| 16 al 31 de octubre | 100 € |
| Campaña de noviembre | 60 € |
Lo que casi cualquier tienda enseñaría: 60 € — antes 100 € — ahorra un 40%. Lo que exige la norma: 60 € — precio más bajo en los últimos 30 días: 70 € — reducción del 14%. Esos cuatro días de promoción a mediados de octubre te han comido el titular de la campaña.
Por qué Shopify lo pone difícil
Aquí es donde la teoría legal se estrella contra el modelo de datos. El campo que usa Shopify para el precio tachado es compare_at_price, a nivel de variante. Es un campo de texto libre con dos características incómodas: no valida nada y no guarda histórico. Puedes poner ahí 300 € en un producto que jamás se ha vendido por encima de 90 € y la plataforma no dirá ni mu.
El segundo problema es de arquitectura. Los descuentos automáticos y los códigos de Shopify se aplican en el carrito y en el checkout, no en la ficha de producto. Como el equipo de marketing quiere que el tachado se vea en la ficha, la solución de la casa acaba siendo bajar el price y meter el precio de catálogo en compare_at_price. Ese gesto, repetido cada campaña, es justo el que fabrica el precio anterior incorrecto.
Y el tercero está en el theme. Dawn y prácticamente todos los themes de pago calculan el porcentaje de descuento dividiendo price entre compare_at_price. Es decir, reproducen literalmente el cálculo que el tribunal declaró contrario a la directiva. No es un fallo del theme: es que nadie le ha dado el dato bueno.
Cómo se implementa de verdad
En los proyectos donde hemos tenido que dejar esto limpio, el patrón que funciona tiene cuatro piezas y ninguna de ellas es una app mágica del App Store.
1. Registrar el histórico tú mismo. Un webhook de products/update (documentación de webhooks) que, cada vez que cambia una variante, guarde variant_id, precio y marca de tiempo en tu propio almacén. Shopify no expone el histórico de precios por API, así que si no lo capturas desde hoy, dentro de treinta días seguirás sin poder demostrar nada.
2. Calcular el mínimo y devolverlo a la tienda. Un proceso diario que recorra el histórico, saque el mínimo de los últimos 30 días por variante y lo escriba en un metafield de variante. Con productVariantsBulkUpdate y operaciones en bloque esto se resuelve para catálogos grandes sin pelearte con los límites de la API.
3. Pintarlo en el theme. El bloque de precio deja de calcular el porcentaje sobre compare_at_price y pasa a leer el metafield. Debajo del precio rebajado va una línea explícita del tipo «precio más bajo en los últimos 30 días», que es exactamente lo que la norma pide comunicar. Si el metafield no existe, el theme no enseña porcentaje: mejor un badge menos que una reclamación.
4. Multiplicarlo por mercado. Si trabajas con Shopify Markets y ajustes de precio por país, el histórico es por precio efectivamente aplicado en cada mercado. Un único metafield no vale: necesitas un JSON por variante con el mínimo de cada mercado, o te encontrarás enseñando en Francia un precio anterior que solo existió en España.
Los matices que la gente se salta
- Rebajas progresivas. Si durante una campaña vas bajando el precio sin interrupción (-20%, luego -30%, luego -50%), puedes mantener como precio anterior el que había antes de la primera bajada. En cuanto interrumpes la secuencia, se acabó.
- El PVP recomendado no es el precio anterior. Puedes mostrarlo, pero identificado como lo que es. Usarlo como tachado en un anuncio de rebaja es otra cosa.
- Subir precios en octubre no sirve. El mínimo de los 30 días te persigue justo durante la ventana en la que quieres anunciar la campaña.
- Los productos perecederos tienen su excepción, igual que los artículos con menos de 30 días en venta, donde el periodo de referencia es el que llevan a la venta.
Que esto se persigue no es una hipótesis
Las autoridades de consumo de varios estados miembros llevan desde 2023 abriendo expedientes por descuentos anunciados sobre precios inflados, y las campañas de noviembre son el momento favorito para mirar. En España, FACUA publica cada año un rastreo de precios de las semanas previas al Black Friday que suele acabar en denuncias ante las administraciones autonómicas de consumo.
El régimen sancionador tras la reforma organiza las infracciones en leves, graves y muy graves, con multas que en el tramo alto llegan al millón de euros y que pueden calcularse sobre el beneficio ilícito obtenido. Para las infracciones generalizadas con dimensión europea, la directiva obliga a que el techo llegue al 4% del volumen de negocio anual. Ninguna tienda mediana va a ver esa cifra, pero un expediente de consumo en plena campaña de noviembre, con la obligación de retirar la comunicación comercial, hace daño de sobra.
Lo razonable es empezar a guardar el histórico ya, aunque el theme siga enseñando el tachado de siempre. Los treinta días que necesitas para cumplir en Black Friday se cuentan hacia atrás desde el día de la campaña, y ese reloj corre tanto si has montado el webhook como si no.