报错是这么冒出来的。栏目从 /tech/seo/post/ 压成 /seo/post/,只给栏目首页写了 301,站内两千多条旧内链仍指向三级路径,蜘蛛抓到全是 404,新目录收录停滞。
排查方向其实有限,先把可能性排一排。301 只覆盖栏目入口,文章级路径没有映射。另一种情况是数据库里的内链仍是旧地址,没有批量替换。
少数情况下是sitemap 同时输出新旧两套地址。
第一件事是抽样看旧地址的返回
curl -s -o /dev/null -w '%{http_code}\n' https://www.example.com/tech/seo/post-1/
再往下确认跳转落点是否正确
curl -sI https://www.example.com/tech/seo/post-1/ | grep -i location
剩下的就是统计正文里的旧路径
mysql -e "SELECT COUNT(*) FROM db.wp_posts WHERE post_content LIKE '%/tech/seo/%';"
同样的操作我在测试机上先走了一遍,线上只做验证过的部分。
这台环境是别人交接的,不少默认值被动过,只能一项项核。
恢复的判定其实很直接。补齐规则并替换内链后,旧地址全部一跳到位,新目录的收录两周内恢复正常。
提醒一点。改目录要在同一批变更里做完规则、内链、sitemap 三件事,漏一件就会留下大量 404。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
