搜尋抓取

頁面更新後蜘蛛為什么没重来:lastmod 與再次抓取的判断

頁面内容改了,蜘蛛却迟迟不回来,問题往往不在權重,而在于站点没有把「這里變了」的信号传清楚。本文拆解 Last-Modified、ETag、Sitemap lastmod、列表頁與内鏈變化這几類信号的作用方式,說明 lastmod 寫错的常见情形,並给出用日誌驗證抓取反馈、配合服務器稳定性的检查顺序。

搜尋抓取

頁面更新後蜘蛛為什么没重来:lastmod 與再次抓取的判断

在抓取日誌里经常能看到一種情况:頁面内容明明改過,蜘蛛却隔了很久才回来,或者只反复抓首頁和几個列表頁。很多人第一反應是「權重不够」,但更常见的原因是:站点没有把「這里變了」這個信号清楚地传出去。

蜘蛛判断要不要再来时,會看哪些信号

重新抓取不是凭感觉,它大致依赖几類可观测的信息:

  • HTTP 缓存头:Last-Modified、ETag 决定蜘蛛再次請求时,服務器能否直接回答「没變」。
  • Sitemap 里的 lastmod:這是站点主動声明的時間戳,可信度完全取决于它是否與實际改動一致。
  • 站内連結的變化:首頁、栏目頁、列表頁出現新連結,往往比 Sitemap 更能提示「有新内容」。
  • 歷史抓取表現:同一個 URL 過去多次返回 304,或抓回去發現内容几乎不動,重訪間隔自然會被拉長。

這几類信号不是各自獨立的。Sitemap 说「變了」,服務器却回 304;或者内容真變了,列表頁却一年没動過,蜘蛛都會倾向于按更保守的那一方来判断。

lastmod 寫错的三種典型情况

lastmod 是最容易被寫坏的字段,常见的有三類:

  1. 全站同一個時間戳。每次生成 Sitemap 都把目前時間寫進所有 URL,结果是每次提交都像全站刚更新過。蜘蛛第一次可能信,几次之後就會把這個字段当噪音。
  2. 從不更新。頁面内容改了半年,lastmod 還停在建站那天。蜘蛛會認為這個字段没有參考價值,重新抓取只能靠内鏈和外部連結推着走。
  3. 格式或时区不一致。同一份文件里混用不同格式、缺时区、日期比實际抓取時間還晚,解析異常會让字段直接失效。

比較稳妥的做法是:只在正文出現實质修改时更新 lastmod,模板調整、广告位替換、样式改動不必動它。宁可少更新,也不要乱更新。

内容改了,但信号没改

還有一類情况是内容确實變了,但周邊环境一動不動:列表頁排序没變,没有任何新連結出現,内鏈指向的文字還是舊的,發布時間字段也没更新。蜘蛛的抓取路径大多是從枢纽頁顺着連結铺開的,如果這些入口没有任何變化,它就没有理由優先回到這條路径上。

相對有效的做法是让「變了」這件事在連結层面也能被看见:更新文章时顺手把它推回栏目頁或相關推荐位;對長期维護的頁面,在正文里补一條指向新内容的連結。這類改動不需要频繁,但要真實發生。

怎么驗證蜘蛛有没有收到更新信号

不要凭感觉判断,日誌里能看出不少東西:

  • 看目标 URL 的抓取間隔有没有缩短。修改後一周内的訪問次數,是比「有没有收錄」更直接的反馈。
  • 看 304 與 200 的比例。如果蜘蛛反复来訪却一直拿到 304,說明它認為内容没變,需要回头检查 Last-Modified 或 ETag 的生成逻辑。
  • 看首次返回的狀態碼。改版期間如果频繁出現 5xx、超时或 429,蜘蛛的抓取路径會在入口處断掉,後面的信号都传不進去。

服務器端別拖後腿

服務器稳定性會直接影响抓取意愿。首字节時間明顯偏慢、响應时好时坏、同一台机器上抓取和用戶訪問互相挤占资源,都會让蜘蛛降低抓取频次。缓存头如果配置得当,既能让蜘蛛快速拿到「未修改」的答案,也能减轻源站压力,這两件事是互相成全的。需要注意的是,有些 CDN 或防火墙會對高频請求做限流,如果限流誤伤了搜尋蜘蛛,抓取路径會在最前面就被截断,站内做再多優化也传不出去。

一份可以照着做的检查顺序

  1. 確認頁面是否真的改了實质内容,改動幅度值不值得触發重抓。
  2. 检查 Last-Modified、ETag 是否随内容變化而更新,而不是每次請求都變。
  3. 核對 Sitemap 中 lastmod 的格式、时区與實际改動時間是否對得上。
  4. 看首頁、栏目頁、列表頁有没有出現指向该頁面的新連結。
  5. 翻近期日誌,統計目标 URL 的抓取間隔與 304 比例。
  6. 最後再看服務器响應時間與限流情况,確認抓取請求有没有被中途拦下。
把「變了」這件事同时交给缓存头、Sitemap 和内鏈去表達,比反复重推同一份文件更有效。蜘蛛不需要被说服,它只需要拿到一致、可驗證的信息。