商品 URL Key 从 old-product 改成 new-product,新地址能访问,但旧地址直接 404,没有自动 301。Magento 是否保留旧路径受 Catalog SEO 配置、编辑作用域和保存流程影响;并非每次修改数据库值都会自动生成 Rewrite。

先确认保存时启用了永久重定向

在 Catalog SEO 配置中检查“Create Permanent Redirect for URLs if URL Key Changed”,注意 Website/Store View 是否覆盖。商品编辑页也可能有“Create Permanent Redirect for old URL”选项。默认 scope 开启,不代表当前商店视图实际开启。

比较旧路径和新路径的 Rewrite

SELECT url_rewrite_id, entity_type, entity_id, request_path,
       target_path, redirect_type, store_id, metadata
FROM url_rewrite
WHERE request_path IN ('old-product.html','new-product.html')
ORDER BY store_id, redirect_type;

新路径通常是 redirect_type 0 的规范记录,旧路径应是 301 并指向新目标。若旧路径已经被其他商品、分类或自定义 Rewrite 占用,Magento 可能无法创建。先确定冲突所有权,不能强行覆盖。

直接 SQL 或错误的导入流程不会触发生成服务

脚本直接更新 EAV URL Key、导入器跳过 Product Repository/URL Persist、ERP 同步只改属性表,都可能让商品值变化但 Rewrite 未生成。批量更新应使用 Magento 支持的服务与索引流程,并在测试环境确认历史重定向行为。

多商店需要在每个 Store View 验证

商品 URL Key 可以按商店视图覆盖。默认商店已创建 301,英文或子品牌商店仍可能没有。请求旧 URL 时要带正确域名和 Store Code,查询对应 store_id,不能拿一个商店的记录解释另一个。

分类路径会产生多个旧地址

启用分类路径时,同一商品可能有多个 request_path。修改商品 Key 或移动分类后,是否为每条旧路径保留 301 取决于生成配置和历史记录。统计该 entity_id 的所有 Rewrite,检查是否形成 301 链或多个旧地址直达最终路径。

CDN 可能缓存了修改前的 404

数据库已有 301,公网仍返回 404 时,绕过 CDN 请求源站并比较响应头。CDN 缓存旧 404 或边缘规则优先处理路径,会让 Magento 的 Rewrite 根本没有机会执行。清除精确旧 URL,而不是无目的全站 purge。

修复后检查旧地址一次 301 到新地址、新地址返回 200、canonical 指向自身、Sitemap 与内部链接只使用新 URL。若旧地址仍有外链,持续监控 404 与重定向命中,避免后续清理 Rewrite 时再次丢失。