站点的抓取控制通常分三层:robots.txt 管站点级,nofollow 管链接级,还有一层常被忽略——页面级指令,也就是 HTML 里的 meta robots 标签和 HTTP 响应头里的 X-Robots-Tag。它们不决定蜘蛛能不能来,而是决定蜘蛛看到内容之后怎么处理。
页面级指令可以写在哪里
- HTML 的 meta 标签:写在 head 区域,格式是 meta name 为 robots、content 里放具体指令,只对 HTML 页面生效。
- HTTP 响应头的 X-Robots-Tag:对任何类型的内容都有效,包括 PDF、图片、脚本文件,这是它比 meta 标签更实用的地方。
- 针对单个爬虫的写法:把 robots 换成具体的爬虫名称,只有该爬虫遵守,其他爬虫仍按默认规则处理。
noindex 和 nofollow 是两件事
noindex 的意思是“可以抓,但别进索引”;nofollow 的意思是“页面可以看,但页面里的链接不要顺着走”。很多人把 noindex 当成屏蔽手段用,结果是页面被反复抓取,只是不出现在搜索结果里,抓取资源照样消耗。
真正想阻止抓取,只能靠 robots.txt 或服务器层面拦截。但这里有个经典矛盾:被 robots.txt 屏蔽的 URL,蜘蛛读不到页面上的 noindex,于是这个地址仍可能以缺少描述的形式挂在索引里。想让它彻底退出,通常要先放开抓取、让蜘蛛读到 noindex,确认生效后再考虑屏蔽。
X-Robots-Tag 的几个实用场景
- 批量控制非 HTML 文件:一批对外 PDF 不想被索引,改响应头比逐个改文件省事得多。
- 临时页面或测试环境:对整段路径统一下发指令,比逐个页面加标签可靠。
- 需要统一口径的精细指令:noarchive、max-snippet 这类设置写在响应头里更容易保持一致。
与 canonical、robots.txt 怎么配合
canonical 表达的是“哪个地址是正主”,页面级指令表达的是“这个页面要不要出现在结果里”,两者不冲突,但必须方向一致。常见错误是:A 页 canonical 指向 B 页,同时又给自己加 noindex,蜘蛛读到两套相反的信号,只能靠猜来处理。
页面级指令只影响处理方式,不影响抓取本身。把“不抓”和“不要索引”混为一谈,是抓取资源被白白消耗的常见原因。
上线前的自查清单
- 确认指令写在 head 里或响应头里,位置正确、拼写无误。
- 用抓取工具查看蜘蛛实际收到的响应头,而不是只看页面源码。
- 检查是否同时存在 robots.txt 屏蔽与 noindex,避免两边互相抵消。
- 变更后观察访问日志与索引状态,给蜘蛛留出重新抓取和更新的周期。
页面级指令是抓取控制里最细的一层。用对了能省下不少抓取资源,用错了则可能让页面既抓不到、也进不了索引。把它和 robots.txt、内链结构、Sitemap 放在一起整体看,抓取路径才会清晰。