站点运营

站点运营:站内搜尋與篩選參數自查,別让參數组合造出無穷 URL

站内搜尋、篩選和排序參數能给訪客带来便利,却也可能让同一個頁面衍生出成百上千個地址,把抓取预算耗在相似内容上。本文按參數類型梳理自查思路:搜尋结果頁、分面導航、追踪參數分別怎么處理,robots.txt 與 canonical 如何配合,以及一份可以定期执行的检查清單。

站点运营

站点运营:站内搜尋與篩選參數自查,別让參數组合造出無穷 URL

站内搜尋、篩選和排序功能對訪客很友好,几秒钟就能從大量内容里挑出想要的那几條。但對爬虫来说,每一次參數组合都可能被当成一個新地址。如果没有任何约束,一個内容量並不大的站点,也能在很短時間里被「生成」出成千上萬個 URL。

參數為什么會把 URL 空間撑開

排序(?sort=price)、篩選(?color=red&size=m)、站内搜尋(?q=關鍵詞)、會话與追踪參數(?utm_source=...&sid=...),這些地址返回的頁面主体往往大同小异,却各自拥有一個獨立 URL。蜘蛛顺着站内連結一路爬下去,抓取预算被大量高度相似的頁面吃掉,真正需要及时更新的内容反而排在後面。更麻烦的是,当多個參數可以自由组合时,URL 的數量會呈乘法增長,靠人工列举很难穷尽。

參數本身不是错的。需要自查的不是「有没有參數」,而是「哪些參數组合允许被抓取、被索引」。

第一類:站内搜尋结果頁

搜尋结果頁通常是動態生成的,並且可以被任意關鍵詞触發。只要有人构造一個關鍵詞,就能得到一個此前不存在的地址。常见的情况包括:

  • 搜尋框提交後直接跳到一個带查询字符串的頁面,标题里還带着用戶輸入的關鍵詞;
  • 搜尋结果頁里又列出大量内容連結,蜘蛛顺着這些連結繼續深入;
  • 空结果頁也返回 200 狀態碼,形成一堆内容為空的地址。

比較稳妥的做法是让结果頁保持可訪問,但不進入索引:给這類頁面加上 noindex,同时在 robots.txt 中屏蔽带搜尋參數的路径。注意這两者不要简單叠加——如果路径已经被 robots.txt 完全屏蔽,蜘蛛就看不到頁面上的 noindex 了,需要根據實际情况選一種作為主要手段。

第二類:篩選、排序與分面導航

电商、房产、招聘類站点常见多個篩選维度。三個维度各四個選項,组合出来的地址數量就相当可观。可以按下面的顺序判断:

  • 核心篩選:确實對應不同内容集合、且有搜尋需求的,保留並让它們可被抓取;
  • 次要篩選:内容重合度高、搜尋需求低的,指向一個代表性地址作為規范版本;
  • 排序與视图參數:一般没有獨立检索價值,统一規范到預設排序的地址。

具体到實現上,canonical 是常用的收敛工具,但要保證指向的地址真實存在且返回正常,不要指到一個 404 或需要登入的頁面。

第三類:追踪、分享與临时參數

utm 參數、會话 ID、打印版本、来源标记,這些參數對訪客体驗和站内结构没有贡献,却會在連結被轉發时不断扩散。建议的做法是:

  1. 在服務器或應用层做參數白名單,只保留业務真正需要的參數;
  2. 其余參數可以让頁面正常打開,但 canonical 一律指向無參數的干净地址;
  3. 對明顯冗余的地址,考虑用 301 收敛到干净版本,同时確認不會连鎖跳轉。

一份可以定期执行的检查清單

  • 随手在站内点几组篩選和排序组合,對照地址栏與頁面 canonical 是否一致;
  • 抽查索引情况,看是否存在大量带參數的地址;
  • 確認篩選、分頁的入口是普通可点击連結,而不是只能靠脚本触發;
  • 检查 robots.txt 的規則有没有誤伤干净 URL,尤其是路径前缀寫得太宽的情况;
  • 核對 sitemap 中是否混入了带參數的地址,只提交干净且有代表性的 URL;
  • 在服務器訪問日誌里統計带參數 URL 的抓取频次和返回狀態碼,看有没有異常增長。

參數治理不是一次配置就能一劳永逸的事。栏目調整、篩選维度增加、营销活動上线,都會带来新的參數。把上面這份清單放進例行的运营节奏里,隔一段時間回看一次日誌,比在某次集中整改中改一大堆規則更有效。