很多站点的 robots.txt 是在上线那天随手寫下的,之後再也没打開過。等到某天發現新栏目迟迟没有動静,回头一看,往往就是這几十行文本里的一條規則出了問题。它不是「寫完就安全」的配置文件,更像是给蜘蛛划的一條通道:寫宽了没意义,寫窄了會直接挡路。
先看它到底返回了什么
排查的第一步不是讀内容,而是看响應。直接在浏览器訪問 /robots.txt,確認三件事:狀態碼是 200,而不是 404 或 302;返回的是纯文本,而不是套了模板的站点頁面(有些程序會把 404 頁面带着導航和頁脚一起返回,蜘蛛讀到的是一屏标簽);文件没有被服務器規則跳轉到別的域名或路径。
如果站点同时存在 www 與非 www、http 與 https 多個入口,每個入口下的 robots.txt 都要能正常打開。抓取工具會按主机名和协议分別取文件,只在一處放好了,另一處可能長期是空白或错誤頁。
几類常见的寫错
- User-agent 寫得不規范。漏掉短横线、大小寫混乱,或者把多個蜘蛛名硬塞進同一條,規則容易被整块忽略或落到別的蜘蛛身上。
- 把 Disallow 的空值理解反了。Disallow 後面留空表示放行全部,Disallow: / 才是全站禁止,两者只差一個斜杠,结果完全相反。
- 規則之間互相打架。多數主流蜘蛛按最長匹配来判断,但不同實現的细节仍有差异。與其依赖優先級,不如把條目寫清楚,別留下彼此矛盾的規則。
- 顺手屏蔽了静態资源目錄。把 CSS、JS、图片所在目錄整段 Disallow,會让蜘蛛無法渲染頁面,最後抓到的就是一個空壳。
- Sitemap 寫成相對路径。Sitemap 指令通常需要完整的绝對地址,相對路径很多解析器並不認,寫了等于没寫。
別把 robots 当成隐藏内容的工具
Disallow 的语义是「不建议抓取」,並不等于「不會被索引」。頁面依然可能被外鏈指向,被別的渠道收錄。真正想让頁面不出現在结果里,應该用 noindex,而 noindex 又需要蜘蛛能抓到頁面才讀得到。于是就形成一個固定搭配:對不想收錄的頁面,先在 robots.txt 里放行抓取,再在頁面里加 noindex。
最容易做反的一点是:越是想藏起来的頁面,越要让它被抓到,只是別让它進索引。robots 里禁抓、頁面里寫 noindex,两邊都會失效。
改完之後怎么驗證
- 重新訪問 /robots.txt,確認返回内容與预期一致,没有残留的測試規則。
- 挑一個被放行的目錄,用抓取工具或日誌確認蜘蛛确實訪問到了其中的頁面。
- 挑一個被禁止的目錄,確認對應地址不會再出現在訪問日誌里。
- 检查 Sitemap 指令里的地址能正常打開,且文件本身没有语法错誤。
- 把改動時間、原因和负责人记錄下来,方便日後回溯。
把它纳入例行自查
robots.txt 的影响面很大,建议只在确有需要时調整,改動要克制。可以每季度看一眼,或者在上线新栏目、切換域名、做大改版之後單獨检查一次。配合服務端訪問日誌一起看,观察蜘蛛是否還在正常訪問關键目錄,比單看文件本身更能說明問题。
说到底,這個文件的作用是告诉蜘蛛哪些地方不必去,而不是替你做收錄决定。把它当成一份需要偶尔复核的說明,而不是配置一次就永遠忘掉的開關,站点在抓取和 URL 發現上會少很多莫名其妙的問题。