做蜘蛛池时,入口页的作用是让搜索蜘蛛从一个地方拿到目标 URL 列表。但如果入口页本身写在 robots.txt 的 Disallow 里,情况就变得微妙:常常能看到蜘蛛来访问域名,却看不到它去抓取入口页里的链接。这篇把原理和排查思路理一下。
先分清“发现 URL”和“抓取 URL”
搜索蜘蛛的工作大致分两步:发现和抓取。发现只是 URL 进入待抓取队列;抓取才会真正下载页面内容。robots.txt 约束的主要是第二步,而不是第一步的发现。
换句话说,一个 URL 完全可能“被知道但没被抓”。日志里出现访问记录,说明完成了抓取;日志里没有记录,也不能直接断定蜘蛛不知道这个 URL。
入口页被屏蔽后,链接还能被发现吗
要分情况看:
- 只屏蔽入口页、页面内容从未被抓过:蜘蛛通常不会去下载被禁止抓取的页面,页面里的 a 标签链接也就无法提取,目标 URL 基本不会被入口页带出来。
- 入口页曾经被抓过、之后才加 Disallow:索引里可能还留有旧版本内容,旧链接仍可能在一定时间内被发现,但这属于历史残留,不能当成稳定手段。
- 入口页被屏蔽,但目标 URL 有别的来源:比如 sitemap、外链、其他未被屏蔽的入口页。发现会照常发生,和 robots.txt 无关。
- 屏蔽范围没覆盖入口页:比如只写了某个子目录,入口页仍然会被抓,链接也能正常发现。
不同搜索引擎对 robots.txt 的执行细节有差别,个别引擎在特定条件下仍会把被屏蔽的 URL 收录为无摘要结果。这不是可以依赖的通道,实测时一定要看自己目标搜索引擎的日志表现。
几个常见的配置误区
- 用 User-agent: * 加一条范围过大的 Disallow,把入口页和静态资源一起屏蔽了。
- 在 robots.txt 里补写 Allow,以为能覆盖前面的 Disallow,实际匹配规则并不是简单的“后写的优先”。
- 拿 robots.txt 挡临时不想被访问的页面,却忘了它同样会影响入口页的链接提取。
- 把 robots.txt 当成保密手段,实际公开可访问,还可能因为写法暴露目录结构。
想屏蔽部分内容,又想保住入口页的发现能力
- 把屏蔽范围收窄到具体目录或文件,不要整站或整段路径一刀切。
- 入口页保持可抓取,把要藏起来的部分放到 meta robots 或更精确的路径规则里。
- 入口页与目标 URL 分开部署:入口页干净可抓,目标 URL 单独控管。
- robots.txt 与 sitemap 配合使用,避免两边规则互相打架。
怎么确认到底有没有生效
比较稳的做法是看三样东西:一是服务器日志里入口页的抓取频率和目标 URL 的抓取记录;二是搜索资源平台自带的 robots.txt 测试与 URL 检查工具,用它判断某个 URL 是否被屏蔽;三是把入口页临时放开一小段路径做对照测试。
如果日志里长期只有入口页被抓、目标 URL 一次都没出现,优先怀疑 robots.txt 或响应头层面的拦截,而不是急着改入口页的链接结构。反过来,如果入口页和目标 URL 都在被抓,但收录情况不理想,那就是另一个话题了,和屏蔽无关。
robots.txt 管的是能不能抓,不是能不能知道,两者不能互相替代。
小结
入口页被 robots.txt 屏蔽时,它里面的链接通常也一起失去了被发现的机会,例外只有历史缓存和其他链接来源。排查时把“发现”和“抓取”分开看,再对照日志与工具结果,基本就能定位问题出在哪一层。