先看现象。文章页的 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 稳定下来,日志里同一篇文章的重抓间隔从每天一次拉长到一周以上,新文章当天就能被抓。
时间字段是给蜘蛛判断内容新鲜度的信号,被统计逻辑带着乱跳,等于每天都在谎报更新。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
