RFC 0001:SKU.md 的声明式发现、结构化标识符与参考价
规范札记
一份草案:让托管平台上的店铺可以在 /sku.md 之外声明目录,让 GTIN、MPN、品牌和 SKU 有可解析的写法,并增加一个带日期、永远不作为报价的参考价。
SKU.md 1.0.0-beta 刻意保持很小:一个位于 /sku.md 的根目录、可选的商品知识文档,以及每条事实上的 Source 链接。这样的规模便于校验,但也留下了三个缺口,而它们在 AI 对话购物中对独立站很重要。RFC 0001 是弥补这些缺口的一份草案。
这份 RFC 不属于当前规范。目前没有任何校验器、生成器、CLI、MCP 工具或 Agent Skill 实现它;即使它被采纳,所有 1.0.0-beta 文档也依然有效。完整文本见 RFC 0001。
缺口一:托管平台上的店铺无法使用根路径
规范要求目录路径必须正好是 /sku.md。项目自己的 Shopify 指南 记录了该平台托管店铺根路径、并限制 App Proxy 前缀。其他平台的文件库托管通常依赖会改变最终路径的重定向。这些商家往往可以从另一个同源路径提供同样的 Markdown,但现在这样做不合规。
RFC 保留 /sku.md 作为读取方首先查看的位置。根路径不存在时,店铺可以通过五种提示之一声明另一个同源目录 URL,读取方按固定顺序检查:
- 保留路径
/.well-known/sku.md,需要先向 IANA 注册。 - 首页响应中的 HTTP
Link头,带rel="alternate"、type="text/markdown"和title="SKU.md"。 - 首页中表达同一关系的 HTML
link元素。 llms.txt的Product knowledge章节中,文字为SKU.md catalog的链接。agents.md中以SKU.md catalog:开头的一行。
后两种正是 发现入口指南 现在推荐的写法,所以现在就添加这些引用的店铺,将来已经具备了声明。
每个提示都必须同源,被声明的文件和根目录一样接受完整校验。两个提示互相矛盾时会报告冲突。RFC 还要求读取方优先采用需要控制首页的提示,而不是平台可能重新生成的文件中的提示,因为放宽路径规则会增加把商家并不控制的内容声明为目录的风险。
缺口二:标识符只是自由文本
购物系统依靠 GTIN、MPN、品牌和商家 SKU 判断两处提及是否指同一件商品。在 1.0.0-beta 中,它们可以写在 Identifiers 章节,但只能是自由文本。RFC 增加一种解析器无需猜测就能读取的结构化写法:
## Identifiers
- GTIN: 00012345678905 [Source](https://www.example-outdoor.com/products/tent)
- MPN: UL2P-24 [Source](https://www.example-outdoor.com/products/tent)
- Brand: Example Outdoor Gear [Source](https://www.example-outdoor.com/pages/about)
- SKU: TENT-UL2P-GRN [Source](https://www.example-outdoor.com/products/tent)
GTIN、MPN、Brand、SKU 和 ISBN 是保留标签。GTIN 必须通过 GS1 校验位检查;以保留标签开头但不符合规则的条目直接判为无效,而不会悄悄当作普通文本。不同规格有不同标识符时,可以在值后面加上 for 和规格名称。结构化 GTIN 与 Product JSON-LD 或商品 Feed 冲突时,读取方应报告冲突并引导顾客去实时页面,而不是自行选一个值。
缺口三:价格完全没有位置
在对话购物中,价格常常是第一道筛选条件。1.0.0-beta 不允许静态文件承载实时价格,RFC 保留这条规则,只是增加一个可选的 Reference price 章节,带日期和来源:
## Reference price
- USD 349.00 as of 2026-08-11 [Source](https://www.example-outdoor.com/products/tent)
- USD 299.00 to 349.00 as of 2026-08-11 for all variants [Source](https://www.example-outdoor.com/products/tent)
币种使用 ISO 4217 代码,金额用小数点且不带千分位,as of 日期不能晚于文档的 Updated 日期。这一章节不能写促销价、优惠码、会员价、运费、税费或库存。读取方使用这个值时,必须把它作为带日期的参考呈现,不得用于购物车或结账,并且应把超过 90 天的日期视为过期。
这是草案中最有争议的部分。理由是:按预算筛选的助手会跳过完全没有价格信息的商品,而一个日期和来源都清楚的参考价,会把顾客带到实时页面去确认。
RFC 暂不处理的内容
同一轮评审中的若干想法留给后续提案:根目录中表示销售地区、语言和币种的 Markets 章节;根目录中可选的 Brand 和 Categories 章节;把 31 个文档的图谱上限从规范中拆出来;面向读取方的宽松解析模式;以及 Markdown 资源与 Sitemap、规范页面之间关系的指引。RFC 把它们列出来,是为了让对这份草案的讨论保持聚焦。
待决问题与如何反馈
草案直接提出了四个问题:现在就申请 well-known 注册,还是等出现第二个独立实现?平台可能覆盖 llms.txt 和 agents.md,这两种提示还要保留吗?对价格变化快的品类,90 天的过期阈值是否合适?根目录是否也应允许写 Brand?
欢迎在 项目仓库 中反馈。推进计划要求在任何正式版本采纳之前,先在校验器中以预览开关实现、为每个新问题代码增加一致性测试样例、至少有一家托管平台商家通过声明的 URL 发布,并有一个独立读取方读取它。在此之前,请按 当前规范 实施。