常见问题

入口页里的目标 URL 被 robots.txt 拦住:搜索蜘蛛还会去抓吗

入口页写得再全,只要目标 URL 命中 robots.txt 的 Disallow,蜘蛛大概率不会去请求它。本文讲清“URL 被发现”和“允许抓取”是两件事,说明蜘蛛遇到被拦链接的常见表现、robots.txt 与 noindex 的搭配误区,以及一套可落地的排查顺序。

常见问题

入口页里的目标 URL 被 robots.txt 拦住:搜索蜘蛛还会去抓吗

聊蜘蛛池和 URL 发现时,经常有人问:入口页里写了一堆目标链接,但其中一部分在 robots.txt 里被 Disallow 了,搜索蜘蛛还会不会去抓?这个问题要拆成两件事看——URL 发现和抓取许可,是两套不同的机制。

先分清 robots.txt 管的是什么

robots.txt 的 Disallow 是一种“抓取许可”约定。它不负责隐藏 URL,也不负责告诉搜索引擎“这个页面不存在”,它只表达一件事:请不要抓取这些路径。搜索蜘蛛在发起请求之前会先读取 robots.txt,如果目标路径命中 Disallow 规则,正常情况下它不会去请求那个 URL。

但入口页本身如果允许抓取,蜘蛛依然会正常读取入口页的 HTML,并在解析过程中看到那些被禁止抓取的 URL。看到不等于抓到,更不等于收录。这个区别在排查日志时特别重要。

蜘蛛遇到被拦的链接会怎样

不同搜索引擎、甚至同一引擎在不同阶段的行为并不完全一致,公开文档里也很少把每种情况写死。所以下面是常见表现,不是保证:

  • 不发起抓取请求:命中 Disallow 的 URL,通常不会在你服务器日志里出现对应的抓取记录。
  • URL 可能仍被记下来:蜘蛛从入口页解析到这个链接,即使没去抓,也可能已经知道这个地址存在。
  • 判断依据不足:没有抓取就没有正文、没有标题、也没有页面上的各种 meta 指令,后续的收录与展示判断基本无从谈起。
  • 不一定会立刻“忘掉”:有些地址会长期停留在系统里,是否清理、多久清理,取决于引擎自身策略,站长很难精确控制。

一个常见误解:用 robots.txt 拦住,再用 noindex 不收录

这是很典型的错误组合。noindex 写在页面 HTML 里,蜘蛛必须抓取页面才能读到这个指令。如果 robots.txt 已经禁止抓取,蜘蛛读不到 noindex,自然也无法执行“不要收录”的指令。想让页面真正退出索引,通常是先放开抓取、让 noindex 生效,等确认被抓取读取之后,再考虑收紧 robots。

入口页和目标 URL 几种常见配置的结果

  1. 入口页允许、目标 URL 允许:正常路径,蜘蛛可以顺着入口页发现并抓取目标 URL。
  2. 入口页允许、目标 URL 被 Disallow:入口页会被读,链接会被看到,但目标 URL 一般不会被抓取。
  3. 入口页本身被 Disallow:蜘蛛不去请求入口页,里面的链接也就无从被发现,整条链路断在第一步。
  4. 入口页正常、但 sitemap 里的 URL 被拦:提交 sitemap 并不会绕过抓取限制,列进去也只是“申报”,不等于被请求。

排查顺序建议

如果入口页看起来没问题,目标 URL 却迟迟没有抓取记录,可以按这个顺序过一遍:

  • 用站长平台的 robots.txt 测试工具,直接输入完整的目标 URL,看命中了哪条规则。规则匹配按前缀和通配符来,末尾带不带斜杠、路径写到哪一级,结果可能完全不同。
  • 检查是不是被更靠上、范围更大的规则提前拦住。规则一多,人工推演很容易出错,用工具验证比翻文档快。
  • 确认服务器日志里是否真的出现过对目标 URL 的抓取请求。没有请求,就先别急着分析收录问题,那是下一步的事。
  • 确认入口页自身可抓、返回正常状态码,并且链接是真正的 a 标签 href,而不是靠脚本触发才生成。
把 robots.txt 当成“抓取开关”,而不是“收录开关”。想控制收录用 noindex,想控制抓取用 robots.txt。两者混用,往往两边都达不到目的。

实操上怎么取舍

蜘蛛池场景里常见的诉求是让更多 URL 被发现和抓取。这时的思路是:该放行的路径尽量少设限制,只在确实需要节省抓取资源的地方收紧,比如无意义的筛选参数、后台路径、大量重复分页。拦得太宽,等于自己把 URL 发现的路口封住;拦得太松,又会让蜘蛛把抓取预算花在没价值的地址上。

还要提醒一句:robots.txt 是公开文件,任何人都能查看,不要在里面写路径以外的敏感信息。至于某个 URL 最终能不能被收录、以什么形式展示,还受内容质量、重复程度、站点整体表现等因素影响,robots.txt 只是其中一道门槛,不是决定项。