robots.txt 通常只有几行,却是爬虫訪問站点时最先讀取的文件之一。它不控制頁面能否被索引,只控制爬虫能不能抓取某個路径。一旦寫错,轻則部分目錄長期不被發現,重則整站抓取量骤降,而頁面本身看起来完全正常,排查时很容易被忽略。
這個文件為什么容易出問题
它改動成本极低,谁都能改,也常常没人记得改過。上线新功能时顺手加一條 Disallow,測試完忘了删;把预發环境的規則複製到正式站;交接时只改了域名没改路径。這些操作都不會报错,頁面照样正常訪問,問题只体現在抓取和 URL 發現上,可能要過几周才從資料里看出来。
自查时重点確認的几件事
1. 是否誤封整站或關键目錄
- 顶部的 Disallow: / 是否存在,是否有意為之。
- 栏目、商品、文章詳情等需要被抓取的目錄,有没有被一條宽泛規則覆盖。
- Disallow 的路径是前缀匹配,寫 /news 會连带屏蔽 /news-2024 這類同前缀地址。
2. 通配符與结尾符号
* 匹配任意字符串,$ 表示路径結束,两者用不好會扩大屏蔽范围。例如 Disallow: /*? 會屏蔽所有带參數的地址,而篩選頁、分頁往往依赖參數,容易把正常内容一起挡掉。建议逐條用真實 URL 推演一遍匹配结果。
3. Sitemap 是否声明正确
在文件末尾寫 Sitemap 只是辅助發現,但漏寫或寫成相對路径,會让蜘蛛少一條發現线索。確認协议、域名、路径完整,並且该地址能正常返回 200。
4. 文件本身能否正常讀取
- 返回 200,Content-Type 為 text/plain,不要返回 HTML 頁面或 302 到登入頁。
- 如果返回 404,多數爬虫會视為允许抓取;返回 403 則可能被理解為完全禁止,两者含义並不相同。
- 路径必须是根目錄下的 /robots.txt,大小寫敏感,子目錄里的同名文件通常不被讀取。
5. 別把它当權限工具
robots.txt 是约定,不是訪問控制。敏感目錄、後台地址應通過登入鉴權、IP 限制等方式保護。另外,用 Disallow 想阻止頁面被索引並不可靠:如果其他站点連結了该地址,它仍可能出現在结果里,只是摘要缺少内容。抓取與索引是两件事,需要分開處理。
怎么驗證改動是否生效
- 用浏览器直接訪問 /robots.txt,確認内容和狀態碼。
- 選几條有代表性的 URL,對照規則手工推演是否被抓取。
- 改動後观察服務器日誌里该目錄的抓取记錄變化,注意给爬虫留出反應時間。
- 把本次改動、時間和原因记在运维记錄里,避免下次又靠猜。
規則寫得越细,出错面越大。能用站点结构解决的問题,不要靠一長串 Disallow 补丁来兜。
一份简單的检查清單
- 没有遗留的整站屏蔽指令;
- 關键目錄與詳情頁處于可抓取狀態;
- 通配符和 $ 的用法经過真實 URL 驗證;
- Sitemap 地址完整且可訪問;
- 文件狀態碼與類型正确,位于根目錄;
- 改動有记錄,驗證有依據。
把這几步做完通常只要十几分钟,却能避免很多“内容明明在,蜘蛛却像没来過”的困惑。定期复查一次,比出問题後再翻日誌省事得多。