新建中文商品时URL Key为空,保存后出现重复或无法生成Rewrite。直接用随机字符串虽能保存,却会造成URL不稳定。

定位与修复记录

1. 固定复现范围

确认url_key是否勾选Use Default,以及哪个Store范围为空。检查自定义Plugin是否在Product Url Key Generator之后再次过滤非ASCII字符。

2. 确认真实原因

确定稳定策略:使用人工维护的英文短名、拼音slug或SKU派生值。转换结果必须小写、仅允许安全字符、合并连续连字符并去掉首尾连字符。

3. 执行修复

当转换结果仍为空时回退到SKU;保存前按Store检查request_path唯一性,冲突时追加稳定短后缀,不能每次保存生成新随机值。

4. 恢复后处理

对已上线商品批量修复时保留旧URL的301重写。先导出entity_id、store_id、旧url_key和新slug,dry-run检测冲突后再分批执行。

SELECT entity_id,sku FROM catalog_product_entity WHERE entity_id=:entity_id;
SELECT store_id,value FROM catalog_product_entity_varchar WHERE entity_id=:entity_id AND attribute_id=(SELECT attribute_id FROM eav_attribute WHERE attribute_code='url_key' AND entity_type_id=4);
SELECT request_path,target_path,store_id FROM url_rewrite WHERE request_path LIKE 'new-slug%';

验收清单

  • 创建纯中文、中文加数字、重复名称三个商品;每个Store生成稳定且唯一URL,二次保存URL不变化,旧地址正确301。
  • SKU可能包含内部信息或不适合公开,采用SKU回退前先确认业务与SEO要求。