站点运营

站点运营:robots.txt 的寫法與自查,別把不该挡的路径挡住

robots.txt 只影响抓取,不决定收錄。本文梳理它的位置、语法、通配符與 Allow/Disallow 的優先級,列出屏蔽 CSS/JS、誤挡整站等常见坑,並给出一份上线前後的自查清單,帮你把抓取入口控制在预期范围内。

站点运营

站点运营:robots.txt 的寫法與自查,別把不该挡的路径挡住

robots.txt 是放在站点根目錄下的一個纯文本文件,作用是告诉爬虫哪些路径可以抓、哪些先別抓。它不负责收錄與排名,只影响抓取行為。很多站点的問题不是出在内容上,而是這個文件寫歪了:要么挡掉了 CSS、JS 這類渲染必需的资源,要么一條通配符把整站大半埋進去,蜘蛛来了只能空手而归。

一、文件位置與基本语法

robots.txt 只能放在域名根目錄,且必须是纯文本,路径固定為 https://example.com/robots.txt。放在子目錄里不會被讀取,寫進 HTML 更無效。文件里常用的字段有四種:

  • User-agent:指定這條規則對哪個爬虫生效,* 表示所有未被單獨列出的爬虫。
  • Disallow:禁止抓取的路径前缀。
  • Allow:在 Disallow 的范围内開一個口子,用于放行某個子路径。
  • Sitemap:声明站点地图地址,可以寫多條。
規則是按 User-agent 分组讀取的,每组内部才互相组合。把 User-agent 和規則穿插着乱寫,很容易让爬虫只讀到一半。

二、通配符與優先級

* 匹配任意字符序列,$ 表示路径结尾。比如 Disallow: /*.pdf$ 只挡以 .pdf 结尾的地址,而 Disallow: /*.pdf 會连 /a.pdf.html 一起挡掉。路径是区分大小寫的,/Admin/ 和 /admin/ 不是一回事。

当 Allow 與 Disallow 同时命中一個地址时,通行的判断方式是:規則越具体越優先,也就是匹配路径越長的那條生效;長度相同时 Allow 優先。不同搜尋引擎的實現细节略有差异,寫規則时尽量別依赖邊界情况。

三、几個反复出現的坑

1. 把 CSS、JS、图片整目錄屏蔽

蜘蛛需要抓取這些资源才能理解頁面渲染後的形態。屏蔽之後,它看到的可能是残缺頁面,甚至把一張内容正常的頁面判成空壳。除非你确定该頁面是纯静態 HTML,否則別動静態资源目錄。

2. 想用 robots.txt 阻止收錄

robots.txt 挡住抓取後,爬虫根本看不到頁面上的 noindex。想彻底從索引里去掉,正确做法是允许抓取,再用 noindex 标簽或 X-Robots-Tag 响應头。两者分工不同,別混着用。

3. 用 Disallow: / 測試完忘记改回来

從測試环境整站複製到生产是常见来源。上线检查时,第一件事就是打開生产域名的 robots.txt 看一眼。

4. 依赖 Crawl-delay

主流搜尋引擎早已不支持這條指令,寫了也不生效。想控制抓取频率,更靠谱的是看服務器日誌、评估机器承载能力,再用站長工具里提供的抓取速率設定来調节。

四、上线前後的自查清單

  1. 訪問域名根目錄的 robots.txt,確認狀態碼為 200,内容是纯文本而非 HTML 报错頁。
  2. 逐條核對 Disallow 路径,寫的是目錄就补上结尾斜杠,避免誤伤同名前缀的其他目錄。
  3. 確認没有挡住 CSS、JS、字体、图片所在目錄。
  4. 检查 Sitemap 地址是否可訪問,是否與真實的站点地图一致。
  5. 用搜尋引擎官方提供的 robots 測試工具跑一遍關键 URL,看放行與拦截是否符合预期。
  6. 改動後過几天從日誌里抽查蜘蛛對關键目錄的抓取量,看是否出現異常下滑。

五、分环境與分爬虫的處理

測試站和预發站建议整体屏蔽,但別把 robots.txt 当唯一防线,配上 HTTP 認證或 IP 限制更稳妥。生产环境如果只是不想让某個不重要的爬虫来,單獨寫一條 User-agent 規則即可,別用 * 一刀切,把正規搜尋蜘蛛一起挡在门外。

另外要记住,robots.txt 是公開可讀的文件。不要在里面寫内部路径线索、後台目錄名或临时文件地址,那等于给掃描器指路。

改動 robots.txt 成本很低,影响面却很大。改前先备份一份,改完用日誌驗證,比出問题之後再回头排查要省事得多。