不少人在看服務器日誌时會遇到這種情况:日誌里明明有搜尋蜘蛛的訪問记錄,UA 和 IP 都對得上,但往下翻很久,目标 URL 一次都没被請求過。這时候容易被直接判定成“蜘蛛池没用”,其實中間還隔着好几個环节,需要逐段確認。
先分清“来了”和“抓了”
日誌里的记錄通常分几類:抓入口頁 HTML、抓入口頁上的静態资源、抓目标 URL、抓 robots.txt。搜尋蜘蛛一般先到入口頁,再從返回的 HTML 里解析連結,之後才可能去抓目标頁。如果只看到第一類记錄,說明它只完成了“發現入口”這一步;連結有没有被提取出来、有没有進入待抓队列,是後面的事。
只抓入口頁、不抓目标 URL 的常见原因
1. 連結没有被正确解析
連結寫在 JS 里、需要点击或滚動才生成、或者用拼接字符串的方式輸出,搜尋蜘蛛在渲染能力有限的情况下可能拿不到。纯文本 URL 不带 a 标簽、href 為空、href 指向 javascript: 這類寫法,同样不會被当成可跟随連結。
2. 入口頁本身被判定為低质量
入口頁内容重复度高、模板痕迹明顯、正文几乎没有,只有一堆指向外部的連結,搜尋蜘蛛可能抓完首頁就降低對该站点的抓取意愿。這通常不等于“被惩罚”,更常见的是抓取優先級被調低,後續抓取被排到很後面。
3. 抓取配額被入口頁自己消耗掉
如果入口頁体积大、外部资源多、响應慢,或者站内還有大量無意义的分頁、參數頁,搜尋蜘蛛的時間预算會先花在這些地方,目标 URL 排在後面,甚至当次訪問完全不抓。
4. 狀態碼和 robots 拦截
- 入口頁返回 5xx,或者出現長時間 302 循环,蜘蛛會中断本次抓取;
- 入口頁 meta robots 或响應头里的 noindex、nofollow,會影响後續處理,nofollow 的連結不會被跟随;
- robots.txt 里 Disallow 了目标 URL 所在路径,或者規則寫错把整站挡住;
- 目标 URL 需要登入、設定了 IP 或 UA 白名單,蜘蛛直接被拒绝。
5. 目标 URL 自身的問题
目标頁返回 404、410,或者内容為空白、被框架包裹無法渲染,搜尋蜘蛛即使来了也不會形成有效抓取。另外目标 URL 如果带大量參數或會话 ID,可能被归一化處理,日誌里看到的路径和你预期的並不一致。
按顺序排查的步骤
- 確認日誌中訪問的是入口頁還是目标頁,按 URL 路径分组統計數量;
- 在浏览器里關閉 JS,查看入口頁源碼中能否直接看到目标連結;
- 检查入口頁的 HTTP 狀態碼、响應時間和頁面体积;
- 检查 robots.txt 以及頁面級的 meta robots 設定;
- 單獨測試目标 URL 的可訪問性,確認是否返回 200、是否需要登入;
- 對比多個入口頁的表現,找出哪些入口頁之後确實出現過目标 URL 的抓取记錄。
可以尝试的調整
把目标連結放在服務端渲染的 HTML 里,使用标准 a 标簽和绝對路径;控制單個入口頁的連結數量,優先放少量相關性較高的 URL;压缩入口頁体积,减少不必要的脚本和图片;保持目标 URL 稳定,不要频繁更換參數或延長跳轉鏈路。如果某些入口頁長期只被抓取、從不带出目标頁,與其繼續在同一批頁面上堆連結,不如替換入口頁再观察。
抓取日誌只能說明蜘蛛来過,不能保證收錄。發現、抓取、索引是三個相對獨立的环节,排查时不要把它們混在一起看。