搜尋抓取

抓取陷阱與路径收敛:蜘蛛為什么會在某些頁面里绕不出来

日歷归档、參數组合、無限滚動和站内搜尋结果頁,都可能让 URL 數量無限增長,把抓取額度消耗在低價值地址上。本文從日誌信号出發,說明如何判断抓取陷阱,並通過 robots 規則、canonical、分頁入口、内鏈收敛和 Sitemap 控制来收拢抓取路径,同时提醒服務器稳定性對抓取频次的影响。

搜尋抓取

抓取陷阱與路径收敛:蜘蛛為什么會在某些頁面里绕不出来

站点里有些頁面,蜘蛛進去之後就很难“出来”。它們本身不算坏頁面,服務器也正常,但連結一层层展開,URL 數量可以無限增長。抓取量看着在涨,真正有價值的頁面反而被抓得更少。這類结构通常被称為抓取陷阱,處理它的思路不是让蜘蛛多抓,而是把路径收拢。

一、常见的“越走越多”结构

  • 日歷归档:每個日期、每周、每月各有一個列表頁,年份還能繼續向前或向後翻。
  • 參數组合:篩選、排序、视图模式、每頁條數互相叠加,同一個列表能生成成百上千個地址。
  • 無限滚動:滚動加载把内容拼在目前 URL 上,但地址本身没有變化,或者變化方式不可控。
  • 站内搜尋结果頁:用戶能搜出多少词,就可能被外部連結带出多少结果頁。
  • 需要登入才有意义的頁面:购物车、訂單、個人中心被内鏈或外鏈暴露後,蜘蛛抓到的只是登入提示。

二、陷阱出現时,日誌里通常有什么

几個可以观察的信号:

  • 同一批 URL 在日誌里高频出現,内容却高度相似;
  • 抓取總次數上升,但頁面有效覆盖没有同步變化;
  • 重要栏目的被抓频次下降,說明抓取額度被分走了;
  • 日誌中大量 URL 带參數,而這些參數並不影响實际返回内容。
抓取量本身不是成绩單。站点需要的是有效 URL 被稳定覆盖,而不是让蜘蛛在同一片区域里来回走。

三、把路径收拢的几種做法

1. 明确可抓取邊界

對确實没有收錄價值的组合頁,可以在 robots.txt 里按路径規則拦掉一部分,减少無效抓取。要注意 robots.txt 只影响“抓不抓”,並不阻止 URL 從外部被發現;同时不要用它遮挡重要内容。

2. 给路径一個“到此為止”的信号

分頁頁面尽量提供明确的可抓取分頁地址,並在頁面顶部或底部說明目前頁碼;無限滚動建议保留一個可分頁訪問的版本,避免只有一個不断加载的入口。篩選頁可用 canonical 指向無參數版本,减少重复地址的扩散。

3. 内鏈只指向你想让蜘蛛走的路

列表頁、标簽頁、相關推荐之間的互鏈最容易失控。常见問题是每個篩選结果都互相連結,形成網状结构。可以让内鏈集中在稳定的入口頁,组合頁主要靠篩選操作或站内搜尋到達。

4. Sitemap 用来兜底,不用来堆量

Sitemap 适合放稳定、希望被發現的 URL,里面的地址應能返回正常狀態碼。如果把參數组合頁、已失效頁面都塞進去,反而會占用抓取资源。

四、排查顺序

  1. 從日誌里按抓取次數排序,找出被高频訪問的 URL 群;
  2. 看這些 URL 的来源,判断是内鏈、Sitemap 還是外部連結带進来的;
  3. 抽几個 URL 检查返回内容,確認是否為無價值组合或重复内容;
  4. 针對来源處理:收紧内鏈、調整 canonical、更新 Sitemap、必要时补 robots 規則;
  5. 改完後繼續观察日誌,確認抓取是否回到重要目錄。

五、別忘了服務器這條线

如果服務器响應慢、频繁超时或返回 5xx,蜘蛛會主動降低抓取频次,队列里未完成的 URL 會被反复重试。此时路径收敛的效果不容易看出来,因為抓取本身就處在不稳定狀態。把首字节時間、错誤率稳定住,再谈结构優化,顺序會更顺。

抓取路径的收敛是長期工作,不同站点的合理邊界並不相同。建议以自己的日誌資料為准,先解决明顯的泄漏点,再逐步調整。