先分清两種連結
把連結放進 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 的容忍度更省事。