站点运营

站点运营:robots.txt 自查,別让規則把该抓的頁面挡在外面

robots.txt 只有几行,出問题却往往很隐蔽。這篇自查從文件能否正常訪問、規則是否誤伤正常路径、CSS 與 JS 有没有被一起挡住、和 sitemap 的配合、測試环境與线上环境的差异几個角度展開,最後给出一份可以照着走一遍的检查清單。

站点运营

站点运营:robots.txt 自查,別让規則把该抓的頁面挡在外面

robots.txt 是站点和搜尋引擎爬虫之間最基础的一份约定文件。它放在根目錄,被讀取的频率很高,但真正被認真检查過的却不多。很多站点在上线时寫了一份規則,之後几年都没再動過,栏目改了、路径換了、測試目錄上线了,規則還是老样子。

這份自查不涉及复杂策略,只是把几個容易出問题的地方過一遍。

一、先確認文件本身能被讀到

用浏览器直接訪問 https://你的域名/robots.txt,看返回的是不是 200,内容是不是纯文本。常见的異常有几種:

  • 返回 404,說明文件没放對位置,或者被框架的路由規則拦截了;
  • 返回的是站点 404 頁面的 HTML,爬虫讀到的是一堆标簽;
  • 被 CDN 或 WAF 拦截,自测能訪問,爬虫的請求却被挡下;
  • 返回 301 跳到別的路径,不算致命,但没必要多绕這一圈。

如果确實不需要這份文件且打算放行全部抓取,返回 404 和放一個空的 200 文件效果接近,但顯式放一個空文件更利于日後排查。

二、規則有没有誤伤正常頁面

Disallow 是禁止抓取,寫错一個字符,可能整块栏目就消失了。重点看這几處:

1. 目錄名寫得過宽

比如寫了 Disallow: /search,本意只想挡住站内搜尋结果頁,结果连 /search-tips/ 這類正常文章目錄也一起被挡了。改成更精确的路径,會稳一些。

2. 通配符和结尾符号

* 匹配任意字符,$ 表示路径結束。Disallow: /*.pdf$Disallow: /*.pdf 的行為並不一样,前者只挡以 .pdf 结尾的地址。寫之前最好把目标地址在脑子里過一遍。

3. 大小寫與參數

路径匹配對大小寫敏感。如果站点同时存在 /Help/help,只寫一條可能漏掉另一個。带參數的動態地址也要留意,篩選、排序、分頁參數往往需要單獨處理。

三、別把 CSS、JS 和图片一起挡住

早年的做法是屏蔽静態资源目錄,以减少抓取量。現在搜尋引擎需要渲染頁面,屏蔽 CSS 和 JS 會導致它看到的頁面和用戶看到的不一样,判断容易出偏差。除非有明确理由,建议放開這些目錄,尤其是主样式和主脚本。

四、和 sitemap 要互相配合

可以在文件末尾用 Sitemap: 指向站点地图的完整地址,一行一個。注意两点:地址必须是绝對地址;別指向一個已经在 robots 里被 Disallow 的路径,那等于自己跟自己打架。

五、区分測試环境和线上环境

測試站、预發布站常常直接複製线上配置,或者反過来,把測試用的 Disallow: / 一起带上线。上线前花十秒看一眼這份文件,比事後排查收錄異常省事得多。缓存也要清,有些站点的 robots.txt 被 CDN 缓存了很長的過期時間,改了等于没改。

robots.txt 只是抓取层面的约定,不是收錄開關。它阻止抓取,不等于阻止收錄;放開抓取,也不代表頁面就會被收錄。两件事不要混為一谈。

六、一次可执行的检查清單

  1. 直接訪問 /robots.txt,確認狀態碼和内容類型;
  2. 把目前規則逐條對照线上真實路径,確認没有誤伤;
  3. 抽查几個被挡的地址,在抓取工具里驗證结果;
  4. 確認 CSS、JS、图片目錄没有被整体屏蔽;
  5. 確認 Sitemap 地址有效,且未被自身規則屏蔽;
  6. 上线前對比測試环境與线上文件的差异;
  7. 改動後清一次 CDN 缓存,並记錄改動時間和原因。

這份文件很短,改一次可能只要几分钟,但它影响的是爬虫對整個站点的第一印象。把它放進常規自查清單,比出問题後再回头找原因要轻松。