抓取配額有限,陷阱會把它吃掉
搜尋引擎给每個站点的抓取量是動態調整的,和站点质量、更新频率、歷史响應速度都有關系。蜘蛛池里的入口頁往往數量多、單頁内容薄,本身拿到的抓取份額就不高。如果入口頁還存在爬虫陷阱,也就是那種能让蜘蛛不断生成新 URL、却始终走不到有效内容的结构,抓取量就會被大量消耗在無意义的地址上,真正想被發現的頁面反而排不上队。
入口頁里最常见的几類陷阱
相對連結寫错,路径無限叠加
假设頁面里寫了一個指向 page.html 的相對連結,而目前地址是 /a/b/c/,蜘蛛顺着走到 /a/b/c/page.html,再往下又生成 /a/b/c/page.html/page.html,如此反复。這種叠加在头两层看不出来,抓几十次之後就變成一堆噪声地址。检查方法很直接:確認目錄层級和 base 标簽,或者干脆把所有連結统一寫成绝對路径。
參數组合爆炸
篩選、排序、分頁、每頁條數、session id、来源标记,這几個參數一旦同时出現在 URL 里,组合數就是乘法關系。颜色加尺寸加頁碼加排序,蜘蛛會挨個试過去。如果頁面内容只和其中一两個參數有關,其余參數只影响展示方式,就應该在 robots 規則或規范連結上做约束,或者让這些參數根本不生成新地址。
日歷、归档與猜日期
有些入口頁带日期归档结构,蜘蛛會顺着月份一直往下猜,一直猜到空頁面為止。空頁面如果返回 200,就會被当成有效頁繼續抓取和扩散。要么让空归档返回 404,要么不要让蜘蛛拿到這些日期連結。
站内搜尋结果頁
搜尋框提交後生成的 /search?q= 這類地址,如果不加限制,蜘蛛會拿各種词去试,甚至顺着頁面上的相關搜尋繼續扩散。這類頁面通常内容重复、质量偏低,應该屏蔽或至少加 noindex。
软 404
返回 200 但内容其實是“没有找到”,蜘蛛會把它当作正常頁收錄並繼續抓。软 404 积累多了,整個站点的抓取评價都會受影响。
為什么在蜘蛛池里這個問题更明顯
入口頁承担的是“被發現的通道”這個功能,頁面數量多、單頁價值低,單個頁面分到的抓取次數可能只有個位數。一旦存在陷阱,這几次抓取就全花在生成新 URL 上,等于入口頁白铺了。更麻烦的是,多個入口頁如果共用同一套模板,同一個陷阱會被複製很多份,日誌里看到的抓取總量很好看,有效 URL 却没增加多少。所以看日誌不要只盯總數,要按 URL 模式归類,看有多少抓取真正落在预期目錄里。
排查顺序
- 拉一份最近的抓取日誌,按 URL 路径前缀做聚類,把占比最高的几個路径列出来。
- 確認這些路径是不是你想要的。如果排在前面的都是 search、calendar、sort 這類,問题基本就確認了。
- 随机挑几個被抓取過的 URL 手動訪問,核對返回碼和實际内容是否匹配。
- 回头检查模板里的連結生成逻辑,重点看分頁、篩選和相關推荐模块。
處理建议
- 能不用參數就不用參數,篩選和排序尽量做在前端交互里,不生成新地址。
- 必须保留的參數,用 robots.txt 做限制,注意規則寫太宽會誤伤正常頁面。
- 空结果、空归档统一返回 404 或 410,不要用 200 加一句“暂無内容”。
- 分頁設定上限,只让前几頁可抓,後面的連結用 nofollow 或直接截断。
- 連結统一用绝對路径,避免路径叠加。
抓取配額不會因為你铺了更多入口頁就等比例增加。把現有的抓取量集中在少數有效路径上,通常比繼續加頁面更划算。
一個容易忽略的检查点
處理完之後不要立刻判断有效,蜘蛛的行為有滞後。观察一两周,看日誌里 search、calendar 這類路径的抓取占比是否下降,同时预期目錄的抓取數量有没有上升。如果只是總量下降,說明這些地址被压住了,但蜘蛛並没有被引導到目标頁,還需要检查内鏈是不是真的把它带了過去。