很多站点在導航栏或侧邊栏放一個搜尋框,用戶輸入關鍵詞就能跳到结果列表頁。這個功能對訪客很友好,但對搜尋引擎来说,搜尋结果頁往往是一類需要單獨對待的頁面:它由參數生成、數量近乎無限、内容随时變化,又常常和正文頁高度重复。
站内搜尋结果頁為什么容易出問题
常见的搜尋地址形如 /search?q=關鍵詞&page=2&sort=new。只要有人搜尋、有篩選條件组合,就會出現新的地址。蜘蛛沿着這些連結爬下去,很容易陷入几種局面:
- URL 數量失控:參數组合是乘法關系,几十個篩選值就能组合出成千上萬個地址。
- 空结果與低质頁面:搜不到内容的頁面同样會返回 200 狀態碼,形成大量没有實质内容的頁面。
- 抓取配額被占用:蜘蛛的抓取量有限,花在结果頁上,分给正文頁的份額就少了。
- 地址分散:同一篇文章可能通過多個搜尋词的结果頁被連結到,權重线索被打散。
自查清單:先確認這几處
- 搜尋结果頁是否被站内連結大量引用,比如侧邊栏的“热门搜尋”直接给出可点击連結。
- 搜尋结果頁的 meta robots 是什么,是否輸出了 noindex。
- robots.txt 里有没有對搜尋路径做限制,限制是否寫得太宽導致誤伤。
- XML 站点地图里是否混入了搜尋结果地址。
- 服務器日誌中,搜尋路径的抓取占比是多少。
處理方式:屏蔽、标记還是放行
没有统一答案,要看站点自身情况。内容量大的站点通常倾向把结果頁挡在索引之外;内容极少的小站,甚至可以不做參數化搜尋。常见的几種做法:
用 robots.txt 限制路径
如果搜尋路径固定,比如 /search/ 或 /so/,可以在 robots.txt 中寫 Disallow。需要注意两点:一是別把包含正文的路径一起誤伤,比如把 /search 誤寫成 /s,那所有以 s 開头的目錄都會被挡住;二是 robots.txt 是建议而非强制手段,遇到不遵守协议的抓取者未必有效。
用 noindex 标记頁面
noindex 需要頁面能被抓取才能生效。也就是说,不能同时用 robots.txt 屏蔽又加 noindex——被屏蔽的頁面蜘蛛看不到 noindex,标簽形同虚设。如果希望结果是“可抓取但不收錄”,就只加 noindex,不加 Disallow。
减少搜尋連結的暴露
把搜尋入口做成表單提交而不是可点击連結,或對结果頁連結加 rel="nofollow"(注意 nofollow 現在更多是提示,不是指令),都能降低被大量發現的机會。同时把“热门搜尋”這類模块的連結指向固定专题頁,而不是带參數的搜尋地址。
观察效果,而不是加完标簽就不管
處理之後隔一段時間回来看:搜尋路径在日誌里的抓取比例是否下降,正文頁的抓取是否增加,索引里是否還有残留的结果頁。如果站点有篩選功能,也要一並检查,篩選參數和搜尋參數往往属于同一類問题。
站内搜尋是给用戶用的功能,不一定要成為搜尋引擎的入口。把两者的邊界划清,比一刀切地全部禁止更稳妥。
最後提醒一点:調整前先记錄目前狀態,改完再對比,否則很难判断變化是来自你的處理,還是来自内容更新或流量波動。