经常有人問:蜘蛛池入口頁因為配置失誤返回了 404,但頁面 HTML 里其實還寫着目标 URL 的連結,這種情况下搜尋蜘蛛還會不會顺着連結爬過去?這個問题没有简單的會或不會,需要拆成两件事来看。
狀態碼和正文是两套信号
搜尋蜘蛛請求一個 URL 时,會同时拿到 HTTP 狀態碼和响應正文。狀態碼是它對這次請求最優先的判断依據,正文属于次要补充。当狀態碼是 404 或 410 时,爬虫基本已经認定這個地址没有可用内容,至于正文里寫了什么,處理優先級會明顯下降。
搜尋蜘蛛遇到 404 时通常怎么做
- 把该 URL 從待抓取队列中清理掉,短期内不再重复請求;
- 已收錄的地址會逐步從索引中移除;
- 正文里的連結仍可能被解析出来進入發現队列,但優先級很低,實际被抓取的概率遠低于正常頁面;
- 如果同一個入口頁反复返回 404,這個目錄甚至整個子域的抓取频率都可能下降。
換句话说,連結被解析出来和連結會被抓取是两件事。偶尔發現一两個 URL,並不代表目标站能稳定拿到抓取。
软 404 是另一種麻烦
還有一種相反的情况:頁面返回 200,但内容空洞、模板化,或者直接寫着頁面不存在。搜尋蜘蛛會用内容特征把它判成软 404,效果和真 404 相近,同样不會给目标 URL 带来正向帮助。所以無论走哪條路,让入口頁返回 200 且正文正常,都是基本前提。
真正需要检查的几件事
- 用 curl 或浏览器開發者工具查看响應头里的狀態碼,不要只看頁面渲染结果;
- 確認反向代理、CDN、後端路由没有把入口頁错誤映射到不存在的路径;
- 检查是否有重寫規則把带參數的 URL 一律丢给 404 處理器;
- 確認 404 頁面本身不要再携带目标連結,避免给爬虫發送自相矛盾的信号。
404 頁面里的連結會不會污染目标站
有些人担心 404 頁面上的目标連結會连累目标站。實际上這種影响通常很小,因為爬虫很少把它当作有效發現路径。真正值得担心的不是污染,而是入口頁白做:你花心思铺的連結,因為一個狀態碼配置错誤,根本没有進入正常的抓取流程。
如果已经出現大批 404
先修狀態碼,再谈連結。修正後可以在站長平台重新提交入口頁和 sitemap,让爬虫重新認识這些地址。已经流失的抓取频率需要時間恢复,不要指望一次性提交就立刻回到原来的水平。同时留意服務器日誌里目标 URL 的抓取记錄,用實际資料判断恢复情况,而不是凭感觉猜测。
入口頁的核心作用是让目标 URL 被稳定發現。狀態碼異常、内容異常、速度異常,任何一項都可能让前面的努力白費。與其研究 404 頁面里的連結能不能被讀到,不如先把 200 响應和正常正文保證好。