在抓取日誌里经常能看到一種情况:頁面内容明明改過,蜘蛛却隔了很久才回来,或者只反复抓首頁和几個列表頁。很多人第一反應是「權重不够」,但更常见的原因是:站点没有把「這里變了」這個信号清楚地传出去。
蜘蛛判断要不要再来时,會看哪些信号
重新抓取不是凭感觉,它大致依赖几類可观测的信息:
- HTTP 缓存头:Last-Modified、ETag 决定蜘蛛再次請求时,服務器能否直接回答「没變」。
- Sitemap 里的 lastmod:這是站点主動声明的時間戳,可信度完全取决于它是否與實际改動一致。
- 站内連結的變化:首頁、栏目頁、列表頁出現新連結,往往比 Sitemap 更能提示「有新内容」。
- 歷史抓取表現:同一個 URL 過去多次返回 304,或抓回去發現内容几乎不動,重訪間隔自然會被拉長。
這几類信号不是各自獨立的。Sitemap 说「變了」,服務器却回 304;或者内容真變了,列表頁却一年没動過,蜘蛛都會倾向于按更保守的那一方来判断。
lastmod 寫错的三種典型情况
lastmod 是最容易被寫坏的字段,常见的有三類:
- 全站同一個時間戳。每次生成 Sitemap 都把目前時間寫進所有 URL,结果是每次提交都像全站刚更新過。蜘蛛第一次可能信,几次之後就會把這個字段当噪音。
- 從不更新。頁面内容改了半年,lastmod 還停在建站那天。蜘蛛會認為這個字段没有參考價值,重新抓取只能靠内鏈和外部連結推着走。
- 格式或时区不一致。同一份文件里混用不同格式、缺时区、日期比實际抓取時間還晚,解析異常會让字段直接失效。
比較稳妥的做法是:只在正文出現實质修改时更新 lastmod,模板調整、广告位替換、样式改動不必動它。宁可少更新,也不要乱更新。
内容改了,但信号没改
還有一類情况是内容确實變了,但周邊环境一動不動:列表頁排序没變,没有任何新連結出現,内鏈指向的文字還是舊的,發布時間字段也没更新。蜘蛛的抓取路径大多是從枢纽頁顺着連結铺開的,如果這些入口没有任何變化,它就没有理由優先回到這條路径上。
相對有效的做法是让「變了」這件事在連結层面也能被看见:更新文章时顺手把它推回栏目頁或相關推荐位;對長期维護的頁面,在正文里补一條指向新内容的連結。這類改動不需要频繁,但要真實發生。
怎么驗證蜘蛛有没有收到更新信号
不要凭感觉判断,日誌里能看出不少東西:
- 看目标 URL 的抓取間隔有没有缩短。修改後一周内的訪問次數,是比「有没有收錄」更直接的反馈。
- 看 304 與 200 的比例。如果蜘蛛反复来訪却一直拿到 304,說明它認為内容没變,需要回头检查 Last-Modified 或 ETag 的生成逻辑。
- 看首次返回的狀態碼。改版期間如果频繁出現 5xx、超时或 429,蜘蛛的抓取路径會在入口處断掉,後面的信号都传不進去。
服務器端別拖後腿
服務器稳定性會直接影响抓取意愿。首字节時間明顯偏慢、响應时好时坏、同一台机器上抓取和用戶訪問互相挤占资源,都會让蜘蛛降低抓取频次。缓存头如果配置得当,既能让蜘蛛快速拿到「未修改」的答案,也能减轻源站压力,這两件事是互相成全的。需要注意的是,有些 CDN 或防火墙會對高频請求做限流,如果限流誤伤了搜尋蜘蛛,抓取路径會在最前面就被截断,站内做再多優化也传不出去。
一份可以照着做的检查顺序
- 確認頁面是否真的改了實质内容,改動幅度值不值得触發重抓。
- 检查 Last-Modified、ETag 是否随内容變化而更新,而不是每次請求都變。
- 核對 Sitemap 中 lastmod 的格式、时区與實际改動時間是否對得上。
- 看首頁、栏目頁、列表頁有没有出現指向该頁面的新連結。
- 翻近期日誌,統計目标 URL 的抓取間隔與 304 比例。
- 最後再看服務器响應時間與限流情况,確認抓取請求有没有被中途拦下。
把「變了」這件事同时交给缓存头、Sitemap 和内鏈去表達,比反复重推同一份文件更有效。蜘蛛不需要被说服,它只需要拿到一致、可驗證的信息。