抓取权限和索引权限,是两套开关
很多人在搭蜘蛛池的时候,把注意力放在入口页数量、链接结构和跳转方式上,却忽略了最底层的一段配置:robots.txt 和页面里的 meta robots。这两个东西写错,前面做的优化可能直接失效——蜘蛛要么进不来,要么进来了也看不到该看的链接。
先明确分工:robots.txt 管的是能不能抓,它是放在域名根目录下的文本文件,告诉爬虫哪些路径可以访问;meta robots(以及 HTTP 响应头里的 X-Robots-Tag)管的是要不要收录,属于页面级的索引指令。两者互相独立,不能互相替代。
robots.txt 是约定,不是防火墙。它拦不住恶意爬虫,但正规搜索引擎爬虫会遵守,所以配错的时候,吃亏的往往是自己。
入口页最常见的四类配置错误
- 整站 Disallow: /。测试环境改上线时忘了删,爬虫进来只能读到一行 robots.txt,其余全被拒。表现是日志里大量 403,或者只请求 /robots.txt 就离开。
- 入口页被加了 noindex。页面能抓、链接能跟,但这个 URL 不会进索引。如果入口页本身是需要被索引来做 URL 发现的,等于把发现通道关掉了一半。
- robots.txt 返回 5xx。404 通常被理解为没有限制,但 500、502 这类错误可能让爬虫降低抓取频率,甚至暂停一段时间再来。
- 全站链接挂 nofollow。有些模板为了所谓集中权重,给所有链接统一加 nofollow,结果入口页到目标页的路径也一起被掐断,蜘蛛没有可走的路。
比较稳妥的分层配置
第一层:robots.txt 只拦没有抓取价值的路径
后台目录、站内搜索结果页、带大量参数的筛选页、临时测试目录,这些通常没有让蜘蛛访问的必要,可以 Disallow。写路径时要写全,比如 Disallow: /search,不要写成 Disallow: search,后者的匹配结果不一定符合预期。
第二层:入口页允许抓取
入口页的作用是给蜘蛛提供入口,一般不建议屏蔽。如果某类入口页纯粹是跳转层、不需要出现在搜索结果里,可以用 noindex, follow:允许蜘蛛顺着链接继续走,但页面本身不进索引。这个组合在跳转层比较常见。
第三层:确认目标页没有被误伤
批量生成页面时,meta 标签常常是通过模板统一注入的。要检查 noindex 这类指令有没有跟着模板跑到目标页上。做法很简单:随机抽几条目标 URL,直接看源码里的 meta robots,或者用命令行工具看响应头里有没有 X-Robots-Tag。
一个容易踩的坑:robots 和 meta 的冲突
如果某个 URL 在 robots.txt 里被 Disallow,爬虫就不会去请求它,自然也就读不到页面里的 meta noindex。结果是这个 URL 仍然可能以无摘要的形式出现在索引里,因为搜索引擎从别处拿到了链接。想阻止索引,正确做法是放行抓取、再加 noindex;想彻底不让抓,才用 robots.txt,但这时就不要指望 noindex 生效。
部署后怎么验证
- 用搜索引擎官方的 robots.txt 测试工具跑一遍,确认目标路径是被允许还是被拦截。
- 看服务器访问日志,筛选入口页路径,观察返回码是 200、403 还是 404,有没有异常集中的拦截。
- 抽查目标页源码和响应头,确认没有多余的 noindex、nofollow。
- 模板或 CMS 升级后重新跑一遍上面的检查,这一步最容易被跳过。
写在最后
robots.txt 和 meta robots 不会直接带来收录,它们只能决定蜘蛛能不能看、要不要留。把这两项配清楚,至少不会让前面做的入口页和链接结构白白浪费。建议把这几条做成一份检查清单:路径是否写全、入口页是否放行、跳转层是否用 noindex follow、目标页有没有被模板误伤、robots.txt 是否稳定返回 200。