搜尋抓取

带參數的 URL 怎么给蜘蛛放行:排序、篩選與跟踪參數的取舍

篩選、排序、分享跟踪這類參數,會让同一個頁面产生成百上千個地址。蜘蛛一旦沿着這些地址走,抓取预算就被摊薄。這篇说清三類常见參數的识別方式,以及在 canonical、robots.txt 和内鏈控制之間怎么選。

搜尋抓取

带參數的 URL 怎么给蜘蛛放行:排序、篩選與跟踪參數的取舍

參數 URL 是怎么被蜘蛛發現的

站内搜尋、篩選器、排序按钮、分享連結,都很容易在地址後面挂上一串參數。用戶点一下没問题,但每一個组合都是一個獨立 URL。列表頁有二十個篩選項,两两组合就是几百個地址;再加上排序方向、每頁條數、翻頁頁碼,數量很容易失控。

蜘蛛顺着内鏈和 Sitemap 爬,看到一個連結就当作一個新地址。它不會先判断這個地址和刚才那個是不是同一個頁面,通常要抓完、解析完才可能意识到内容重复。也就是说,浪費發生在识別之前。

先把參數分個類

排序與篩選

典型形式是 sort、order、filter、price_min 這類。它們带来的頁面内容确實不同,但對用戶和蜘蛛的價值有限,很多只是同一批商品換了顺序。這類參數如果數量可控,可以考虑放行让蜘蛛抓一部分;如果组合爆炸,就需要收口。

跟踪與統計

utm_source、from、share_id 這類,頁面内容完全一样,只是入口来源不同。它們對抓取没有意义,属于最應该處理的一類。

會话與分頁

sessionid、sid 這類會随訪問變化,同一頁面每次抓取都拿到不同地址,蜘蛛很容易反复抓同一個頁面。分頁參數(page、p、start)則要区分:真正的翻頁列表值得抓,纯展示用的加载更多不一定要放。

几種收口方式,各自的邊界

  • canonical 指向規范地址:适合參數带来的内容基本相同、但确實需要用戶訪問的场景。canonical 是建议不是命令,蜘蛛可能依然抓參數地址,只是把權重归到規范頁。
  • robots.txt 屏蔽:适合跟踪參數這類没有抓取價值的地址。用的是通配符規則,比如屏蔽带 utm_ 的路径。要留意屏蔽的是抓取,不是索引——如果別的站有連結指向這個地址,它仍可能出現在结果里。
  • 内鏈层面不生成:最省事的做法是前端不把跟踪參數寫進 a 标簽的 href,只在跳轉时動態带上。蜘蛛看不到這些連結,自然不會去抓。
  • 篩選頁收口:保留一級篩選,屏蔽二級组合,或者给篩選结果頁加上 noindex。判断标准是這些頁面有没有搜尋需求、有没有被外部連結引用。

放行還是屏蔽,先問三個問题

  1. 這個地址有没有獨立内容?如果和主頁面完全一样,就没有放行的理由。
  2. 有没有用戶真的在搜它?有搜尋需求的篩選组合,可以單獨做成静態入口。
  3. 數量可控吗?十几個可以放,几千個就要考虑抓取预算被摊薄的問题。
處理參數 URL 前,建议先看一下服務器日誌里带參數的請求占比。如果一半以上的抓取都花在這些地址上,收口的優先級就很高。

收口之後要看什么

調整完規則,观察一段時間日誌:參數地址的請求量是不是降下来了,主頁面和真正有價值的列表頁抓取频次有没有回升。如果目标頁面反而少了,可能是規則寫得過宽,把正常地址也挡掉了。規則調整最好一次只動一類參數,方便對照。