站点运营

站点运营:站内搜尋與篩選參數頁自查,別让结果頁變成抓取黑洞

站内搜尋、篩選、排序功能會生成大量带參數的 URL,用戶用得少,蜘蛛却爬得勤。本文梳理如何通過日誌確認抓取占比,区分有價值和低價值的參數组合,並用 robots.txt、noindex、canonical 與内鏈收敛等手段,把抓取時間留给真正需要更新的頁面。

站点运营

站点运营:站内搜尋與篩選參數頁自查,別让结果頁變成抓取黑洞

很多站点上线站内搜尋和篩選功能之後,服務器日誌里很快會出現大量带參數的 URL。這些頁面用戶用得並不多,蜘蛛却爬得很勤。它們内容重复、组合近乎無限,容易把有限的抓取時間占掉,真正需要更新的文章和商品反而被挤到後面。

先確認這些頁面到底被抓了多少

不要凭感觉判断。打開訪問日誌,按 URL 里的參數關鍵詞做一次統計,常见的參數名包括 q、s、keyword、search、sort、order、filter、page、price、tag 等。重点看几件事:

  • 同一路径下的參數组合數量是否在持續增長;
  • 蜘蛛每天在這些 URL 上的請求占全部請求的比例;
  • 這些請求返回的狀態碼分布,是 200 居多還是 404、302 居多;
  • 是否有參數頁被外部連結指向,導致蜘蛛反复回訪。

只有拿到這些數字,後面的取舍才有依據。占比不到百分之一和占比超過三成,處理方式完全不同。

结果頁的三種處理思路

直接屏蔽抓取

在 robots.txt 里屏蔽带特定參數的搜尋结果頁,是最直接的做法,能較快减少抓取浪費。但要清楚一個前提:被屏蔽的 URL 如果被外鏈引用,仍可能以無描述的形式出現在搜尋结果里,因為蜘蛛讀不到頁面上的說明标记。屏蔽解决的是抓取問题,不是索引問题。

允许抓取但标记 noindex

如果希望這些頁面既不進索引、也不留下無描述收錄,可以让蜘蛛正常抓取,由頁面自己輸出 noindex。代價是抓取成本依然存在,适合參數组合數量可控、總量不大的站点。

把有價值的篩選頁拆出来單獨维護

有些篩選组合對應的是真實需求,比如某個城市加某個品類的列表頁。這類頁面可以做成固定路径的静態入口,配上獨立的标题、简介和内容摘要,從搜尋结果頁体系中分离出来單獨维護。其余的随机组合繼續用規則挡在外面。判断标准很简單:這條组合有没有人主動搜尋過,頁面上的内容是否與主列表頁明顯不同。

站内搜尋頁要額外注意两点

  • 搜尋框的提交方式。纯 GET 表單會把用戶每一次輸入都變成一條可抓取的 URL,有些蜘蛛甚至會主動拼接常见關鍵詞。改為 POST 提交,或者限制搜尋入口只對站内交互開放,能减少大量無意义的地址。
  • 空结果頁的處理。搜不到内容时不要用一個 200 狀態碼加上一句没有找到就結束,可以根據關鍵詞推荐相關栏目或热门内容,避免留下大量空壳頁面。

參數组合尽量收敛

排序方式、列表视图、每頁條數這類參數本身不产生新内容。可以在程序层限制有效取值范围,過滤掉非法取值;同时合並等價的參數寫法,避免 sort=price 和 order=price 這類同义不同名的地址同时存在。參數越少,可组合出的 URL 就越少,蜘蛛遇到的岔路也就越少。

一份可执行的检查清單

  1. 統計日誌中带參數 URL 的抓取量和占比;
  2. 列出所有參數名,标注每個參數是否影响頁面主体内容;
  3. 對不影响内容的參數组合設定 robots.txt 規則或 noindex;
  4. 检查參數頁的 canonical 是否指向了合适的規范地址;
  5. 检查模板和内容区是否有大量連結直接指向參數頁;
  6. 調整後隔一到四周回看日誌,對比抓取分布的變化。

別忘了内鏈這一环

很多參數頁之所以被频繁抓取,是因為模板里到處挂着带篩選條件的連結,比如相關推荐、标簽云、猜你喜欢直接拼上參數。這類連結要么改成指向稳定的栏目頁,要么控制數量,不要在每個頁面都重复出現。連結少了,蜘蛛自然會把注意力收回到主干内容上。

參數頁面本身不是错誤,問题在于让蜘蛛把時間花在近乎無限的组合上。先分清哪些是有價值的入口,其余的用規則挡在抓取之外,比等到抓取出現異常再补救要省力得多。

調整之後不必期待第二天就看到變化,蜘蛛的抓取习惯通常需要几周才會平滑下来。把日誌回看變成固定動作,比一次性設定完就長期不管更靠谱。