先分清两种链接
把链接放进 iframe,实际上涉及两层地址:一层是 iframe 标签本身的 src,另一层是 iframe 内部文档里的超链接。搜索蜘蛛对这两层的处理并不一样,排查问题时最好分开看。
- iframe 的 src:写在主文档 HTML 里,属于主文档的一部分。蜘蛛解析主文档时就能读到这个地址,通常会把它当成一个待抓取 URL 排队。
- iframe 内部的链接:不在主文档里,需要额外请求并解析那个子文档才能拿到。它能不能被发现,取决于蜘蛛是否真的去抓取了这个 iframe。
搜索蜘蛛会不会跟进 iframe 里的链接
主流搜索蜘蛛对 iframe 内容有一定处理能力,不少情况下会去请求 iframe 地址,并把里面的链接纳入发现范围。但这更像是尽力而为,而不是保证跟进,原因主要有几个:
- 抓取预算。iframe 多一次请求就多一份开销,配额紧张时,蜘蛛可能只抓主文档,暂时不深挖 iframe。
- 渲染依赖。如果 iframe 是 JS 动态插入、src 后置拼接或用了懒加载,必须渲染后才能拿到地址,能不能被看到取决于该引擎的渲染能力与调度。
- 权重与可见性。iframe 内的链接即使被抓到,优先级通常也弱于主文档里的同级链接;被 CSS 隐藏、尺寸为 0 或长期滚出可视区域的 iframe,被发现概率更低。
- 嵌套层级。多层 iframe 套娃会明显增加解析成本,越深的层越容易被放弃。
把 iframe 当成备用通道可以,当成唯一通道就有风险。
怎么判断你的 iframe 有没有被跟进
不要靠猜,用服务端日志和抓取记录验证:
- 看访问日志里有没有对 iframe 那个子文档地址的请求。完全没有,说明连子文档都没被抓,内部链接自然不会进入发现队列。
- 如果子文档有请求、内部链接的目标 URL 却没有请求,说明解析到了但没继续跟进,常见原因是层级太深、预算不足,或链接本身带了 nofollow 之类的限制属性。
- 对照 UA 和请求频率,确认来的是真实搜索蜘蛛,而不是只在日志里刷存在感的伪装爬虫。
iframe 地址被屏蔽或返回错误会怎样
如果 iframe 的 src 被 robots.txt 禁止抓取,蜘蛛拿不到内部文档,里面的链接基本不会进入发现队列;如果这个地址返回 404、500 或跳转到验证页,结果类似。此时主文档里的这个 src 地址本身仍可能被记录,但里面的目标链接就别指望了。
更稳妥的做法
- 关键的目标链接直接写在主文档 HTML 里,用普通 a 标签,不依赖渲染和子文档。
- 确实要用 iframe 时,把地址写进静态 HTML 的 src 属性,不用 JS 后置插入,也不加懒加载。
- iframe 里的链接保持少量、明确,避免多层嵌套和重复。
- 配合 sitemap 或站内其他入口做冗余,不要把所有 URL 发现路径都押在一个 iframe 上。
简单说:iframe 的 src 可以近似当成一个普通 URL 来看待,iframe 内部的链接则要理解为可能被发现、但不稳定。做站点运营时,把本该出现在主文档里的链接放回主文档,通常比反复研究蜘蛛对 iframe 的容忍度更省事。