站点运营

站点运营:robots.txt 自查,別让抓取規則誤伤正常地址

robots.txt 常常一次寫好就長期無人問津,但改版、換域名、新增目錄之後,舊規則可能挡住正常地址,也可能放開不该抓的路径。本文给出一份可执行的自查清單,從文件可訪問性、規則匹配優先級、资源目錄放行、Sitemap 指令到日誌驗證,帮你把抓取入口理清楚。

站点运营

站点运营:robots.txt 自查,別让抓取規則誤伤正常地址

robots.txt 是蜘蛛訪問站点时最先讀到的文件之一。它不决定頁面能不能被收錄,但直接决定蜘蛛能不能来抓。很多站点把它当成一次性配置,寫完就不再看,结果改版、換域名、新增目錄之後,規則和現状對不上,問题往往在流量下滑时才被發現。

先弄清一個容易被忽略的前提

robots.txt 只约束抓取,不约束收錄。被 Disallow 的地址如果還有外部連結指向,仍可能出現在结果里,只是蜘蛛拿不到内容,摘要常常是空的。所以把“不想被收錄”的期望完全寄托在 Disallow 上,通常會落空,這類需求應该交给頁面級的 noindex,並且要允许蜘蛛抓取该頁面才能讀到這條指令。

常见問题清單

  • 從測試环境複製過来的 Disallow: / 忘了删,整站被挡在门外。
  • 誤封 CSS、JS、字体或图片目錄,蜘蛛拿到的是没有样式的空壳,渲染结果和用戶看到的對不上。
  • 通配符用得過头,例如 Disallow: /*? 把带參數的正常栏目頁也一起挡住。
  • Allow 與 Disallow 同时存在,却按书寫顺序理解優先級。實际是按匹配長度决定,規則越長越優先,寫法不同结果可能完全相反。
  • Sitemap 指令里的地址打不開,或者寫的是内網地址、舊域名。
  • 同一份文件里混着 http 與 https、带 www 與不带 www 的寫法。
  • 把 noindex、clean-param 之類的指令寫進 robots.txt,以為能生效。

自查步骤

  1. 直接訪問域名根目錄下的 /robots.txt,確認返回 200,内容是纯文本,没有跳轉或登入拦截。
  2. 把 Disallow 里的每一條路径,和服務器上真實存在的目錄對一遍,删掉已经不存在的舊路径。
  3. 重点检查资源放行:CSS、JS、字体、图片這些目錄必须可抓,否則依赖渲染的頁面容易出問题。
  4. 核對 Sitemap 指令的地址,能正常打開,且與目前域名的协议、主域寫法保持一致。
  5. 用抓取日誌观察被拦截的請求,看看有没有本應被抓的栏目頁出現在拦截记錄里。
  6. 修改前先备份,改完在測試域名上驗證,確認無誤再同步到线上。

規則寫法上的几個细节

路径区分大小寫,/Images/ 和 /images/ 不是一回事。規則支持通配符 * 和結束符 $,但不同蜘蛛的支持程度有差异,能用明确路径就別用宽泛通配。存在多個 User-agent 分组时,蜘蛛只取與自己匹配的那一组,不要指望某條規則對所有蜘蛛都生效。

不要用 robots.txt 做临时開關。需要紧急下架时,更稳妥的顺序是先把頁面狀態明确下来,再調整規則,否則蜘蛛看不到清晰信号,只能反复试探同一批地址。

改動的节奏

每次調整規則後,要给蜘蛛留出重新讀取 robots.txt 的時間,改動不會立刻生效。變動較大时可以分步执行:先放開被誤封的目錄,观察日誌中相關地址的抓取恢复情况,再去處理其他規則。频繁来回改動,會让狀態很难判断,也不利于排查。

把 robots.txt 和站点结构、Sitemap、抓取日誌放在一起定期核對,是成本很低的一件事。規則寫得清楚,抓取预算才能用在真正需要被發現的内容上。