很多内容站都提供站内搜尋:搜尋框、热门關鍵詞、空结果頁上的推荐词,本来只是為了方便用戶繼續浏览。但它們生成的结果頁同样是真實的 HTML 頁面,返回 200,有标题、有列表、有内鏈。對搜尋引擎来说,這類頁面和普通列表頁没有明顯区別,被爬到、被收錄也就不奇怪。
它為什么容易被当成正常頁面
- URL 结构規整,常见形如 /search?q=關鍵詞,不带明顯的拼接痕迹;
- 頁面上有大量指向詳情頁的連結,蜘蛛顺着走能拿到更多内容;
- 頁面之間還會互相連結,比如相關搜尋、翻頁、二次篩選;
- 有的站点把搜尋頁做進了導航或頁脚,等于给了它一個全站入口。
结果是:同一個關鍵詞可能對應一條索引记錄,而不同關鍵詞的组合又是成千上萬條。這些頁面對用戶價值有限,對索引却是實打實的占用。
先確認它是不是真的進了索引
不要看到日誌里有 /search 的抓取记錄,就断定被收錄了。抓取和收錄是两件事:蜘蛛来過,不代表頁面進入了索引。比較可靠的判断顺序是:
- 用 URL 检查類工具查一两個典型的结果頁 URL,看狀態是“已编入索引”還是“已抓取,尚未编入索引”;
- 用 site: 查询做粗略抽样,注意它只反映大概范围,不能当精确數量;
- 看日誌里這類 URL 的抓取频次和爬取深度,如果频率明顯高于普通列表頁,說明它被当成了重要入口;
- 統計這類 URL 在索引中的大致占比,判断是零星几條還是成規模。
把這三個层面的信息放在一起看,才能判断問题的嚴重程度,也决定了後面要不要動 robots.txt。
收口顺序:索引開關優先于抓取開關
最常见的错誤做法,是發現被收錄後直接在 robots.txt 里 Disallow 掉 /search 目錄。這样做的後果是:蜘蛛再也看不到頁面内容,也就看不到頁面上的 noindex,已经進索引的舊 URL 可能長期留在那里,甚至以“無摘要”的形式出現。
更稳妥的顺序是先控索引、再考虑是否控抓取:
- 確認這類頁面确實不该進索引。纯站内搜尋结果、排序參數、空结果頁通常属于功能頁,不需要被检索到;
- 先允许抓取,不要在 robots.txt 里拦,保證蜘蛛能讀到頁面上的指令;
- 在頁面上輸出 noindex,可以用頁面級的 meta robots,也可以用服務端返回的 X-Robots-Tag,後者更适合统一處理;
- 减少站内入口,把搜尋框改成表單提交或前端渲染,让结果頁不再成為可爬連結的来源;
- 不放進 sitemap,也不要让结果頁之間互相連結,切断參數空間的自我繁殖;
- 已收錄的頁面,等 noindex 生效、索引里逐步消失後,再评估是否需要在 robots.txt 里 Disallow。如果頁面本来就没有抓取價值,拦掉可以省带宽,但顺序不能反。
Disallow 管的是“能不能抓”,noindex 管的是“能不能進索引”。想让頁面從索引里出去,要用後者;前者用早了,反而让後者失效。
已经收錄的頁面怎么處理更快
如果確認數量不多,可以在工具里對代表性 URL 提交移除請求,同时保證頁面已经輸出 noindex。移除請求是临时的,真正的長期方案還是頁面自身的指令。數量較多时,優先處理被抓取最频繁、連結入口最多的那几類,比如带热门词的结果頁,它們往往带動了其他參數的抓取。
另外要注意搜尋结果頁和分類篩選頁的区別。分類篩選頁里有些參數组合确實有獨立價值,比如按價格、按地区篩選;而站内搜尋的结果頁通常没有這種價值,两者的收口策略不该一刀切。
日常守住几條线
- 新做搜尋功能时,就在模板层把 noindex 寫好,不要等被收錄了再补;
- 搜尋结果頁不要出現在導航、頁脚、面包屑里;
- 定期抽查日誌中參數類 URL 的抓取占比,占比升高通常意味着有新入口被放開;
- 改版或上新模板时,把這一類頁面的索引狀態纳入检查清單。
站内搜尋结果頁本质上是功能頁,不是内容頁。把它当成功能頁来管理,用索引開關而不是抓取開關收口,通常比事後大規模清理更省事。