搜索抓取

内容更新后,蜘蛛靠什么判断页面变了

页面更新后,蜘蛛并不会自动收到通知。它主要依据响应头里的 Last-Modified、ETag、Sitemap 的 lastmod,以及站内链接的变化来判断是否重新抓取。本文梳理这些更新信号的正确用法、容易被忽略的反向操作,以及一次内容更新之后可以按顺序检查的几件事。

搜索抓取

内容更新后,蜘蛛靠什么判断页面变了

页面内容改了,搜索引擎并不会自动收到通知。蜘蛛判断“这个页面要不要重新抓一次”,靠的是服务器返回的时间类信号、Sitemap 里登记的更新时间,以及站内其他页面是否重新指向它。把这几个信号理顺,往往比反复手动提交 URL 更省事。

抓取和更新是两件不同的事

不少站点运营会把这两件事混在一起:以为蜘蛛来抓过,内容更新就一定会被重新识别。实际上,一次抓取得到的只是一份快照;它下次来不来,和来了之后认为页面有没有变,是两套判断。前者看抓取队列和站点权重,后者看你在响应里给出的“变化证据”。

响应头里的时间戳

服务器返回 HTML 时可以带上几个字段,它们是最直接的线索:

  • Last-Modified:页面最后一次实质修改的时间。如果每次请求都动态生成当前时间,这个字段就失去意义,蜘蛛会逐渐忽略它。
  • ETag:内容的指纹。配合 If-None-Match 使用,内容没变时可以返回 304,既省带宽,也明确告诉蜘蛛这次没变。
  • Cache-Control:决定中间层缓存多久。缓存太长,蜘蛛拿到的可能是旧版本;太短,回源压力又会上去,需要按内容更新频率来设。

这几个字段之间要保持一致:如果 Last-Modified 说刚改过,ETag 却和上次完全相同,信号就自相矛盾了。

Sitemap 里的 lastmod

Sitemap 不只是 URL 清单,lastmod 是它少数被认真对待的字段之一。用法上有两点要注意:一是只在内容确实变化时更新,批量刷一遍全站时间戳会让这个字段贬值;二是时间格式用完整日期(含时区),不要写“今天”“刚刚”这类无法解析的表述。分片 Sitemap 变更后,索引文件里的时间也建议同步。

站内链接的带动作用

蜘蛛重新访问一个页面,往往是因为沿着链接走到了它。如果一次更新同时改了标题、摘要和列表排序,那么栏目页、首页、相关推荐这些位置都会出现新的链接上下文,蜘蛛顺着这些路径回来的概率会明显提高。反过来,一个只在正文内部改动、任何列表页都没变化的页面,重新被抓的时间通常更长。

主动提交能解决什么

提交 URL 或推送接口可以缩短“被发现”的等待,但它不保证立刻抓取,也不影响蜘蛛对页面质量的长期判断。它适合用在时效性强的内容上,不适合拿它替代内链和 Sitemap 这些基本功。

把更新信号理解成给蜘蛛留的路标:路标要真实、要一致、要只在真正变化时出现。频繁伪造更新时间,短期也许能多换来几次抓取,长期会让这些字段失去参考价值。

几个常见的反向操作

  • 页脚、侧栏的“最近更新”时间随每次请求变化,导致全站页面的 Last-Modified 都在跳。
  • 内容只改了一个错别字,却把 Sitemap 里该 URL 的 lastmod 改到当前时刻,而且是整站一起改。
  • 用 200 状态码返回“内容不存在”的提示页,蜘蛛会把它当作正常页面,更新判断随之失真。
  • 列表页的分页参数每天变化,蜘蛛反复抓取同一批内容,真正的更新反而排在后面。

一次更新的检查顺序

  1. 确认页面返回的 Last-Modified 与内容实际修改时间一致,且不是请求发生的时间。
  2. 用带 If-None-Match 的请求测试,内容未变时能否返回 304。
  3. 检查 Sitemap 中该 URL 的 lastmod 是否同步更新,其余 URL 是否被误改。
  4. 确认相关栏目页、首页或推荐位出现了指向该页的链接。
  5. 观察服务器日志中该 URL 的再次抓取时间与返回状态码,再决定是否需要提交。

这套流程不需要额外工具,主要靠对响应头和站内链接的检查。做得稳定之后,蜘蛛对新内容的反应会更有规律,站点的抓取节奏也更容易预测。