文章页底部显示更新于 1970-01-01,sitemap 里同一篇的 lastmod 也是这个值,索引里的时间同样异常。
一开始怀疑是「迁移工具把空时间写成了 NULL,取用时被强转成 0」,查了一圈,方向不对。
把日志和配置对完,能解释这个现象的基本就这几处。数据库字段默认值是 0,导入旧数据时没有补齐。也可能是模板用 strtotime 转换失败后返回 false,格式化成了纪元时间。
还有一种情况,时区配置缺失,时间戳解析直接落到默认值。
上来先查一下更新的文章有多少条是零时间
SELECT COUNT(*) FROM wp_posts WHERE post_modified = '0000-00-00 00:00:00';
然后把零时间回填成发布时间
UPDATE wp_posts SET post_modified = post_date WHERE post_modified < '2000-01-01';
等前面都确认过,再重新生成 sitemap 并抽查时间
curl -s https://www.example.com/sitemap.xml | grep -o '<lastmod>[^<]*' | head -3
改完先别撤,确认这几项。回填后页面和 sitemap 的时间都恢复正常,索引里的日期在下次抓取时同步更新。
零时间戳在排序里会被当成最旧内容,比不写 lastmod 的负面影响更大,导入数据后务必抽查这一列。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
