改版把订阅地址从 /feed 换到 /rss.xml,旧地址没有做跳转而是直接返回 200 空列表,三个月后索引里旧 feed 有两万条,全是空内容的重复页。

原因不止一个,得分开看。旧 feed 地址继续返回 200,只是内容为空;sitemap 里同时保留了新旧两个订阅地址;外部阅读器还在轮询旧地址,间接给蜘蛛提供了入口;feed 模板没有输出 canonical。

第一件事是确认旧地址的状态码和内容长度

curl -sI https://www.example.com/feed | head -1; curl -s https://www.example.com/feed | wc -c

旧地址改成 301 指向新 feed

location = /feed { return 301 https://www.example.com/rss.xml; }

从 sitemap 里删掉订阅地址

grep -c 'rss.xml\|/feed' sitemap.xml

等前面都确认过,再确认新 feed 只输出最近二十条

curl -s https://www.example.com/rss.xml | grep -c '<item>'

这类改动我都写进变更记录,过两周再出问题时能对上号。

别只看报错消失,验证要多做一步。旧 feed 一跳转到新地址,索引里的空 feed 条目两周内消失,阅读器请求也回到新地址。

提醒一点。订阅地址属于接口型页面,改版时要么跳转要么返回 410,留一个空 200 是最差的选择。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189