这类问题我又碰上了一次。文章底部相关推荐按标签随机取 6 篇,结果缓存了三年没清。巡检发现其中四成指向已删除的文章,返回 404,日志里这些地址每天被蜘蛛抓两千多次,正文页的抓取预算被分走。
第一反应是「删除文章时没有同步清理关联的推荐记录」,验证下来不成立。
真正麻烦的地方在于,几个原因的现象几乎一样。推荐结果写进缓存 文章删除后缓存没有失效;取推荐时没有过滤 post_status 删除的文章仍被选中;404 页面返回 200 并显示内容已删除。
动手时先抓推荐模块的链接看状态码
curl -s https://www.example.com/p/1 | grep -o 'href="/p/[0-9]*"' | head -20
批量探测这些地址
while read u; do curl -o /dev/null -s -w '%{http_code} %{url_effective}\n' $u; done < links.txt
取推荐时过滤已删除的文章
$args = ['post_status' => 'publish', 'post__not_in' => $deleted];
等前面都确认过,再清掉推荐缓存
wp cache flush
怎么算真的好了,看的是同一批现象。推荐模块的 404 数量归零,日志里旧地址的抓取量降到每天两位数。
缓存和删除操作要绑定,文章下线时顺手清一次推荐缓存,比事后巡检便宜。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
