很多做蜘蛛池的人把精力全放在入口頁本身,却很少回头看一眼根目錄那個只有几行字的文件。robots.txt 不决定頁面能否被收錄,但它决定了蜘蛛愿不愿意繼續在你的站群里走。配得合理,抓取會集中在你希望被看到的入口頁;配得随意,蜘蛛可能连门都進不来,或者一進来就钻進一堆無意义的路径里。
robots.txt 在站群里承担什么角色
它是一個约定,而不是强制。不同搜尋引擎的蜘蛛遵守程度不一样,但主流搜尋蜘蛛基本都會讀。在站群场景下,它主要做三件事:告诉蜘蛛哪些路径不必抓、通過 Sitemap 指令给蜘蛛指路、在少數蜘蛛那里影响抓取节奏。
麻烦在于,站群通常是同一套程序批量生成的。模板自带的 robots.txt 往往是從別處拷来的,可能整站 Disallow,也可能把带參數的路径全部禁掉。没人检查的话,入口頁會長期處在一種尴尬狀態:域名存在,蜘蛛也知道,但文件里寫着別抓。
几行常见配置的實际影响
全站 Disallow
Disallow: / 是最省事的寫法,也最常见于測試环境的遗留配置。後果有两层:蜘蛛不會抓入口頁;如果頁面同时用了 noindex,那個 noindex 也不會生效,因為蜘蛛根本看不到它。想让一個頁面彻底消失,反而要先允许抓取。
Allow 與 Disallow 的匹配規則
Google 采用最長匹配優先,其他蜘蛛未必一致。常见的坑是寫了 Disallow: /tag/ 又想用 Allow: /tag/abc 放行,在不同蜘蛛那里结果可能完全不同。與其纠结優先級,不如把要拦的路径寫得尽量明确,少用前後都粘连的前缀。
Crawl-delay
只有部分蜘蛛認這個指令,Bing 認,Google 早就不認了。指望靠它给蜘蛛限速並不可靠,真正管用的還是服務器层的限流以及入口頁本身的响應能力。
Sitemap 指令
這是 robots.txt 里少數能带来正向作用的行。寫上 Sitemap: https://域名/sitemap.xml,前提是那個地址真的能打開、内容真實存在。指向一個返回 404 的 sitemap,等于给蜘蛛發了一張废票。
meta robots 與 X-Robots-Tag
robots.txt 管的是能不能抓,meta robots 管的是抓到之後要不要索引,两者不能互相替代。需要頁面不被索引但仍希望被抓到时,用 noindex;需要整個目錄都不被抓取时,用 robots.txt。混着用很容易出現既不收錄、也不消失的尴尬局面。
X-Robots-Tag 放在 HTTP 响應头里,适合 PDF、图片這類没有 head 区域的资源。它和 meta 一样,都需要蜘蛛真正抓到這次請求才能生效。
入口頁常见的几個誤区
- 以為 robots.txt 全放行就萬事大吉。放行只是不拦,並不代表蜘蛛會来,也不代表頁面值得被索引。
- 用 robots.txt 代替去索引。被 Disallow 的頁面蜘蛛看不到 noindex,反而可能以只有标题和 URL 的形式出現在结果里。
- 從別的站直接拷贝 robots.txt。路径结构不一样,禁用規則很可能誤伤自己的入口頁。
- 拦掉 CSS 和 JS。現在的蜘蛛普遍會渲染頁面,拦掉這两類资源會让它看到的版面和用戶看到的完全不同。
- 泛解析域名下没有單獨處理 robots.txt。所有子域返回同一份内容或同一個頁面,容易让蜘蛛反复抓取同一段文本。
落地时可以做的几件事
- 挨個訪問每個入口站的 /robots.txt,確認狀態碼和返回内容,而不是只看本地的静態文件。
- 預設放行入口頁,只拦确實無意义的路径,比如後台、站内搜尋结果頁、參數無限的篩選组合。
- 要控制索引就用 noindex,不要用 Disallow 来替代,两者的生效條件完全不同。
- Sitemap 指令指向真實可訪問、並且會定期更新的 sitemap 地址。
- 換模板、換程序、批量改配置之後,把 robots 检查放進回归清單里,別让它成為改動後的盲区。
robots.txt 更像一個開關,而不是優化手段。它的價值在于別造成誤伤,而不是靠它把蜘蛛請進来。