报错是这么冒出来的。路由把 /Article/1024 改成了 /article/1024,旧的大写地址没做跳转,两个月后收录从八千掉到九百,日志里大写地址全是 404。
中间走过弯路,把「站内链接和站点地图混杂两种写法」当成主因,改完现象没变。
这类报错背后常见的原因有几处,逐个排除就行。Linux 文件系统区分大小写,大写路径找不到文件。也可能是旧地址没有 301,蜘蛛抓到 404 后逐步移除。
还有一种情况,CDN 缓存键区分大小写,同一页存了两份。
先统计大写路径的 404 条数
awk '$9==404 && $7 ~ /[A-Z]/' access.log | wc -l
随后把大写目录统一跳转到小写
rewrite ^/Article/(.*)$ /article/$1 permanent;
站点地图统一输出小写
echo strtolower(get_permalink($post_id));
复验跳转落地页
curl -sIL https://www.example.com/Article/1024 | grep -E 'HTTP/|location'
同一份数据我导出了两份,一份留底,一份拿来试。
怎么算真的好了,看的是同一批现象。一个月后大写地址的 404 归零,收录回到七千左右,站点地图里不再出现两种写法。
URL 大小写这种改动看起来小,对已收录地址来说等于换了路径,必须配 301。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
