搜索抓取

重新抓取的触发条件:页面更新后,蜘蛛为什么还没有再来

蜘蛛对同一个 URL 的抓取是反复发生的。页面更新后迟迟没有回访,往往不是蜘蛛忘了,而是缺少足够的重新抓取信号。本文梳理 lastmod 可信度、内链变化、Last-Modified 与 304、更新幅度和服务器状态对回访间隔的影响,并给出用日志核实抓取节奏的做法,帮助判断瓶颈在内容、结构还是服务器。

搜索抓取

重新抓取的触发条件:页面更新后,蜘蛛为什么还没有再来

很多人把抓取理解成一次性的动作:URL 被发现、被抓一次,任务就结束了。实际上蜘蛛对同一个 URL 的访问是反复发生的,区别只在于间隔。有的页面几小时被看一次,有的几个月才被翻一次。理解“为什么还没再来”,比纠结“为什么没被抓”更接近日常运营的真实问题。

蜘蛛决定重新访问,靠的是信号而不是日历

蜘蛛不会按固定周期回访全站。它判断一个 URL 是否值得再看一眼,主要依赖几类信号:

  • 内容变化信号:页面 HTML 有明显改动、正文长度变化、主要模块增减。
  • 链接信号:站内出现新的指向链接、外部新增链接、锚文本发生变化。
  • Sitemap 信号:lastmod 时间更新,并且与上一次抓取的结果一致可信。
  • 协议信号:Last-Modified、ETag 配合 304 响应,让重复抓取的成本变低。
  • 站点整体节奏:全站更新频繁的站点,页面被回访的期望值也会相应提高。

这些信号是叠加的。只有一项变化时,回访概率有限;多项同时变化,回访间隔才可能明显缩短。

更新了却没有回访,常见原因

1. lastmod 长期不变,或者每次都变

lastmod 是最容易写错的字段。每次生成 Sitemap 都把时间刷成“当前时间”,短期看起来积极,但蜘蛛很快会判断这个字段没有信息量,之后不再参考它。反过来,内容确实改了却不更新 lastmod,也等于放弃了一个低成本的提示。比较稳的做法是只在正文区块发生实质变化时更新。

2. 更新幅度小于蜘蛛的感知阈值

改一个标点、换一张同尺寸图片、调整不参与渲染的模板片段,通常在响应内容里看不出差异。蜘蛛拿到 304 或者内容哈希没有变化,就不会重新处理这个页面。

3. 页面本身处于低优先级位置

深层目录、几乎没有内链指向的页面,即使更新了,也很难获得回访。抓取资源有限,蜘蛛会优先处理有链接支撑、有历史抓取记录的 URL。

4. 站点的整体抓取节奏被拖慢

如果服务器响应时间普遍偏长,或者站内存在大量 5xx、超时,蜘蛛的总体抓取量会下降,回访间隔被整体拉长。这时的瓶颈在服务器,而不在内容。

5. 更新发生在没有被抓到的那一版上

移动版与桌面版内容不同、地域跳转返回不同版本、A/B 测试把正文替换成另一套,都可能让更新对蜘蛛不可见。

让更新更容易被注意到的做法

  1. 内容有实质变化时,同步更新 Sitemap 中的 lastmod,并保持真实。
  2. 在相关栏目页、列表页或首页区块给出新的内链入口,让链接结构也发生变化。
  3. 保持 URL 稳定,不要为了“提示更新”而更换地址或追加参数。
  4. 服务器正确返回 Last-Modified 与 ETag,让未变的资源以 304 结束,节省抓取开销。
  5. 控制模板层面的频繁变动,避免整站看起来一直在改但正文其实没动。

用日志判断,而不是靠感觉

服务器日志里直接能看到某个 URL 的访问时间、状态码和响应时间。把目标 URL 的访问记录按时间排列,就能算出最近的回访间隔,而不是等一个“应该来了”的预期。如果间隔长期没有改善,通常要先查内链结构和服务器状态,而不是反复修改正文。

抓取间隔是结果,不是可以手动设置的参数。把内容变化、链接变化、协议信号和服务器稳定这几件事做好,回访自然会来;把它们丢在一边只刷新 Sitemap 时间,通常不会带来变化。