robots.txt 是放在站点根目錄的一個纯文本文件,大多數时候它安静得像不存在,一旦寫错却可能让整站或某個栏目從爬虫的抓取范围里消失。它不负责收錄,也不负责排名,只做一件事:告诉爬虫哪些路径可以抓、哪些不要抓。把它当成一份需要定期复核的配置文件来管理,比一次性寫完就忘掉要稳妥得多。
先分清它管什么、不管什么
robots.txt 约束的是抓取行為。一個頁面被 Disallow 屏蔽後,如果別處有連結指向它,它仍然可能出現在搜尋结果里,只是没有摘要和正文内容。反過来,想让頁面不進索引,應该用 noindex 或者直接删掉,而不是指望 robots.txt。很多誤操作都来自這個誤解:用屏蔽代替下架,结果是頁面既抓不到也去不掉。
文件本身要逐條核對
- 位置和文件名:必须是根域名下的 /robots.txt。放在子目錄里、带大寫、带後缀(比如 robots.txt.html)都不生效。
- 返回狀態:請求时應当是 200,内容類型接近 text/plain。如果 CDN 或 WAF 把它拦成 403、302,或者返回一頁 HTML 登入頁,爬虫讀到的東西和你以為的完全不同。
- 编碼與換行:用 UTF-8,避免從文档編輯器里带進不可见字符。
- Sitemap 声明:寫完整的绝對地址,包括协议和域名,不要用相對路径。
寫法细节最容易出岔子
Disallow 是按路径前缀匹配的,不是按目錄。寫上 Disallow: /news,/newsletter、/news-2024 這類同样以 /news 開头的地址會一起被挡住。想精确匹配某一個目錄,可以配合通配符和结尾符号:
- * 通配符:代表任意字符,适合處理带參數的地址,例如屏蔽带排序參數的列表頁。
- $ 结尾符:表示到此結束,用来限定只匹配某個精确地址,避免顺带屏蔽後面的路径。
- Allow:在整段 Disallow 里開一個口子,主流爬虫一般按最長匹配優先處理,所以別忘了把需要放行的路径寫得更具体。
- 大小寫:路径部分区分大小寫,寫错大小寫等于没寫。
- 不要屏蔽静態资源:CSS、JS、图片目錄被挡住,可能影响頁面渲染,也让图片搜尋看不到你的图。
動手前後各做一次驗證
- 改之前,把目前文件原样複製一份留底,记錄日期和改動原因。
- 改完之後,用搜尋引擎官方提供的 robots 測試工具,或者直接在服務器上用不同 User-agent 請求一次,確認返回内容确實是新的那份。
- 抽几條被屏蔽的地址和几條被放行的地址,實际請求一遍,看结果是否符合预期,尤其注意前缀誤伤。
- 观察几天訪問日誌里爬虫的請求路径分布,看被挡的目錄是否真的不再被請求,正常目錄的抓取量有没有異常波動。
几種常见的誤伤场景
- 從測試环境複製過来的整站 Disallow: /,上线时忘了删。
- 為了處理篩選參數頁,顺手把正常列表頁也盖住了。
- 用 robots 去解决重复内容,其實更适合交给 canonical 或 noindex 處理。
- 临时屏蔽某個活動頁做压测,活動結束後忘了恢复。
robots.txt 的生效存在延迟,爬虫會缓存一段時間,改完不要期待立刻看到變化。如果是紧急下架或临时限流,用 301 跳轉或者返回 503 往往更直接。
把它纳入固定的检查节奏
建议在站点改版、更換 CDN、調整目錄结构、上线新栏目這几個节点上,都顺手打開 robots.txt 看一眼,並保留修改记錄:谁改的、為什么改、涉及哪些路径、什么时候回滚。文件不大,但它站的位置很關键,值得当成一份正式配置来维護,而不是临时文件的收容所。