robots.txt 是站点跟爬虫沟通的第一道门。文件很小,几行文本就能影响整站的抓取行為,也正因為改動成本低,很容易在一次調试或改版後留下没清理的規則,几個月都没人察觉。等到發現抓取異常再回头查,排查范围往往已经很大了。
先分清邊界:robots.txt 管抓取,不管索引
這是最容易被誤解的一点。Disallow 只是請求爬虫不要抓取某個路径,它並不能保證頁面從搜尋结果里消失。如果一個頁面已经被收錄,之後再把它 Disallow 掉,爬虫無法重新訪問,也就看不到頁面上的 noindex 标记,頁面可能長期留在索引里,标题和摘要還是舊的。
所以處理不希望被索引的頁面,顺序應该是:先让頁面可以被抓取,在頁面里加 noindex(或响應头 X-Robots-Tag),確認索引里消失之後,再考虑是否需要屏蔽抓取。反過来做,通常會把問题拖得更久。
几個高频出错点
測試环境的規則跟着上线了
開發或预發布环境常會寫 Disallow: /,避免測試内容被抓。如果發布流程里直接把這些文件同步到正式站,搜尋引擎看到的第一個信号就是整站別抓。這類問题通常不會报警,只能靠人工核對,所以建议在發布清單里加一行:上线後打開域名下的 robots.txt,逐行讀一遍。
把 CSS、JS、图片一起屏蔽
有些站点為了减少抓取压力,會屏蔽静態资源目錄。结果是爬虫拿不到样式和脚本,無法按真實方式渲染頁面,對移動适配、内容可讀性的判断都會受影响。静態资源目錄一般不需要屏蔽,真要限制,也應该先確認它對頁面渲染没有關键作用。
屏蔽參數頁,却忘了已有收錄
站内搜尋、篩選、排序這類參數组合容易产生大量近似 URL,屏蔽它們是常见做法。但要注意两点:一是已经收錄的地址不會因為加了 Disallow 就立刻消失;二是有些參數頁承载了真實内容,比如带分頁的列表。建议先梳理哪些參數必须保留、哪些纯属冗余,再决定屏蔽范围,而不是一條通配符全部盖掉。
语法與匹配規則没寫對
- 路径区分大小寫,/News 和 /news 不是一回事;
- Allow 和 Disallow 同时命中时,一般按最長匹配優先,規則细节各家實現略有差异;
- 通配符 * 和结尾符 $ 的支持程度不完全一致,重要規則不要只依赖它們;
- Sitemap 一行要寫完整的绝對地址,寫相對路径没有意义;
- 文件不要带 BOM、不要用重定向跳轉,直接返回 200 文本最稳。
文件本身的狀態被忽略
robots.txt 返回 404 时,爬虫通常按全部允许處理;如果返回 5xx,部分爬虫會暂时降低抓取甚至暫停,直到文件恢复正常。服務器迁移、權限配置變動之後,顺手確認一下這個文件的响應碼,成本很低。
一份可以照着做的自查清單
- 打開正式站点的 robots.txt,確認没有 Disallow: / 這類整站規則;
- 確認没有出現測試域名、内網地址、临时目錄;
- 检查被屏蔽的路径里,有没有正在争取曝光的重要栏目或文章目錄;
- 核對 Sitemap 地址是否正确,且指向的是正常頁面;
- 把規則和站点地图、目錄结构對照一遍,看是否存在互相矛盾的設定;
- 在搜尋平台的抓取測試工具里跑几條真實 URL,看是被允许還是被拦截;
- 改動前留一份舊版本备份,改動後记錄時間和原因。
改完別急着下结论
規則調整之後,抓取量、抓取频次和索引狀態都不會立刻變化,观察周期通常以周計。這段時間里可以關注服務器日誌中爬虫的訪問路径分布,看原本被挡住的目錄是否重新出現請求,而不是只看某一天的訪問總數。
把 robots.txt 当成一份需要维護的配置,而不是一次寫完就忘的文件。每次改版、換域名、調整目錄结构之後,都值得回头讀一遍。
這類文件的問题往往不复杂,难在發現。纳入固定的检查节奏,比事後大面积排查要省力得多。