做蜘蛛池入口页的人经常问一个看起来很简单的问题:到底要不要在 robots.txt 里把入口页 Disallow 掉?回答之前,需要先把“不想被抓取”和“不想被收录”分开,因为这两件事由完全不同的机制控制。
Disallow 和 noindex 分别管什么
robots.txt 里的 Disallow 管的是抓取。搜索引擎蜘蛛访问某个 URL 之前,通常会先读该域名根目录下的 robots.txt。如果发现这条路径被 Disallow,它一般会直接放弃这次请求,不会去加载页面内容,自然也就看不到页面里写的任何链接。
noindex 管的是收录。它写在页面的 meta 标签里,或者写在响应头的 X-Robots-Tag 里,前提是蜘蛛已经成功抓取了这个页面,才读得到这条指令。读到之后,它不会把页面放进索引,但页面里的链接该发现还是能发现。
入口页到底该选哪一种
如果你根本不想让蜘蛛进来
那 Disallow 是对的,但这时候入口页作为“蜘蛛池”的意义也就没了——蜘蛛进不来,里面的目标 URL 也不会被它看到。所以这个选择只适用于纯粹不想被任何搜索引擎碰的站点。
如果你想让它被抓、但不想它出现在结果里
用 noindex,不要用 Disallow。入口页通常就是为此设计的:蜘蛛能进来读 HTML,能顺着里面的链接走过去,但入口页本身不会占一个搜索结果位置。这也解释了一个常见现象——robots.txt 里明明 Disallow 了,入口页还是出现在结果里。原因是它被外链指向、被别的抓取路径发现了,Disallow 只挡住了抓取,挡不住索引。
如果两者一起用
同时 Disallow 和 noindex,结果往往是 noindex 根本读不到:蜘蛛被 Disallow 挡在门外,没机会加载页面,也就没机会看到 noindex。这两个指令叠加不会“更保险”,只会让 noindex 失效。
写入口页 robots.txt 的几个实际注意点
- robots.txt 必须放在域名的根目录,子域要各写一份,a.example.com 的规则不适用于 b.example.com。
- 规则是按路径前缀匹配的,Disallow: /tmp 同样会挡住 /tmpabc;路径结尾加不加斜杠,含义不一样。
- 同一个 User-agent 分组里不要塞互相冲突的规则,分组的顺序会影响最终匹配结果。
- robots.txt 如果返回 5xx,搜索引擎一般会当成“暂时读不到”,可能暂停抓取;返回 404 通常被理解为“没有任何限制”,等于全放开。
- 文件太大,或者被 CDN、反向代理缓存了旧版本,都可能让新规则迟迟不生效。改完记得直接请求一次,确认线上真实返回的内容。
容易踩的坑
一个常见的误区是把希望全寄托在 robots.txt 上,以为写了 Disallow 入口页就会“隐身”。影响收录的因素很多,外链、被转载、不同搜索引擎的实现差异,都可能让入口页出现在结果里。真想控制收录,允许抓取再加 noindex 更直接。
另一个误区是入口页和目标站共用同一份 robots.txt。两者关注点不同:入口页希望被爬但不想被收录,目标站通常希望被正常抓取和收录。放在同一域名下,规则会互相牵制,改一边就会动到另一边。
先想清楚你要的是“别抓”还是“别收录”,再决定写 Disallow 还是 noindex。顺序反了,两件事都会做不成。
最后提醒一句,robots.txt 只是一个约定,遵守与否取决于抓取方。它适合用来表达你的意愿,不适合当成访问控制手段。真正需要限制的路径,还是从服务器层面做验证或限流更靠谱。