后台保存分类时报 URL Key 已存在,界面通常不告诉你冲突记录是哪一条。尤其做过数据迁移、批量导入或改过根分类后,url_rewrite 里可能留着旧路径。

用报错里的request_path直接查

假设冲突路径是 sale.html:

SELECT url_rewrite_id, entity_type, entity_id, request_path,
       target_path, redirect_type, store_id, is_autogenerated
FROM url_rewrite
WHERE request_path = 'sale.html';

一定要带 store_id 看。不同 Store View 可以有同名路径,但同一个 store 内不能有两条相同 request_path。

再确认这条记录对应的商品或分类是否还存在:

SELECT entity_id, parent_id, path
FROM catalog_category_entity
WHERE entity_id = 42;

先判断是正常占用还是孤儿记录

如果路径已被另一个有效分类使用,就应该改当前分类 URL Key,而不是删 rewrite。只有确认 entity 已不存在、路径是迁移残留时,才考虑先备份该行再清理。

自动生成的分类 URL Rewrite 可以通过重新保存实体或相关索引恢复,但自定义 301 跳转不能随便删。生产库操作前先导出冲突行:

SELECT * FROM url_rewrite
WHERE url_rewrite_id = 1234;

清理后保存分类,再访问新路径和旧路径各一次,确认新地址 200、需要保留的历史地址仍按预期 301,而不是只看后台“保存成功”。