robots.txt 是站点根目錄下一個纯文本文件,用来告诉爬虫哪些路径可以抓、哪些不要抓。它很小,却经常被忽略,直到某天發現某個栏目一個頁面都没被訪問過,回头一看才發現規則里把它挡住了。它管不了收錄结果,但能决定爬虫有没有机會走到你的頁面跟前。
robots.txt 能做什么,不能做什么
需要先分清邊界。robots.txt 属于建议性协议,遵守它的爬虫會照做,不遵守的依然會訪問;它也不能用来隐藏敏感内容,更不能替代 noindex。要禁止頁面出現在搜尋结果里,正确做法是頁面本身的 meta robots 或响應头,而不是靠 robots.txt 挡掉——被 robots.txt 挡住的頁面,爬虫讀不到 noindex,反而可能因為外部連結而以裸地址形式出現。
常见問题自查清單
- Disallow: / 誤伤全站:多见于測試期寫的規則,上线时忘了删,结果整站被挡在门外。
- 挡掉了 CSS 和 JS:爬虫渲染頁面需要這些资源,屏蔽之後對頁面的理解會打折扣。
- 顺手屏蔽了分頁、标簽頁、篩選頁:如果這些頁面本身有流量價值,一刀切會让大量長尾地址失去被發現的机會。
- 路径寫法不嚴谨:規則区分大小寫,也不支持随意通配,寫得太宽會誤伤旁邊的目錄。
- 只寫了 Disallow,没寫 Sitemap:站点地图声明是给爬虫的入口提示,成本极低,值得补上。
- 測試环境規則被複製到正式环境:或者反過来,正式規則被带進了測試站,两邊互相干扰。
- 多套規則互相冲突:允许與禁止叠加时,容易得出和预期完全不同的结果。
按顺序做一遍检查
- 直接在浏览器打開站点根目錄下的 robots.txt,確認返回正常狀態碼,内容是最新的,而不是缓存里的舊版本。
- 逐條讀 Disallow,問自己這條規則当初想挡什么,現在是否還需要挡。
- 用爬虫模拟工具分別以主流搜尋引擎爬虫的身份請求几個關键頁面,看返回的是允许還是被拦。
- 對照服務器訪問日誌,观察被挡目錄是否真的没有爬虫訪問,同时確認允许目錄的訪問是否正常。
- 確認站点地图地址可訪問,並且里面的 URL 與 robots 規則之間没有矛盾。
修改时留個记錄
規則改動叠加起来很容易失控。建议每次改動寫清日期、改了什么、為什么改,並在改動後的一两周内回看日誌,確認爬虫訪問量没有異常下滑。發現挡错时立刻恢复,不要抱着再看几天的心態。
robots.txt 是一道门,不是一堵墙。它的作用是引導爬虫把時間花在值得的頁面上,而不是把整個站点關起来。
和 URL 發現、抓取效率的關系
站点的抓取预算是有限的,robots.txt 里的規則會直接影响爬虫把時間用在哪里。把無意义的结果頁、内部搜尋頁、重复參數頁挡掉,往往比繼續堆内容更能改善抓取效率。但前提是你清楚哪些頁面确實没有價值,而不是图省事全挡。检查完 robots.txt 之後,建议再看看站点地图和站内連結,三者配合起来,URL 的發現路径才算完整。
最後提醒一句:robots.txt 只是基础配置,改對了不代表頁面一定會被收錄,它只负责让爬虫顺利走到门口。剩下的還取决于内容质量、站点结构和整体信任度,這几件事没有捷径可走。