把目标 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,是否收錄還取决于目标頁自身的内容质量、是否重复、是否被屏蔽等多種因素。入口頁能做的是把發現這一步做顺,不要指望它解决收錄环节的所有問题。