很多站点的列表頁都带篩選和排序:按品牌、按價格区間、按上架時間、按销量,再叠加翻頁。對用戶来说這很方便;對蜘蛛来说,這些參數如果都能被抓、抓到後都返回 200,就等于凭空多出成百上千個内容高度相似的地址。抓取预算被摊薄之後,真正需要更新的内容反而排不上队。
组合 URL 為什么會失控
假设一個分類有 5 個篩選维度,每個维度 4 個取值,再叠加 10 頁分頁,理论组合數量可以轻松到几十萬級。蜘蛛通常不會穷举,但只要入口連結足够多,它會顺着能点到的地方不断扩散。判断的關键不是“站内有多少個 URL”,而是“有多少 URL 會被連結触達,並且返回了實质不同的内容”。
自查清單
1. 看參數是否真的進入抓取
- 在抓取记錄或服務器日誌里篩選带問号的請求,統計參數名、參數组合和請求量,看看哪些组合被反复抓取。
- 随机挑几個篩選结果頁直接訪問,確認返回狀態碼和正文内容,判断它和主列表頁到底差多少。
2. 区分“有内容差异”和“只是換了顺序”
排序參數最典型:按價格排、按销量排、按時間排,内容一致,只是顺序不同。這類地址對用戶有时有用,但作為獨立收錄頁面價值很低。篩選參數則要看差异幅度——單一维度的篩選可能确實切出了不同集合,多维叠加後往往只是交集越来越小、重复度越来越高。
3. 决定放行、合並還是挡住
- 放行:有獨立搜尋需求的篩選组合,内容确實不同,可以保留,並给它一個稳定的入口。
- 合並:相似度高的组合,用 canonical 指回主版本,頁面保留给用戶使用。
- 挡住:纯排序、纯會话、纯追踪參數,可以在連結层面加 nofollow,或在 robots.txt 里用參數規則排除抓取。
需要注意的是,robots.txt 挡的是抓取而不是索引,被挡的地址仍可能出現在结果里;而且規則寫得過宽,會把連結發現的路一起切断。所以挡住之前,先確認這些 URL 不是重要頁面的唯一入口。
4. 控制入口數量
站点地图里只放真正需要收錄的列表頁和詳情頁,篩選结果頁不要進地图。導航和面包屑尽量指向不带參數的干净地址,让蜘蛛先看到主干,再看枝叶。
5. 检查分頁與篩選的叠加
篩選之後再翻頁,是最容易产生長尾组合的地方。可以限制篩選结果的翻頁深度,或者让深頁碼通過用戶点击加载,而不是在頁面里铺開大量可抓連結。
一次简單的检查流程
- 列出站内所有會出現在 URL 里的參數名,标出哪些是业務必需、哪些是統計或临时用。
- 用抓取记錄確認這些參數的實际抓取量,找出被反复抓取的组合。
- 對每個组合訪問一次,對比正文主体、标题、内容數量是否真的不同。
- 按放行、合並、挡住三類给出處理方式,並寫進模板或配置里,而不是逐個頁面手工改。
- 處理完成後观察一段時間,看主干頁面的抓取量有没有回升。
容易踩的坑
把所有带參數的 URL 一刀切屏蔽,看起来干净,實际可能把站内搜尋、語言切換、必要的分頁入口一起關掉,结果是蜘蛛找不到该抓的内容。
另一種情况是反過来:担心屏蔽影响收錄,于是全部放行,结果蜘蛛大部分時間都花在组合頁上,新發布的文章要等很久才被抓一次。
小结
篩選與排序參數本身没有問题,問题在于它們是否被当作獨立内容頁面參與抓取。定期做一次參數梳理,把無效组合收敛掉,把有效组合的入口固定下来,抓取资源才有机會流向真正需要更新的頁面。這件事不用一次做完,可以先從抓取量最大的那几個參數開始。