站点里有些頁面,蜘蛛進去之後就很难“出来”。它們本身不算坏頁面,服務器也正常,但連結一层层展開,URL 數量可以無限增長。抓取量看着在涨,真正有價值的頁面反而被抓得更少。這類结构通常被称為抓取陷阱,處理它的思路不是让蜘蛛多抓,而是把路径收拢。
一、常见的“越走越多”结构
- 日歷归档:每個日期、每周、每月各有一個列表頁,年份還能繼續向前或向後翻。
- 參數组合:篩選、排序、视图模式、每頁條數互相叠加,同一個列表能生成成百上千個地址。
- 無限滚動:滚動加载把内容拼在目前 URL 上,但地址本身没有變化,或者變化方式不可控。
- 站内搜尋结果頁:用戶能搜出多少词,就可能被外部連結带出多少结果頁。
- 需要登入才有意义的頁面:购物车、訂單、個人中心被内鏈或外鏈暴露後,蜘蛛抓到的只是登入提示。
二、陷阱出現时,日誌里通常有什么
几個可以观察的信号:
- 同一批 URL 在日誌里高频出現,内容却高度相似;
- 抓取總次數上升,但頁面有效覆盖没有同步變化;
- 重要栏目的被抓频次下降,說明抓取額度被分走了;
- 日誌中大量 URL 带參數,而這些參數並不影响實际返回内容。
抓取量本身不是成绩單。站点需要的是有效 URL 被稳定覆盖,而不是让蜘蛛在同一片区域里来回走。
三、把路径收拢的几種做法
1. 明确可抓取邊界
對确實没有收錄價值的组合頁,可以在 robots.txt 里按路径規則拦掉一部分,减少無效抓取。要注意 robots.txt 只影响“抓不抓”,並不阻止 URL 從外部被發現;同时不要用它遮挡重要内容。
2. 给路径一個“到此為止”的信号
分頁頁面尽量提供明确的可抓取分頁地址,並在頁面顶部或底部說明目前頁碼;無限滚動建议保留一個可分頁訪問的版本,避免只有一個不断加载的入口。篩選頁可用 canonical 指向無參數版本,减少重复地址的扩散。
3. 内鏈只指向你想让蜘蛛走的路
列表頁、标簽頁、相關推荐之間的互鏈最容易失控。常见問题是每個篩選结果都互相連結,形成網状结构。可以让内鏈集中在稳定的入口頁,组合頁主要靠篩選操作或站内搜尋到達。
4. Sitemap 用来兜底,不用来堆量
Sitemap 适合放稳定、希望被發現的 URL,里面的地址應能返回正常狀態碼。如果把參數组合頁、已失效頁面都塞進去,反而會占用抓取资源。
四、排查顺序
- 從日誌里按抓取次數排序,找出被高频訪問的 URL 群;
- 看這些 URL 的来源,判断是内鏈、Sitemap 還是外部連結带進来的;
- 抽几個 URL 检查返回内容,確認是否為無價值组合或重复内容;
- 针對来源處理:收紧内鏈、調整 canonical、更新 Sitemap、必要时补 robots 規則;
- 改完後繼續观察日誌,確認抓取是否回到重要目錄。
五、別忘了服務器這條线
如果服務器响應慢、频繁超时或返回 5xx,蜘蛛會主動降低抓取频次,队列里未完成的 URL 會被反复重试。此时路径收敛的效果不容易看出来,因為抓取本身就處在不稳定狀態。把首字节時間、错誤率稳定住,再谈结构優化,顺序會更顺。
抓取路径的收敛是長期工作,不同站点的合理邊界並不相同。建议以自己的日誌資料為准,先解决明顯的泄漏点,再逐步調整。