很多人把注意力放在入口頁本身的标簽和内容上,却忽略了 robots.txt。它是搜尋引擎蜘蛛在抓取任何一個 URL 之前,通常最先讀取的文件。這個文件配错的代價,往往比頁面級的 meta 标簽更大:一處通配符寫歪,可能整片路径都被挡在门外,而且短時間内不容易察觉。
robots.txt 的作用范围
robots.txt 必须放在域名根目錄下,只對同一個协议、同一個域名、同一個端口生效。子域名是獨立的一份配置,主站寫了規則並不會自動覆盖子域。它的解析遵循协议约定:路径通常区分大小寫,User-agent 字段則一般不做大小寫区分。
另外,蜘蛛會缓存這個文件。改動之後不會立刻生效,具体多久重新拉取一次,取决于上一次的响應狀態和缓存時間設定。想確認改動是否被讀到,只能靠日誌观察。
基本语法要点
- User-agent:指定規則對谁生效,用 * 表示所有蜘蛛。
- Disallow:声明不希望被抓取的路径前缀。
- Allow:在被 Disallow 覆盖的范围内開一個口子,主流引擎支持,匹配时按更具体的規則優先。
- Sitemap:填寫站点地图的绝對 URL,属于声明性指令。
- Crawl-delay:只有部分引擎支持,主流引擎已不再依赖它来限速。
通配符和结尾符号的支持程度各家不一,只被部分引擎识別。如果你的規則依赖這些寫法,最好用對應平台提供的測試工具先驗證一遍。
蜘蛛池场景下的常见誤封
- 把測試环境的 Disallow: / 直接带到线上,整站被拒。
- 屏蔽了 CSS、JavaScript 目錄,導致蜘蛛拿到的是一個结构残缺的頁面。
- 規則寫得太宽,把希望被發現的入口頁路径一並挡掉。
- Sitemap 文件本身也在被屏蔽的目錄里,声明等于失效。
- 分段顺序或分组寫法出错,某段規則實际没有生效。
- 為某個蜘蛛單獨寫規則时,忘了其他蜘蛛的段落。
與 meta robots 的分工
两者解决的不是同一個問题。robots.txt 表達的是「不要来抓」,meta robots 表達的是「抓到了也不要索引」。被 Disallow 的頁面,蜘蛛拿不到正文,自然也就看不到頁面里的 noindex,所以它無法互相替代。
如果目的是让一個頁面從索引中消失,更稳妥的做法是允许抓取、在頁面里寫 noindex,而不是直接在 robots.txt 里封死路径。
配置前後的建议清單
- 上线前直接請求一次根目錄下的 robots.txt,核對實际返回内容。
- 改動後用站長平台的抓取測試工具驗證几個關键路径。
- 只保留必要的規則,避免把歷史遗留條目一直带着。
- Sitemap 使用绝對 URL,並確認文件本身可以被正常訪問。
- 记錄每次變更時間,方便和後續的日誌資料對照。
- 有多個子域或獨立目錄时,逐份確認規則归属,不要想当然。
改動之後怎么观察
規則調整後,蜘蛛的行為不會立刻變化。可以從訪問日誌里筛出對 robots.txt 的請求记錄,看它多久重新拉取一次;再對比入口頁請求數在改動前後几天的走势,判断是否出現了明顯下滑。如果入口頁請求量突然归零,而服務器本身正常,優先回头检查這個文件。把它当成一次常規配置變更来對待,改動、驗證、观察三步走,比事後排查要省力得多。