robots.txt 放在域名根目錄,是蜘蛛進站前最先讀的一份說明。它不承诺收錄,也不负责排名,唯一的作用是告诉蜘蛛哪些路径不必来。規則本身很简單,但正因為简單,寫错了往往不容易被發現——直到某天翻看日誌,才發現整站的抓取记錄少得可怜。
先確認文件本身能不能被讀到
- 位置固定在域名根目錄,不能放進子目錄,也不能改名。子目錄下的同名文件不會生效。
- 正常返回狀態碼應為 200,内容類型是纯文本。返回 404 时,多數蜘蛛會按「無限制」處理;返回 5xx 或超时,不同蜘蛛的處理方式並不统一,可能暫停一段時間,也可能繼續抓,不要拿 5xx 当屏蔽手段用。
- 站点若使用 CDN 或 WAF,確認這個路径没有被拦下。用命令行或抓取測試工具從公網確認,比只看後台配置可靠。
- 文件里用注释說明时,注释符号後的内容蜘蛛會跳過,不會造成影响。
几條常用指令的匹配逻辑
Disallow 是前缀匹配
寫 Disallow: /admin 會同时屏蔽 /admin、/admin/、/administer 這類同前缀路径。想精确到目錄,结尾补斜杠:Disallow: /admin/。想屏蔽單個文件,寫完整路径更稳妥。
想屏蔽整站是 Disallow: /,這條也最危險,被誤留在正式站上等于關掉整站入口。上线前建议單獨搜一遍這條規則。
Allow 用来在屏蔽区里開口子
当 Allow 與 Disallow 同时命中一條路径时,按最長的那條規則優先;長度相同时,Allow 優先于 Disallow。所以允许規則寫得比屏蔽規則更具体,才有意义。比如先屏蔽整個目錄,再單獨放行其中一個子路径。
Sitemap 声明
Sitemap: 後面接完整網址,可以寫多條。這里只是声明位置,属于提示性质,不影响抓取權限,也不等于提交。
通配符與结尾符
部分蜘蛛支持 * 與 $,但各家實現並不完全一致。日常能用具体路径表達清楚的,就別依赖通配符,减少理解偏差。
几個高频寫错的地方
- 把不想被索引的頁面直接寫成 Disallow。屏蔽抓取後蜘蛛讀不到頁面上的 noindex 指令,頁面仍可能以纯連結形式出現在结果里。想让頁面不出現,應当允许抓取,再用 noindex 處理。
- 規則里直接寫了完整網址,正确寫法是路径部分。
- 大小寫與實际路径不一致,導致该屏蔽的没屏蔽上。
- 放了好几份 robots.txt,實际只有根目錄那一份生效。
- 測試环境或新域名切換时,把屏蔽規則一並带到了正式站。
與 meta robots、X-Robots-Tag 的分工
robots.txt 管的是「能不能抓」;meta robots 标簽和 HTTP 响應头里的 X-Robots-Tag 管的是「抓到之後能不能索引」。两者作用在不同环节,不能互相替代。頁面級別的精细控制,更适合放在 meta 标簽或响應头里。
上线前的自查清單
- 根目錄路径可訪問,返回 200,内容為纯文本。
- 没有 Disallow: / 這類整站屏蔽残留。
- 需要抓取的目錄、CSS 與 JS 资源没有被誤屏蔽。样式和脚本被挡,會影响蜘蛛對頁面的渲染判断。
- 屏蔽規則统一用路径寫法,按目錄需要补结尾斜杠。
- Allow 規則足够具体,長度長于對應的 Disallow。
- Sitemap 地址正确且可訪問。
- 與頁面上的 meta robots、响應头指令的意图不冲突。
- 改完後在服務器日誌或抓取測試工具里確認结果,而不是只凭肉眼检查。
robots.txt 只做一件事:划出蜘蛛不必進入的范围。這份文件越短、越具体越省事;凡是能用頁面級指令解决的問题,尽量別寫進這里。
站点运营中這類基础項不多,但每一條都影响後續所有動作。robots.txt 通常半年都不動,正因為如此,改版、換域名、上測試环境时它最容易被忽略,建议把它固定列進上线检查清單。