robots.txt 是放在站点根目錄的一個纯文本文件,内容通常只有几行。正因為它看着简單,很多站点在改版、迁移或者临时屏蔽某個目錄时顺手加一條 Disallow,過几個月就忘了,结果蜘蛛長期進不来,頁面還在,流量却慢慢掉。
一個文件,影响的是整站抓取路径
搜尋引擎蜘蛛在抓取之前,通常會先讀取根目錄的 robots.txt,判断哪些路径可以訪問。被明确禁止的地址,一般不會被主動抓取;反過来,如果文件本身返回 404 或者内容乱碼,蜘蛛多數會按「没有限制」處理,繼續正常抓取。問题往往出在中間狀態:文件能讀,但規則寫得太宽。
常见的誤封寫法
- Disallow: / —— 整站屏蔽。做測試环境时常见,同步到线上就是灾难。
- 屏蔽 CSS、JS 目錄 —— 蜘蛛渲染頁面时需要這些资源,屏蔽後可能把頁面判成空白或不完整。
- 屏蔽分頁、篩選、站内搜尋 —— 出發点是减少重复,但一刀切會连带挡掉真實的列表入口。
- 屏蔽整個图片或附件目錄 —— 图片搜尋和頁面内资源引用都會受影响。
- 測試規則没删 —— 临时加的路径一直留在线上,没人记得。
寫法上的几個细节
路径前缀與通配符
Disallow 後面的值按路径前缀匹配,不是完整 URL。寫 Disallow: /admin 會同时挡住 /admin、/admin/、/administrator 這類以该字符串開头的地址。想精确一点,可以用 $ 表示结尾,用 * 表示任意字符。規則寫得越短,覆盖范围越容易超出预期。
大小寫與结尾斜杠
路径通常区分大小寫,/Images 和 /images 可能被视為两條不同路径。结尾斜杠也別随手省略,目錄和文件混在一起时容易誤伤。
Sitemap 声明
可以在 robots.txt 里用 Sitemap 行指向站点地图地址,方便蜘蛛發現入口。這只是一種补充,不是必须,但寫错了會指向已经不存在的文件,反而浪費一次請求。
Crawl-delay
部分蜘蛛支持這一項,用来降低訪問频率。但主流搜尋引擎對此支持有限,控制抓取速度更稳妥的办法還是看服務器日誌和實际负载,而不是只寫一行數字。
robots.txt 管不了的事
禁止抓取不等于禁止收錄。一個被 Disallow 的頁面仍然可能因為外部連結被索引,只是标题和摘要在搜尋结果里可能顯示不全。要真正让頁面登出索引,應该用 noindex,並且要让蜘蛛能抓到那個頁面、看到這個标记。
同样,robots.txt 也不是安全措施。它是一份公開說明,任何人都能讀。把後台地址、接口路径寫進去,等于把目錄结构告诉別人。敏感入口應该靠登入校驗和權限控制,而不是靠這一行文本。
一份可执行的自查清單
- 直接在浏览器打開 站点域名/robots.txt,確認狀態碼是 200,内容没有乱碼。
- 通讀每一行規則,問一句「這條還在生效吗」,删掉没有明确目的的條目。
- 列出被屏蔽的目錄,逐個確認里面有没有對用戶有價值的頁面。
- 检查是否誤封了静態资源目錄和分頁路径。
- 確認 Sitemap 行指向的地址可以正常訪問。
- 用搜尋引擎站長平台里的 robots 測試工具,輸入几個關键 URL,看判定结果是否符合预期。
- 對比服務器日誌里蜘蛛的訪問路径,和規則预期是否一致。
修改前後的注意事項
改動 robots.txt 之前,先备份一份目前版本,並记錄改動時間和原因。放宽限制後,抓取恢复需要時間,不會立刻见效;收紧限制則可能让已经收錄的頁面逐渐失去抓取入口。如果只是想让某類頁面不被索引,優先考虑頁面級的 noindex,而不是直接在 robots.txt 里一刀切。
最後一点:robots.txt 属于站点基础配置,改動频率應该很低。把它纳入改版和上线清單,和 URL 跳轉、sitemap、證书一起检查,比事後排查要省事得多。