Shopify Storefront API

Hydrogen 的 storefront.query 总是返回旧数据

现象#

后台把商品标题改成新文案,Hydrogen 的 PDP 刷新十几次仍是旧标题;重启 dev server 会恢复,Oxygen 上的预览也一样。

原因#

  • storefront.query 默认带 public, max-age=1, stale-while-revalidate=86399,一天内都可能返回旧对象
  • 缓存 key 由查询文本与 variables 组成,handle 没变就会一直命中同一条
  • 整页响应也被 Oxygen 缓存,子请求更新了但 HTML 没换
  • 购物车、顾客这类个性化查询没传 CacheNone,被当成公共数据缓存

处理步骤#

  1. 商品详情用 cache: storefront.CacheShort(),购物车与库存用 storefront.CacheNone()
  2. 若已升级到 2026-10,改用 Cache.short() 与 Cache.none(),旧 helper 会报不是函数
  3. 在 loader 里打印 response.headers.get('age'),确认是否命中旧缓存
  4. 商品更新 webhook 到达后调用 revalidate,或按 cache tag 清除对应查询
  5. 确认 variables 里包含 country 与 language,避免多市场结果互相覆盖

验收标准#

改标题后首次刷新 age 接近 0,页面显示新文案;cart 查询响应头为 no-store。

本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。