搜尋抓取

重新抓取的触發條件:頁面更新後,蜘蛛為什么還没有再来

蜘蛛對同一個 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 時間,通常不會带来變化。