大多数 Feed 问题看起来并不像 Feed 问题。它们看起来像是一条您无法解释的 Google Merchant Center 拒登、一个把预算全花在一件黑色 T 恤上的 Advantage+ 广告系列,或是一条购物广告把寻找 42 码鞋子的顾客带到了一个只剩 38 码的页面。
几乎所有这些问题的背后,都是同一个东西:变体。
变体是指商品在某个可见、可购买的方面有所不同的任何版本:尺码、颜色、材质、容量、表面处理。它们在零售中再普通不过,在 Feed 中却格外棘手,因为每个渠道对变体的建模方式都不同,而且一旦出错,失败是悄无声息的。什么都不会坏掉,您的广告只是默默地表现不佳,而问题的根源藏在一个没人打开的数据文件的第四层深处。
本指南涵盖这一主题的方方面面:什么才算变体、item_group_id 如何运作以及人们在哪里误用它、每个定义变体的属性及其真实限制、XML、CSV 和 JSON 格式的可用 Feed 示例、Google、Meta、TikTok、Pinterest、Amazon 以及区域性电商平台各自期望的变体结构,以及一张针对最常见错误的诊断表。
文章很长,因为这个话题本身就很大。请使用目录跳转阅读。
1. 变体到底是什么
变体是商品的一个可购买版本,它与同组的其他版本至少在一个顾客会进行选择的属性上有所不同,但仍然是同一件商品。
最后这一点至关重要。一件蓝色 M 码 T 恤和一件黑色 L 码 T 恤是同一件商品。而一件蓝色 T 恤和一件蓝色连帽衫则不是,即使它们来自同一品牌、使用同一种面料。
大多数渠道采用的标准模型是父/子结构:
- 父商品是概念上的商品,例如“Merino Crew Neck Sweater”。它本身通常不可购买。
- 子商品就是各个变体,每个都有自己的 SKU、自己的库存水平,有时还有自己的价格和图片。
在商品 Feed 中,这几乎总是以扁平方式表达的:每个变体都是独立的一行或一个 <item>,再由一个共享的分组键将它们关联在一起。不存在嵌套。一件有 4 种颜色、5 个尺码的毛衣,就是 20 行,全都带有相同的分组 ID。
什么不是变体
这正是 Feed 在还没写一行 XML 之前就出错的地方。
| 不是变体 | 原因 | 应改用 |
|---|---|---|
| 多件装:6 件装与单件 | 同一单品的数量不同,而不是顾客选择的属性 | multipack 属性(Google) |
| 套装:相机 + 镜头 + 包 | 一个独立可售的组合商品 | is_bundle 属性;作为单独商品 |
| 相关商品:搭配的上衣和半身裙 | 是能搭配在一起的不同商品 | 作为单独商品;使用推荐功能 |
| 翻新与全新 | 属于成色,而非变体 | condition 属性 |
| 不同零售商的商品信息 | 同一商品,不同卖家 | 使用不同的账户/Feed |
| 个性化定制:刻名字 | 按单定制,而非库存选项 | 通常作为一个商品;在描述中注明 |
把上述任何一种归入同一个 item_group_id,都会产生一个成员之间不可互换的组,这会让目标页面上的变体选择器产生混乱,在某些渠道上还会触发不匹配拒登。
2. 决定一切的那个判断
在编写任何 Feed 逻辑之前,请针对您销售的每种商品类型回答一个问题:
当顾客选择另一个选项时,他们是进入一个不同的页面,还是停留在同一页面的不同状态?
这是一个实用的检验标准,它直接决定了 Feed 应该如何构建。
情况 A:每个变体有独立的 URL。每种颜色都有自己的商品页面(/merino-sweater-navy、/merino-sweater-charcoal)。将每个变体作为独立的一行发送,并附上各自的链接。这是最干净的设置,广告相关性最好,也是各渠道更青睐的方式。
情况 B:一个 URL,在页面上选择变体。所有内容都在 /merino-sweater 页面上,顾客通过选择器选择颜色和尺码。您仍然可以发送每个变体,但应附加一个深层链接参数,让广告落地到正确的预选状态:
https://example.com/merino-sweater?colour=navy&size=m如果没有这个参数,点击了海军蓝 M 码广告的购物者,会到达一个显示炭灰色 S 码的默认状态。这种不匹配是变体广告中最大的隐形转化杀手之一,在 Google 上还可能触发“值不匹配(网页抓取)”拒登,因为抓取工具看到的页面上显示的颜色与提交的 color 不一致。
情况 C:不值得拆分的变体。有些变体对购买决策的影响不足以支撑单独投放广告,例如充电器的线缆长度。这时您可以有意只发送一个具有代表性的变体。第 7 节将介绍什么情况下这是正确的选择。
定义变体的属性与描述性属性
您 Feed 中的每个属性都属于以下两类之一,混淆两者是导致分组格式错误的常见原因。
定义变体的属性在组内成员之间必须不同。这些就是顾客所选择的东西:color、size、material、pattern,以及容量或表面处理等商品特有的维度。
组内恒定的属性在每个成员之间必须完全相同:brand、gender、age_group、item_group_title、google_product_category。如果两行共享同一个 item_group_id,却带有不同的 gender 值,那么您要么分错了组,要么标错了属性。
因行而异、但不定义变体的属性会逐行变化,但并不定义变体:id、price、availability、gtin、image_link、link。两个变体完全可以有不同的价格(3XL 码通常更贵),而价格并不是区分它们的依据。
3. item_group_id:基础所在
item_group_id 是一个共享键,用来告诉渠道“这些行是同一件商品”。变体处理的其他一切,都取决于它是否正确。
规范
| 属性 | Meta | TikTok | |
|---|---|---|---|
| 字段名称 | item_group_id | item_group_id | item_group_id |
| 最大长度 | 50 个字符 | 100 个字符 | 150 个字符 |
| 允许的字符 | Unicode;建议使用 ASCII:字母数字、下划线、短横线 | 字符串 | 字符串 |
| 是否区分大小写 | 不区分大小写(ABC123 = abc123) | 区分大小写 | 区分大小写 |
| 是否必填 | 提交变体时,免费商品信息以及巴西、法国、德国、日本、英国和美国的购物广告必填 | 变体分组所需 | 变体分组所需 |
| 可重复字段 | 否,每个商品一个值 | 否 | 否 |
由于 Google 对该值不区分大小写,而 Meta 和 TikTok 区分,请在所有地方统一使用小写(或大写)。一个同时出现 SWTR-001 和 swtr-001 的商品目录,在 Google 上会正确分组,在 Meta 上却会拆分成两个商品。
如何选择取值
最好的 item_group_id 就是您 ERP 或 PIM 中已有的父 SKU。它已经存在、稳定且唯一。
好的示例:
SWTR-MERINO-CREW
12345
parent-8891不好的示例及原因:
| 取值 | 问题 |
|---|---|
| Merino Crew Neck Sweater | 包含空格和大小写混用;标题较长时会超出限制;营销团队给商品改名时它也会变 |
| sweater | 不唯一,会把您整个毛衣系列合并成一个组 |
| SWTR-MERINO-CREW-NAVY-M | 包含了变体维度,因此每一行的值都是唯一的,什么也分不到一组 |
| 每次导出时重新生成的行号或哈希值 | 每次导出都会变化;渠道会失去分组的连续性,从零开始重新学习 |
最后一点值得强调。item_group_id 必须长期保持稳定。渠道会针对分组积累效果历史数据。如果您的导出会重新生成 ID,那么每次同步都会重置这些历史数据,再多的出价优化也无法弥补。
三条规则
- 组内每个成员共享相同的 item_group_id。
- 每个成员都有唯一的 id。Feed 中任何地方出现重复的 id,都会导致后面那一行被悄无声息地丢弃。
- 每个成员至少在一个定义变体的属性上有所不同。分组 ID 相同、并且颜色和尺码也相同的两行是重复项,而不是变体。
一个同时满足这三条规则的命名惯例:
item_group_id: SWTR-MERINO-CREW
id: SWTR-MERINO-CREW-NAV-M
id: SWTR-MERINO-CREW-NAV-L
id: SWTR-MERINO-CREW-CHR-M易读、易调试,并且源自您已有的数据。
item_group_title
这是 Google 较新的一个属性,可选,但只要提交了 item_group_id 就建议填写。它承载的是父商品的名称,最多 150 个字符,并且在组内每个变体中都必须完全相同。
xml
<g:item_group_id>SWTR-MERINO-CREW</g:item_group_id>
<g:item_group_title>Merino Crew Neck Sweater</g:item_group_title>
<title>Merino Crew Neck Sweater — Navy, Medium</title>注意其中的规律:title 因变体而异,item_group_title 则不变。在两个字段中发送相同的字符串,就浪费了这个信号。
variant_option
这也是 Google 一侧较新的属性:一种以结构化方式声明哪些属性定义了变体的方法,而不是让渠道自行推断。它最多接受 30 个名称/值对(每个子属性最多 250 个字符,总计 5,000 个字符)。
xml
<g:variant_option>
<g:name>Colour</g:name>
<g:value>Navy</g:value>
</g:variant_option>
<g:variant_option>
<g:name>Size</g:name>
<g:value>M</g:value>
</g:variant_option>对于变体维度不在标准服装属性范围内的商品,这一点尤其有用,例如存储容量、处理器档次、功率、座位数。与其把“256GB”硬塞进 size,不如正确地声明它。
4. 定义变体的属性详解
color
这是规范中规则最多的属性,也是最常被拒绝的属性。
| 属性 | 值 |
|---|---|
| 最大长度(Google) | 总计 100 个字符,每种颜色 40 个字符 |
| 最大长度(Meta / TikTok) | 200 个字符 |
| 多种颜色 | 用 / 分隔,主色在前 |
| 是否必填 | 上述国家/地区的服装必填;所有服饰与配饰类免费商品信息必填 |
不接受:
- 数字:Colour 42、RAL 5013
- 十六进制色值:#001F5B
- 单个字母:用 N 表示海军蓝
- 引用图片:see photo
- 字母数字混合或连写的单词:Navy1、NavyBlue(应写作 Navy Blue)
如何处理营销颜色名称。时尚品牌很少把颜色叫作“navy”,它们会叫它“Midnight Regatta”。渠道需要的是购物者会搜索的颜色,而您的品牌需要在页面上展示自己的命名。
可行的折中方案:
color: Navy
description: ...available in Midnight Regatta (navy)...在 Feed 中将营销名称映射为标准名称,同时在落地页和描述中保留品牌命名。不要把营销名称放进 color 里碰运气,这会降低与带颜色限定词的搜索词的匹配度,而这类搜索在服装品类中属于购买意向最强的搜索之列。
多色商品:
color: Navy/White/Grey主色在前。Google 会将第一个值读取为主要颜色。
size
| 属性 | 值 |
|---|---|
| 最大长度(Google) | 100 个字符 |
| 最大长度(Meta / TikTok) | 200 个字符 |
| 是否必填 | 上述国家/地区的服装和鞋类必填;免费商品信息必填 |
| 均码商品 | one_size、OS 或 OSFA |
关键规则是:足够具体以避免歧义,并在整个商品目录中保持一致。如果每个商品都使用 M,那么 M 没问题。而一个对同一概念混用 M、Medium、med 和 M/L 的 Feed,会让您的变体分组支离破碎,也让基于尺码的细分无从实现。
对于单一维度不足以描述的商品,请在值中包含用于区分的各个维度:
size: 32/34 (waist/inseam)
size: 15.5/34 (neck/sleeve)
size: 9.5 Wide (shoe width)
size: 200x140cm (rugs, bedding)size_type 和 size_system
这两个属性是可选的、仅适用于服装,而且未被充分利用;对于使用这些限定词进行搜索的购物者,它们都能显著改善匹配效果。
size_type:最多 2 个值,可选值为 regular、petite、maternity、big、tall、plus。
size_system:取值之一为 US、UK、EU、DE、FR、JP、CN、IT、BR、MEX、AU。如果省略,渠道会假定使用目标国家/地区的尺码体系,这会导致一种特定且代价高昂的失败:一家使用 EU 尺码向德国销售、却未声明 size_system 的土耳其零售商,其尺码可能会被按错误的标准解读。
xml
<g:size>10</g:size>
<g:size_system>UK</g:size_system>
<g:size_type>regular</g:size_type>material
在 Google 上最多 200 个字符。主要材质在前,之后最多可列出两种次要材质,用 / 分隔。
material: Cotton
material: Leather/Suede
material: Merino Wool/Nylon/Elastane仅当它用于区分您的变体时才是必填的,例如一款同时有皮革和帆布版本的包。否则为可选,但值得提交,因为材质是常见的搜索限定词。
pattern
最多 100 个字符。用自由文本描述印花或图案:Striped、Polka Dot、Paisley、Floral、Herringbone。规则相同:如果它是变化的维度,则为必填。
age_group 和 gender
两者都是组内恒定的属性。组内每个变体都必须带有相同的值。
age_group:newborn、infant、toddler、kids、adult,每个商品一个值。
gender:male、female、unisex。
如果一件服装确实同时提供男款和女款剪裁,那就是两个独立的商品组,而不是一个混合了不同性别的组。剪裁不同,尺码也不同,购物者是在不同商品之间做选择,而不是在不同选项之间做选择。
参考表
| 属性 | Google 限制 | 必须不同 | 组内必须一致 |
|---|---|---|---|
| item_group_id | 50 个字符 | — | ✅ |
| item_group_title | 150 个字符 | — | ✅ |
| id | 50 个字符 | ✅(始终唯一) | — |
| title | 150 个字符 | 建议 | — |
| color | 100 个字符(每种颜色 40) | 若为变化维度 | — |
| size | 100 个字符 | 若为变化维度 | — |
| size_type | 2 个值 | 可选 | — |
| size_system | 枚举 | — | 通常 ✅ |
| material | 200 个字符 | 若为变化维度 | — |
| pattern | 100 个字符 | 若为变化维度 | — |
| gender | 枚举 | — | ✅ |
| age_group | 枚举 | — | ✅ |
| brand | 70 个字符 | — | ✅ |
| google_product_category | — | — | ✅ |
| price | — | 可以不同 | — |
| availability | 枚举 | 可以不同 | — |
5. 真实 Feed 示例
XML(Google RSS 2.0)
一个六变体商品组中的两个变体。请注意哪些内容变化了,哪些没有。
xml
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
<channel>
<title>Example Store — Product Feed</title>
<link>https://example.com</link>
<item>
<g:id>SWTR-MERINO-CREW-NAV-M</g:id>
<g:item_group_id>SWTR-MERINO-CREW</g:item_group_id>
<g:item_group_title>Merino Crew Neck Sweater</g:item_group_title>
<title>Merino Crew Neck Sweater — Navy, Medium</title>
<description>Fine-gauge 100% merino wool crew neck. Ribbed cuffs and hem, regular fit. Machine washable on wool cycle.</description>
<link>https://example.com/merino-crew-sweater?colour=navy&size=m</link>
<g:image_link>https://cdn.example.com/swtr-merino-navy-1.jpg</g:image_link>
<g:additional_image_link>https://cdn.example.com/swtr-merino-navy-2.jpg</g:additional_image_link>
<g:availability>in_stock</g:availability>
<g:price>89.00 EUR</g:price>
<g:brand>Example</g:brand>
<g:gtin>5012345678900</g:gtin>
<g:mpn>SW-MC-NAV-M</g:mpn>
<g:condition>new</g:condition>
<g:google_product_category>1604</g:google_product_category>
<g:color>Navy</g:color>
<g:size>M</g:size>
<g:size_system>EU</g:size_system>
<g:size_type>regular</g:size_type>
<g:material>Merino Wool</g:material>
<g:gender>male</g:gender>
<g:age_group>adult</g:age_group>
<g:custom_label_0>core</g:custom_label_0>
<g:custom_label_1>full-size-run</g:custom_label_1>
</item>
<item>
<g:id>SWTR-MERINO-CREW-CHR-L</g:id>
<g:item_group_id>SWTR-MERINO-CREW</g:item_group_id>
<g:item_group_title>Merino Crew Neck Sweater</g:item_group_title>
<title>Merino Crew Neck Sweater — Charcoal, Large</title>
<description>Fine-gauge 100% merino wool crew neck. Ribbed cuffs and hem, regular fit. Machine washable on wool cycle.</description>
<link>https://example.com/merino-crew-sweater?colour=charcoal&size=l</link>
<g:image_link>https://cdn.example.com/swtr-merino-charcoal-1.jpg</g:image_link>
<g:availability>out_of_stock</g:availability>
<g:price>89.00 EUR</g:price>
<g:brand>Example</g:brand>
<g:gtin>5012345678931</g:gtin>
<g:mpn>SW-MC-CHR-L</g:mpn>
<g:condition>new</g:condition>
<g:google_product_category>1604</g:google_product_category>
<g:color>Charcoal</g:color>
<g:size>L</g:size>
<g:size_system>EU</g:size_system>
<g:size_type>regular</g:size_type>
<g:material>Merino Wool</g:material>
<g:gender>male</g:gender>
<g:age_group>adult</g:age_group>
<g:custom_label_0>core</g:custom_label_0>
<g:custom_label_1>broken-size</g:custom_label_1>
</item>
</channel>
</rss>有四点值得指出:
- item_group_id 和 item_group_title 完全相同;id 和 title 则不同。
- link 带有深层链接参数,让广告落地到正确的预选状态。其中的 & 被转义为 &,这在 XML 中是必需的,也是解析失败的常见原因。
- image_link 因变体而异。海军蓝的各行都指向海军蓝的照片。为所有颜色发送同一张主图,是仅次于缺少分组 ID 的第二常见变体错误。
- 缺货的那一行已被标记(通过 custom_label_1),因此无需将其从 Feed 中移除,就可以将其排除或调低出价。
CSV / TSV
同样的数据,扁平化呈现。标题行加两个变体:
csv
id,item_group_id,item_group_title,title,description,link,image_link,availability,price,brand,gtin,condition,google_product_category,color,size,size_system,material,gender,age_group,custom_label_0
SWTR-MERINO-CREW-NAV-M,SWTR-MERINO-CREW,Merino Crew Neck Sweater,"Merino Crew Neck Sweater — Navy, Medium","Fine-gauge 100% merino wool crew neck.",https://example.com/merino-crew-sweater?colour=navy&size=m,https://cdn.example.com/swtr-merino-navy-1.jpg,in_stock,89.00 EUR,Example,5012345678900,new,1604,Navy,M,EU,Merino Wool,male,adult,core
SWTR-MERINO-CREW-CHR-L,SWTR-MERINO-CREW,Merino Crew Neck Sweater,"Merino Crew Neck Sweater — Charcoal, Large","Fine-gauge 100% merino wool crew neck.",https://example.com/merino-crew-sweater?colour=charcoal&size=l,https://cdn.example.com/swtr-merino-charcoal-1.jpg,out_of_stock,89.00 EUR,Example,5012345678931,new,1604,Charcoal,L,EU,Merino Wool,male,adult,coreCSV 是现实中最容易出问题的格式,因为标题和描述中的逗号必须加引号,而带引号字段中的引号又必须转义。如果您的标题包含逗号(带颜色和尺码的商品标题几乎总是如此),请改用 TSV。商品数据中几乎从不出现制表符,一整类解析错误也会随之消失。
JSON
用于基于 API 的数据接收:
json
{
"products": [
{
"id": "SWTR-MERINO-CREW-NAV-M",
"item_group_id": "SWTR-MERINO-CREW",
"item_group_title": "Merino Crew Neck Sweater",
"title": "Merino Crew Neck Sweater — Navy, Medium",
"link": "https://example.com/merino-crew-sweater?colour=navy&size=m",
"image_link": "https://cdn.example.com/swtr-merino-navy-1.jpg",
"availability": "in_stock",
"price": { "value": "89.00", "currency": "EUR" },
"brand": "Example",
"gtin": "5012345678900",
"condition": "new",
"google_product_category": "1604",
"variant_attributes": {
"color": "Navy",
"size": "M",
"size_system": "EU",
"material": "Merino Wool"
},
"gender": "male",
"age_group": "adult"
}
]
}一组完整的尺码
六个变体(两种颜色 × 三个尺码),ID 规律一目了然:
| id | item_group_id | color | size | availability |
|---|---|---|---|---|
| SWTR-MC-NAV-S | SWTR-MERINO-CREW | Navy | S | in_stock |
| SWTR-MC-NAV-M | SWTR-MERINO-CREW | Navy | M | in_stock |
| SWTR-MC-NAV-L | SWTR-MERINO-CREW | Navy | L | in_stock |
| SWTR-MC-CHR-S | SWTR-MERINO-CREW | Charcoal | S | out_of_stock |
| SWTR-MC-CHR-M | SWTR-MERINO-CREW | Charcoal | M | in_stock |
| SWTR-MC-CHR-L | SWTR-MERINO-CREW | Charcoal | L | out_of_stock |
炭灰色三个尺码中只剩一个有货。第 9 节将介绍如何处理这种情况。
6. 逐个渠道解析
概念是通用的,实现方式却各不相同。以下是各主要投放渠道对变体的要求,以及各自的差异所在。
Google Shopping / Merchant Center
规定最详细,也是大多数其他渠道借鉴的参考实现。
- 提交变体时,item_group_id 对免费商品信息以及巴西、法国、德国、日本、英国和美国的购物广告是必填的。
- 必须填写定义变体的属性:在这些市场中,服装的 color 和 size 为必填。
- 服装必须填写 gender 和 age_group,并且在组内保持一致。
- 落地页必须明显与提交的变体值相符,否则可能会遭遇“值不匹配(网页抓取)”拒登。
- 每个变体都会在竞价中独立竞争。Google 会针对某个搜索词选择组内的哪个成员进行展示,因此不完整的商品组意味着候选池更弱。
- 服装的 image_link 必须至少为 500×500 像素,这一最低要求将从 2027 年 1 月 31 日起强制执行,值得现在就开始审核,而不是到时手忙脚乱。
实用提示:Merchant Center 按变体(id)级别而非分组级别报告数据。要正确评估一件商品,您必须自己按 item_group_id 进行汇总;如果分组 ID 干净且稳定,这会容易得多。
Meta(Facebook 和 Instagram)
Meta 使用相同的字段名称,但限制不同,展示模型也有实质性差异。
- item_group_id 最多允许 100 个字符,并且区分大小写。
- color 和 size 最多允许 200 个字符。
- 库存状态值使用空格而不是下划线:in stock,而不是 in_stock。这一个差异导致的 Meta Feed 故障比其他任何问题都多,尤其是在直接复用 Google Feed 的时候。
- 在 Shops 和商品详情界面中,正确分组的商品组会呈现为一件带有变体选择器的商品,而不是几条几乎相同的商品信息。
- Advantage+ 目录广告会利用分组,避免在一个轮播中向用户展示同一件毛衣的六个版本;未分组的商品目录会产生明显重复的广告,浪费展示次数。
- Commerce Manager 中的变体级报告取决于正确的分组。
实用提示:不要把未经修改的 Google Feed 直接提供给 Meta。至少要转换 availability,并检查字符数限制。大多数 Feed 平台(包括 Feedance)都将其作为渠道级转换来处理,从而保持源数据不受影响。
TikTok
- item_group_id 最多允许 150 个字符。
- sku_id 是每个变体的唯一标识符,每个变体行都需要一个不同的值。
- color 和 size 最多允许 200 个字符。
- title 最多 255 个字符;description 最多 10,000 个字符;需要提供 google_product_category。
- TikTok 是对变体专属图片要求最严格的渠道。商品卡片会显示变体选择器,而共用同一张通用图片的变体,表现会明显更差。如果您要在图片处理流程中偷工减料,千万不要在这里偷工减料。
- 与 Google 的模型非常接近;item_group_id 用于对变体进行分组。
- Pinterest 会在单个 Product Pin 中展示变体,并提供可选选项。
- 图片质量和竖版宽高比的影响格外大:Pinterest 是一个视觉发现平台,没有区分度的变体图片根本不会被收藏。
Amazon
Amazon 不使用 item_group_id,如果误以为它使用,会浪费大量工作。
Amazon 使用明确的父/子关系模型:
- 父 ASIN 作为不可购买的商品信息创建。
- 每个子 ASIN 通过 parent_sku / parent_child 字段引用父商品。
- 必须声明一个变体主题,例如 SizeColor、Size、Color、SizeName-ColorName 等,具体因类目而异。
- 该主题必须对特定类目有效;同一个主题名称并非在所有类目中都可用。
如果您从同一个数据源同时向 Google 和 Amazon 导出,请将其视为真正的数据转换,而不只是字段重命名。您的 Feed 层必须构建父商品信息、指定主题,并将子商品映射到父商品。
区域性电商平台和比价引擎
土耳其及更广泛的中东和北非地区渠道各有自己的惯例,在这些市场中,它们往往决定了商品目录是正常运行还是出现故障。
- Trendyol 使用自己的父/子模型,并要求提供类目专属的必填属性集。颜色和尺码是独立的结构化字段,必填属性列表因类目而异。
- Akakçe 和 Cimri 是比价引擎。它们通常要求每个可购买的 SKU 一行,几乎相同的重复行往往会被过滤掉,因此发送完整的尺码组但数据缺乏区分度,反而可能降低而非提高曝光度。
- Hepsiburada 和 N11 各自定义了自己的变体分组键和必填属性。
这正是通用的全球 Feed 工具最容易力不从心的领域,一个映射错误的属性就可能悄无声息地让整个类目从某个电商平台上消失。
对比
| Meta | TikTok | Amazon | |||
|---|---|---|---|---|---|
| 分组键 | item_group_id | item_group_id | item_group_id | item_group_id | 父 ASIN |
| 最大长度 | 50 | 100 | 150 | 50 | 不适用 |
| 区分大小写 | 否 | 是 | 是 | 否 | 不适用 |
| 库存状态写法 | in_stock | in stock | in_stock | in stock | 数量 |
| 变体图片 | 建议 | 建议 | 关键 | 关键 | 必需 |
| 需要明确声明主题 | 否 | 否 | 否 | 否 | 是 |
| 变体级报告 | 是 | 是 | 是 | 有限 | 是 |
7. 拆分还是合并?
发送每个变体是默认建议,但并非在所有情况下都正确。真正的问题在于,这种变化是否会改变购物者想要的东西。
以下情况应发送每个变体……
- 变体本身就是购买决策。服装、鞋类,以及任何尺码不对就无法成交的商品。
- 不同变体的库存差异明显。为一件只剩 3XL 码的商品投放广告,就是在浪费支出。
- 不同变体的价格不同。当所选选项售价 €119 时却显示 €89,会造成价格不符,还会激怒顾客。
- 搜索需求带有变体限定词。人们会搜索“navy merino sweater medium”。不提交这些变体,您就无法在这类搜索中获得排名。
以下情况应合并为一个代表性变体……
- 商品目录非常庞大且大多同质化。一家拥有 200,000 个 SKU 的五金零售商,如果其中 60% 只是长度上的细微差异,完全展开带来的收益很少,却要在 Feed 处理和广告系列复杂度上付出代价。
- 渠道会惩罚近似重复项。一些比价引擎会过滤重复的行;发送完整的尺码组反而可能降低曝光度。
- 变体不影响价格、图片或库存状态。如果十二个变体在所有商业相关方面都完全相同,十二行数据带来的只是噪音而非信号。
合并时,请有意识地选择代表性变体:最畅销且有货的变体,而不是按字母顺序排在第一行的那个。这正是效果数据在 Feed 中发挥价值的地方:GA4 或平台数据可以自动选出代表性变体,而不是交给排序顺序来决定。
折中方案
在驱动决策的维度上拆分,在不影响决策的维度上合并。
对于鞋类,这通常意味着每种颜色一行,尺码合并:颜色是发现商品的维度,尺码则是在页面上进行的合脚确认。对于由容量决定价格的商品,则按容量拆分、按颜色合并。
8. 12 个最常见的变体错误
| # | 现象 | 原因 | 解决方法 |
|---|---|---|---|
| 1 | 变体显示为互不相关的独立商品 | item_group_id 缺失或每行都不同 | 填入父 SKU;确认其在组内重复出现 |
| 2 | 部分变体在渠道中完全缺失 | id 值重复,后面的行被悄无声息地丢弃 | 在导出时强制唯一性;增加重复检查 |
| 3 | “值不匹配(网页抓取)”拒登 | 落地页显示的颜色/尺码/价格与提交的不同 | 添加深层链接参数;确保页面在服务器端渲染所选状态 |
| 4 | 所有变体显示同一张照片 | 复用了同一个主图 image_link | 映射变体专属图片;只有在没有变体图片时才退回使用主图 |
| 5 | 广告点击落地到缺货选项 | availability 未按变体同步 | 提高更新频率;将 out_of_stock 从投放中的广告系列中排除 |
| 6 | color 被拒绝 | 使用了十六进制色值、数字、单个字母或连写单词 | 映射为普通颜色名称;多种颜色用 / 分隔 |
| 7 | 尺码筛选不起作用;尺码搜索无法匹配 | 商品目录中的尺码值不一致(M / Medium / med) | 在 Feed 层面应用映射表进行标准化 |
| 8 | 商品组在 Meta 上被拆分,在 Google 上却没有 | item_group_id 大小写不一致 | 对整个字段强制使用统一的大小写 |
| 9 | Meta 拒绝整个 Feed | 在 Meta 要求 in stock 的地方使用了 in_stock | 按渠道转换 availability |
| 10 | 商品组因属性不一致被拒绝 | 组内的 gender 或 age_group 不同 | 这些是组内恒定属性;将男款和女款剪裁分为不同的组 |
| 11 | 每次同步都会重置效果历史 | 每次导出都重新生成 item_group_id | 从稳定的源字段派生,绝不使用行顺序或哈希值 |
| 12 | XML Feed 解析失败 | 深层链接 URL 中的 & 未转义 | 转义为 &;发布前验证 XML |
在我们实际进行的审核中,错误 1、2、4 和 11 占了绝大多数。它们都不难解决,但在有人去主动排查之前,它们都是不可见的。
9. 断码与库存健康度
断码是指一个商品组在技术上仍在线、实际上却卖不出去的商品,例如一件只剩 XS 和 3XL 的毛衣,或一双九个尺码只剩两个的鞋子。
这比看起来更重要。当购物者点击某件商品的广告,却发现自己的尺码没货时,您就为一次不可能转化的点击付了费,同时还消耗了品牌好感。在大规模投放下,断码商品可能会消耗相当一部分预算,却几乎不贡献任何收入。
如何发现
针对每个 item_group_id 计算:
size_availability_ratio = in_stock_variants / total_variants然后根据阈值采取行动。一个可行的起点:
| 比率 | 解读 | 行动 |
|---|---|---|
| > 0.7 | 健康 | 正常投放 |
| 0.4 – 0.7 | 开始变少 | 降低出价;持续观察 |
| 0.2 – 0.4 | 断码 | 从拓客投放中排除;仅用于再营销 |
| < 0.2 | 实际上已售罄 | 完全排除 |
请按需求而不仅仅是数量进行加权。缺失 XXS 和 XXL 的影响,远小于缺失通常占销量大头的 M 和 L。一个对所有尺码一视同仁的比率,会对核心尺码的缺失反应不足。
如何应对
最干净的实现方式是在 Feed 中标记这一状态,而不是移除商品:
xml
<g:custom_label_1>broken-size</g:custom_label_1>标记而非删除,可以保留商品在渠道中的历史数据,并让您在补货后立即重新启用。移除后再重新添加会重置学习过程。
还有两项值得构建的改进:
- 反馈给商品企划。反复出现的断码清单是一个采购信号,而不只是广告问题。
- 每次同步时重新检查。库存在变化,标记也必须随之变化。静态的断码清单比没有更糟糕,因为它会压制那些已经补货的商品。
10. 利用变体进行广告系列细分
一旦变体结构正确,这些数据就会成为一个细分层,这可以说是干净的变体 Feed 回报最高的用途。
Google 提供五个 custom_label 字段(0–4)。它们接受任意值,存在的意义纯粹是为了服务您自己的广告系列逻辑。变体数据是理想的输入。
一个可行的方案
| 标签 | 维度 | 示例值 |
|---|---|---|
| custom_label_0 | 利润率等级 | high-margin、standard、clearance |
| custom_label_1 | 库存健康度 | full-size-run、thinning、broken-size |
| custom_label_2 | 效果等级 | bestseller、steady、long-tail |
| custom_label_3 | 季节性 | ss26、aw25、core、carryover |
| custom_label_4 | 价格区间 | under-50、50-100、100-200、over-200 |
有了这些标签,广告系列逻辑就变得简单明了:
- 提高 bestseller + full-size-run + high-margin 商品的出价
- 将 broken-size 商品从拓客投放中排除
- 为 clearance 商品设置单独的广告系列,并采用激进的目标 ROAS
- 新季上市时单独隔离 ss26 商品
Performance Max 和 Advantage+
两者都高度自动化,这使得 Feed 层面的细分更加重要,而不是相反。您已无法控制关键词级别的出价,因此 Feed 成为您引导支出的主要杠杆。
在 Performance Max 中,自定义标签决定了素材资源组和商品组的结构。将一个包罗一切的素材资源组拆分为基于利润率或库存健康度的多个组,是仅存的少数结构性杠杆之一,而这完全取决于标签是否基于真实数据填写。
在 Advantage+ 目录广告中,正确的分组可以防止轮播被同一件毛衣的六种颜色填满;而基于变体属性定义的商品组合,可以让您将拓客库存与再营销库存分开。
用效果数据丰富标签
静态标签会过时。上一季标记的 bestseller,在这一季就成了错误信息。
更好的实现方式是在每次 Feed 同步时,根据实时效果数据(GA4 收入、转化率、浏览次数)重新计算标签。停止热卖的商品会自动退出 bestseller,开始热卖的商品则会自动进入。这正是 Feed 数据丰富在实践中的核心内容,也是能引导预算的标签与只能描述上季度情况的标签之间的区别。
11. 衡量变体效果
变体级数据,正是大多数报告悄然失效的地方。
汇总问题。Merchant Center 和 Google Ads 按 id 级别报告。一件有 20 个变体的毛衣会显示为 20 行,每行只占一小部分数据量,单独看都没有统计意义。从单个变体行得出的任何结论,很可能都只是噪音。
始终从两个层面进行分析:
- 分组层面(item_group_id):这件商品是否有效?汇总所有成员的支出、转化和收入。
- 变体层面(id):哪些选项有效?哪些颜色好卖,哪些尺码最先售罄,哪些组合从来卖不动。
第二个层面才是有价值发现的所在。它回答的是商品企划关心的问题:海军蓝的销量是否是炭灰色的三倍?L 码变体的转化率更高,是否因为它们总是有货?是否有某种颜色拉低了整个商品组的平均水平?
值得按商品组跟踪的指标:
| 指标 | 原因 |
|---|---|
| 尺码可售比率 | 预示支出浪费的先行指标 |
| 渠道中的变体覆盖率 | 已提交与实际获批之间的对比,问题就藏在两者的差距之中 |
| 各变体的展示份额 | 揭示渠道实际青睐哪些选项 |
| 各颜色的转化率 | 商品企划和采购信号 |
| 各商品组的拒登率 | 尽早发现系统性的属性错误 |
关于归因的说明。购物者经常看到一个变体的广告,却购买了另一个变体:点击的是海军蓝,买的是炭灰色。因此,如果按字面理解变体级 ROAS,就会产生错误归因。请在分组层面评判商品;用变体数据来理解行为,而不是基于小样本做出出价决策。
12. 上线前检查清单
在推送变体 Feed 上线之前,以及在任何结构性变更之后,都请运行这份清单。
结构
- 每个变体都有唯一的 id
- 组内每个成员共享完全相同的 item_group_id
- item_group_id 源自稳定的源字段,在各次导出之间不会变化
- item_group_id 在整个 Feed 中使用一致的大小写
- 每个成员至少在一个定义变体的属性上有所不同
- item_group_title 已填写,并在组内完全相同
属性
- color 使用普通颜色名称,不使用十六进制色值、数字或单个字母
- 多种颜色用 / 分隔,主色在前
- size 值在整个商品目录中已标准化
- 在跨尺码体系地区销售时已声明 size_system
- gender 和 age_group 在每个组内完全相同
- material 和 pattern 在定义变体时已填写
链接和图片
- 每个变体的 link 都能打开正确的预选状态
- XML 中的 & 已转义为 &
- image_link 是变体专属图片,而不是共用的主图
- 图片符合各渠道的最小尺寸要求
渠道转换
- 已按渠道调整 availability 写法(in_stock 与 in stock)
- 已遵守各渠道的字符数限制
- Amazon 导出会构建父商品信息并声明有效的变体主题
- 已按类目映射区域性电商平台的属性集
运营
- 更新频率与库存的实际变化速度相匹配
- 每次同步时都会运行断码检测
- 导出前会运行重复 id 检查
- 发布前会验证 Feed 是否为格式正确的 XML/CSV
- 已针对商品数量骤降配置提醒
13. 常见问题
我必须提交每一个变体吗?并非总是如此,但对于尺码和颜色就是购买决策的服装和鞋类,通常是的。对于非常庞大且同质化的商品目录,或会过滤近似重复项的渠道,每个商品组只提交一个精心挑选的代表性变体,效果可能更好。请根据销售表现和库存来选择代表性变体,而不是按字母顺序。
如果我省略 item_group_id 会怎样?每个变体都会被视为互不相关的商品。您会失去目标界面上的变体选择器,广告变得重复,变体级报告失效;在 Google 上,您还可能不满足某项要求:在提交变体时,item_group_id 对免费商品信息以及若干主要市场的购物广告都是必填的。
变体可以有不同的价格吗?可以。价格不是定义变体的属性,但不同变体的价格完全可以不同,较大的尺码通常更贵。提交的价格必须与落地页上该特定变体显示的价格一致。
缺货的变体应该保留在 Feed 中吗?一般来说应该。保留它们并将 availability 设为 out_of_stock,而不是删除。移除后再重新添加会重置该商品在渠道中的历史数据。请改用规则或自定义标签将它们从投放中的广告系列中排除。
一件商品可以属于两个组吗?不可以。item_group_id 每个商品只接受一个值。如果某件商品确实属于两个概念上的分组,那您需要在上游解决商品企划分类体系的问题。
每个渠道需要使用不同的 item_group_id 值吗?不需要,也不应该这样做。请在所有地方使用相同的逻辑分组。各渠道之间不同的是对它所应用的转换:字符数限制、大小写、写法。保持唯一的事实来源,在导出时进行适配。
真正的均码商品该如何处理?将 size 提交为 one_size、OS 或 OSFA。在要求填写尺码的市场中,不要让服装的这一字段留空。
同一设计的男款和女款,应该分为一组还是两组?两组。gender 在组内必须完全相同。不同的剪裁和不同的尺码,让它们从购物者的角度看就是不同的商品。
实际中最常出问题的是什么?在我们的审核中:不同颜色变体共用主图、每次导出都重新生成 item_group_id 值,以及将 Google Feed 中的 availability 写法原封不动地带入 Meta。这三个问题在界面中都是不可见的,只会表现为无法解释的表现不佳。
写在最后
变体 Feed 对精确性的回报,是大多数数字营销工作所没有的。item_group_id 不涉及任何创意判断:它要么稳定且共享,要么不是。颜色值要么符合规范,要么被拒绝。图片要么与变体匹配,要么这次点击就白白浪费了。
好消息是:这是一个有明确答案、可以解决的问题。难点在于维护,因为商品目录每天都在变化,库存每小时都在变动,而每个渠道都会按照自己的节奏调整规范。
做好这件事的企业,会把变体 Feed 当作基础设施而不是一个文件。他们从稳定的源数据派生分组 ID,在源头一次性标准化属性,在导出时按渠道进行转换,在每次同步时重新计算库存健康度,并在出现意外变化时发出提醒。
这正是 Feedance 所要打造的那一层:用于在源头标准化属性的 Feed Rules、每次同步都会重新计算的 Broken Size 断码检测、让效果标签保持最新的 GA4 数据丰富,以及在不改动源数据的情况下为 200 多个投放渠道分别应用正确转换的渠道导出。
如果您想在做任何改动之前先了解自己的变体结构处于什么水平,我们的免费 Feed 审核工具可以从完整性、数据质量和技术健康度(包括变体分组)等方面为现有 Feed 打分,完全免费。

Feedance 联合创始人,凭借计算机工程师与营销人的双重背景推动数据分析洞察。他专注于将数据转化为可落地的策略,致力于帮助品牌在数字化领域实现显著增长。
LinkedIn


















