常见问题

入口页用 iframe 放链接,搜索蜘蛛会进到框架里发现目标 URL 吗?

入口页把链接放进 iframe,搜索蜘蛛通常能发现,但路径会多一跳:先抓框架文档,再解析里面的链接。本文说明 iframe 承载链接为什么发现效率偏低、哪些情况会被彻底卡住、如何用服务器日志判断蜘蛛是否真的进过框架,并给出更稳妥的替代做法。

常见问题

入口页用 iframe 放链接,搜索蜘蛛会进到框架里发现目标 URL 吗?

先给结论

会抓,但发现效率通常比直接写在主文档里的 a 标签低一档。搜索蜘蛛处理 iframe 的基本逻辑是:入口页本身和 iframe 里的文档,被当成两个独立的 URL 分别处理。蜘蛛要先解析主文档里的 iframe src 属性,把这个地址当作一个新 URL 排进抓取队列,抓回来之后再解析框架文档里的链接。也就是说,目标 URL 的发现路径凭空多了一跳。

为什么 iframe 里的链接“能发现但不划算”

  • 多一跳队列:框架文档本身要先被抓、被解析,里面的链接才有机会进入队列。中间任一环节出问题,比如地址被 robots.txt 拦住、返回 5xx、加载超时,目标 URL 就直接断链。
  • 归属关系变弱:主文档里的普通链接更容易被当作该页面的出链;iframe 里的链接归属偏向框架文档自身,传递关系更模糊。
  • 叠加渲染依赖:如果是用脚本动态写入 iframe 的 src,或者框架内容由前端注入,那就同时增加了“需要执行脚本”的门槛。
  • 层级叠加:iframe 里再套 iframe,等于把发现链拉长到两跳以上,漏抓概率明显上升。

哪些情况基本不会被发现

  1. iframe 地址被 robots.txt 禁止抓取。主文档能抓,框架文档抓不了,里面的链接等于不存在。
  2. iframe 设置了懒加载,且始终没有进入视口,部分抓取环境不做滚动,框架可能压根不加载。
  3. 框架内容要等用户点击后才插入 DOM,或者依赖登录态、cookie 才能返回正常内容。
  4. 跨域 iframe 带着 X-Frame-Options 或 CSP 限制,渲染层可能拿不到框架内容。
  5. iframe 地址返回 3xx 跳转链过长,跳到一半就断了,后续链接自然无从解析。

怎么判断蜘蛛有没有真的进 iframe

最直接的办法是看服务器日志,分三步核对:

  • 第一步:日志里有没有框架文档 URL 的抓取记录,并且 UA 确实是搜索蜘蛛。
  • 第二步:框架文档被抓之后,日志里是否紧接着出现里面目标 URL 的抓取记录。时间差可能几秒,也可能几天。
  • 第三步:如果框架文档天天被抓,但里面的目标 URL 一个都没出现,说明卡在解析环节,重点查 robots.txt、状态码和渲染依赖。
一个常见误判:入口页日志里一直有蜘蛛访问,就以为目标 URL 一定被发现了。入口页被访问只能证明主文档被抓,不能证明 iframe 里的链接被解析、被排进队列。

不同搜索引擎的表现差异

把 iframe 作为主要的链接承载方式,不同搜索引擎的解析能力并不一致。有的会主动抓取框架地址并解析其中的链接,有的只把它当作页面元素记录,不保证跟进。所以同一套入口页,在不同搜索引擎下的 URL 发现速度可能差出好几倍。做数据观测时,建议按搜索引擎分开统计,而不是把所有蜘蛛日志混在一起看平均值。

和 JS 渲染、meta refresh 的区别

这三者常被混在一起讨论,其实卡点不同:JS 渲染卡在“要不要执行脚本”,meta refresh 卡在“要不要跟跳转”,iframe 卡在“要不要把框架文档当成独立 URL 再抓一次”。如果入口页同时用了这三种,任何一个环节失败,目标 URL 都发现不了。排查时要逐个拆开验证,而不是一起改。

更稳妥的做法

如果目标是让搜索蜘蛛尽快发现新 URL,iframe 不是好选择。可以从这几处调整:

  • 把关键链接改成主文档里的普通 a 标签,放在首屏可见区域,不用脚本拼接。
  • 确实需要 iframe 承载内容时,同时在主文档里放一份同地址的普通链接作为兜底。
  • 控制层级,一层够用就别套第二层。
  • 保证框架文档本身可抓,状态码返回 200,robots.txt 不要拦住它。
  • 配合 sitemap 或主动提交,别把 URL 发现的全部希望压在一个框架页上。

小结

iframe 里的链接属于“能抓,但要绕路”。链接越靠近主文档、越接近纯 HTML、跳数越少,被抓到的确定性就越高。做站点运营时,把 iframe 当成页面展示手段,而不是 URL 发现手段,会省心很多。