Headless 站下架商品返回 200 不是 404 怎么修
现象#
商品删除后访问旧链接,页面显示自定义的“找不到”文案,HTTP 状态码却是 200;Search Console 把这些 URL 标成软 404,数量一直在涨。
原因#
- loader 返回 null 而不是抛出 Response,框架按成功渲染并默认写 200
- catch-all 路由吞掉所有未匹配路径,统一渲染空页面
- Storefront API 对已删除 handle 返回 product: null 而非错误,代码直接渲染空模板
- 永久下架的商品也用 404,爬虫会反复回抓,没有用 410 明确告知
处理步骤#
- loader 里抛
throw new Response(null, {status: 404}),不要返回 null - 永久下架抛 410:
throw new Response(null, {status: 410}) - catch-all 路由也显式抛 404,不要渲染空白页
- 用
curl -o /dev/null -w '%{http_code}'核对旧链接的状态码 - 在
ErrorBoundary里按error.status分支渲染文案,别把所有错误都当 500
验收标准#
旧商品链接返回 404 或 410,Search Console 的软 404 数量停止增长,正常商品仍为 200。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。