把入口頁的目标連結塞進 iframe,是不少人為了頁面整洁或者方便模板复用會做的事。問题是,iframe 里的連結對搜尋蜘蛛来说属于次一級的發現路径,能不能被抓到,取决于搜尋引擎的渲染能力和 iframe 的具体寫法。
先给结论
iframe 里的連結不是完全不可见,但它一定比主文档里的普通 a 标簽連結更不可靠。做蜘蛛池入口頁时,核心目标 URL 不建议只放在 iframe 里。
搜尋蜘蛛怎么處理 iframe
不同引擎的差別很大,大致可以分成三種情况:
- 渲染能力强的引擎:會把 iframe 的 src 文档当作目前頁面的一部分来加载和渲染,里面的連結有机會進入抓取队列,但通常排在主文档連結之後。
- 渲染能力弱的引擎:可能只拿到 iframe 的 src 地址本身,不去解析里面的内容,連結自然發現不了。
- 跨域 iframe:src 指向另一個域名时,處理更保守,被跳過的概率更高。
哪些寫法更容易被漏掉
- 用 JavaScript 在頁面加载後再注入 iframe,蜘蛛拿到的初始 HTML 里根本没有這個节点。
- iframe 套 iframe,或者一层 iframe 里再堆大量連結,层級越深越容易断。
- iframe 的 src 指向需要登入、带 cookie 校驗或者返回 403 的地址,蜘蛛拿不到内容。
- iframe 的 src 本身指向一個被 robots.txt 屏蔽的路径,或者頁面加了限制性属性。
- 入口頁主文档几乎没有正文,全部内容都在 iframe 里,蜘蛛對頁面整体的判断也會更差。
如果必须用 iframe,怎么降低损失
- 把最重要的目标 URL 直接寫在主文档的 HTML 里,作為普通連結存在,iframe 只承担补充作用。
- iframe 的 src 尽量用同域地址,减少跨域带来的不确定性。
- 不要在 iframe 里再套 iframe,一层能解决就不要嵌套。
- 确保 iframe 指向的頁面返回 200,並且連結出現在初始 HTML 里,不需要再發一次請求才生成。
- 同一批目标 URL 同时通過主文档連結或 sitemap 暴露,不要只依赖 iframe 這一條路。
怎么確認有没有被抓
光看頁面渲染效果没有用,要看服務器日誌:
- 看 iframe 那個 src 地址有没有被蜘蛛請求過。如果没有請求,說明蜘蛛根本没進去,里面的連結自然也没被發現。
- 如果 src 被請求了,但目标 URL 一直没出現在日誌里,說明蜘蛛讀了 iframe 頁面却没有跟走連結。
- 對比主文档連結和 iframe 連結的抓取時間,通常主文档會明顯更早、更频繁。
一個常见誤区
有人觉得 iframe 能藏連結,避免被看出是蜘蛛池。實际上,搜尋引擎對入口頁的判断不只看連結放在哪,還看頁面整体质量、域名歷史、外鏈结构等。把連結藏進 iframe 並不會带来保護,反而可能让本来能被發現的 URL 發現不了,白白浪費一個入口頁。
總结一句:iframe 可以作為頁面布局的一部分,但不适合当作蜘蛛池入口頁的主要連結出口。目标 URL 的發現路径越直接、越标准,可控性越高。