Magento 2.4.6 升级后分类页成片 404,url_rewrite 表里 target_path 还指向旧分类 ID,重新索引过一次没恢复,Search Console 一天报了 2000 条。前台商品页正常,只有分类入口挂了。
一开始怀疑是「多 store view 下 rewrite 只在一个店铺生成,其余店铺为空」,查了一圈,方向不对。
排查方向其实有限,先把可能性排一排。升级脚本没有重建 url_rewrite,旧记录指向已删除的实体。还有一种是分类改了 URL Key 却没生成新 rewrite,旧地址直接 404。
还有一种情况,缓存没清,url_rewrite 的 collection 还在内存里返回旧数据。
数一下失效记录有多少
mysql -e "SELECT COUNT(*) FROM url_rewrite WHERE target_path LIKE 'catalog/category/view/id/%';" magento
然后重建索引并清配置缓存
bin/magento indexer:reindex && bin/magento cache:flush
随后抽查一条旧地址的跳转
curl -sI https://shop.example.com/old-category.html | grep -i location
等前面都确认过,再确认新 rewrite 已写入
mysql -e "SELECT request_path,target_path FROM url_rewrite ORDER BY url_rewrite_id DESC LIMIT 10;" magento
恢复的判定其实很直接。抽查五十条旧分类地址全部 301 到新的 URL Key,表里重复记录降到零,Search Console 的 404 报告两天后停止增长。
容易忽略的是,别直接 truncate 这张表,重建完成前前台会把所有分类打成 404,重建期间先把流量摘掉。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
