站点的抓取路径不只是由链接决定的。页面头部的一行 meta、HTTP 响应头里的一行 X-Robots-Tag,甚至一个链接上的 rel="nofollow",都会在蜘蛛走到这一步时改变它接下来往哪走。这些开关很小,但方向用错,影响往往比少写几条内链更大。
三个开关,作用于不同层级
先分清它们各自管什么,再谈怎么用:
- meta robots:写在 HTML 的 head 里,只对当前这个页面生效。蜘蛛必须先把页面抓下来,读到标签才会执行。
- X-Robots-Tag:写在 HTTP 响应头里,作用范围是这一次响应。它能覆盖 PDF、图片、视频这类没有 head 的资源,也能由服务器统一控制。
- rel="nofollow":写在链接上,管的是这条链接要不要继续跟。它是链接级,不是页面级。
三者里,只有 nofollow 会直接影响 URL 发现——被标记的链接不再把蜘蛛带到下一个地址。noindex 管的是索引,一般不影响蜘蛛顺着页面里的链接继续往外走,除非你同时写了 nofollow。
容易踩的几个坑
noindex 和 nofollow 一起写
想让一个页面既不进索引、也不往外传链接,就写成 noindex, nofollow。实际效果常常是:蜘蛛依然要抓这个页面才能看到标签,页面里的链接照样被发现,但链接的作用被削弱。如果这个页面本身是栏目页或聚合页,等于自己把内链结构剪断了一块。
robots.txt 拦了,又写 noindex
robots.txt 里 Disallow 掉的目录,蜘蛛不会去抓,也就读不到里面的 noindex。结果是页面既没被抓取,也没被明确告知不要索引。要让页面退出索引,顺序通常是:先放开抓取,让 noindex 正常生效,确认状态之后再考虑屏蔽。
X-Robots-Tag 写成通配
有的配置会对整个目录甚至整个域名下发 X-Robots-Tag: noindex,本意是屏蔽测试环境或某类文件,结果把正式内容一起盖住了。响应头不像 meta 那样能在页面源码里一眼看到,排查时最容易被忽略。
nofollow 该给页面还是给链接
页级 nofollow 会让蜘蛛不再跟这个页面上的所有链接,等于把这一页从爬行图里摘出去。链接级 nofollow 只针对一条链接,适合评论区、用户提交内容、不想背书的第三方外链。做法上,能用链接级就不要用页级;能通过整理内链解决的,就尽量不用 nofollow 去糊。
还要注意,大量本该被发现的 URL 如果都挂在 nofollow 链接后面,等于人为减少了入口。站内主导航、面包屑、列表页里的详情链接,通常不建议加 nofollow。
一套可执行的检查顺序
- 先确认页面到底想不想被抓:不想被抓用 robots.txt,不想被索引用 noindex。
- 再看标签写在哪一层:HTML 页面用 meta,非 HTML 资源用 X-Robots-Tag。
- 检查有没有通配或多层叠加,尤其是响应头里的规则。
- 检查内链有没有被 nofollow 误伤,特别是指向详情页的固定导航。
- 改完之后用抓取工具或服务器日志确认蜘蛛再访时的实际行为,而不是只看配置写没写对。
屏蔽是最后手段,不是第一手段。绝大多数这个页面不该被收录的问题,靠内容整理和链接收敛就能解决。
和 Sitemap、内链放在一起看
Sitemap 负责把重要 URL 直接交到蜘蛛手上,内链负责让蜘蛛在站点里走得通,noindex 这类开关负责把不该出现在索引里的 URL 挡在外面。三者方向一致时,抓取路径才干净。如果 Sitemap 里提交的 URL 恰好被响应头 noindex 挡住,蜘蛛会反复抓取一个永远进不了索引的地址,白白占用抓取资源。