robots.txt 是放在域名根目錄下的一個纯文本文件,用来告诉各類爬虫哪些地址可以抓、哪些不必抓。它不担保任何结果,也挡不住頁面被直接訪問,只是把一份建议清單摆在门口。正因為規則简單,很多站点的 robots.txt 都是某次改版或临时處理問题时随手加上几行,之後再没看過。定期把它拿出来逐條核對,是站点运营里成本很低的一件事。
先確認文件位置和可訪問性
- 文件只能放在域名根目錄下,即 https://你的域名/robots.txt。放在子目錄里的同名文件基本不會被识別。
- 直接訪問這個地址,確認返回 200,内容類型是纯文本,而不是被 CDN、WAF 或登入頁拦截後的驗證頁面。很多規則失效,問题就出在這一步。
- 返回 404 时,爬虫會按“没有規則”處理,等于全站放開;返回 5xx 时表現也不一致,通常同样偏宽松。如果原本想挡的目錄其實一直被訪問,先看看文件是不是根本没生效。
- www 與非 www、http 與 https 属于不同主机名,各自的 robots.txt 是獨立的一份,別只改了其中一個。
逐條讀一遍規則
讀規則时重点看四類寫法:
- User-agent:一组規則可以對應多個 UA,星号是通配。拼寫错誤會让整组規則變成没人匹配的摆设。
- Disallow:填的是路径前缀,不是通配符表達式。單獨寫一個 Disallow:(冒号後留空)表示全部允许,這是常见寫法,而不是禁止全部。
- Allow:用于在被禁止的范围内開一個口子,比如整体挡住 /search/,但放行其中的帮助頁。
- Sitemap:可以在這里寫站点地图地址,方便爬虫顺带發現。也有站点選擇只在搜尋引擎後台提交,两種做法都行,但要保持一致。
容易被忽略的几種情况
- 不要用 robots.txt 来隐藏後台、測試目錄或内部资料。這個文件本身是公開的,寫進去等于把地址列了一份清單。這類内容應该靠登入和權限保護。
- 整体屏蔽 CSS、JS、图片目錄,會让爬虫拿不到渲染頁面所需的资源,反而影响對頁面内容的判断。
- 通配符要慎用。Disallow: /*? 會挡掉所有带參數的地址,其中包括正常的篩選頁、分頁地址和統計參數頁,誤伤面往往比预想的大。
- 改版後路径發生了變化,舊規則却還留着,可能正好挡住新上线的栏目。
- 測試环境與生产环境如果共用同一份文件模板,注意別把生产規則带過去,也別把測試站的宽松規則带上线。
與站点地图、canonical 的配合
三者的口径最好一致。robots.txt 里明确禁止抓取的地址,通常也没必要再放進站点地图;反過来,如果某個地址通過 canonical 指向了另一個頁面,又确實不需要被抓,可以在 robots 里挡掉,但要清楚挡掉之後爬虫就讀不到那個 canonical 声明了。
另外,noindex 與 Disallow 混用會互相抵消:被 Disallow 的頁面,爬虫根本讀不到頁面里的 noindex 标簽。想让某個地址從结果里登出,優先用 noindex 並允许抓取,而不是直接禁止訪問。
改完之後怎么驗證
- 重新訪問文件地址,確認内容已经更新,注意 CDN 缓存可能還在返回舊版本。
- 用搜尋引擎提供的抓取測試工具,抽几個關键地址看看是否被允许。
- 在服務器訪問日誌里观察一到两周,確認原本频繁請求的目錄是否安静下来,同时留意有没有重要栏目被一起挡掉。
- 把 robots.txt 纳入改版清單,與重定向、站点地图、主机名規范一起复核,而不是單獨處理。
規則生效需要時間,各家爬虫對语法的支持程度也不完全一样,不要把它当成精确的流量開關来用。
robots.txt 的内容通常不長,但影响面不小。建议每個季度花十分钟通讀一遍,確認每一條都還符合目前的站点结构,把不再需要的規則删掉。比起不断往上叠加例外,保持一份简短、能讀懂的清單更容易長期维護。