商品列表页上那个每千克价格,是整页唯一一个你没存过、只能现算的数字
本文目录
- 为什么单位价格是商品列表页上唯一一个算出来的价格?
- 一个价格有两个来源,血统完全不同
- 含量字段为什么是目录里最没人认领的那一个
- 三种含量来源,三种完全不同的错法
- 算错的单位价格,比空着更难收场
- 它是整张卡片上唯一一个会被拿去做算术的数字
- 分子有治理,分母没有
- 第一周别碰代码,先去数覆盖率
- 两个必须配着看的指标
- 跨境站为什么要比本土站重一档看这件事
- 欧盟为什么把标单位价格定成义务而不是建议?
- 指令的第一句话就把目的写死了
- 法律眼里的单位价格,是这么定义的
- 两个价格必须一起出现,缺一不可
- 广告里提到售价,就得同时给单位价格
- 不含糊、易辨认、清晰可读
- 分母必须是依法申报的那个量
- 规格自由化,才是这条义务的前因
- 只有酒类还锁着规格
- 哪些情况可以不标
- 这套规则到底管不管网店
- 同一罐咖啡在德国和英国为什么要标两个差十倍的数字?
- 德国的答案:一律折到每千克、每升
- 德国留了100克这个单位,但只给散装
- 英国的答案:附表里有一张按品类的表
- 同一罐250克咖啡,两个数字
- 小规格商品会被这条规则放大
- 德国的两条豁免,恰好都在美妆品类上
- 英国还管了字号:单位价格必须占主导
- 三个市场并排看一遍
- 所以分母不能硬编码
- 那个分母到底归谁管?
- 同一件商品,三个系统各自算出一个分母
- 渠道这一套:两个字段,一个当分子一个当分母
- 但渠道保留了改写你分母的权利
- 渠道能表达的分母,比法律能要求的少
- 词表这一套:一个通用得多的模型
- unitCode与unitText:一个逃生口,也是一次降级
- 三方摆在一起看
- 这跟三方各自独立得出同一个结论,是两回事
- 那份翻译层长什么样
- 净含量那个数字在法律上为什么是个统计量?
- 标称量的官方定义,比你想的松
- 合规判据是一个批次的平均,不是单件
- 体积甚至规定了测量温度
- 对做电商的人来说,这条推论最有用
- 多件装的标称量,适用于每一个单件
- 气雾剂罐上有两个体积,法律明文要求别搞混
- 小规格商品有两条容易漏掉的边界
- 四种看起来像单位价格、其实不是的东西
- 所以校验的对象不是算式,是分母
- 打折的时候单位价格该跟着哪个价走?
- 同一部指令里的两条规则,在你系统里是两个模块
- 前价的定义:降价前至少30天内的最低价
- 那个关于香蕉和菠萝的案子
- 一张宣传册上印了三个价格,法院看的是哪一个
- 被判的那个数,本身就是一个单位价格
- 划线价旁边那个单位价格,该按哪个价算
- 低价商品会同时被三条规则夹住
- 促销那一刻要抓的三个快照
- 有意义的单位和法定的单位为什么常常不是同一个?
- 德国法在一个品类上,自己承认了这件事
- 为什么这个口子只给了洗涤剂
- 别的品类里,有意义的单位是什么
- 渠道字段装不下“每次”这个单位
- 词表能装下,但只能降一级装
- 所以答案是两个都显示,而且有主次
- 那个有意义的数,是引擎算不出来的
- 补充装是这类商品唯一不用嘴说的卖点
- 把用量说明做成一页公开的、能被引用的内容
- 这个数字摆在列表项的什么位置才不添乱?
- 主次关系:总价抢眼,单位价格安静
- 位置:得在商品描述的近旁
- 移动端只有那么几行,怎么排
- 变体合并之后,显示的是哪个变体的单位价格
- 套装和组合装:先把里面有什么写清楚
- 列表项该放什么,本来就是一道减法题
- 四种看着做了、其实没做的做法
- 按尺寸裁切和分级定价的品类要另算
- 按单位价格排序,是这份数据唯一的高价值下游用途
- 一个正则表达式的默认值,怎么变成了德国站的合规风险
- 那个站是做什么的
- 动手之前,先撞上了那个熟悉的问题
- 头三个月,数据好得不像话
- 第四个月,一封德语的信
- 为什么这个错误特别难被发现
- 三条没早发现的原因
- 真正的代价不是罚款
- 改了三处
- 把它救回来的不是改数字,是换分母
- 从哪一步开始做,这件事才不会做成一次性项目?
- 第一周:一行代码都别改
- 第二周:把那张分母映射表写出来
- 第三周:只在一个品类上线,带快照对比
- 第四周:铺开,并补上附加单位
- 上线前的十六项自查
- 三条反信号
- 引擎被问到哪个更划算的时候,会拿到什么
- 那份公共答案该写在哪儿
- 最后一句
- 常见问题解答
- 我只做美国市场,还需要显示单位价格吗?
- 浓缩类产品的单位价格,能不能按稀释之后的体积算?
- 促销打折的时候,单位价格该按现价还是划线价算?
- 六罐装的饮料,分母该用单罐容量还是包装总量?
- 某个商品的净含量字段是空的,页面上该显示什么?
- 提交给渠道的基准量和我站上显示的不一样,会有问题吗?
- 权威参考资料
摘要:商品列表上那行“每升多少钱”,是整张卡片上唯一一个你没有存过、只能现算的价格。分子来自价格系统,有审批、有日志、有回滚;分母来自净含量,那是商品目录里最没人认领的一个字段。欧盟把标注单位价格定成了义务而不是建议,德国要求一律折到每千克,英国按品类给了一张表,Google的商品数据字段还留着改写你分母的权利。这篇讲清楚分母归谁管、错在哪一步,以及怎么让法定单位和真正有用的单位同时出现在同一张卡片上。
为什么单位价格是商品列表页上唯一一个算出来的价格?
先把地基挖开:同一张卡片上挨着的两个数字,一个有完整的治理体系,另一个连主人都找不到。
一个价格有两个来源,血统完全不同
打开你自己站上任意一个品类页,随便挑一张商品卡片。上面那个大号的总价,是从价格表里读出来的。它有一条完整的来路:谁改的、什么时候改的、走了哪个审批、上一版是多少、出事了怎么回滚。
紧挨着它的那行小字,“€12.90/升”,来路完全不同。它不在任何一张表里。它是渲染那一刻,拿总价除以一个叫净含量的字段临时算出来的。页面刷新一次,它就重新算一次。
这两个数字挨得那么近,看起来是同一个东西的两种写法。实际上它们中间隔着一整套治理体系的有无。
含量字段为什么是目录里最没人认领的那一个
净含量这个字段,在大多数团队的分工表上找不到主人。采购觉得那是产品的事,产品觉得那是运营录入的事,运营觉得供应商给的资料里写着呢。而供应商给的资料,通常是一个PDF,或者一列写着“500ml装”的Excel。
更要命的是它的错误几乎不产生投诉。价格错了,五分钟内客服工单就来了。含量错了,没有任何人会告诉你——买家不会拿量杯去量,客服不会去核,财务的报表里根本没有这个维度。商品属性和属性集的作用域管理做得再规整,也管不住一个从来没人去核对的值。
于是它就这么躺着。躺三年,躺到你某天决定上线单位价格,才第一次把它请上台面。
三种含量来源,三种完全不同的错法
实操里,含量数据只可能有三个来源。批量导入导出做得再熟练,也改不掉这三种来源各自的毛病。它们的覆盖率、错误形态和可校验性差得很远,值得先摆开看清楚。
| 来源 | 典型覆盖率 | 最常见的错法 | 能不能自动校验 |
|---|---|---|---|
| 供应商资料表 | 高,但字段口径不统一 | 毛重当净重、整箱数量当单件数量 | 能,用重量区间和品类做交叉校验 |
| 从商品标题正则解析 | 看着高,实际是假的高 | 标题里有两个数量时抓错那一个 | 很难,因为解析出来的值永远合乎语法 |
| 人工在后台录入 | 低,新品补录常年欠账 | 单位填错,把毫升写成升 | 能,但要在录入时就卡,事后查基本查不出 |
第二行是最危险的一行,因为它的产出物在形式上无懈可击。解析器吐出来的永远是一个数字加一个合法单位,你在数据库里看到的是干干净净的500和ml,看不出它是从哪串字符里刮下来的。
算错的单位价格,比空着更难收场
这一点反直觉,但站得住。单位价格缺失的时候,用户会做两件事:要么自己心算,要么放弃比较随便挑一个。前者慢,后者可能让他错过更划算的那件,但两种情况下他心里都清楚这个判断是自己做的。
单位价格算错的时候,用户不算了。他直接采信。你等于把一个错误的结论以权威的口吻塞进了他的决策里,而且是用一个看起来像系统计算结果的形态塞进去的。
还有一层:错误的单位价格是机器可读的。它会进你的商品数据源、进结构化数据、进比价站、进答案引擎。一个人的误判止步于一次下单,一条错误的结构化数据会被复制到你完全看不见的地方去。
它是整张卡片上唯一一个会被拿去做算术的数字
商品卡片上其他信息,用户是拿来读的。标题读一眼、评分扫一眼、配送时效瞄一眼。只有单位价格是拿来算的——准确说,是拿来免去算的。
Baymard在商品列表与筛选方向的大规模可用性测试里,反复观察到同一个动作:受试者停在列表页上,掰着手指算每份多少钱。有人对着四盒装的订阅餐盒把总价除以份数,有人在货架前对比单个牛油果和一整袋的差价,算完抬头说“差不多,那我拿整袋”。
这个动作发生的那一刻,浏览就中断了。而中断的次数是有上限的:测试里只要站点不给算好,参与者通常只肯认真比较少数几件商品,剩下的直接跳过。结账环节的放弃大家盯得很紧,列表页上这种静悄悄的放弃基本没人统计。
分子有治理,分母没有
把两个数放在同一张表里对照一次,问题的形状就出来了。
| 治理维度 | 价格(分子) | 净含量(分母) |
|---|---|---|
| 有没有明确的责任人 | 有,通常是定价或运营负责人 | 多数团队答不上来 |
| 改动要不要审批 | 要,且往往有金额阈值 | 不要,后台改完就生效 |
| 有没有变更日志 | 有,能查到每一次调价 | 基本没有 |
| 错了多久会被发现 | 分钟级 | 可能永远不会 |
| 谁会来投诉 | 买家、客服、财务 | 没有人 |
| 能不能回滚 | 能 | 没有旧值可回 |
这张表里最扎眼的是“错了多久会被发现”那一行。分子出错以分钟计,分母出错以永远计。而单位价格这个数,是这两者相除的结果——它的可靠性只能等于两者中更差的那一个。
第一周别碰代码,先去数覆盖率
很多团队上单位价格的第一个动作是找前端排期。这个顺序是反的。定价框架再清楚,落到页面上也得先有分母。
正确的第一个动作是跑一条查询:全站有多少个在售商品填了净含量,填了的里面有多少个同时填了单位,单位的取值一共有几种写法。绝大多数站第一次跑这条查询,结果都比想象中难看。这条查询也是给一个字段建立单一可信来源的起点。
这个数字直接决定了后面所有的技术选型。覆盖率不到一半的时候,讨论“要不要按单位价格排序”是没有意义的——排序会把所有没数据的商品系统性地堆到一端去。
两个必须配着看的指标
第一个是净含量覆盖率,按品类拆开看。全站一个总数没用,因为问题从来不是均匀分布的:日化和食品通常七八成,配件和长尾品类可能不到两成,而恰恰是长尾品类最需要用单位价格来自证划算。
第二个指标是我自己后来才开始盯的,姑且叫排序错位率:在同一个品类页里,按总价升序排出来的第一件商品,如果改按单位价格升序排,它落在第几位。这个位次差就是不标单位价格时,用户被总价误导的幅度。
它的好处是把一个说不清的体验问题变成了一个能报数的数字。某个品类算出来的错位是零,那这个品类做不做单位价格都行;算出来第一名掉到第九,那这个品类的比较功能基本是失灵的。砍掉虚荣指标只盯真信号这件事,在这里有一个很具体的落点。
跨境站为什么要比本土站重一档看这件事
如果你只做美国市场,单位价格确实可以当成一个转化率优化项来排期,做与不做是个投入产出的判断。这也是绝大多数英文UX研究的默认语境。
一旦你的商品出现在欧盟、英国、挪威或者澳大利亚的页面上,性质就变了。那里的规则不问你转化率高不高,它规定了这个数必须出现、必须按某个分母算、必须清晰可读。做不做不再是选择题,怎么做才是。
更麻烦的一层在于:本土站上做错了,损失是一部分订单;欧盟站上做错了,损失可能是一封律师函加一份具结书。同一段代码,在两个市场里的失败代价根本不在一个量级上。
欧盟为什么把标单位价格定成义务而不是建议?
这一节把条文摊开读一遍,顺便回答一个更有意思的问题:这条义务其实是在给谁的自由买单。
指令的第一句话就把目的写死了
管这件事的是1998年的一部指令,98/6/EC,全称是关于向消费者标示商品价格方面消费者保护的指令。它的第1条只有一句话,说这部指令的目的是规定售价与计量单位价格的标示,以改善消费者信息、便利价格比较。
注意最后四个字,便利价格比较。这不是一句漂亮话,它是整部指令的解释锚。后面所有条款出现歧义的时候,回到这句话上就有答案:怎么做能让两件规格不同的商品被放在一起比,就该怎么做。
把这句话读进去之后,很多实操争论会自动消失。比如单位价格该不该显示在列表页而不只是详情页——用户是在列表页做比较的,答案不用讨论。
法律眼里的单位价格,是这么定义的
第2条给了两个定义。售价是指某一单位商品或某一给定数量商品的最终价格,含增值税和所有其他税费。单位价格是指每一千克、每一升、每一米、每一平方米或每一立方米商品的最终价格,同样含税。
但这条定义还有一个尾巴,而这个尾巴是后面所有麻烦的源头:98/6/EC第2条(b)项写的是,也可以是在相关成员国内被广泛且惯常用于该类特定商品营销的另一种单一数量单位。
一句话:分母有一个默认值,但成员国可以改。指令在定义分母的同一句话里,把分母的最终决定权下放了出去。这是欧盟层面的“另一种单一数量单位”,后面德国和英国会各自把它填成完全不同的东西。
两个价格必须一起出现,缺一不可
第3条第1款是义务本体:本指令第1条所指的所有商品,都应标示售价与单位价格。同一款后半句给了唯一一个省略条件——当单位价格与售价相同时,单位价格无须标示。
这个省略条件比看上去窄。它说的是数值相同,不是概念相当。一瓶正好1升的橄榄油,售价 €8.90,单位价格也是 €8.90/升,这时候可以不标。一瓶750毫升的,就不行。
第3条第3款还有一条反向规定:散装商品只需标单位价格。因为散装商品在消费者说出要多少之前,总价根本不存在。这条对现场零售更相关,但线上做定制裁切、按米卖的线缆布料时会撞上。
广告里提到售价,就得同时给单位价格
第3条第4款是这部指令里最容易被跨境团队漏掉的一条:任何提及本指令第1条所指商品售价的广告,也应标示单位价格。
把这条放到今天的语境里读一遍,它覆盖的范围相当宽。购物广告的素材上有价格,邮件营销的模块里有价格,联盟客的素材包里有价格,站内的促销横幅上也有价格。这些位置上出现了售价,按条文就得配上单位价格。
实操上,第一个会被撞到的是产品数据源。它同时喂着购物广告和免费商品列表,而它是不是归你管、有没有人在维护含量字段,往往是两个不同部门的答案。
不含糊、易辨认、清晰可读
第4条第1款规定,售价和单位价格必须是明确无歧义、易于辨认、清晰可读的。同一款还允许成员国限制可标示价格的最大数量,防止一个货架牌上堆七八个数字。
这三个词看着虚,其实很好落地。明确无歧义对应的是单位要写全,写 €0.22/1UNI这种缩写就不算。易于辨认对应的是它得在商品的视觉范围内,不能塞进折叠的详情区。清晰可读对应的是字号和对比度。
反过来讲,它也给了一条明确的下界:单位价格不需要跟总价一样醒目。它只要够找得到就行。这一点和体验设计的结论是一致的,总价该抢眼,单位价格该安静地待在那儿等人来看。
分母必须是依法申报的那个量
第4条第2款是全条最硬、也最容易被工程实现忽略的一句:单位价格应参照依照国家与共同体规定所申报的数量。
这句话的意思是,你不能自己发明分母。分母得是那个按包装标示法规申报在包装上的净含量数字。你觉得按稀释后的等效体积算更有意义?你觉得按可使用次数算更公平?在这条规则下,这些都不是你能自己决定的。
同一款还带了一句补充:在国家或共同体规定要求对某些预包装商品同时标示净重与沥干净重的情况下,标示沥干净重的单位价格即为已足。罐头橄榄、腌菜、糖水水果这一类商品,分母用沥干重,不用连汤一起算。
规格自由化,才是这条义务的前因
大部分人把单位价格当成一条孤立的消费者保护规则。它不是。它是欧盟为了另一件事付的代价。
2007年的2007/45/EC做了一件影响深远的事:除了少数几类商品,成员国不得再以标称量为由拒绝、禁止或限制预包装商品上市。翻译过来就是,包装规格全面放开了。你想做375毫升、480毫升、还是833毫升,随你。
规格一放开,货架上就再也没有可比的公分母了。所以必须有另一个机制把可比性补回来——那就是强制标示单位价格。这两条规则是一套设计的两个半边,一个负责给企业自由,一个负责把自由造成的信息成本从消费者身上挪走。
只有酒类还锁着规格
2007/45/EC的附件里留了一张短名单,是唯一还被锁死规格的那几类。静酒在100毫升到1500毫升区间内只允许8种规格,起泡酒只允许5种,烈酒在100毫升到2000毫升区间内只允许9种,利口酒和加香葡萄酒各7种。
把这张名单和上一节连起来读,逻辑就闭合了:规格被锁死的品类,天然可比,对单位价格的依赖最低;规格全放开的品类,可比性完全靠单位价格撑着。
顺带一提,这张名单还解释了一个常见的困惑——为什么烈酒的瓶子几乎全世界都是700毫升,而美国是750毫升。那不是行业习惯,那是两套法规各自锁出来的结果。
哪些情况可以不标
第3条第2款允许成员国把服务过程中提供的商品、拍卖以及艺术品古董排除在外。第5条则给了成员国一个更宽的口子:当标示单位价格因商品的性质或用途而无益处、或可能造成混淆时,可以豁免。
关键在于豁免权在成员国手里,不在你手里。你不能自己判断某个品类标了没意义就不标,你得去看目标市场的国内法有没有把它列进豁免清单。
下面两节就来看两个把这个口子用得完全不同的市场。它们的差别之大,会直接把同一件商品在两个站上的显示数字拉开一个数量级。
这套规则到底管不管网店
这是被问得最多的一个问题,而且问的人心里通常存着一丝侥幸。答案很干脆:管。指令通篇说的是经营者向消费者提供的商品,从来没有区分线下货架和线上页面。
成员国的落地法规写得更明白。德国的价格标示条例专门有一条讲远程销售合同的价格标示,英国的价格标示令则在规定标示位置时直接写了“就远程合同与广告而言,标示应给在商品的视觉或文字描述的近旁”。也就是说,立法者早就把网页上的商品卡片算进去了。
唯一的差别在于线上没有货架牌这个物理载体,所以“近旁”要靠版式来兑现。这也是为什么单位价格不能只出现在详情页最下面那张规格表里——那儿离商品描述太远了,够不着这个词。
同一罐咖啡在德国和英国为什么要标两个差十倍的数字?
两个市场把欧盟留下的那个口子填成了完全相反的形状,而多数代码里只写死了其中一种。
德国的答案:一律折到每千克、每升
德国的价格标示条例把这件事规定得极其干脆。条例第5条第1款写明,基础价格的计量单位分别是1千克、1升、1立方米、1米或1平方米。没有别的选项。
只在一种情况下允许换:通常以100升以上、50千克以上或100米以上交付的商品,按符合一般交易观念的单位来算。这是给建材、燃料、批量包装留的口子,日用消费品用不上。多语言多货币站要留意的是,这条按市场分岔的规则和货币、税率属于同一类配置。
这条规则在2022年那次修订里收得比以前更紧。老版本允许小规格商品用每100克、每100毫升,新版本把这个选项从预包装商品身上拿掉了,只留给散装。所以你如果参考的是几年前的中文资料,很可能拿到的是一份过期口径。
德国留了100克这个单位,但只给散装
第5条第2款说的是散装商品:按重量或体积提供的散装商品,依一般交易观念,用1千克或100克、1升或100毫升。第3款还补了一句,自助灌装的液体散装商品可以在体积基础价之外额外给一个按重量的基础价。
散装的定义在第2条:由经营者当着消费者的面、或由消费者自己、或应消费者要求现场称量的未包装商品。线上零售基本落不到这个定义里,除非你做的是按米裁切或者按重量分装。跨境多市场的价格格式化在这里也要跟着分岔,德语区和英语区连小数点的写法都不一样。
第4款则和欧盟指令对上了:需要标示沥干重的商品,基础价格按标示的沥干重算。橄榄、酸黄瓜、糖水桃子这类东西,分母是捞出来的那部分。
英国的答案:附表里有一张按品类的表
英国2004年的价格标示令走了完全相反的路子。它的默认值和欧盟一样是每千克、每升,但紧接着开了两个例外:附表1所列商品按附表里给出的对应数量单位,按件销售的商品按单件价格。
附表1是一张实打实的品类清单。香精、食用色素、香草、香料、彩妆、种子这几类用10;饼干、面包、早餐谷物、巧克力糖果、咖啡、熟食肉类与海鲜、彩妆之外的化妆品、奶油、蘸酱、干调味料、鲜切沙拉、果汁软饮、冰淇淋、腌菜、非内燃机润滑油这一长串用100。
换句话说,英国立法者的思路是:让分母贴近人们真实购买和讨论这类商品的口径。买咖啡的人心里的单位是100克,不是1千克。这个思路更贴近用户,代价是你的系统里得存下一张品类映射表。
同一罐250克咖啡,两个数字
把上面两套规则套到同一件商品上,差别就具体了。
| 同一罐咖啡 | 德国站 | 英国站 |
|---|---|---|
| 包装 | 250克 | 250克 |
| 法定分母 | 1千克 | 100克 |
| 页面上要出现的数 | 每千克19.96欧元 | 每100克2.00英镑 |
| 数值倍数关系 | 同一件商品,两个页面上的数字相差10倍 | |
| 能不能共用一份计算逻辑 | 能,但分母必须是变量,且要跟着市场走 | |
这张表最容易被误读成“改个换算系数就行”。它比换算系数难一点:德国那一列的分母只跟单位类型有关,英国那一列的分母跟品类有关。两套规则的输入参数根本不是同一个东西。
小规格商品会被这条规则放大
德国这套一刀切的规则有一个很容易被忽略的商业后果:所有小规格商品的单位价格会被推到一个心理上不太舒服的量级。
一瓶50毫升的面部精华卖29.90欧元,德国站上要写的是每升598欧元。含税与否也会牵动这个数,含税显示没配对,单位价格就会连着错。数字本身完全正确,但看到它的那一秒,很多买家的第一反应是“这玩意儿一升要六百欧”。而这恰恰就是立法意图——它逼你把商品放进一个所有人都能横向比较的坐标系里。
能做的不是把它藏起来,而是给它配上下文。同一张卡片上写清楚一次用量、能用多少天、折下来每天多少钱,那个598就从一个吓人的数字变成了一个可以理解的数字。高客单价品类靠内容与信任撑住价格这件事,在这里有一个非常直接的落点。
德国的两条豁免,恰好都在美妆品类上
条例第4条第3款列了8类不必标基础价格的商品,其中有两条对跨境卖家格外相关。
第7项:专门用于对皮肤、毛发或指甲进行着色或美化的化妆品。也就是彩妆。第8项:至少含3%体积香精油且至少含70%体积纯乙醇的香水和香水类香氛水。这条写得非常技术,是照着香水的配方定义划的线。
有意思的地方在于,Google在商品数据规范里把香水明确列为最该提交单位价格的品类之一。同一类商品,渠道方按最佳实践建议你提交,德国法却明文把它排除在义务之外。这不是谁错了,这是两套规则的目的本来就不同。类似的错位在商品标识码的填报要求上也出现过,渠道的最佳实践和某个市场的强制规范并不总是重合。
英国还管了字号:单位价格必须占主导
价格标示令第7条第1款和欧盟指令一样要求明确无歧义、易于辨认、清晰可读,并规定标示要给在商品旁边,就远程合同和广告而言,是给在商品的视觉或文字描述的近旁。
第7条第4款则多管了一件欧盟没管的事:如果在单位价格之外还标了一个按补充数量单位计的价格,单位价格必须占主导,补充单位的价格所用字符不得大于单位价格。
这一条在跨境场景里有个现成的用武之地。你要是想在英国站上同时给出每100克和每一份的价格,法定那个必须更醒目,你自己发明的那个只能更小。这个次序不是审美问题,是条文写死的。
三个市场并排看一遍
| 对照项 | 欧盟基准规则 | 德国 | 英国 |
|---|---|---|---|
| 默认分母 | 每千克、每升、每米、每平方米、每立方米 | 同左,且几乎不许换 | 同左,但附表另有规定 |
| 能不能按品类改分母 | 可以,交给成员国决定 | 基本不行 | 可以,附表1一整张清单 |
| 100克这个单位 | 成员国自定 | 只给散装 | 咖啡、面包等一长串品类都用 |
| 沥干重 | 用沥干重即可 | 明文要求用沥干重 | 另有净重相关规定 |
| 特殊品类豁免 | 授权成员国制定 | 彩妆、符合定义的香水等8类 | 另有小面积门店等豁免 |
| 对字号排序的要求 | 只要求清晰可读 | 要求清晰可辨 | 额外规定单位价格必须占主导 |
这张表放在一起看,最直接的结论是:分母不是一个常量,是一个至少由市场和品类两个维度决定的函数。
所以分母不能硬编码
我见过太多实现是把千克和升写死在模板里的。这在只做一个市场的时候完全够用,在开第二个市场的那一天会变成一次全站返工。多市场架构怎么选这个决定做得越早,这类分岔配置的代价越低。
正确的做法是把它做成一张三列的映射:市场、品类、法定基准单位。渲染的时候查表,查不到就回落到欧盟默认值并打一条告警,而不是静默地按千克算下去。
这张表还得有人维护,因为它会变。德国2022年那次修订就把一整列选项删掉了。多市场站点的架构选型做完之后,这类按市场分岔的配置表会越来越多,早点给它一个正经位置比事后到处补要省事得多。
那个分母到底归谁管?
全篇最核心的一节:三个系统各有一套分母规则,各自都合理,合起来却谁也装不下谁。
同一件商品,三个系统各自算出一个分母
到这一步,一件很奇怪的事情该被说出来了。你的商品在三个地方会出现单位价格:自己的商品卡片上、提交给渠道的商品数据里、页面的结构化数据里。这三个地方各有一套关于分母的规则,而且它们互不知道对方的存在。
更奇怪的是,这三套规则各自都是合理的。法律那一套是为了让消费者能比价,渠道那一套是为了让同一个结果页上的商品能并排放,词表那一套是为了尽量精确地描述任意一种价格结构。没有哪一方在犯错。
可它们合起来的结果是:同一瓶油,三个位置上可以出现三个不同的数字,而只有其中一个是你要承担法律责任的。这件事没有任何一层去负责调和。
渠道这一套:两个字段,一个当分子一个当分母
Google的商品数据规范里有一对属性。unit_pricing_measure描述这件商品本身的量与维度,unit_pricing_base_measure是你希望用来展示的那个分母。
官方文档给的例子很清楚:price提交3美元,unit_pricing_measure提交150液量盎司,unit_pricing_base_measure提交100液量盎司,最终展示的单位价格就是每100液量盎司2美元。
文档还专门点了一句:在欧盟、欧洲自贸联盟国家、英国、澳大利亚和新西兰,某些按重量、体积、长度或面积销售的商品,按当地法规必须显示单位价格,因此需要提交这个属性。渠道方自己承认了这是法规驱动的字段,不是可选优化。
但渠道保留了改写你分母的权利
这是这一节最需要划下来的一句。unit_pricing_base_measure的文档里写着:为了让同一个页面上所有广告和免费商品列表的单位价格更可比,你的商品显示出来的基准量可能与你在这里提交的不同。
翻译成大白话:你提交每100毫升,它可能给你展示成每升。理由完全站得住——一个结果页上六件商品,三件按100毫升、三件按1升,那这个页面上的比价功能就废了。它必须统一。
但这条规则的后果是,你在渠道里看到的那个数,不一定是你提交的那个数。而你在自己站上按德国法算出来的那个数,跟渠道展示的那个数,也不必然一致。买家一天之内可能在两个位置看到同一件商品的两个单位价格,两个都对。
渠道能表达的分母,比法律能要求的少
还有一层更硬的限制。unit_pricing_base_measure支持的整数只有1、10、100、2、4、8这六个,另外额外支持75cl、750ml、50kg、1000kg四种组合。
这意味着有些分母你根本填不进去。比如某个市场惯用每250克,250不在这张表里。比如英国附表1里那些用10的品类,10倒是有,但你得确保单位类型也对得上。
所以正确的心态是:渠道字段是你表达意图的地方,不是你兑现法定义务的地方。法定义务只能在你自己控制的那张商品卡片上兑现。这一点在页面标记与数据源分类对齐那件事上也是同一个道理,两边各有各的口径,别指望一方替另一方兜底。
词表这一套:一个通用得多的模型
结构化数据这边用的是UnitPriceSpecification。它有一个叫referenceQuantity的属性,词表给的定义是“某一价格所适用的参考数量,例如每4千瓦时电1欧元”。
Google的两个属性正好映射过去:unit_pricing_measure对应Offer.priceSpecification.referenceQuantity,unit_pricing_base_measure对应它下面的valueReference。两层结构,一层描述商品有多少,一层描述你按多少来报价。想确认自己页面上到底输出了什么,用结构化数据审计工具扒一遍最快。
值得注意的是referenceQuantity的定义原文还带了一句自我说明:这个属性是unitOfMeasurement的替代品,用于价格与标准单位无关的进阶情形。词表自己承认了标准单位不够用,所以才有了这个更松的结构。
unitCode与unitText:一个逃生口,也是一次降级
数量单位在词表里有两种写法。unitCode要求填UN/CEFACT通用代码,三个字符,或者一个网址。unitText是一个纯文本字符串,词表对它的说明是:当你没法为unitCode提供一个标准单位代码时,这个属性很有用。
这两行字里藏着一个结构性的取舍。有代码的单位可以被机器对齐、换算、排序、比较;没有代码只能塞进自由文本的单位,机器只能把它当成一串字符原样搬运。
而问题恰恰在于:越是对用户有意义的单位,越可能没有标准代码。每次洗涤、每杯、每日剂量、每平方米涂布面积——这些正是买家心里真正的计价口径,也正是只能进unitText的那一批。可比较的单位往往没意义,有意义的单位往往不可比较。
三方摆在一起看
| 对照项 | 法律 | 渠道商品数据 | 结构化数据词表 |
|---|---|---|---|
| 分母由谁决定 | 成员国法规按品类锁死 | 你提交,但渠道可改写 | 你自己写,无人校验 |
| 能表达的分母范围 | 法规列举的那几种 | 六个整数加四种组合 | 几乎任意,含自由文本 |
| 能不能表达每次使用 | 个别品类可以 | 不能 | 能,但只能进自由文本 |
| 填错了会怎样 | 可能被竞争对手或协会追究 | 商品可能被拒登 | 通常没有任何反应 |
| 谁最终承担责任 | 你 | 你 | 你 |
| 谁负责让三者一致 | 没有人 | ||
最后两行是这张表的全部意思。责任永远落在同一个人身上,协调工作却没有任何一方认领。
这跟三方各自独立得出同一个结论,是两回事
做合规话题的时候,我们常常会碰到另一种更让人安心的格局:法规、平台规范和技术词表各自从不同方向出发,最后要求的东西高度一致。那种情况下你只要照着做,三边同时满足。
单位价格不是这种格局。它是反过来的:三方各自合理,各自给出的答案却互相装不下。法律要一个按品类锁死的分母,渠道只认那六个整数,词表干脆放弃约束、给你一个自由文本框。
识别出这个差别很重要,因为它决定了你的做法。三方收敛的时候,做一份就行。三方发散的时候,你必须显式地维护一份翻译层,并且明确规定当它们冲突时以哪一边为准。
那份翻译层长什么样
实操里它可以很朴素。一张表,每行一个市场加品类的组合,四列:法定基准单位、页面展示单位、提交给渠道的基准量、结构化数据里写什么。
规则也很朴素:页面展示单位必须等于法定基准单位,这一列没有商量余地。渠道那一列尽量贴近法定单位,实在表达不了就选最接近的合法值,并且接受它可能被改写。结构化数据那一列跟页面保持一致,附加单位另开一个Offer或者进自由文本。
把这四列显式写出来的最大好处,不是它更规范,而是它把一个隐藏在三个系统缝隙里的决策,变成了一张有人负责的表。结构化数据该按优先级做而不是凭感觉堆类型,在这里也一样:先把冲突写下来,再谈优化。
净含量那个数字在法律上为什么是个统计量?
分子精确到分,分母是一个在20摄氏度下按批次平均、允许单件有偏差的约定值。
标称量的官方定义,比你想的松
包装上印的那个500毫升,法律上叫标称量。1976年的76/211/EEC附件一第2.1条给了它一个定义,读起来会让人愣一下:标称量是包装上标示的重量或体积,也就是该包装被认为含有的产品数量。
关键在“被认为”三个字。它不是“实际含有”,实际含有的量在第2.2条里另有一个名字,叫实际含量。同一份法条用了两个不同的词,说明立法者从一开始就没打算让这两个数相等。
这就是分母的真身:它是一个约定的标示值,不是每一瓶的测量值。你在页面上算的每一次除法,除的都是这个约定值。
合规判据是一个批次的平均,不是单件
附件一第1.1条把要求写得很直接:完成灌装的包装,其实际含量平均不得少于标称量。注意“平均”。
第1.2条接着说,负偏差大于容许负偏差的包装比例应当足够小,小到能通过附件二规定的抽样检验。第2.3条把负偏差定义为实际含量低于标称量的差额,第2.4条给了一张按商品类别和标称量分档的容许负偏差表。
第1.3条留了一条底线:负偏差超过容许负偏差两倍的单个包装,不得带那个小写的e标。也就是说,法规允许单件低于标示值,只是给了上限,并且用批次平均来兜底。
体积甚至规定了测量温度
第2.2条还有一句非常工程师的规定:所有以体积单位表示的数量核查,实际含量的取值应在20摄氏度下测量,或者校正到20摄氏度,无论包装或检查时的实际温度是多少。深冻和冷冻商品按体积标示的不适用。
把这条读完再回头看商品卡片上那个每升多少钱,感觉会有点微妙。分子是一个精确到分的价格,分母是一个在20摄氏度下、按批次平均、允许单件有容许偏差的统计约定。
这不是在挑法规的毛病,恰恰相反,这套设计非常务实——灌装线不可能做到每一瓶都分毫不差,用平均值加偏差上限来约束是唯一可行的办法。需要调整的是我们这边的心态:别把分母当成一个物理常数来对待。
对做电商的人来说,这条推论最有用
结论其实很简单:你唯一该用来当分母的,就是包装上那个印着的标称量,一个字都不要改。
不要用称重系统里的实测均值,那是另一套数,而且它不是消费者看得到的那个数。不要用毛重,毛重里有瓶子。不要用你自己算出来的等效量,欧盟指令第4条第2款已经把这条路堵死了——分母应参照依法申报的数量。
这条推论的实操价值在于,它把一个看起来需要判断的问题变成了一个只需要抄写的问题。抄包装上那个数就行。可配置商品的属性矩阵建得再漂亮,这一格填错了照样白搭。难的从来不是决定抄哪个,是保证仓库、供应商资料和后台字段里躺的都是同一个数。
多件装的标称量,适用于每一个单件
2007/45/EC第5条第1款规定:两个或两个以上独立预包装构成多件装时,附件所列的标称量适用于每一个独立预包装。第2款则说,如果一个预包装由两个或以上不打算单独销售的独立包装构成,标称量适用于整个预包装。
这两款合起来,正好回答了一个电商里天天遇到的问题:六罐装的汽水,分母该是330毫升还是1980毫升。答案取决于里面那六罐是不是打算单独销售的规格,而这件事在变体该合还是该拆那个决定里就已经定下来了。
落到页面上,稳妥做法是把总量和单件量都写出来。一张卡片上同时出现“6 × 330毫升”和“每升多少钱”,用户不会误解,而按总量算出来的那个每升价格也正好是他要拿去比价的那个数。分组商品与关联简单商品那一套建模,在这里必须和含量字段对齐,否则六罐装会继承单罐的含量。
气雾剂罐上有两个体积,法律明文要求别搞混
这是我最喜欢的一条,因为它把整篇文章的主题浓缩成了一句法条。2007/45/EC第4条第1款:气雾剂分配器应标示容器的标称总容量,该标示的方式不得与内容物的标称体积造成混淆。
也就是说,立法者早在2007年就预见到了:同一个罐子上会印两个体积数字,一个是罐子有多大,一个是里面装了多少,人们会搞混。所以专门写了一款去禁止。
而你的商品标题里,这两个数字很可能同时存在。“清洁喷雾400毫升罐装/净含量300毫升”这种写法,在任何一个正则表达式面前都是一道选择题,而正则表达式不会做选择题,它只会执行一条默认规则。这条默认规则是谁在哪一年写的,多半已经没人记得了。批量导入时的字段映射里,这类历史遗留的默认值往往还不止一处。
小规格商品有两条容易漏掉的边界
第一条边界在德国。价格标示条例第4条第3款第1项写着,标称重量或标称体积小于10克或10毫升的商品,不必标示基础价格。样品装、旅行装、单次用量的精油滴管,很多正好落在这条线以下。
第二条边界在计量法规里。76/211/EEC附件一第2.6条把标称重量或体积小于25克或25毫升的预包装、以及所有液体产品,都划进了B类,容许负偏差按更宽松的一档算。规格越小,允许的相对偏差越大。
把两条放在一起,小规格商品的情形就清楚了:10毫升以下在德国免标,10到25毫升之间要标、但那个分母的相对不确定性是全品类里最高的。这一档商品的单位价格,形式上完全合规,实质上参考价值有限,页面上最好配一句用量说明去补它。
四种看起来像单位价格、其实不是的东西
| 错误形态 | 页面上看起来 | 实际错在哪 | 怎么发现 |
|---|---|---|---|
| 用毛重当分母 | 完全正常,只是偏低 | 把包装重量算进了商品 | 对比同品类同规格商品的离散度 |
| 用稀释后等效量当分母 | 非常有竞争力 | 违反依法申报数量那一条 | 看该商品是不是浓缩型 |
| 用整箱数量当分母 | 低得离谱但没人查 | 批发规格串到零售页面上 | 单位价格排序时它会窜到最前 |
| 促销后没有重算 | 和划线价配在一起,很自然 | 分子换了分母没换或者反过来 | 促销开始那一刻抓一次快照对比 |
四种里有三种的表现都是“看起来更便宜”。这不是巧合。分母类的错误天然偏向于把分母做大,因为营销文案总是倾向于把更大的那个数字写在更显眼的地方。
所以校验的对象不是算式,是分母
大部分团队给单位价格写的测试用例,验的是price除以quantity等不等于预期值。这类用例永远会通过,因为除法不会错。
真正该验的是三件事:这个商品的含量字段是从哪儿来的、它和包装上印的那个数是不是同一个、同品类同规格的商品之间这个值离散得正不正常。
第三条尤其好用,因为它不需要任何外部数据。同一个品类里三十件500毫升装的商品,其中两件的含量字段写着2000,那两件不用查就知道有问题。这种品类内的离群检测,比逐个核对包装照片省事得多,也比等着别人来投诉靠谱得多。
打折的时候单位价格该跟着哪个价走?
同一部指令里的两条规则,在你的系统里分属两个模块,每逢大促就要同时改一批数字。
同一部指令里的两条规则,在你系统里是两个模块
2019年那部俗称综合指令的2019/2161,给98/6/EC塞进了一条全新的第6a条。从那以后,管分母的规则和管参照价的规则住进了同一部法里。
可在你的系统里,这两件事从来没见过面。参照价是促销引擎算的,它读价格历史、算折扣、渲染划线价。单位价格是模板层算的,它读当前价、读含量、做一次除法。两条代码路径,两个负责人,两套上线节奏。法务和业务的协作账本里,这类跨模块的合规点最容易掉进缝隙。
于是每次大促开始的那一秒,就有一批数字要重新排列组合,而没有任何一处代码知道它们本来是一家人。
前价的定义:降价前至少30天内的最低价
第6a条第1款规定:任何降价公告都应标示经营者在降价适用之前的某一确定期间内所适用的前价。第2款把前价定义为:经营者在降价适用前不少于30天的期间内所适用的最低价格。
这两句的组合很狠。它不看你的原价标签写着多少,也不看上一次调价前是多少,它只看过去30天里的最低点。你要是在大促前半个月做过一次七折闪购,那次闪购价就是你这回的参照价。
第3到第5款留了三个口子:易腐或快速过期的商品,成员国可另定规则;上市不足30天的商品,成员国可缩短期间;渐进式加大降幅时,成员国可规定以第一次降价前的价格为前价。三条都是授权成员国,不是直接给你的豁免。
那个关于香蕉和菠萝的案子
2024年9月26日,欧盟法院第八审判庭对C-330/23号案作出判决。原告是巴登符腾堡州消费者中心,被告是奥乐齐南方公司,提交预先裁决请求的是杜塞尔多夫地方法院。
案情非常具体。2022年10月17日到22日那一周的宣传册上,超新鲜商品被标为已降价,其中包括散装的公平贸易有机香蕉和雨林联盟菠萝。价格印在一个白色矩形里:中间大字写着香蕉1.29欧元、菠萝1.49欧元,右下角小字划着一道线写1.69欧元。
香蕉那一栏还叠着一个德国国旗配色的小矩形,标着降价百分比。菠萝那一栏的小矩形上写的是价格亮点。矩形下面还有一行字:最后售价、过去30天内最低价,后面跟着第三个数——香蕉1.29欧元,菠萝1.39欧元。
一张宣传册上印了三个价格,法院看的是哪一个
从裁定书披露的事实看:香蕉在门店里从2022年9月中旬起一直卖1.69欧元每公斤,只有9月19日到24日那一周降到过1.29欧元每公斤。菠萝在此前五周的单价在1.39到1.79欧元之间。
也就是说,香蕉这次的“降价”售价1.29,和它30天内的最低价1.29完全一样。可宣传册上那个百分比,是拿1.69去算的。
法院的判词很短:第6a条第1款和第2款必须解释为,经营者以百分比形式宣布的降价,或者以旨在突出所宣布价格优惠性的促销表述形式宣布的降价,都必须以第2款意义上的前价为基准来确定。价格亮点这类说法,一样跑不掉。
被判的那个数,本身就是一个单位价格
这个案子还有一层细节,很少有人提,但对本文的主题恰好是最关键的:香蕉是散装卖的,价格标的是每公斤1.69欧元。
回到98/6/EC第3条第3款——散装商品只需标示单位价格。所以奥乐齐宣传册上被拿去算百分比的那个前价,从法律形态上讲就是一个单位价格。
换句话说,第2条(b)项定义的分母和第6a条定义的参照价,在这个案子里落在了同一个数字上。它们本来就不是两件事,是同一件事在两个条文里的两个切面。这个案子是我见过最干净的一次演示。
划线价旁边那个单位价格,该按哪个价算
回到页面上。一张促销中的商品卡片通常有三个数:现价、划线价、单位价格。前两个的关系有明文规定,第三个和前两个的关系,条文里没写。
但推理并不难。单位价格的定义是“最终价格”除以基准量,最终价格就是消费者实际要付的那个数,所以单位价格必须按现价算。这一点没有争议。
有争议的是要不要同时给出划线价对应的单位价格。我的建议是不要。三个数字已经够多了,第四个只会稀释注意力,而且它会给人一种“这两个单位价格都是有效报价”的错觉。目录与购物车价格规则那一层能算出多少个价格是一回事,页面上该露几个是另一回事。
低价商品会同时被三条规则夹住
Baymard在商品页折扣展示方向的研究里给了一条很实用的经验:低于100美元的商品,折扣用百分比表达心理效果更强;高于100美元的商品,用绝对金额更有力——一件1000美元降到900美元,写“省100美元”比写“省10%”有效。同一份研究里还有一组数字:超过18%的站在商品页展示折扣时会踩到四个坑之一,19%的桌面站用多种说法描述同一个促销,14%的桌面站把促销信息放得离价格很远。
把这条经验和前面的判决摆在一起,一个尴尬的重叠就出现了。低价商品最适合用百分比,而百分比正是判决点名必须以30天最低价为基准的那种表达。而低价商品,又恰恰是食品、日化、耗材这些最需要标单位价格的品类。
同一批商品上,三条规则同时生效:折扣怎么表达归转化率优化管,参照价怎么算归法务管,分母怎么选归前端管。三个人各自都做对了自己那一份,页面上照样可能出错。
促销那一刻要抓的三个快照
这件事最省力的验收方式不是评审文档,是抓快照。促销上线前后各抓一次同一批商品的渲染结果,对比三组数。
第一组:现价变了没有,变的幅度和促销规则一致不一致。第二组:单位价格跟着变了没有,新的单位价格除回去等不等于现价除以含量。第三组:划线价对应的那个前价,是不是真的等于过去30天的最低点,而不是等于价目表里的原价。
第三组最容易出问题,因为大多数系统里的原价字段是一个静态值,而前价是一个需要查历史才能算出来的动态值。这两个字段长得太像了,谁都会顺手拿原价去填。促销与优惠券规则那一套配置里,这个坑埋得特别深。
顺带说一句,这三组快照的对比脚本一旦写好,就是可以一直跑下去的资产。它比任何一份上线检查表都可靠,因为它验的是渲染出来的结果,而不是验有没有人记得去检查。
有意义的单位和法定的单位为什么常常不是同一个?
德国法在洗涤剂这一个品类上自己承认了这件事,那一款条文是全篇最好的一处印证。
德国法在一个品类上,自己承认了这件事
价格标示条例第5条前四款一路把分母锁得死死的,到第5款突然松了一次口,而且松得非常具体:对家用洗涤剂,可以用一次常规使用作为基础价格的计量单位。
把这句话读慢一点。德国立法者在一部通篇要求折算到千克和升的条例里,专门给洗涤剂开了一个口子,允许你用“洗一次衣服”当分母。
同一款第二句还把范围扩了一点:这也适用于洗涤和清洁用品,只要它们是单独分量包装的,并且在总灌装量之外还标明了份数。洗衣凝珠、洗碗块、单次分装的清洁片,都在这个范围里。
为什么这个口子只给了洗涤剂
因为在这个品类里,体积已经不能构成可比性了。
两瓶都是1升的洗衣液,一瓶标准配方一次用75毫升,一瓶三倍浓缩一次用25毫升。按每升算,浓缩那瓶贵得多;按每次洗涤算,可能反过来。分母选哪个,直接决定了页面上谁看起来划算。
这正是源研究里那个咳嗽糖浆例子的放大版:两瓶都是100毫升,一瓶的用量是另一瓶的两倍,那么每毫升多少钱这个数就失去了意义。区别在于德国立法者没有停在观察上,而是把它写进了法条。
别的品类里,有意义的单位是什么
洗涤剂只是最早被写进法条的那一个。类似的错位在很多品类里都存在。
| 品类 | 法定分母 | 买家心里的分母 | 两者为什么不一致 |
|---|---|---|---|
| 挂耳与咖啡豆 | 每千克 | 每杯 | 粉水比不同,同样重量冲出来的杯数差得远 |
| 洗衣液与凝珠 | 每升或每千克 | 每次洗涤 | 浓缩倍数不同,单次用量差好几倍 |
| 膳食补充剂 | 每千克或每片 | 每日剂量 | 每日建议服用量从一片到六片不等 |
| 墙面涂料 | 每升 | 每平方米 | 遮盖力和涂布率差异很大 |
| 打印耗材 | 每件 | 每页 | 页产量是这个品类唯一的通用尺子 |
| 宠物主粮 | 每千克 | 每天喂一只狗的成本 | 能量密度不同,日投喂量不同 |
这张表最有用的地方,是它把一个模糊的直觉变成了一条可执行的判断:只要这个品类的商品之间存在“一份用多少”的差异,法定单位就一定不够用。
渠道字段装不下“每次”这个单位
问题在于,这个更有意义的单位,在下游几乎没有位置放。
Google商品数据里unit_pricing_measure支持的单位分几组:重量、体积、长度、面积,另外还有一组按件计的——ct表示计数,sheet表示张,item表示件。打印纸按张能表达,纸巾按张能表达,胶囊按粒也能凑合。
但“每次洗涤”、“每杯”、“每日剂量”这几个,一个都没有对应的单位代码。你想在渠道里表达“这瓶洗衣液每次洗涤0.21欧元”,做不到。这不是配置问题,是字段的取值范围里就没有这个东西。
词表能装下,但只能降一级装
结构化数据这边稍微宽松些,但也只是稍微。UnitPriceSpecification里的unitCode要填UN/CEFACT通用代码,那套代码表里同样没有“次”。
剩下的路只有unitText,一个纯文本字段。你可以写per wash,也可以写每次洗涤,词表不会拦你。但一旦落进自由文本,这个值就退出了可计算的世界——没有机器会去比较两个字符串代表的单位是不是同一个。
这里有个很值得记住的规律:一个单位越贴近用户的真实使用场景,它越可能是这个品类独有的;越是品类独有,它越不可能有标准代码;越没有标准代码,它越只能以文本形式存在。可比较和有意义,在数据层面天然互斥。这一点和正文越本地化、结构化数据越要写回国际格式是同一个张力的两种长相。
所以答案是两个都显示,而且有主次
既然一个负责合规与横向比价、一个负责说服,那就别让它们抢同一个位置。
法定那个必须在,必须清晰可读,必须按目标市场的规则算。有意义那个作为补充,紧挨着它,用更小的字号。英国的价格标示令第7条第4款把这个次序写死了:单位价格必须占主导,补充数量单位的价格所用字符不得大于单位价格。其他市场虽然没有明文,按这个次序做也不会错。
版式上有个小技巧:把两个数写成一行,中间用一个隔断,“每升8.40欧元 · 每次洗涤0.21欧元”。一行里读完,用户自己就完成了从合规口径到使用口径的换算,而这个换算原本要占掉他好几秒。
那个有意义的数,是引擎算不出来的
这里有一个对可见性很关键的推论。法定单位价格,任何一个抓到你页面的引擎都能自己算——它有价格,它能从标题或规格里刮到含量,一次除法就出来了。
但“每次洗涤多少钱”这个数,引擎算不出来。它需要知道这瓶洗衣液一次该用多少毫升,而这个数只写在你的产品说明里,写在标签上,写在你的客服话术里。它是一个只有你才有的私有事实。
这意味着,在所有跟价格相关的信息里,使用口径的单位成本是最难被替代、也最容易被引用的那一个。电商查询意图的模式覆盖里,价值型比较是出现频率最高的那一类查询,而这类查询的答案,恰恰卡在这个只有商家自己给得出的数上。
补充装是这类商品唯一不用嘴说的卖点
做日化和家清的都知道,补充装和替换装是最难讲清楚价值的一类商品。你说它环保,买家半信半疑;你说它省钱,他得自己去算。
而单位价格恰好把这句话从形容词变成了数字。原装500毫升6.90欧元,补充装1升9.90欧元,两个数摆在那儿谁便宜要想一下;写成每升13.80欧元对每升9.90欧元,一秒钟就完了。
更妙的是这个论证不需要你说任何一句话。你只是把两个数按同一个分母摆出来,结论是买家自己得出的。所有由买家自己得出的结论,都比你写在文案里的那句更结实。
把用量说明做成一页公开的、能被引用的内容
很多站把用量信息塞在商品详情的折叠区里,或者干脆只印在包装上。这是把一份稀缺资产藏起来了。
更好的做法是给它一个正经位置:一页讲清楚这个品类怎么用、一次用多少、不同水质或不同场景要怎么调整、按这个用量折算下来每次多少钱。这一页可以被收录、被引用、被拿去回答问题,而商品卡片上那个小字则从这一页取数,保证两处口径一致。
它还有一个附带好处:写这一页会逼你把每个商品的建议用量都补齐。而建议用量这个字段,和净含量一样,多半也躺在某个没人认领的角落里。把内容当结构化数据来生产说的就是这件事——先把事实补齐,再谈怎么呈现。
这个数字摆在列表项的什么位置才不添乱?
版式、主次、移动端、变体合并、套装、排序,逐个说清楚,也说清楚哪几种做法是白做。
主次关系:总价抢眼,单位价格安静
源研究给的排版结论很朴素:总价应当被设计得清晰突出,单位价格则应当被设计成不压过列表项里的其他信息、但需要它的用户能轻松找到。
这条和欧盟指令第4条第1款并不冲突。条文要求的是明确、易辨认、清晰可读,不是要求它跟总价一样大。两边说的其实是同一件事:够找得到,别喧宾夺主。
研究里也有正面样本。有零售商在卫生纸的列表价下面直接给出每卷多少钱,有站把每1千克多少钱放在总价旁边,还有站把每单位价格做得比总价低调一档但仍然一眼可见。三种做法的共同点是,两个数在同一个视觉块里,不用移动视线去别处找。
位置:得在商品描述的近旁
英国的价格标示令第7条第1款把位置写成了规则:标示应给在商品旁边;就远程合同和广告而言,给在商品的视觉或文字描述的近旁;并且应当放在消费者无须向商家求助就能获知的位置。
这三句话对线上的翻译是:单位价格要在商品卡片里,不能只在详情页;在详情页里要在价格区,不能只在最下面那张规格表里;不能藏在需要展开的折叠块里。
最后一条尤其值得留意。折进标签页和手风琴的内容在搜索层面上算不算数,一直有讨论空间;但在价格标示这件事上,法规的态度要明确得多——需要用户主动去点开才能看到的东西,够不着“无须求助即可获知”这个标准。
移动端只有那么几行,怎么排
桌面端的商品卡片通常放得下四五行,移动端两列布局的卡片经常只有三行:图、标题、价格。往里塞第四个元素是有代价的。
比较可行的做法是把单位价格和总价合并到同一行,用一个小一号的字号跟在总价后面,中间加一个间隔符。这样它不占新行,视觉上又归在价格这个信息组里。
不建议做的是把它挪到卡片底部靠近加购按钮的地方。那个区域是行动区,用户在那儿的注意力是准备点击,不是准备比较。比较发生在他的目光横向扫过一排卡片的时候,所以这个数必须待在价格旁边。
变体合并之后,显示的是哪个变体的单位价格
这是实现层面最容易出错的一处,而且错了很难看出来。
Baymard的变体合并研究观察到,把同一商品的多个变体拆成多个列表项会带来两类严重的可用性问题:列表被同款不同色刷屏,以及变体散落在列表各处导致用户找不全。基准测试里仍有12%的站没有做合并。
做了合并的站,卡片上只剩一个价格位,通常显示的是起售价。那么问题来了:如果这个商品有250毫升和1升两个规格,卡片上显示的是250毫升那个的价格,单位价格就必须也是250毫升那个变体的。分子和分母必须来自同一个SKU,这句话听着像废话,但只要价格和含量是两条独立的取数路径,它就一定会在某个分支上被破坏。
套装和组合装:先把里面有什么写清楚
Baymard在家居家具方向的套装内容物研究里发现,用户在列表页看到套装商品时,常常判断不出里面到底包含哪些东西、每样几件,只能点进详情页去确认,而很多站在列表项里根本没给这个信息。
这件事和单位价格是一根链条上的两环。你连套装里有几件都没写,那个按总量算出来的单位价格对用户来说就是一个没有来源的数。他没法验证,也就没法信任。
所以顺序是:先在列表项里写清内容物与数量,再给单位价格。反过来做,用户看到的是一个凭空出现的数字。
列表项该放什么,本来就是一道减法题
值得放在这里提一句的是,Baymard的基准数据显示有50%的站在列表项信息上没找到那个平衡——要么缺关键属性让用户没法判断,要么堆得太满。
单位价格是往这个已经很拥挤的空间里再加一个元素,所以它必须换掉某个东西,而不是叠加上去。多数站可以拿去换的是那些通用得没有信息量的标签:畅销、热卖、新品这一类。
判断标准很简单:这个元素能不能帮用户决定要不要点进去。单位价格能,“店长推荐”不能。产品页对齐机器理解逻辑的那一套思路,在列表项上同样成立,只是空间更紧张,取舍更狠。
四种看着做了、其实没做的做法
第一种:只在详情页给单位价格,列表页不给。比较发生在列表页,这等于把功能建在了用不上的地方。
第二种:只给部分品类。通常是那些数据齐全的品类,也就是本来就不太需要的那些;数据缺的品类一律不显示,而那正是用户最需要帮忙算的地方。
第三种:单位写成看不懂的缩写。源研究里就记录过一个 €0.22 per 1UNI的例子,形式上有,实际上没人知道1UNI是什么。这在“明确无歧义”那条上是站不住的。
第四种:促销期间单位价格消失或者不更新。促销正是用户比价最密集的时段,这时候掉链子,前面所有工作等于白做。
按尺寸裁切和分级定价的品类要另算
有两类商品的单位价格逻辑跟标准预包装不一样,值得单独说一下。
第一类是按长度或面积卖的:线缆、布料、地板、墙纸。这类商品在欧盟指令的定义里更接近散装——总价要等消费者说出要多少才算得出来,所以第3条第3款那条“散装只需标单位价格”是适用的。页面上的主角本来就该是每米或每平方米多少钱,总价跟着数量输入框动。
第二类是有分级定价的批发场景。买1件、10件、100件是三个价,那单位价格该按哪一档显示?我的做法是跟着当前展示的那一档走,并在阶梯表里把每一档的单位价格都列出来。分级定价与报价协商那一套配置里,这张阶梯表本来就存在,只是很少有人给它加一列。
按单位价格排序,是这份数据唯一的高价值下游用途
把单位价格做出来之后,最容易想到的下一步是给排序菜单加一项“按单位价格从低到高”。这个功能确实值钱——它是唯一一个能让用户一眼看到真实性价比排序的入口,类目页的排序与筛选机制里很少有哪一项能给出这么直接的价值判断。
但它有一个硬前提:覆盖率必须接近满。只要有一批商品没有含量数据,排序就会把它们系统性地堆到一端,形成一个稳定的偏见——要么它们永远排最后,等于被隐藏;要么按空值排最前,等于被推荐。两种都糟。
所以这个功能的正确上线顺序是:先补数据,再上排序,且只在覆盖率达标的品类里开放。至于把单位价格做成筛选维度,我一般不建议——用户心里没有“每升5到10欧元”这种区间概念,这个筛选值几乎没人点。筛选条件的回显与总览再做得好,也救不回一个用户根本不会去用的维度。
一个正则表达式的默认值,怎么变成了德国站的合规风险
我自己的一次失手。数据没错,代码没错,两个各自合理的默认值撞在一起,出了一个只朝一个方向偏的错。
那个站是做什么的
出海做家庭清洁与洗护耗材,洗衣液、洗衣凝珠、餐具洗涤浓缩液、多用途清洁剂,外加一整条补充装产品线。主力市场是德国和法国,商品数一千出头。
这个品类的生意结构很特殊(同期我们刚统一完品牌声音体系,产品页和客服的口径是对得上的):首购看重的是味道和成分,复购看重的是划不划算。所以单位价格这件事在这里不是锦上添花,它就是复购决策本身。
触发我们做这件事的是两条客服工单。德国买家问:你们这瓶浓缩的到底比普通装省不省?我们当时的回答是让客服手算了一遍发给他。第二次再被问到的时候,我意识到这个算术应该由页面来做。
动手之前,先撞上了那个熟悉的问题
排期评估的第一天就卡住了:后台里净含量这个字段,全站覆盖率六成多一点。补录一千个SKU,运营估了两周。
而商品标题里几乎每一条都写着规格。技术同学提了个方案:写个解析器从标题里刮,两天就能上,覆盖率能到九成五以上。
我同意了。现在回头看,那个决定的实质是:用两天换两周,代价是把一个没有治理的字段,变成了一个看起来有治理的字段。数据库里从此躺着一列干干净净的数字,谁也看不出它是从一串营销文案里刮下来的。
头三个月,数据好得不像话
上线之后浓缩产品线的表现非常亮眼。加购率涨了三成多,品类页停留时长上去了,那两条客服工单代表的问题彻底消失。
我在月报里写了一句话,大意是单位价格的引入让浓缩线的性价比优势第一次被用户直观感知到。这句话当时听着很有道理,事后看每一个字都需要打问号。
于是我们顺理成章地加码:浓缩线拿到了品类页首屏的固定位置,进了邮件推荐模块,联盟客素材包也重做了一版,主打的就是性价比。
第四个月,一封德语的信
发信的是一家律所,代表一家德国同行。文件里附了三张我们德国站的商品页截图,指出的问题是基础价格标示不实,依据是价格标示条例,配套主张的是不正当竞争。
核对花了不到二十分钟。我们那款主力浓缩洗涤液,德语标题写的是“浓缩液500毫升(相当于2升)”。解析器抓到的是括号里那个2升。
售价8.99欧元。按法定分母,也就是包装上那个500毫升,单位价格应该是每升17.98欧元。页面上显示的是每升4.50欧元。差4倍。
为什么这个错误特别难被发现
因为它给出的商业结论,碰巧是对的。
标准款1升装卖5.99欧元,也就是每升5.99欧元。错误显示下,浓缩装每升4.50欧元,看起来比标准款便宜——而浓缩装确实是更划算的选择。方向是对的,只是理由错了,数字也是违法的。
正确显示出来是什么样呢?浓缩装每升17.98欧元,标准款每升5.99欧元,浓缩装是标准款的3倍。一个我们花了很多力气去主推的产品,在自己的品类页上变成了最贵的那一个。
三条没早发现的原因
第一条:我们给这个功能写了二十多个测试用例,全部在验价格除以数量等不等于预期值。除法当然不会错,所以这些用例永远是绿的。没有任何一条用例问过:这个数量是从哪儿来的。验收清单是照着我们写了什么代码列的,不是照着这个数字应该怎么来列的。
第二条也是我觉得最值得写下来的一条。解析器取最后一个匹配到的数量,这是一个纯技术的默认值,写的时候完全合理。德语营销文案习惯把等效量放在括号里写在后面,这是一个纯营销的书写习惯,同样完全合理。两个各自都站得住的默认值撞在一起,合成了一个系统性的价格偏差——而且它只朝一个方向偏,因为等效量永远大于净含量,分母永远偏大,单位价格永远偏低。
第三条:这个错误会主动生产支持自己的证据。它让主推线看起来最便宜,销量就涨;销量涨了,我们给它更多曝光位;曝光多了,销量继续涨。四个月里这条产品线所有的数字都在说这个决定做对了,而真正能证伪它的人不在我们团队里。这跟我以前那次绿色标签的教训表面上有点像,但内核不同:那次错在一个概念从来没有定义,这次每一个概念都定义得很清楚,错的是两个正确默认值的组合。
真正的代价不是罚款
很多人以为这类事的成本是被监管机构罚钱。在德国不是这样。这条赛道上最活跃的执行主体是竞争对手和行业协会,路径是发警告函,要求你签一份附带违约金的停止侵害承诺。
直接支出是律所费用,数额不算吓人。真正的成本在那份承诺书上:签下去之后,同一类问题再犯一次,就不再是重新走一遍程序,而是直接触发约定的违约金。
换句话说,这一签,我们把一个可以慢慢改的技术债,变成了一份有金额、有触发条件的合同义务。这才是这件事最贵的地方,也是我后来做跨境合规相关排期时优先级最高的判据。同样的道理在礼品订单的跨境链路上也成立:页面上一句话的承诺,兑现它的可能是三个你管不到的系统。
改了三处
第一处,含量字段从一个自由文本拆成了结构化的三段:数值、单位、以及一个布尔位,标记这个数是不是稀释后的等效量。新品不填这三段不允许上架。标题解析器没有删掉,但降级成了一个提示工具——它只负责生成待补录清单,不再直接进渲染管线。
第二处,把分母做成了一张按市场加品类的映射表,代码里禁止出现写死的千克和升。德国那一行按价格标示条例第5条第5款,额外多了一列每次洗涤,作为法定单位之外的补充显示,而不是替代。
第三处最土,但事后看是三处里最值钱的:每次价格或含量变更,系统把新旧单位价格的比值打出来,偏离1超过阈值就转人工确认。因为错误的单位价格看起来永远是合理的,唯一能让它露馅的,是拿它跟它自己的历史比。
把它救回来的不是改数字,是换分母
改完之后,浓缩线的单位价格从品类里最低变成了品类里最高,加购率两周内回落到上线之前的水平。这在意料之中,那三成多的增长本来就是靠一个错误的数字撑起来的。
真正把它救回来的是第二处改动里那一列附加单位。浓缩装一次用20毫升,一瓶500毫升能洗25次,折下来每次0.36欧元;标准款一次用75毫升,一瓶1升能洗13次多一点,每次约0.45欧元。按这个口径,浓缩装便宜两成。
同一件商品,同一个售价,换一个分母,从品类里最贵变成品类里最便宜,而两个数字都是对的,也都是合法的。这句话是这整篇文章的浓缩版。
还有一个我没预料到的收益:客服工单里“你们浓缩装怎么这么贵”这一类问题,在那一列上线之后基本消失了。之前我们靠文案去解释的东西,现在由一个数字自己完成了。跨境退货的预防体系里有一条同样的逻辑——把期望和事实的差距在下单之前就抹平,比事后补救便宜得多。
从哪一步开始做,这件事才不会做成一次性项目?
四周路径、十六项自查、三条反信号,外加一段该写在帮助中心里的公共答案。
第一周:一行代码都别改
这一周只干一件事,出三张清单。
第一张是覆盖率清单:按品类统计有多少商品填了净含量、填了的里面有多少同时有合法单位、这些单位一共有几种写法。第二张是来源清单:这些值分别来自供应商资料、标题解析还是人工录入,各占多少。第三张是市场清单(顺带把商品站点地图的分片口径也核一遍,两边用的应该是同一套市场划分):你在哪些国家有面向消费者的页面,每个国家的法定分母规则是什么。
三张清单出完,你会发现排期的重点跟一开始想的完全不一样。多数团队原本以为这是个前端任务,看完清单会明白它主要是个数据任务。
第二周:把那张分母映射表写出来
四列:市场、品类、法定基准单位、附加单位。前三列填法规,第四列填这个品类里买家真正在意的口径,填不出来就空着,空着不丢人。
然后定一条规则并写进文档:第三列的值不允许被任何代码逻辑覆盖,第四列只能作为补充显示且字号更小。这条规则的价值在于,它把未来所有关于“要不要按某个更好懂的单位显示”的争论提前终结了——两个都显示,主次固定。
这周还要做一件小事:给含量字段找一个明确的责任人,把名字写在表上。这个动作的成本是零,效果比后面所有技术手段加起来都大。
第三周:只在一个品类上线,带快照对比
挑一个覆盖率最高、规格差异最明显的品类先上。别一次铺全站,因为你需要一个能够仔细核对的样本量。
上线的同时把快照脚本跑起来:渲染结果里抓出每个商品的总价、含量、单位价格,落成一张表,人工抽三十条对着商品图上的包装标示核一遍。这三十条核完,你对整个数据源的信心程度会有一个非常真实的判断。
同一周里把品类内的离群检测也加上:同一个品类同一个规格档位里,单位价格显著偏离中位数的商品自动进人工队列。这条规则能抓住绝大多数分母错误,而且不需要任何外部数据。它和给零流量商品做体检可以合成同一份周报,两者盯的都是目录里没人看的角落。
第四周:铺开,并补上附加单位
确认第一个品类稳定之后再铺开,铺的顺序按覆盖率从高到低走,覆盖率不达标的品类先补数据再上线,不要为了“全站都有”而让一半商品显示空白。
附加单位这一列建议放在第四周而不是第一周。原因是它需要建议用量数据,而那个字段通常比净含量还缺。先把法定的那份做扎实,附加的那份可以按品类分批补。
四周结束时,你手里应该有的东西是:一张有人负责的映射表、一份能长期跑的快照对比脚本、一条离群检测规则,以及一个明确的上线门槛。这四样加起来,才是把它从一次性项目变成一项能力的分界线。想验证它到底带来了什么,先把测量框架定清楚再去看数,别急着埋点。
上线前的十六项自查
- 列表页卡片上有单位价格,不只是详情页有
- 单位价格和总价在同一个视觉块里,不需要移动视线去找
- 总价比单位价格醒目,但单位价格清晰可读
- 单位写全,没有出现自造缩写
- 分母来自包装标示的净含量,不是毛重、不是等效量、不是箱规
- 需要标示沥干重的品类,分母用的是沥干重
- 每个市场按各自的法定基准单位显示,代码里没有写死的单位
- 多件装的总量与单件量都在卡片上写清楚了
- 变体合并后,显示的价格和显示的含量来自同一个SKU
- 促销期间单位价格跟着现价重算,且没有消失
- 划线价旁边没有第二个单位价格
- 提交给渠道的基准量取的是该渠道支持的合法值
- 结构化数据里的参考数量和页面显示的口径一致
- 附加单位存在时,字号不大于法定单位价格
- 没有含量数据的商品显示空白,而不是显示一个错误的数
- 按单位价格排序只在覆盖率达标的品类里开放
这十六条里,第五条和第九条是最容易出事的两条,也是复盘那一节里我实际踩过的两个坑。
三条反信号
第一条:单位价格的分布里出现了明显的双峰。同一个品类里一批商品的单位价格集中在某个值附近,另一批集中在它的几分之一处,那多半不是选品差异,是两批商品的分母口径不一样。
第二条:某个商品在按总价排序和按单位价格排序里的位次差异极大,且它不是大包装。这通常意味着它的含量字段有问题,而不是它真的性价比逆天。
第三条:单位价格上线之后某条产品线的数据涨得特别好,好到超出你的预期。这一条是我自己的教训——涨得意料之外地好,第一反应应该是去核对数据,而不是去做加码排期。
引擎被问到哪个更划算的时候,会拿到什么
这里要分成两种情况说,因为它们的风险完全不同。
你的页面上没有单位价格的时候,引擎不会因此就不回答。它会拿它抓到的价格和它能从标题或规格区刮到的含量,自己做那次除法。也就是说,它会重现一遍你在复盘那一节里看到的整个过程,包括那个抓错数字的可能。
你的页面上有一个错误的单位价格的时候,情况更糟:引擎会直接采信。它不会去质疑一个看起来像是商家自己计算过的数字,而这个数字会被带进比较、带进推荐、带进它给别人的答案里。挑源机制里那条关于定价页解析的观察说明了一件事:模型对价格类信息的处理是有专门路径的,不是随便读读。集合页在AI购物里的位置也印证了这一点,比较类问题的答案多半是从列表页上取的。
那份公共答案该写在哪儿
商品卡片上那个小字是个性化的——它只回答“这一件多少钱一升”。而用户在看完它之后仍然会有的问题,是公共的:你们的基础价格按什么算、浓缩产品按哪个体积算、多件装按整包还是按单件算、促销时那个数是按现价还是原价。
这几个问题的答案应该有一个固定的公开位置,通常是帮助中心里的一页,或者品类页上的一段口径说明。写法可以很朴素:“德国站的基础价格按每升计算;浓缩类产品按瓶身标示的净含量计算,不按稀释后的体积;多件装按包装内商品总量计算。”
这三句话是别人写不出来的,因为它描述的是你自己的口径。它同时解决了三件事:给引擎一段可以直接引用的定义,给买家一个可核对的依据,给你自己的团队一份不会被改来改去的标准。产品描述的七项信号体检里,口径类说明是最容易被漏掉、也最容易补上的一项。让内容被答案引擎优先引用这件事上,这类只有你才有的口径说明,性价比高得离谱。
最后一句
单位价格这件事的难度,从来不在那次除法上。它难在你得先承认,商品卡片上有一个数字,它的可靠性完全依赖一个从来没有人认领的字段。
把那个字段找到主人,剩下的都是工程问题。而在跨境这个语境里,找不找得到那个主人,决定的不只是转化率,还有一封信会不会在某个周二早上从德国寄过来。
常见问题解答
我只做美国市场,还需要显示单位价格吗?
法律上不需要,商业上很值得。美国联邦层面没有一部像欧盟98/6/EC那样的通用强制规定,单位价格标示主要靠部分州和地方的规则以及零售业惯例,各州差异不小。
但源研究给出的那个数字值得注意:86%的电商站没有为不同规格的商品提供单位价格,而这个缺失会导致用户错过更划算的商品、误判性价比,甚至直接放弃购买。测试里反复出现的场景是受试者停在列表页上心算,算不动就只比较少数几件,剩下的全部跳过。
换句话说,在美国市场这是一个转化率优化项,投入产出自己判断;在欧盟英国这些市场它是义务,没有判断空间。如果你计划未来开欧洲站,那不如现在就按义务的标准去建数据,省得到时候返工。
浓缩类产品的单位价格,能不能按稀释之后的体积算?
不能。98/6/EC第4条第2款写得很明确:单位价格应参照依照国家与共同体规定所申报的数量。申报的数量就是包装上印的净含量,不是你算出来的等效量。
这条规则在实操里最容易被绕过,因为营销文案通常会把等效量写得很显眼,“500毫升相当于2升”这种句式在浓缩品类里几乎是标配。一旦你的系统从标题里取数,抓到的很可能就是那个更大的数,而结果是单位价格被系统性地做低。
正确做法是把等效量当成一个独立的营销信息去展示,比如放在商品描述里或者卖点区,但绝不让它进入单位价格的计算。如果你想给买家一个更贴近使用的成本口径,走附加单位那条路——在法定单位价格旁边多给一个每次使用多少钱,字号更小。
促销打折的时候,单位价格该按现价还是划线价算?
按现价。指令对单位价格的定义是最终价格除以基准量,最终价格就是消费者实际要付的那个数,所以促销一生效,单位价格必须跟着重算。
需要额外注意的是划线价那一侧。2019/2161给98/6/EC加进来的第6a条要求,任何降价公告都要标示前价,而前价是降价前至少30天内的最低价,不是你价目表里的原价。C-330/23号判决进一步明确:以百分比形式宣布的降价,或者以突出优惠性质的促销措辞宣布的降价,都必须以那个前价为基准来确定。
实现上要小心的是,绝大多数系统里“原价”是一个静态字段,“前价”是一个需要查价格历史才能算出来的动态值。这两个字段长得太像,很容易被顺手混用。建议在促销上线前后各抓一次渲染快照对比,比事后核对文档可靠得多。
六罐装的饮料,分母该用单罐容量还是包装总量?
取决于里面那六罐是不是打算单独销售的规格。2007/45/EC第5条第1款规定,两个或以上独立预包装构成多件装时,标称量适用于每一个独立预包装;第2款则规定,如果里面那些包装并不打算单独销售,标称量适用于整个预包装。
落到页面上,我的建议是两个数都给:卡片上写清“6罐 × 330毫升”,单位价格按总量1980毫升折算成每升多少钱。这样用户既知道里面是什么,又拿到了那个能横向比价的数。
技术上要盯的是商品建模。多件装通常是一个独立的SKU,如果它的含量字段是从单罐商品继承过来的,那分母就会小6倍,单位价格会高得离谱。这类错误在按单位价格排序的时候会立刻暴露——它会稳定地排在最贵的那一端。
某个商品的净含量字段是空的,页面上该显示什么?
显示空白,什么都不写。不要猜,不要按品类均值填,也不要临时从标题里刮一个数出来救场。
理由是错误的单位价格比缺失的单位价格代价更高。缺失的时候,用户知道这个信息没有,他会自己去算或者干脆换一件;错误的时候,他会直接采信一个假数字,而这个数字还会被写进你的结构化数据、传给渠道、被答案引擎读走。
更重要的是,显示空白会让缺口留在页面上,运营看得见,从而形成补数据的压力。用一个猜出来的数把空白填上,等于把问题藏起来了——覆盖率报表上会显示九成五,实际可信的可能只有六成。这也是我最不建议直接用标题解析结果进渲染管线的原因。
提交给渠道的基准量和我站上显示的不一样,会有问题吗?
不一定有问题,但你得知道哪一边是有法律后果的那一边。
Google商品数据的unit_pricing_base_measure文档里明确写着,为了让同一页面上所有广告和免费商品列表更可比,实际展示出来的基准量可能与你提交的不同。而它支持的整数只有1、10、100、2、4、8六个,另加75cl、750ml、50kg、1000kg四种组合,所以有些法定分母你根本没法在渠道里精确表达。
结论是分工要清楚:法定义务只能在你自己的商品页上兑现,那一层的分母必须严格按目标市场的规则来;渠道那一层尽量贴近,表达不了就选最接近的合法值。真正要避免的是反过来——为了让渠道那边好填,而把自己站上的分母改成一个不合法的值。
权威参考资料
本文标题:《商品列表页上那个每千克价格,是整页唯一一个你没存过、只能现算的数字》
本文链接:https://zhangwenbao.com/unit-price-denominator-eu-rules-product-list.html
版权声明:本文原创,转载与引用请注明作者与原文链接。许可协议: CC BY 4.0