站点运营

站点运营:robots.txt 自查,別让一行規則挡住整站或放行垃圾頁

robots.txt 改動成本极低,影响却很直接。本文從文件可訪問性、三類常见事故、通配符與 Allow/Disallow 優先級,到改完後的驗證與回滚步骤,整理一份上线前後都能用的自查清單,帮站点別挡住正常抓取,也別把不该放行的地址放出去。

站点运营

站点运营:robots.txt 自查,別让一行規則挡住整站或放行垃圾頁

robots.txt 是站点给爬虫的第一份說明,也是最少被翻看的文件之一。很多站点從上线那天起就没再動過它,直到某天發現栏目頁一直不被抓取,或者後台目錄反复出現在日誌里。它的改動成本极低,一行字符就能改變整站的抓取范围,所以值得定期拿出来對一遍。

先確認它真的能被讀到

規則寫得再對,讀不到也没用。检查這几項:

  • 位置在域名根目錄,路径是 /robots.txt,不能放在子目錄里代替。
  • 直接訪問返回 200。如果被 301 或 302 跳到別處,部分爬虫不會繼續跟随,等于没有這份文件。
  • 返回内容必须是纯文本。配置失誤时常见的情况是返回了一整頁 HTML 报错頁,爬虫讀到的是标簽而不是規則。
  • 没有被 CDN 或反向代理長期缓存。改完規則後如果缓存没刷新,蜘蛛拿到的還是舊版本。
  • 文件開头没有多余的 BOM 字符或空行導致的解析異常。

三類最容易出事的寫法

測試站規則被带到了正式站

開發阶段為了防止測試环境被抓,通常會寫 Disallow: /。上线时忘了删掉這一行,整站就等于關上了门。這類問题往往几天甚至几周後才被察觉,因為訪客訪問一切正常,只有日誌里安静得反常。

顺手挡掉了 CSS、JS 和图片

有人為了节省抓取量,把 /css/、/js/、/images/ 一並挡掉。结果搜尋引擎無法正常渲染頁面,判断内容质量时看到的是一個没有样式的骨架;图片资源也可能因此進不了图片搜尋。除非你有明确的理由,否則這些目錄建议保持放行。

把 Disallow 当成 noindex 用

這是最常见的誤解。被 robots.txt 挡住的頁面,抓取被禁止,但它仍然可能出現在搜尋结果里——因為外部連結可以暴露這個地址,爬虫虽然不能讀内容,却知道它存在。反過来,如果你想让頁面彻底登出索引,應该使用 noindex,而 noindex 的頁面不能同时被 robots.txt 挡住,否則爬虫看不到那個标簽,指令就落空了。两者要配合,不要互相遮挡。

規則细节里的坑

  • User-agent 分组要分開寫。想對多個爬虫生效,就寫多段配置,不要在一行里塞多個名稱。
  • Allow 和 Disallow 冲突时按最長匹配判断。路径更具体的那條生效;長度相同时 Allow 優先。用這個特性可以做“挡整個目錄、放行其中一個子路径”的操作。
  • 通配符不要滥用。* 代表任意字符,$ 表示结尾锚定。寫 /*.pdf$ 和寫 /*.pdf 的含义並不一样,前者只匹配以 .pdf 结尾的地址。
  • 一行只寫一條規則。同一行里用空格隔開多條路径,通常只有第一條被识別。
  • 注释用 #。用 // 開头的寫法不被支持。
  • Crawl-delay 基本已经無效。主流搜尋引擎不再支持這個指令,想控制抓取节奏應改從服務器响應速度和站点结构入手。
  • 路径区分大小寫。寫 /Admin/ 不一定挡得住 /admin/。

不建议寫進去的内容

robots.txt 是公開文件,任何人都能訪問。把後台入口、临时上传目錄、备份文件命名規則寫進去,相当于给掃描工具递了一份地图。

robots.txt 是“請求不要抓取”,不是訪問控制。真正需要保護的目錄,應该用登入驗證、IP 限制或者干脆不放在公網可訪問的位置。

站点地图的地址可以寫在這里,方便爬虫發現,這是它少數值得保留的附加用途。

改完之後的驗證步骤

  1. 用命令行或浏览器直接取回文件,確認返回内容和本地一致,狀態碼是 200。
  2. 抽查几條關键路径:首頁、主要栏目、一篇詳情頁、CSS 目錄、图片目錄,逐條確認放行或拦截符合预期。
  3. 如果站点有搜尋引擎提供的抓取測試工具,可以用它模拟一次讀取,看規則是否按设想解析。
  4. 改動後观察几天訪問日誌,重点看原本被挡的目錄是否重新出現抓取记錄,或者不该被抓的地址是否终于安静下来。
  5. 保留一份改動前的版本,並记下修改時間。規則出問题时,回滚比逐條排查快得多。

把 robots.txt 纳入到例行检查里,和站点地图、重定向、404 一起看,能省下不少事後排查的時間。它不需要经常改,但每次改動都值得多看一眼。