很多站点把精力放在内容质量、内链和 Sitemap 上,却忽略了一件更靠前的事:搜索蜘蛛在进入站点之前,通常会先读取 robots.txt。这个文件决定了哪些路径可以被抓取,也常被用来声明 Sitemap 的位置。它一旦写错,后面的 URL 发现、抓取和收录都会受影响。
先弄清它能做什么、不能做什么
robots.txt 是一份“约定”,不是访问控制。它不能阻止别人直接请求页面,也不是收录开关:允许抓取不等于会被收录,禁止抓取也不等于一定不出现。理解这一点,才能避免把关键词保护、隐私隐藏这类需求寄托在它身上。
- 它影响的是抓取,而不是抓取之后的处理结果;
- 它按路径生效,不区分页面内容是否有价值;
- 它需要放在域名根目录下,子目录里的同名文件通常不被读取。
Disallow 的匹配规则要写对
规则是按前缀匹配的,不是按目录层级或文件名匹配。写 /news 会同时挡住 /news、/news/1.html,也会挡住 /newsletter 这样的意外路径。想限定到目录,应写成 /news/。
- 通配符 *:可代表任意字符,如 /*.pdf$;
- 结尾符 $:限定精确结尾,不加时是前缀匹配;
- User-agent 分组:不同爬虫可写不同规则,组间要用空行分隔;
- 注释:以 # 开头,行内注释是否生效各家实现并不一致,稳妥做法是单独成行。
几种容易造成误封的写法
- 把测试环境的全站禁止规则带到线上,例如 Disallow: / 忘记删除;
- 用 Disallow: /*? 一刀切参数页,结果把带参数的分页、筛选入口全部挡掉;
- 只禁目录不写斜杠,误伤同前缀的其他路径;
- 想禁图片或 PDF,却顺手把整个静态资源目录封住,影响页面渲染;
- CDN 或反向代理缓存了旧版本文件,源站已改,线上还在生效。
Sitemap 声明的核对
在 robots.txt 里声明 Sitemap 是常见做法,需要注意几点:地址要写完整的绝对 URL(含 https://),每行一条,放在文件的合适位置即可。声明只是提示,不是收录保证,也不等同于把 URL 提交入库。如果站点同时用了站点地图索引,声明索引文件地址即可,不必逐条列出分片。
- 确认声明的地址能直接打开,且返回正常状态;
- 确认 Sitemap 内 URL 与 robots.txt 的 Disallow 规则不冲突,否则会出现“声明了却抓不到”;
- 换域名或加 www 后,记得同步更新声明里的地址。
状态码与响应细节
这个文件本身也会被请求,因此它的响应同样值得核对:
- 返回 200 且内容可读,是最基本的要求;
- 返回 5xx 或超时,抓取方可能按“暂时不可用”处理,这段时间的规则是不确定的;
- 返回 404 通常被理解为无限制,等于把全部路径敞开,这未必是你想要的;
- 文件应保持精简(常见建议控制在几百 KB 以内),编码统一使用 UTF-8。
把 robots.txt 当成一份长期维护的清单,而不是上线时写一次就忘的配置文件。改版、换域名、加频道、上活动页时,都值得回头看一眼。
一份可执行的核对清单
- 打开线上地址,确认返回 200,内容与源站一致,没有被缓存成旧版本;
- 逐条读 Disallow,确认只挡住了确实不需要抓取的路径,尤其是分页、详情、列表入口;
- 用站长工具或抓取测试功能,验证重点 URL 的“允许/禁止”判定结果;
- 确认 Sitemap 声明地址可访问,且其内容与当前规则不冲突;
- 检查是否误禁了 CSS、JS、图片等渲染依赖资源;
- 把这份检查加入改版和上线的固定流程,避免规则被覆盖或遗漏。
抓取入口的门槛往往不在技术难度,而在是否有人定期看一眼。规则写对、状态正常、声明清晰,剩下的 URL 发现与抓取才有讨论的基础。