先看现象。文章页的 dateModified 取的是主题里的最后修改时间,主题每天凌晨会批量更新一次阅读计数,这个时间跟着一起变。日志里蜘蛛几乎每天重抓同一批文章,抓取预算被这些重抓吃掉大半,新发布的内容反而要等三四天。

这类报错背后常见的原因有几处,逐个排除就行。阅读计数写在文章元数据里 每次自增都更新了修改时间。还有一种是模板直接取 post_modified 没有区分内容变更和统计字段变更。

少数情况下是缓存插件每次刷新都写回一次时间戳 形成连锁更新。

不容易想到的是,批量脚本每晚执行一次 全站文章的修改时间被统一推后一天。

第一件事是对比两天的 dateModified 是否在变

curl -s https://www.example.com/post/123 | grep -o '"dateModified":"[^"]*"'

然后找出被频繁写入的元数据字段

SELECT meta_key, COUNT(*) FROM wp_postmeta WHERE meta_key LIKE '%views%' GROUP BY meta_key;

接着把统计字段移到独立表 不触碰文章修改时间

UPDATE wp_posts SET post_modified = post_modified WHERE ID = 123;

末了让标记优先取内容真正变更的时间

"dateModified": "<?php echo get_the_modified_date('c', $post); ?>"

怎么算真的好了,看的是同一批现象。把阅读计数迁出后 dateModified 稳定下来,日志里同一篇文章的重抓间隔从每天一次拉长到一周以上,新文章当天就能被抓。

时间字段是给蜘蛛判断内容新鲜度的信号,被统计逻辑带着乱跳,等于每天都在谎报更新。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189