带參數的 URL 是怎么被蜘蛛抓到的
站内 URL 里出現問号很常见:分頁、篩選、排序、来源标记、會话都可能往地址後面加參數。蜘蛛解析頁面連結时看到的是完整的 href,只要連結可抓取,這個带參數的地址就會進入待抓队列。問题在于,同一個内容可能因此生成几十上百個地址,蜘蛛把時間花在這些地址上,真正需要更新的頁面反而被推後。
參數 URL 常见的三類麻烦
- 地址數量膨胀:篩選條件可以自由组合,每多一個维度,地址數量就成倍增長。
- 内容重复:多個地址返回几乎相同的正文,蜘蛛难以判断哪個是主版本。
- 抓取浪費:大量參數頁内容稀薄,却占用了服務器响應和蜘蛛的抓取時間。
先分清參數的類型
不是所有參數都要處理,先按作用分類:
- 影响内容的參數:分頁 page=2、分類篩選、商品規格等,這類地址通常有獨立内容,值得保留並让蜘蛛抓取。
- 不影响内容的參數:utm_ 系列、sessionid、来源标记之類,同一内容換參數不換结果。
- 排序類參數:排序方式不同但内容集合相同,容易和主版本形成重复。
把這三類分清楚,處理方式才有依據。全都拦截會丢掉分頁和篩選頁,全都不管則會让蜘蛛陷進參數组合里。
處理思路:先给規范版本,再收口入口
第一步是给出規范版本。頁面里用 canonical 指向不带追踪參數的主地址,让蜘蛛知道哪個版本是代表。連結层面也尽量统一:站内導航、内鏈、分享按钮都輸出干净的地址,不要一上来就带一堆标记參數。
第二步是控制入口。真正需要被蜘蛛發現的多维篩選頁,可以只保留用戶常用的几组组合,其余减少暴露;但要注意 robots.txt 只是阻止抓取,並不等于阻止地址被收錄,如果地址已经從外鏈被發現,最好用其他方式處理。
第三步是让參數頁给蜘蛛一点回报。分頁寫清頁碼和前後關系,篩選頁在标题與正文里体現篩選條件,避免出現几十個几乎一模一样的空壳頁面。
内鏈與服務器层面的配合
- 内鏈尽量指向規范地址,减少同一内容的多個入口。
- 篩選和排序頁不要塞進主導航,避免蜘蛛每次抓取都先走一遍。
- 篩選结果頁在服務端生成时注意响應時間稳定,不要让组合查询拖慢整站。
- 分頁的第一頁與带參數的第一頁,保持一致的規范指向。
怎么驗證處理是否有效
看服務器日誌里带參數請求的占比,如果長期居高不下,說明還有大量參數地址在吸引抓取。再看抓取統計中這些地址返回的内容是否重复、狀態碼是否正常。對比處理前後,重点观察有效内容頁的抓取次數有没有變化,而不是只看總抓取量。
參數本身不是問题,失控的參數组合才是。目标不是把所有問号地址都拦掉,而是让蜘蛛把時間花在有内容的地址上。