电商、资讯、房产這類站点,列表頁通常是 URL 數量最多的部分。一個栏目加上翻頁、排序、篩選條件,可以轻松生成成千上萬個地址。它們不是垃圾頁面,但也不是每一頁都值得占用索引和抓取资源。處理思路往往不是「全收」或「全挡」,而是按頁面類型分档。
先按類型分档,再决定去留
把列表類 URL 拆開看,大致是四類:
- 栏目首頁:如 /news/、/category/phones/,是站内連結的主要入口,通常應保留在索引中。
- 翻頁:?page=2、/list_2.html 這類,承载的是同一批内容的後續排列。
- 篩選與排序:?brand=x、?price=100-200、?sort=new,參數组合越多,URL 越碎。
- 站内搜尋與空结果頁:用戶輸入产生的地址,一般不建议進入索引。
翻頁:可以收,但不必刻意追
翻頁頁面上有真實内容,搜尋引擎可以收錄,也确實有用戶會搜到第二頁上的商品。但從抓取成本看,深度翻頁的價值递减得很快。比較稳妥的做法是:
- 前几頁保持可抓取、可点击,連結用普通的锚点标簽輸出,不要只靠脚本里的「加载更多」按钮。
- 無限滚動頁面要提供分頁地址或静態的翻頁入口,让爬虫有路可走。
- 不必為了让每一頁都被收錄而堆砌内鏈,把翻頁連結铺满全站,反而會稀释重要頁面分到的抓取。
篩選參數:重点在收敛,不在屏蔽
篩選頁里有一小部分是有價值的,例如品牌、品類這種固定且有人搜尋的维度,可以做成静態化的落地頁。麻烦的是多维组合:颜色加尺寸加價格再加排序,组合數很快上百上千。
常见的處理方式有三種,各有邊界:
- robots.txt 屏蔽參數路径:能阻止抓取,但被屏蔽的地址如果已经被外部連結指向,仍可能以「被屏蔽」的狀態出現在索引里,用戶看不到内容。
- canonical 指向無參數版本:這是提示性信号,搜尋引擎會參考,但不是强制指令,參數頁本身仍可能被抓取。
- 頁面加 noindex:需要搜尋引擎先抓到頁面才能讀到這個标簽,所以屏蔽抓取和 noindex 不要同时用在同一個地址上。
顺序上建议先想清楚一件事:這個 URL 要不要被抓。要抓但不要進索引,用 noindex;不想被抓,用 robots.txt;只是重复,用 canonical。三個混着用,排查时很难判断到底哪一步在生效。
一個可执行的收口顺序
- 導出近 30 天日誌里被频繁抓取的列表類 URL,按路径和參數归類。
- 标出其中带流量、带外鏈、有搜尋需求的少數,保留它們,並在頁面之間建立正常内鏈。
- 剩下的组合參數,先统一 canonical 到主版本,观察一段時間再决定是否需要進一步處理。
- 站内搜尋结果頁、排序方向相反(價格從低到高與從高到低)這類頁面,優先從索引中排除。
几個容易踩的点
- 篩選頁的标题和描述由參數動態拼接,容易生成大量几乎相同的 TDK,反而放大重复内容問题。
- 把分頁頁面全部 canonical 到第一頁,等于告诉搜尋引擎「這些是同一篇」,後續頁的内容可能因此不被收錄。
- 空结果頁返回 200 並渲染一個「没有找到」的模板,這類頁面被大量抓取是纯消耗。
- 參數顺序不同(?a=1&b=2 與 ?b=2&a=1)會生成两個 URL,服務端最好做一次归一化跳轉。
列表頁的收錄問题,本质是资源分配問题。把有限的抓取留给有獨立價值、能被用戶搜到的頁面,剩下的靠 canonical、noindex、robots 各司其职地收口,比追求「每一個 URL 都被收錄」要現實得多。調整之後,用日誌和覆盖率报告對照一段時間,看抓取是否集中到了你希望的那些頁面上。