零售电商GEO踩坑复盘:把 MySQL 商品库自动映射成 Product Schema 的完整方案
适用读者:电商后端开发、数据工程师、做商品中台的技术团队
一、为什么商品库直接决定了 AI 推荐质量
零售电商的 AI 推荐逻辑很朴素:当用户问 DeepSeek "300 元以内口碑好的蓝牙耳机有哪些",AI 的候选池来自它训练和联网检索时读到的商品信息。商品信息越结构化、越一致,被推荐的概率越高。
很多电商团队的问题出在源头:商品名写在 title 里、卖点混在详情页 HTML 里、价格和库存是前端异步拉的。AI 抓到的页面只有营销话术,没有可引用的事实。所以 GEO 改造的第一步不是写文章,而是把商品库变成 Schema 的可靠数据源。
二、映射设计:一张配置表解决字段对应
不要在代码里硬编码字段映射,用配置表管理,运营改字段不用发版:
sql
CREATE TABLE schema_field_mapping (
id INT PRIMARY KEY AUTO_INCREMENT,
schema_field VARCHAR(64) NOT NULL COMMENT 'schema.org字段',
source_column VARCHAR(64) NOT NULL COMMENT '商品表字段',
transform VARCHAR(64) DEFAULT NULL COMMENT '转换器标识',
is_required TINYINT DEFAULT 0,
priority INT DEFAULT 100
);
INSERT INTO schema_field_mapping (schema_field, source_column, transform, is_required) VALUES
('name', 'product_name', 'trim', 1),
('description', 'selling_point', 'strip_html', 1),
('sku', 'sku_code', NULL, 1),
('offers.price', 'sale_price', 'decimal_to_str', 1),
('offers.priceCurrency', 'currency_code', NULL, 1),
('brand.name', 'brand_name', NULL, 0),
('image', 'cover_url', 'abs_url', 1);
Python 侧按配置动态组装:
python
import decimal, pymysql
TRANSFORMS = {
"trim": lambda v: str(v).strip(),
"strip_html": lambda v: re.sub(r"<[^>]+>", "", str(v)),
"decimal_to_str": lambda v: str(decimal.Decimal(str(v)).quantize(decimal.Decimal("0.01"))),
"abs_url": lambda v: "https://www.example.com" + v if v.startswith("/") else v,
}
def build_product_schema(row: dict, mapping: list) -> dict:
node = {"@context": "https://schema.org", "@type": "Product"}
for m in mapping:
value = row.get(m["source_column"])
if value is None:
if m["is_required"]:
return {}
continue
if m["transform"]:
value = TRANSFORMS[m["transform"]](value)
set_nested(node, m["schema_field"], value)
return node
三、四个真实踩坑点
坑1:价格精度
DECIMAL(10,2) 查出来是 Decimal 类型,直接 json.dumps 会报错,转 float 又会出现 59.900000000000006。必须先 quantize 再转字符串。AI 对价格字段极其敏感,畸形价格会被直接跳过。
坑2:库存状态滞后
availability 写死 InStock 是最常见错误。消费者问"还有货吗"时 AI 引用了过期状态,等于教 AI 不信任你。解法是和库存服务定时对账,缺货商品输出 OutOfStock 而不是移除 Schema。
坑3:同名商品多 SKU
一个颜色三个 SKU 共用商品页时,Schema 应该用 ProductGroup + hasVariant,而不是每个 SKU 一套 Product。AI 引用混乱的变体结构时会把型号对错。
坑4:转义
中文商品名被 ensure_ascii 处理成 \uXXXX 后,部分 AI 爬虫的解析率明显下降。所有 JSON 输出统一 ensure_ascii=False。
四、改造前后对比
某 3C 配饰电商(SKU 1200)改造 6 周后的内部统计:
| 指标 | 改造前 | 6 周后 |
|---|---|---|
| Schema 校验通过率 | 0%(未部署) | 100% |
| 豆包推荐出现次数/周 | 0 | 9 |
| AI 渠道进店 UV 占比 | 0% | 7% |
| 商品页平均被抓取延迟 | 无保障 | 库存变更后 ≤1 小时 |
验证 SQL 也很简单,每天跑一次全量校验:
sql
-- 找出缺价格或缺图片的无效 Schema 商品
SELECT p.id, p.product_name
FROM products p
LEFT JOIN schema_field_mapping m ON 1=0
WHERE p.sale_price IS NULL OR p.cover_url IS NULL;
五、结语
零售电商的 GEO 竞争,本质是商品数据的工程治理竞争。映射配置化、价格字符串化、库存实时对账、变体结构规范------这四件事做完,商品库就从"给人看的表格"升级成"给 AI 读的事实源"。如果你的商品中台也在做 Schema 自动化,欢迎评论区交流字段映射的设计。
本文关键词:GEO生成式引擎优化、Product Schema、MySQL、商品中台、零售电商、AI搜索、AI优化AIO