蜘蛛池知识

蜘蛛池入口页的 robots.txt 与 meta robots:放行、屏蔽与常见冲突

搭入口页时,robots.txt 和 meta robots 常被从旧模板直接复制,结果一边在引蜘蛛、一边用规则把抓取挡在门外。本文讲清这两类规则各自管什么、User-agent 分组容易写错的地方、Allow 与 Disallow 的取舍、X-Robots-Tag 在 CDN 层可能遇到的坑,并给出一套从规则到日志的排查顺序。

蜘蛛池知识

蜘蛛池入口页的 robots.txt 与 meta robots:放行、屏蔽与常见冲突

为什么入口页的爬虫规则容易被忽略

搭入口页的时候,大部分精力都花在域名、IP、跳转链和内容填充上,robots.txt 和 meta robots 往往是从旧模板里直接复制的。于是就会出现一边在想办法引蜘蛛、一边用一行 Disallow 把整站挡住的尴尬局面。这类问题排查起来很不直观:日志里看不到蜘蛛,第一反应通常是怀疑 IP 被封或者 DNS 有问题,而真正的原因可能只是一条写错的规则。

入口页的 robots.txt 要处理什么

对大多数入口页来说,robots.txt 只需要承担三件事:告诉蜘蛛哪些目录可以抓、给出 sitemap 的位置、避免误伤无关的抓取路径。它不是一个需要精心设计的东西,放行是默认动作。入口页本身没有私密数据,也没有需要保护的接口,通常不需要做目录级屏蔽。真正值得屏蔽的是后台路径、测试目录、带参数的筛选页这类不产生价值的 URL。

User-agent 分组最容易写错

一个高频错误是把通配分组和具体蜘蛛分组混着写。比如写了一条 User-agent: Baiduspider 加 Disallow: /,本意可能只是临时测试,上线时忘了删;同时在 User-agent: * 分组里写着 Allow: /。两条规则互相打架,实际效果取决于搜索引擎怎么解析优先级。规则越复杂,冲突概率越高。如果只是想让蜘蛛正常抓取,最省事的写法就是保留必要的 Allow 和一条 Sitemap,其余交给默认行为。

不要把 Allow 和 Disallow 当成优先级游戏

不同搜索引擎对 Allow 与 Disallow 冲突的处理细节并不完全一致,通常路径越长、越具体的规则优先级越高,但这一点不能想当然。与其靠写复杂规则去押注命中结果,不如在写 Disallow 时就把想放行的目录排除在外,规则越少越不容易出错。

meta robots 与 X-Robots-Tag 怎么选

robots.txt 管的是能不能来抓,meta robots 管的是抓了之后能不能收录、能不能跟链接,两者层次不同,混用是最常见的误区。

  • 入口页需要被抓取,页面上不要出现 noindex、nofollow 这类标签;
  • 如果入口页由程序统一生成模板,要检查模板里有没有沿用旧站的 meta robots;
  • X-Robots-Tag 写在响应头里,CDN 或反向代理层可能缓存或覆盖,排查时要看实际响应头,而不是只看源站配置。

还有一种情况是页面代码本身没问题,但线上返回的 HTML 里带着缓存下来的旧 meta 标签,改了源站却没生效。遇到代码明明改了、蜘蛛还是不抓的情况,值得拉一次线上实际返回的内容做比对。

排查蜘蛛不来的先后顺序

  1. 确认 robots.txt 能被正常访问,返回 200,且返回的是纯文本而不是 HTML 页面;
  2. 检查是否有 Disallow 通配符挡住了入口页所在目录;
  3. 看页面 HTML 中是否存在 noindex;
  4. 看响应头里是否带有 X-Robots-Tag;
  5. 以上都没问题,再去查 DNS、IP、防火墙和访问日志。

把这几步放在前面,能省掉大量在服务器层面的无效排查。不少“入口页没什么反应”的反馈,最后定位到的就是第一、第二步。

几条实操建议

  • 入口页的 robots.txt 尽量简短,只在确实需要时写 Disallow;
  • 批量上线时统一使用同一份模板,避免个别站点漏改;
  • 改动规则后,隔一段时间观察访问日志里的蜘蛛请求路径有没有变化;
  • 不要用 robots.txt 去做内容保护,它只是约定,不是访问控制。
robots.txt 能影响蜘蛛来不来,但决定不了蜘蛛抓完之后做什么。把规则写对只是把路打开,后面的内容、链接结构和更新节奏才是长期要盯的部分。

规则层面的事情本身不复杂,难的是统一和坚持。入口页数量一多,模板、缓存、副本之间很容易出现规则不一致,定期抽查比事后返工划算得多。