蜘蛛池的價值在于让搜尋引擎蜘蛛持續發現 URL,但如果入口頁的連結结构没有收敛,蜘蛛很可能掉進頁面自己生成出来的“無底洞”。這類問题通常不會立刻报错,只是在日誌里表現為抓取量一直涨、新 URL 越抓越多,而真正想推的目标頁却没多抓几個。這就是典型的蜘蛛陷阱。
蜘蛛陷阱是怎么形成的
本质上,頁面根據 URL 參數動態生成内容,生成出来的内容又带出新的連結,循环没有终点。蜘蛛按規則一個接一個抓下去,抓取预算就被消耗在這些永遠抓不完的頁面上。
常见的几種形態
- 無限分頁:下一頁連結永遠存在,頁碼可以一直往上加。
- 日歷與日期導航:每一天的 URL 都有效,蜘蛛顺着“上個月”“下一年”一路点下去。
- 參數组合爆炸:篩選、排序、每頁條數、视图模式等參數两两组合,URL 數量呈指數增長。
- 會话或追踪參數:URL 里带 sid、from、ref 之類,同一個頁面被当成無數個地址。
- 目錄自引用:路径可以無限叠加,/a/b/a/b 這類地址也能返回正常頁面。
- 空结果頁可抓取:没有内容也返回 200,蜘蛛會繼續顺着連結往下找。
為什么蜘蛛池更容易踩進去
蜘蛛池入口頁本身就是為“多给蜘蛛一些入口”而批量生成的,連結密度高、頁面结构相似。如果模板里带了分頁组件或篩選组件,每個入口頁都會複製一份陷阱。入口頁數量一多,放大效應就很明顯,一個模板問题會變成成千上萬個可抓連結。
排查思路
- 從訪問日誌里統計 URL 模式,看是否存在随着抓取推進不断产生新變体的路径。
- 抽样查看被抓取最多的 URL 前缀,通常就是陷阱所在的分頁或篩選路径。
- 對比 sitemap 與實际被抓 URL 的差异,看有多少被抓地址並不在预期范围内。
- 在搜尋引擎後台观察“已發現未抓取”的 URL 數量是否長期堆积。
處理办法
- 分頁设上限,超過頁數直接返回 404,或不再輸出下一頁連結。
- 用 canonical 指向列表首頁,让同一内容的不同變体收敛到一個地址。
- 對無意义的參數,用 robots.txt 的 Disallow 或參數處理工具屏蔽。
- 篩選、排序類連結加 rel="nofollow",减少蜘蛛的無谓跟進。
- 空结果頁返回 404,或者加上 noindex。
- 日歷類導航只在目前月份内輸出連結,歷史日期不生成可抓連結。
几個容易忽略的细节
處理时不要一刀切:把整段路径直接屏蔽,可能连正常的入口頁也一起挡掉。建议先按 URL 模式精确屏蔽,再观察抓取结构有没有變化。另外,陷阱修复的效果通常要等蜘蛛重新抓取几轮之後才看得出来,不必急着当天判断成败。
判断标准可以简單一点:抓取總量上涨的同时,目标頁的抓取比例是否也在上涨。如果只有總量涨、结构没變,大概率還是在陷阱里空轉。
小结
蜘蛛陷阱不是蜘蛛池特有的問题,但蜘蛛池會把它放大。上线前先把分頁、篩選、日期這三類連結收敛好,比事後從日誌里慢慢清理要省事得多。