搜尋抓取

内容更新後,蜘蛛靠什么判断頁面變了

頁面更新後,蜘蛛並不會自動收到通知。它主要依據响應头里的 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 的再次抓取時間與返回狀態碼,再决定是否需要提交。

這套流程不需要額外工具,主要靠對响應头和站内連結的检查。做得稳定之後,蜘蛛對新内容的反應會更有規律,站点的抓取节奏也更容易预测。