用 robots.txt 做抓取控制,是蜘蛛池和普通站点都会遇到的一步。但很多人把「禁止抓取」和「禁止收录」当成同一件事,结果入口页里的链接要么压根没被发现,要么被发现了却怎么也进不了库。下面按几种常见写法分别说明。
先分清抓取许可和索引许可
robots.txt 管的是能不能来抓,meta robots 和 X-Robots-Tag 管的是抓到之后能不能入库。搜索蜘蛛在请求一个 URL 之前,会先去读该域名根目录的 robots.txt;如果目标路径被 Disallow,它通常不会去请求这个页面,自然也就看不到页面里的链接。
所以判断影响时,先问一句:被禁止的到底是入口页本身,还是入口页指向的目标 URL。这两种情况的结果完全不同。
情况一:入口页被 Disallow
如果入口页的路径写在 Disallow 里,搜索蜘蛛不会去抓这个入口页。页面里的链接再规整,也不会因为这次抓取而暴露。入口页上已经存在的老链接,只能靠其他渠道,比如 sitemap、外链、其他站点的转载,被重新发现。
实际表现通常是:入口页在日志里几乎看不到蜘蛛请求,或者只剩零星尝试;目标 URL 的发现速度明显变慢,甚至长期没有新增。
容易踩的写法
- Disallow 写成斜杠加星号,一刀切挡住整站,入口页和目标页一起失效。
- 用通配符或后缀匹配时范围写大了,本来只想挡一个目录,结果把相邻路径也盖进去。
- 给不同搜索引擎的蜘蛛分别写了规则,某一段写错但没检查,只有部分蜘蛛被放行。
情况二:只 Disallow 目标 URL
入口页没被挡,搜索蜘蛛照常抓入口页,也能顺着链接发现目标 URL。但由于目标 URL 本身被 Disallow,蜘蛛不会去请求它,页面内容读不到,也就很难进入索引。
结果就是「URL 被发现了,但没有收录」。这种情况和入口页无关,页面质量、内容、链接结构可能都正常,问题出在目标 URL 自己身上。
怎么区分这两种情况
- 查日志:看入口页有没有蜘蛛请求记录。没有,问题在入口页;有,问题多半在目标 URL。
- 看 robots.txt 当前生效的版本,注意 CDN 或反向代理可能缓存了旧文件。
- 用抓取测试工具分别测入口页和目标 URL,看返回的 robots 状态。
- 确认没有同时叠加 meta robots、X-Robots-Tag、登录验证等其他限制。
几个常被忽略的细节
- robots.txt 返回 404 和 500 含义不同:404 一般视为没有限制;服务端错误则可能让部分蜘蛛保守处理,短时间内减少抓取。
- robots.txt 本身也会被缓存:改完不生效,先确认 CDN 和服务器上的文件是不是最新。
- Disallow 不等于删除:已经被收录的 URL,仅靠 robots.txt 不会让它从结果里消失,反而可能因为抓不到内容而保留旧快照。
- 一个入口被挡不代表全部失效:如果你有多个入口分散在不同路径,被挡的那一个失效,其余入口依然可能被发现,别把单个入口的表现当成整体结论。
简单记:入口页被挡,是发现环节断了;目标 URL 被挡,是发现还在、收录环节断了。排查时先定位断在哪一环,再决定是改 robots.txt、换入口路径,还是处理目标 URL 自身的问题。
最后提醒一句,robots.txt 是建议性协议,各家蜘蛛的执行细节、缓存时间、错误处理都有差异,不要指望一次修改立刻见效。改完之后观察一段时间日志,看请求是否恢复,再判断下一步。