把目标 URL 塞进 iframe,是入口页搭建时比较常见的一种做法。有人是为了让页面看起来干净,有人是想把入口页和链接区隔开。但这样做的代价是:链接能不能被搜索蜘蛛看到,多了一层不确定性。
先给结论:多数情况下会抓,但不是顺手就抓
搜索蜘蛛处理 iframe 的方式,和你自己打开网页时的体验并不一样。它更像是把 iframe 的 src 当成一个独立的 URL 来处理:主文档先抓一次,如果爬虫愿意继续,再去请求 iframe 的 src 地址,然后才可能看到里面的链接。
也就是说,iframe 里的链接要经过两次请求才有机会被发现。相比直接写在主文档 HTML 里,多了一次跳转、也多了一次超时或失败的风险。
哪些情况会明显影响跟进
iframe 的 src 本身不可访问
- src 指向的地址返回 404、500,或被 robots.txt 屏蔽;
- src 用了相对路径但目录写错,抓取时实际拿到的是错误页;
- src 需要登录、或者校验 Referer 才返回正常内容。
这几种情况里,搜索蜘蛛拿不到 iframe 的有效内容,自然也就看不到里面的链接。
iframe 是 JS 动态插进去的
如果 iframe 标签本身由脚本在页面加载后创建,那么抓取能不能识别,取决于搜索引擎是否对该页面做了渲染。渲染资源是有限的,入口页这类优先级不高的页面未必每次都会被渲染。把链接写死在 HTML 里,确定性更高。
iframe 内容被当成独立页面处理
如果 iframe 的 src 是一个独立的 HTML 页面,它有可能被当成单独一个 URL 去抓取甚至收录。这时候你等于多了一个入口页,而不只是多了一段内容。若这个被单独抓取的页面内容单薄、和你其他页面重复,反而会分散抓取。
还想用 iframe,可以这样降低风险
- 把最重要的那几条目标链接放在主文档正文里,iframe 只放补充内容。关键链接不要只出现在 iframe 里。
- 保证 iframe 的 src 是可直接打开、返回 200 的完整 URL,不要依赖父页面的参数或脚本才能显示。
- 不要套娃。iframe 里再嵌 iframe,跟进成本成倍上升,实际上大概率不会被继续跟进。
- 控制数量。一个入口页里塞太多 iframe,每个都要额外请求一次,会拖慢整页加载,也可能影响后续抓取频次。
- iframe 内的页面不要设 noindex,除非你确实不想让它被抓。
怎么确认搜索蜘蛛到底有没有跟进
最直接的还是看服务器日志。把 iframe 的 src 地址和 iframe 内部链接的 URL 单独拉出来查一下:
- 日志里有没有对 iframe src 的请求;
- 有没有对 iframe 内链接目标 URL 的请求;
- 两次请求的时间间隔有多长、是否稳定。
如果 src 有请求、链接目标没有,说明爬虫进去了但没继续跟进,多半是链接本身的问题,比如 nofollow、JS 插入、跳转异常。如果连 src 都没有请求,问题出在 iframe 这一层,先检查 src 是否可被正常访问。
iframe 不是不能用,但它属于多一次请求的方案。入口页本来就是为了让链接更容易被发现,多数情况下,直接写在 HTML 正文里比藏在 iframe 里更省事。
最后提醒一点:搜索蜘蛛跟进链接、抓取页面,和最终是否收录是两件事。跟进只说明它看到了这个 URL,是否收录还取决于目标页自身的内容质量、是否重复、是否被屏蔽等多种因素。入口页能做的是把发现这一步做顺,不要指望它解决收录环节的所有问题。