站点运营

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

robots.txt 寫错一行,就可能把整站挡在门外,也可能让一批本该被抓的頁面悄悄消失。本文给出一份可执行的自查思路:確認文件可訪問、理清 Allow 與 Disallow 的顺序、避開通配符誤伤,並检查它與站点地图、canonical 是否互相冲突。

站点运营

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

robots.txt 是站点给爬虫的第一份說明书,寫错一行,可能让一批頁面從抓取队列里消失。它本身並不复杂,但正因為简單,很多站点上线之後几年都没再打開看過。這篇文章整理的是一份自查思路,重点在確認現状、排除誤伤,而不是追求什么高級技巧。

先確認文件能被正常讀到

robots.txt 只能放在主域名的根目錄,路径固定為 /robots.txt。放在子域名或二級目錄下的同名文件是不生效的。自查时先用浏览器直接訪問,確認返回狀態碼與内容類型。

  • 返回 404,等于没有任何規則,爬虫預設可抓全站。這不算错,但你也失去了统一管理抓取的地方。
  • 返回 5xx,多數爬虫會按“暂时拿不到”處理,可能在一段時間内變得保守;反复出現還可能被当成服務器不稳定。
  • 返回 200,但内容是 HTML(被错誤頁或前端路由接管),規則實际上等于没寫。

規則顺序與通配符

Allow 和 Disallow 谁優先

当 Allow 與 Disallow 匹配的前缀長度相同时,實現上通常 Allow 優先,但更稳妥的做法是不让規則互相打架。把最具体的路径寫在前面,通用屏蔽寫在後面,讀起来一目了然,日後维護也不容易改错。

通配符不是谁都認

* 和 $ 属于扩展语法,主流搜尋引擎支持,但一些小众爬虫可能只按字面理解。如果你的規則依赖這些符号做精确匹配,建议同时保留一條更保守的寫法,避免出現“你以為屏蔽了、其實没屏蔽”的情况。反過来,如果只是想屏蔽某個确定路径,就不必引入通配符,简單寫法更难出問题。

三個容易誤伤的寫法

  1. Disallow: / 之後忘了补 Allow,整站被挡。上线前務必用搜尋平台的抓取測試工具跑一遍。
  2. 屏蔽带參數的路径时寫得太宽,例如 Disallow: /*? 會把正常的分頁、排序一並挡掉,列表頁里的深层内容就更难被發現。
  3. 屏蔽目錄却没寫结尾斜杠,寫成 /tag 會连 /tags、/tag-cloud 這類同前缀路径一起命中,寫成 /tag/ 才更接近本意。

和站点地图、canonical 對齐

robots.txt 里通常會寫一行 Sitemap,指向站点地图地址。自查时要確認這個地址可訪問、内容較新,並且地图里列出的頁面没有被 robots.txt 自己挡掉——這種自相矛盾的情况並不少见。同时留意那些 canonical 指向別處的頁面:如果它們被大量抓取,可以在梳理清楚後考虑是否值得屏蔽,把抓取引向真正的首選地址。

一份可执行的自查清單

  1. 浏览器直连 /robots.txt,確認狀態碼與返回内容。
  2. 在搜尋平台後台用抓取測試驗證几個關键地址:首頁、栏目頁、詳情頁,以及一個被屏蔽的測試地址。
  3. 把規則逐行讀一遍,给每條規則标注它想解决的問题,找不到理由的規則考虑删掉。
  4. 確認 Sitemap 地址可用,且與 robots 規則不冲突。
  5. 记錄修改時間與修改人,改動後观察一到两周日誌里的抓取變化。
  6. 如果站点走了 CDN,確認 robots.txt 没被缓存成舊版本,必要时為它單獨設定較短的缓存時間。
robots.txt 的作用是告诉爬虫哪些不必来,而不是让頁面被收錄。它能把抓取引向有價值的地址,也能在一夜之間把整站挡在门外,所以每次改動都值得留個记錄、留個回滚方案。