大部分站点都有站内搜尋框。對訪客来说它是便利功能,對抓取来说却常常是一個被忽略的出口:搜尋會按關鍵詞生成几乎無限的地址,這些頁面内容重复、狀態各异,還能顺着連結被一层层抓下去。等你注意到时,抓取预算已经被搜尋结果頁消耗掉一大块。這篇内容整理一份站内搜尋的自查思路,帮你把這個入口管起来。
站内搜尋结果頁為什么容易出問题
- 地址空間接近無限:每個關鍵詞、每種排序方式都能生成一個獨立地址,蜘蛛只要在框里试几個词,就能顺着结果頁上的連結繼續扩散。
- 内容重复度高:同一批文章會在不同關鍵詞下反复出現,頁面主体只有几個词的差別,對訪客價值有限,對抓取却是實打實的開销。
- 空结果頁數量大:拼寫错誤、随机字符、過期词都會产生零结果頁面,這類頁面既没有内容,也没有明确的狀態提示。
- 结果頁再挂内鏈:搜尋结果里通常带着大量指向詳情頁的連結,等于给蜘蛛開了一條绕開栏目结构的捷径。
自查清單
- 站内搜尋用的地址是什么形式?是 /search?q= 這類動態參數,還是伪装成静態路径?先確認它的地址規律。
- 搜尋结果頁目前返回什么狀態碼?空结果时是否仍然返回正常狀態,還是正确地给出提示並保留 200?
- 结果頁有没有設定 noindex?或者是否已经被 robots.txt 整体拦截?两者只能選一種,原因见下文。
- 搜尋结果頁的 title 與描述是否會随關鍵詞變化?如果會,說明它更像一個可索引的内容頁,需要重新考虑定位。
- 有没有分頁或“加载更多”?分頁地址是否又能被繼續抓取?
- 搜尋框是否出現在每個頁面的头部,導致每個被抓頁面都多出一條通往搜尋的入口?
常见處理方式與取舍
方案一:用 robots.txt 整体拦截
在 robots.txt 中禁止抓取搜尋路径,能最快止住扩散,适合搜尋结果頁量大、且確認不需要被索引的站点。代價是蜘蛛再也看不到這些頁面上的任何指令,所以這個方案只能單獨使用。
方案二:在頁面层面做處理
允许抓取,但在搜尋结果頁輸出 noindex,同时在頁面上减少结果條目里的内鏈數量,或者把结果連結改為跳轉形式。這样做的好處是蜘蛛仍能讀到指令,判断更明确。
注意:robots.txt 禁止抓取與頁面 noindex 不要同时使用。如果蜘蛛被規則挡在门外,它就看不到頁面里的 noindex,頁面依然可能因為其他站点的連結而被索引。
方案三:收敛入口
把搜尋框從每個頁面的公共模板里收回来,只在首頁、栏目頁和专门的搜尋頁出現;頁面底部不主動輸出“热门搜尋”之類會批量生成地址的連結。入口少了,扩散速度自然會降下来。
日誌里怎么確認效果
調整之後,去看一段時間的抓取日誌:統計带搜尋參數的地址占比,看它是否在下降,同时观察内容頁的抓取次數有没有回升。如果搜尋结果頁的訪問量仍然很高,說明還有別的入口在放行,比如站内推荐模块、歷史提交的站点地图,或者外部連結直接指向了搜尋地址。
站内搜尋本身不是坏東西,問题在于它預設對所有人、所有爬虫開放。把它当成一個需要單獨規划的功能模块,明确哪些地址允许被抓、哪些只给訪客用,抓取预算才不會被這類頁面悄悄吃掉。