蜘蛛池知识

蜘蛛池入口页的 robots.txt 与 meta robots:怎么给蜘蛛开门而不是关门

robots.txt 和 meta robots 是蜘蛛接近入口页时最先看到的信号,配错一处,整批入口页都可能抓不到。本文梳理 Allow 与 Disallow 的取舍、Crawl-delay 的适用场景、Sitemap 声明方式,以及 meta robots 与 X-Robots-Tag 的差别,并附一份上线前的检查清单。

蜘蛛池知识

蜘蛛池入口页的 robots.txt 与 meta robots:怎么给蜘蛛开门而不是关门

入口页能不能被蜘蛛正常抓取,一半取决于服务器和网络,另一半取决于你给蜘蛛的信号。robots.txt 和 meta robots 就是最基础的两个信号,配置错了,后面的资源、内容、跳转链路都白搭。

robots.txt 在蜘蛛池里扮演什么角色

robots.txt 是蜘蛛访问一个站点时最先取的几个文件之一。它不控制收录,只控制抓取行为。对蜘蛛池来说,它的作用主要是三个:告诉蜘蛛哪些路径可以抓、限制抓取频率、声明 sitemap 位置。

入口页通常希望被频繁抓取,所以整体思路是“放开为主、限制为辅”。真正要拦的是后台、测试目录、日志文件这类和抓取无关的内容。

Allow 与 Disallow 的取舍

  • 只拦明确无用的目录,比如 /admin/、/tmp/、/logs/,以及带 session 参数的动态地址。
  • 不要用 Disallow 去“管理”页面质量。屏蔽一个入口页,蜘蛛就不会再去,等于自己断掉一条入口。
  • 注意路径匹配多按前缀处理,写 /go/ 可能连 /goods/ 一起拦掉。

Crawl-delay 要不要写

百度支持 Crawl-delay,Google 基本忽略,它更依赖服务器返回错误时的自动降速。入口页数量多、单机承载有限时,可以设一个偏保守的值;但如果你本来就指望蜘蛛多来,写一个很大的 delay 反而会拖慢发现节奏。更稳妥的做法是靠服务器限速和抓取日志观察来调节,而不是只依赖这一行。

Sitemap 声明

把入口页的 sitemap 地址写进 robots.txt,能减少蜘蛛空跑的时间。sitemap 建议按批次拆分,单个文件不要塞太多 URL,并且只放状态正常、可被抓取的页面。

meta robots 与 X-Robots-Tag

meta robots 写在 HTML 的 head 里,控制粒度到单个页面;X-Robots-Tag 写在 HTTP 响应头里,适合控制非 HTML 资源以及批量下发规则。两者同时存在且冲突时,通常以更严格的那条为准。

  • noindex:页面可被抓取但不索引。入口页一般不用,除非它本身就是纯中转页。
  • nofollow:不追踪页面上的链接。入口页的核心价值就是往外导出链接,加这个等于自废武功。
  • noarchive / nosnippet:只影响快照与摘要展示,不影响抓取本身。
批量建站时最容易出的事故,是模板里带了一个 nofollow 或 noindex,一上线就全量生效,而且很难第一时间察觉。上线前先抓一个页面看源码。

常见配置坑

  • robots.txt 返回 5xx,蜘蛛会当作暂时不可用,一段时间内可能减少或停止抓取。
  • 写过 Disallow: / 之后忘了改回来,整站直接关门。
  • 用 robots.txt 把跳转路径也拦掉,蜘蛛到了入口却走不到目标页。
  • 多个子域各自维护一份 robots.txt,规则之间互相矛盾。

上线前的检查清单

  1. 直接访问 /robots.txt,确认返回 200,且内容就是你预期的那一份。
  2. 随机抽一个入口页,查看源码里的 meta robots 标签。
  3. 用 curl -I 看 X-Robots-Tag 是否存在、值是否正确。
  4. 确认 sitemap 地址可访问,且里面的 URL 状态码都正常。
  5. 用抓取日志复核,蜘蛛是否真的抓到了你希望它抓的那些路径。

robots.txt 和 meta robots 不是设置一次就能长期不管的东西。入口页批量调整、模板更新、路径改版之后,都要重新走一遍上面的检查,否则很容易出现“以为门开着、其实一直关着”的情况。