站点运营

站点运营:robots.txt 的写法与自查,别把不该挡的路径挡住

robots.txt 只影响抓取,不决定收录。本文梳理它的位置、语法、通配符与 Allow/Disallow 的优先级,列出屏蔽 CSS/JS、误挡整站等常见坑,并给出一份上线前后的自查清单,帮你把抓取入口控制在预期范围内。

站点运营

站点运营:robots.txt 的写法与自查,别把不该挡的路径挡住

robots.txt 是放在站点根目录下的一个纯文本文件,作用是告诉爬虫哪些路径可以抓、哪些先别抓。它不负责收录与排名,只影响抓取行为。很多站点的问题不是出在内容上,而是这个文件写歪了:要么挡掉了 CSS、JS 这类渲染必需的资源,要么一条通配符把整站大半埋进去,蜘蛛来了只能空手而归。

一、文件位置与基本语法

robots.txt 只能放在域名根目录,且必须是纯文本,路径固定为 https://example.com/robots.txt。放在子目录里不会被读取,写进 HTML 更无效。文件里常用的字段有四种:

  • User-agent:指定这条规则对哪个爬虫生效,* 表示所有未被单独列出的爬虫。
  • Disallow:禁止抓取的路径前缀。
  • Allow:在 Disallow 的范围内开一个口子,用于放行某个子路径。
  • Sitemap:声明站点地图地址,可以写多条。
规则是按 User-agent 分组读取的,每组内部才互相组合。把 User-agent 和规则穿插着乱写,很容易让爬虫只读到一半。

二、通配符与优先级

* 匹配任意字符序列,$ 表示路径结尾。比如 Disallow: /*.pdf$ 只挡以 .pdf 结尾的地址,而 Disallow: /*.pdf 会连 /a.pdf.html 一起挡掉。路径是区分大小写的,/Admin/ 和 /admin/ 不是一回事。

当 Allow 与 Disallow 同时命中一个地址时,通行的判断方式是:规则越具体越优先,也就是匹配路径越长的那条生效;长度相同时 Allow 优先。不同搜索引擎的实现细节略有差异,写规则时尽量别依赖边界情况。

三、几个反复出现的坑

1. 把 CSS、JS、图片整目录屏蔽

蜘蛛需要抓取这些资源才能理解页面渲染后的形态。屏蔽之后,它看到的可能是残缺页面,甚至把一张内容正常的页面判成空壳。除非你确定该页面是纯静态 HTML,否则别动静态资源目录。

2. 想用 robots.txt 阻止收录

robots.txt 挡住抓取后,爬虫根本看不到页面上的 noindex。想彻底从索引里去掉,正确做法是允许抓取,再用 noindex 标签或 X-Robots-Tag 响应头。两者分工不同,别混着用。

3. 用 Disallow: / 测试完忘记改回来

从测试环境整站复制到生产是常见来源。上线检查时,第一件事就是打开生产域名的 robots.txt 看一眼。

4. 依赖 Crawl-delay

主流搜索引擎早已不支持这条指令,写了也不生效。想控制抓取频率,更靠谱的是看服务器日志、评估机器承载能力,再用站长工具里提供的抓取速率设置来调节。

四、上线前后的自查清单

  1. 访问域名根目录的 robots.txt,确认状态码为 200,内容是纯文本而非 HTML 报错页。
  2. 逐条核对 Disallow 路径,写的是目录就补上结尾斜杠,避免误伤同名前缀的其他目录。
  3. 确认没有挡住 CSS、JS、字体、图片所在目录。
  4. 检查 Sitemap 地址是否可访问,是否与真实的站点地图一致。
  5. 用搜索引擎官方提供的 robots 测试工具跑一遍关键 URL,看放行与拦截是否符合预期。
  6. 改动后过几天从日志里抽查蜘蛛对关键目录的抓取量,看是否出现异常下滑。

五、分环境与分爬虫的处理

测试站和预发站建议整体屏蔽,但别把 robots.txt 当唯一防线,配上 HTTP 认证或 IP 限制更稳妥。生产环境如果只是不想让某个不重要的爬虫来,单独写一条 User-agent 规则即可,别用 * 一刀切,把正规搜索蜘蛛一起挡在门外。

另外要记住,robots.txt 是公开可读的文件。不要在里面写内部路径线索、后台目录名或临时文件地址,那等于给扫描器指路。

改动 robots.txt 成本很低,影响面却很大。改前先备份一份,改完用日志验证,比出问题之后再回头排查要省事得多。