搜索抓取

robots.txt 与抓取入口:Disallow、Sitemap 声明和误封的核对方法

robots.txt 是搜索蜘蛛进入站点前最先读取的文件,它决定了哪些路径可以被抓取,也常用来声明 Sitemap 位置。本文梳理 User-agent 分组、Disallow 的匹配规则、通配符写法与常见误封场景,并给出 Sitemap 声明、状态码异常的核对清单,帮助站点把抓取入口维持在可用状态。

搜索抓取

robots.txt 与抓取入口:Disallow、Sitemap 声明和误封的核对方法

很多站点把精力放在内容质量、内链和 Sitemap 上,却忽略了一件更靠前的事:搜索蜘蛛在进入站点之前,通常会先读取 robots.txt。这个文件决定了哪些路径可以被抓取,也常被用来声明 Sitemap 的位置。它一旦写错,后面的 URL 发现、抓取和收录都会受影响。

先弄清它能做什么、不能做什么

robots.txt 是一份“约定”,不是访问控制。它不能阻止别人直接请求页面,也不是收录开关:允许抓取不等于会被收录,禁止抓取也不等于一定不出现。理解这一点,才能避免把关键词保护、隐私隐藏这类需求寄托在它身上。

  • 它影响的是抓取,而不是抓取之后的处理结果;
  • 它按路径生效,不区分页面内容是否有价值;
  • 它需要放在域名根目录下,子目录里的同名文件通常不被读取。

Disallow 的匹配规则要写对

规则是按前缀匹配的,不是按目录层级或文件名匹配。写 /news 会同时挡住 /news、/news/1.html,也会挡住 /newsletter 这样的意外路径。想限定到目录,应写成 /news/。

  • 通配符 *:可代表任意字符,如 /*.pdf$;
  • 结尾符 $:限定精确结尾,不加时是前缀匹配;
  • User-agent 分组:不同爬虫可写不同规则,组间要用空行分隔;
  • 注释:以 # 开头,行内注释是否生效各家实现并不一致,稳妥做法是单独成行。

几种容易造成误封的写法

  1. 把测试环境的全站禁止规则带到线上,例如 Disallow: / 忘记删除;
  2. 用 Disallow: /*? 一刀切参数页,结果把带参数的分页、筛选入口全部挡掉;
  3. 只禁目录不写斜杠,误伤同前缀的其他路径;
  4. 想禁图片或 PDF,却顺手把整个静态资源目录封住,影响页面渲染;
  5. CDN 或反向代理缓存了旧版本文件,源站已改,线上还在生效。

Sitemap 声明的核对

在 robots.txt 里声明 Sitemap 是常见做法,需要注意几点:地址要写完整的绝对 URL(含 https://),每行一条,放在文件的合适位置即可。声明只是提示,不是收录保证,也不等同于把 URL 提交入库。如果站点同时用了站点地图索引,声明索引文件地址即可,不必逐条列出分片。

  • 确认声明的地址能直接打开,且返回正常状态;
  • 确认 Sitemap 内 URL 与 robots.txt 的 Disallow 规则不冲突,否则会出现“声明了却抓不到”;
  • 换域名或加 www 后,记得同步更新声明里的地址。

状态码与响应细节

这个文件本身也会被请求,因此它的响应同样值得核对:

  • 返回 200 且内容可读,是最基本的要求;
  • 返回 5xx 或超时,抓取方可能按“暂时不可用”处理,这段时间的规则是不确定的;
  • 返回 404 通常被理解为无限制,等于把全部路径敞开,这未必是你想要的;
  • 文件应保持精简(常见建议控制在几百 KB 以内),编码统一使用 UTF-8。
把 robots.txt 当成一份长期维护的清单,而不是上线时写一次就忘的配置文件。改版、换域名、加频道、上活动页时,都值得回头看一眼。

一份可执行的核对清单

  1. 打开线上地址,确认返回 200,内容与源站一致,没有被缓存成旧版本;
  2. 逐条读 Disallow,确认只挡住了确实不需要抓取的路径,尤其是分页、详情、列表入口;
  3. 用站长工具或抓取测试功能,验证重点 URL 的“允许/禁止”判定结果;
  4. 确认 Sitemap 声明地址可访问,且其内容与当前规则不冲突;
  5. 检查是否误禁了 CSS、JS、图片等渲染依赖资源;
  6. 把这份检查加入改版和上线的固定流程,避免规则被覆盖或遗漏。

抓取入口的门槛往往不在技术难度,而在是否有人定期看一眼。规则写对、状态正常、声明清晰,剩下的 URL 发现与抓取才有讨论的基础。