在蜘蛛池和站点运营的日常排查里,经常会遇到一种情况:入口页放了不少目标链接,但目标 URL 迟迟没有抓取记录。顺着排查下去,发现目标 URL 的 robots.txt 里写了一条 Disallow。于是问题来了——入口页里的链接还能不能被搜索蜘蛛发现?下面把这件事拆开讲。
发现链接和抓取页面是两件事
搜索蜘蛛处理一个 URL 通常分两步:先从入口页、sitemap 或其他来源发现这个 URL,把它放进待抓取队列;然后在真正抓取时才去读取 robots.txt,决定允不允许取回内容。robots.txt 管的是第二步,不是第一步。
也就是说,目标 URL 被 Disallow 之后,搜索蜘蛛依然可能在入口页里看见它,但通常不会再正常抓取页面内容。这两件事不要混在一起判断,否则很容易在入口页上做无意义的调整。
robots.txt 屏蔽之后,常见的结果
- 链接能被发现,URL 可能出现在索引里,但缺少标题和摘要,或者只显示一条说明无法提供描述的提示;
- 不会读取页面正文,也就不会通过这个页面继续发现里面的新链接;
- 如果之前已经抓取并收录过,内容可能逐渐从索引里淡出,但不同搜索引擎的处理节奏不一样;
- 屏蔽不等于删除,也不等于永久不出现,搜索引擎调整规则或你改动 robots.txt 后,表现会变化。
这几种结果都不是绝对的,不同搜索引擎、不同时间点的处理会有差异,不要把它当成一个可以精确开关的功能。
几种容易出问题的 robots.txt 写法
路径写得太宽或太窄
Disallow: / 会挡掉整站;Disallow: /news 则会同时挡掉 /news、/news/1、/newsletter 这类前缀相同的路径。想只挡某一类目录,注意末尾斜杠和路径层级,别让前缀匹配误伤到别的文件。
通配符和结束符用错
通配符和结束符的语义在主流搜索引擎里基本一致,但滥用容易误伤。比如想挡参数页却写成宽泛的匹配,结果把带问号的正常页面也一起挡了,排查时很难第一时间想到。
robots.txt 文件本身返回异常
如果 robots.txt 返回 5xx,搜索蜘蛛通常会保守处理,可能暂停对该站点的抓取;返回 404 则一般视为没有限制。用服务器日志或抓取测试工具确认它返回的是 200,且内容就是你以为的那一份。缓存、CDN 和反向代理也可能让它返回一份旧版本。
想控制收录,noindex 往往更合适
如果你的目的是「不希望这个页面出现在搜索结果里」,而不是「节约抓取资源」,那 robots.txt 并不是首选。
- 先允许搜索蜘蛛抓取页面;
- 在页面 head 里加上 noindex 的 meta robots 标签,或返回对应的 X-Robots-Tag 响应头;
- 用抓取测试工具确认搜索蜘蛛看到的是 noindex,而不是被 Disallow 挡在外面;
- 等页面从索引中消失后,再考虑是否需要额外处理。
原因很简单:被 Disallow 的页面,搜索蜘蛛读不到 noindex,也就无法确认你的意图,收录状态可能长期保持原样。
蜘蛛池运营里更稳妥的几条习惯
- 目标 URL 默认允许抓取,除非确有敏感目录需要屏蔽;
- 入口页和目标 URL 的 robots.txt 分开检查,不要只看一边;
- 新增目标 URL 后,用抓取测试工具或服务器日志确认搜索蜘蛛是否真的来过;
- 不要把 robots.txt 当作清理收录的工具,它更像是抓取范围的控制阀。
提醒:robots.txt 是一种抓取约定,不是安全机制,也不保证任何索引结果。真正的收录还会受到内容质量、链接结构、站点整体表现等多方面影响。
回到最初的问题:入口页里的链接在被屏蔽的情况下,仍有可能被发现,但后续的抓取和收录会受限。如果你希望目标 URL 正常参与抓取,先把 robots.txt 里的误屏蔽处理掉,再去看入口页和链接结构,排查顺序会清楚很多。