參數是怎么把地址數量撑起来的
一個列表頁本来只有一個地址,加上篩選、排序、分頁、每頁條數和追踪标记之後,同一批内容就能對應出几十個表面上不同的 URL。蜘蛛顺着站内連結往下爬,抓到的大多是同一份内容套了不同外壳。對站点来说,這既浪費抓取額度,也让索引里塞進一堆低價值的近似地址。
常见的情况大致有几類:
- 篩選與排序组合:品牌、價格区間、颜色、销量、上架時間,每多一個可勾選條件,地址數量就往上翻一层。
- 分頁與每頁條數:?page=2&size=20 和 ?page=4&size=10 很可能指向同一段商品。
- 追踪标记:utm_source、gclid、fbclid、ref、from 這些本来是给外部投放用的,一旦被複製進站内導航或分享按钮,就會沿着内鏈一路扩散。
- 會话與临时參數:sid、token、带時間戳的 _t,每次訪問都生成新地址,對抓取来说等于無穷多個新頁面。
- 預設值寫進 URL:?sort=default、?page=1、?cat=all 與不带參數的版本内容完全一致,却各自占一個地址。
它會带来哪些實际麻烦
最直接的影响是抓取被摊薄。蜘蛛一天能訪問的頁面數是有限的,如果大量訪問都落在内容重复的篩選頁上,真正會更新、有搜尋需求的頁面就分不到足够次數。
其次是信号混乱。多份近似内容都指向自己的地址,頁面之間容易互相竞争,标题和描述在索引里也可能被系統自行改寫。時間久了,索引量看着在涨,實际有價值的却不多。
先從日誌里找出失控的參數
治理之前得先知道哪些參數在被频繁抓取。打開最近一段時間的訪問日誌,做几步简單統計:
- 筛出請求路径里带問号的记錄,算出它們占總抓取量的比例。比例異常高时,說明參數頁面正在吃掉大量訪問。
- 按參數名分组統計,看每個參數各自被請求了多少次,先盯排名前几位的。
- 把同一個内容不同參數的地址挑出来,人工對比頁面正文是否真的不同。
- 看這些地址有没有出現在站内連結里。如果只有蜘蛛在訪問,而站内入口很少,多半是從外部連結或舊地址爬過来的。
處理顺序:能归一化就別急着屏蔽
第一步,把不该出現的參數去掉
- 站内連結一律不带追踪參數,分享和广告連結里的标记留在外部即可。
- 預設值不寫進 URL,sort=default、page=1 這類直接回到干净地址。
- 统一參數顺序,a=1&b=2 與 b=2&1 在服務端归一成同一種寫法,避免相同组合产生多個地址。
- 清掉空參數和失效參數,比如 ?color=&size= 這種没有任何篩選意义的尾巴。
第二步,用 canonical 把有内容的组合收敛到主版本
篩選頁如果确實能给用戶提供有效信息,不必全部砍掉。可以让它指向對應的主分類地址,同时保證主地址本身可抓取、有入口。分頁頁面則更要注意,每頁内容不同,不要一律指向第一頁。
第三步,再考虑屏蔽
會话 ID、時間戳、纯排序切換這類對用戶没有實质帮助的參數,可以在 robots.txt 里拦住抓取路径。但要清楚一点:屏蔽抓取不等于阻止索引,外鏈指向的地址仍可能被收錄。所以顺序上還是先做归一化,屏蔽只作為兜底。
參數本身不是問题,失控的是那些既没有獨立内容、又没有任何入口管理價值的组合。判断标准很简單:這個地址單獨拿给用戶看,他會不會觉得值得点開。
參數治理不是一次做完的事。新建篩選功能、上线投放系統、改版導航时,都可能重新引入一批地址。把參數命名和連結生成的規則寫進開發约定,再定期從日誌里复查一次,比事後清理省力得多。