Z-Blog 静态化之后收录反而变慢:一次真实的排查记录

· zblog · 阅读 3
摘要

去年我把一个 Z-Blog 站从伪静态切成了纯静态,本来以为收录会更快,结果两周内索引量掉了三十多条。后来找出原因,记录一下。发生了什么静态化之后,文章页生成为独立的 HTML 文件。但主题的「最新文章」模块仍然嵌在静态页里,导致每发一篇新

去年我把一个 Z-Blog 站从伪静态切成了纯静态,本来以为收录会更快,结果两周内索引量掉了三十多条。后来找出原因,记录一下。

发生了什么

静态化之后,文章页生成为独立的 HTML 文件。但主题的「最新文章」模块仍然嵌在静态页里,导致每发一篇新文章,全站几十上百个页面都要重新生成,且内容都变了。

这个问题在动态站上完全不存在——动态页每次访问现算,返回的内容本来就是「当前最新」,没有新旧之分。一切静态化,这个模块就变成了一种污染源。

蜘蛛看到的现象

每次来抓,页面内容都和上次不一样。大量「伪更新」让它判定页面不稳定,抓取意愿下降。

展开说就是:静态页的 HTML 文件里那段「最新文章」列表,每发一篇新文就变一次。蜘蛛今天抓到的页面,和上周抓到的不一样,但它看到的是同一篇文章的正文,只有侧栏变了。这种变化在它看来既不是内容更新(正文没变),也不是结构变化(URL 没变),属于噪声。噪声多了,它会降低对这个站的信任。

更糟的是,这类变化会消耗抓取预算——每个静态页都要重新抓一遍才能发现「其实正文没变」。

怎么解决的

把最新文章模块从静态页里拆掉,改为 JS 异步加载(对蜘蛛不可见),正文和标题保持完全静态。

具体做法:模板里把模块内容清空,改成一个 div 加一段 JS 从接口拉数据填进去。这样静态文件里就没有这段会变的内容,生成出来的 HTML 是稳定的。

同样的处理也适用于:随机推荐、最近评论、访问统计、在线人数。凡是「每次生成都不一样」的模块,都不该出现在静态页里。

结果

索引量在第三周恢复,一个月后超过之前的峰值。

恢复不是立刻的——改完之后第一周没什么变化,第二周开始抓取频次上升,第三周索引量回升。这个滞后是正常的,蜘蛛要重新建立对站点的判断。

经验

静态化的价值在于「稳定」,不在于「静态」。如果静态页的内容天天变,那和不静态没区别,还多了生成开销。

反过来说,一个稳定输出的动态页,收录表现可能优于一个频繁变化的静态页。技术手段本身不是目的,蜘蛛看到的东西是否稳定才是关键。

如果一定要静态化,有个简单的检查清单:打开任意两个文章页的 HTML 源文件,对比正文之外的部分——如果每次生成都不同,那就要拆。