蜘蛛發現 URL 的方式並不复杂:站内連結、Sitemap、外鏈,以及它自己的歷史抓取记錄。這几條路里,最容易失控的是站内連結——因為連結上带着參數。同一篇内容,參數不同,在蜘蛛眼里就是几十個不一样的地址。
參數是怎么把路径撑大的
常见的參數大致有几種:
- 排序參數,例如 sort=price_asc、order=desc;
- 篩選參數,例如 color=red、size=42;
- 追踪參數,例如 utm_source、from、ref;
- 會话或時間戳參數,例如 sid、t=1690000000;
- 分頁與展示參數,例如 page=2、view=list。
單獨一種還好,問题是它們會组合。三個篩選维度各取两個值,就是八條地址;再加一個排序參數,翻一倍。地址數量不是加法增長,而是乘法增長。蜘蛛從列表頁出發,沿着這些連結一路走,抓到的往往是同一批内容的不同外壳。
先判断參數属于哪一類
處理之前,先把參數分成三類,處理方式完全不同。
- 改變内容的參數:如 page、分類篩選、語言切換。這類地址本身就是有效頁面,需要保留可抓取路径。
- 不改變内容的參數:如 utm、ref、會话 ID。它們只是来源标记,不應该出現在站内連結里,更不该被蜘蛛当成新地址。
- 改變呈現但不改變集合的參數:如排序、每頁數量、列表视图。内容集合一样,只是顺序不同,属于同一批 URL 的變体。
判断标准可以简單一点:把這個參數去掉,用戶看到的頁面主体内容是否變化?如果没變,那它多半不该獨立占一條抓取路径。
收敛顺序:從源头到兜底
- 先清理站内連結。追踪參數只用在站外投放,站内連結保持干净。這是成本最低、效果最直接的一步。
- 排序參數不進内鏈。預設排序保留一個地址即可,其他排序方式交给用戶操作,不主動生成可抓連結。
- 控制篩選组合的開放范围。只開放一到两個维度给蜘蛛走,其余组合不寫進 HTML,或用 nofollow 标注。要清楚 nofollow 只是提示,不是禁止。
- 會话參數不要寫進 URL。用 cookie 承载狀態,避免每次訪問生成新地址。
- canonical 指向無參數版本。它能帮助蜘蛛归並變体,但它是建议不是命令,不能替代前面的清理。
- robots.txt 屏蔽參數模式要谨慎。被屏蔽的地址,蜘蛛拿不到頁面上的 canonical,反而可能保留舊记錄。
屏蔽一條參數路径,並不等于這條路径不存在。蜘蛛可能早就從外鏈或歷史记錄里知道它,只是不再抓取。真正决定结果的,仍然是頁面上给出的信号是否一致。
怎么驗證收敛有没有生效
收敛之後,至少看三個地方:
- 抓取日誌里,带參數的 URL 占全部抓取的比例是否下降;
- 從站内連結爬出来的地址中,參數變体還有多少;
- 用站点查询粗略看索引里同類變体的數量變化。
如果比例長期不降,通常說明清理只做了一半:站内連結干净了,但 Sitemap 或歷史外鏈還在持續供给带參數的地址。
几個常见誤区
第一,把參數当成小事,先去做外鏈和内容。參數膨胀消耗的是抓取资源,资源被占住,新頁面被發現的速度自然變慢。
第二,一股脑全屏蔽。改變内容的參數被屏蔽後,正常頁面也走不進去了,反而把有效的抓取路径一起切断。
第三,只靠 canonical 解决一切。canonical 是頁面級信号,蜘蛛要抓到頁面才能讀到它,如果在内鏈层面就不停产生新變体,信号传递的效率會很低。
參數治理不需要一次做完。先清理最明顯的一類——站内連結里的追踪參數和會话參數,观察一段時間抓取日誌的變化,再處理排序和篩選组合,通常比一次性大改更稳。