你打开一个网站,发现某个版块的文章列表里,每篇文章的发布时间都是同一个日期,比如2020年1月1日,或者你昨天发的文章,今天看还是显示几天前的时间。刷新、换浏览器、清缓存都没用。这种情况通常不是灵异事件,而是网站程序、缓存或者模板设置上出了问题。
最常见的一种情况是网站启用了页面静态化或者缓存。很多CMS系统,比如织梦、帝国、WordPress,为了减轻服务器压力,会把动态页面生成静态HTML文件。静态文件一旦生成,里面的发布时间就是生成那一刻写死的。你后来发了新文章,或者改了老文章的时间,如果没重新生成静态页面,那列表页显示的时间就永远不变。比如织梦的“更新HTML”功能,如果没点,或者定时任务没跑,那版块页面的时间就卡住了。有些网站用了CDN,比如Cloudflare或者国内的各种云加速,它们会把HTML页面缓存起来。缓存时间可能设置成几天、几周甚至一个月。源站数据库里的时间已经更新了,但CDN边缘节点返回的还是旧页面。你本地清缓存没用,因为缓存不在你这边,在CDN节点上。
还有一种情况是模板里写死了时间。我见过一个网站,它的文章列表模板里,发布时间那一栏不是调用数据库字段,而是直接写了一段固定的日期代码。可能是当初做模板的人偷懒,或者从别处复制代码时没改。比如织梦的模板里,正常应该写`{dede:field.pubdate function="MyDate(''Y-m-d'',@me)"/}`,结果被改成了`{dede:field.pubdate function="MyDate(''Y-m-d'', 1577808000)"/}`,那个数字就是2020年1月1日的时间戳。这样一来,不管数据库里存的是什么,页面上永远显示这个日期。WordPress也有类似情况,有些主题的functions.php里,或者文章循环里,直接用了get_the_date()但传了固定参数,或者用了the_time(''Y-m-d'')但之前有query_posts把时间字段覆盖了。
数据库字段的问题也值得注意。比如WordPress的wp_posts表里,有post_date和post_modified两个字段。post_date是文章创建时间,post_modified是最后修改时间。很多主题在列表页调用的是post_date,所以即使你修改了文章,列表页的时间还是创建时间,看起来就像永远不变。但如果你新建文章,时间应该是新的。如果新建文章的时间也是旧的,那可能是数据库字段默认值设置错了。比如MySQL的datetime字段,默认值设成了某个固定日期,插入新记录时没传时间,就会用默认值。或者程序里插入数据时,时间变量被赋成了固定值。
采集工具也是一个常见原因。很多人用采集软件从别的网站抓文章,采集规则里有一项“发布时间”。有些规则默认选“采集时间”,那没问题。但如果选了“原发布时间”而原网站的时间是错的,或者选了“固定时间”并填了一个日期,那所有采集来的文章发布时间都一样。更隐蔽的是,有些采集工具在发布时,会把时间字段写成0或者空,然后程序里又没处理,最后显示成1970年1月1日。

还有可能是网站被黑或者中了木马。有些黑客会在模板里插入一段代码,把页面上所有的时间都替换成某个固定值,用来隐藏攻击痕迹或者做SEO作弊。这种情况比较少见,但如果你排查了缓存、模板、数据库都没问题,可以看看网站文件有没有被篡改,特别是header.php、footer.php、list.php这些公共文件。
那怎么排查呢?打开出问题的版块页面,右键查看网页源代码,搜索那个永远不变的时间字符串。如果源代码里直接就是那个日期,说明是静态HTML或者模板写死了。如果源代码里是动态输出的,比如有PHP标签或者JS变量,那就看数据库。进数据库找到对应的文章表,看pubdate或者post_date字段的值。如果数据库里是新的,页面是旧的,那就是缓存问题。如果数据库里也是旧的,那就是程序写入时出的错。还可以用浏览器的开发者工具,看Network面板里那个页面的请求,看Response Headers里有没有Cache-Control、Expires、Age这些头。如果有很长的max-age,那就是CDN或服务端缓存。如果返回的是200 OK但内容是旧的,可以加个随机参数比如?t=123456再访问,如果时间变了,那就是缓存问题。
我前阵子帮一个朋友看他的企业站,版块文章时间停在2021年3月。他用的帝国CMS,我进后台一看,他开了“生成静态页面”,但“数据更新”里的“更新所有信息页”和“更新所有栏目页”从来没点过。他每次发文章只点了“发布”,没点“更新静态”。后来我让他手动更新一下,时间就正常了。还有一次,一个WordPress站点,文章时间永远显示同一天。我看了下,他装了一个“禁止修订”的插件,把post_modified字段锁死了,每次保存都写回原始值。禁用插件后就好了。
总的来说,网站版块文章发布时间永远不变,多半是缓存、静态化、模板写死、数据库字段或者采集规则造成的。解决思路就是顺着数据流从数据库到程序到模板到缓存一层层查。别急着一上来就改代码,先确认时间到底在哪一层被固定住了。