用途
Enable FeedProof 用于把 Vercel Shop 店面(Next.js + Shopify Hydrogen 结构)接入 FeedProof。FeedProof 是一个为 AI 购物智能体修正商品数据的 Shopify 应用,本技能完成两件事:上报 AI 智能体访问、在产品 Markdown 与 JSON-LD 中补充 FeedProof 商品详情。
主要能力
A. 上报 AI 智能体访问
- 新建 lib/agent-visits/index.ts,定义访问表示类型(html / markdown / text)、自动化 User-Agent 正则和 isAgentVisitCandidate 判断函数。
- 新建 lib/agent-visits/server.ts,提供 reportAgentVisit:仅在存在 FEEDPROOF_INGEST_KEY 且方法为 GET/HEAD 时,向 FeedProof 摄入端点(默认 https://feedproof.fly.dev/api/agent-visits)POST 访问记录,带 2 秒超时,通过 event.waitUntil 执行,不延迟、不失败响应,并丢弃可能包含搜索词的查询字符串。
- 修改 proxy.ts:把 NextFetchEvent 作为第二参数,只计算一次 Markdown 重写路径,在顶部先上报访问,再复用于重写逻辑。
- 在 .env.example 的 Optional 块与 turbo.json 的 globalEnv 中加入 FEEDPROOF_INGEST_KEY 与 FEEDPROOF_INGEST_URL,保持字母顺序。
B. 产品 Markdown 与 JSON-LD 中的 FeedProof 详情
- 产品 GraphQL fragment:在 selectedOrFirstAvailableVariant 中增加 barcode,并在 category 之后增加别名为 feedproofAttributes 的 metafields 查询(material、dimensions、care_instructions、country_of_origin、warranty、condition)。未连接 FeedProof 的店铺这些字段返回 null,不受影响。
- 领域类型:新增 ProductAttributes 接口,并在 ProductDetails 中增加 attributes 与 defaultVariantBarcode。
- 转换函数:transformAttributes 将 metafields 映射为驼峰属性,仅保留有值的字段。
- Markdown:在 About 之后、Options 之前生成 ## Details 段落,只列出已填写的属性;仅当商品为单变体时列出 GTIN(条码属于默认变体)。
- JSON-LD:gtin 遵循与 sku 相同的单 offer 规则;itemCondition 仅在 condition 为 Schema.org 四个值(new / used / refurbished / damaged)之一时设置;careInstructions、dimensions、warranty 作为 additionalProperty 输出。
使用方式
- 先确认商家是否已在 FeedProof 中连接店面:Shopify 后台 → FeedProof → Settings → Headless storefront → Connect storefront。连接后会一次性显示 FEEDPROOF_INGEST_KEY,并使 feedproof.* metafields 可被 Storefront API 读取;未完成前 metafields 返回 null,Details 段为空,但构建仍正常。
- 密钥为服务端专用机密,不得写入源码或 .env.example;用户在 Vercel → Settings → Environment Variables 或本地 .env.local 中设置。
- 按上方代码修改创建文件和补丁,涉及 lib/agent-visits/、proxy.ts、.env.example、turbo.json、产品 fragment、类型、transform、Markdown 和 schema.tsx。
- 用给出的独立 GraphQL 查询(Storefront API 2026-10)验证 metafields 选择。
适用场景
使用 Vercel Shop 店面模板(Next.js 请求边界 + Shopify 数据层)并希望观测 AI 智能体爬取、同时为 AI 购物智能体提供结构化商品属性的商家。
限制
- 代码属于 Next.js(请求边界)与 Shopify(fragment、transform、domain type)两层,Markdown 与 JSON-LD 属于 Next.js,不涉及 Eve 改动。
- 若店铺 proxy.ts 已偏离模板,需保持三条规则:在任何提前返回前上报、只调用一次 getMarkdownRewritePath、绝不对上报 await。
- 未提供 FeedProof 的收费、价格或效果数据。