做蜘蛛池或站群入口頁时,為了排版整洁、避免訪客直接点走,有人會把目标連結放進 iframe,或者寫進 noscript 里。這两種寫法對人来说“看得见但不顯眼”,對搜尋蜘蛛来说却属于邊界情况:有时能被發現,有时完全讀不到,而且不同搜尋引擎的處理並不一致。
iframe 里的連結:src 好發現,内部連結难说
iframe 本质上是在入口頁里嵌入另一個文档。搜尋蜘蛛解析入口頁 HTML 时,會看到 iframe 的 src 地址,通常會把它当作一個需要抓取的资源,也就是说,iframe 的 src 本身一般能被發現。
真正不确定的是 iframe 内部那层文档里的連結:
- iframe 的 src 地址:一般會被請求,發現概率較高。
- iframe 内部文档里繼續嵌套的連結:需要搜尋引擎愿意為這個 iframe 啟動渲染,發現概率明顯下降。
- 跨域 iframe、多层嵌套 iframe:大概率只抓第一层,里面不再跟進。
- src 由 JavaScript 動態寫入:要先完成渲染才拿得到地址,比静態寫法更晚被發現,也可能压根不渲染。
- 懒加载 iframe、進入视口才加载:部分抓取器會直接跳過。
noscript 里的連結:更像是“备胎”
noscript 的语义是“浏览器不支持或關閉 JavaScript 时顯示的内容”。主流搜尋引擎抓取时通常执行 JavaScript,渲染後的頁面里 noscript 内容未必生效;但原始 HTML 里寫的連結是否會被解析,各引擎做法並不统一,也没有對外承诺。
结论很简單:可以把 noscript 当作补充,但不要把它当作目标 URL 的唯一入口。如果整頁連結只放在 noscript 里,那發現與否基本靠运气。
為什么這两類連結容易被漏掉
- 需要渲染才能拿到,在抓取队列里排在主文档静態連結之後。
- iframe 是獨立文档,繼承不到入口頁的正文上下文,蜘蛛判断連結價值时缺少依據。
- 爬虫预算有限时會優先抓主文档里、层級更浅的連結。
- 搜尋质量团队對隐藏内容、異常嵌套结构有专门的识別逻辑,這類寫法天然處于不利位置。
更稳的放法
- 目标連結優先寫在入口頁正文的普通 a 标簽里,href 直接輸出在静態 HTML 源碼中,不依赖 JS。
- 如果确實要用 iframe,至少把目标 URL 同时放在 iframe 的 src 和 iframe 之外的普通連結里,两條路径互為备份。
- 需要 noscript 就保留,但同一批 URL 必须在常規可见区域再出現一次。
- 控制單頁的 iframe 數量與嵌套层級,几十個 iframe 混在一個入口頁里,抓取体驗會很差。
- 把 sitemap、站内連結、URL 提交渠道作為补充發現通道,不要把希望压在一個入口頁上。
怎么驗證蜘蛛有没有真的讀到
判断依據應该是日誌和實际抓取记錄,而不是猜测:
- 在服務器日誌里搜目标 URL,看是否有来自搜尋蜘蛛的請求,注意請求時間是否紧跟入口頁被抓取之後。
- 對比入口頁與目标頁的抓取時間差;時間差過大,或目标頁從未出現,說明這條連結没被跟進。
- 用搜尋引擎官方工具查看渲染後的 HTML,確認連結在渲染结果里确實存在。
- 把 iframe 頁面單獨拿出来,用抓取工具的“获取並渲染”功能對比静態源碼與渲染结果。
隐藏或嵌套的連結並不是“一定讀不到”,而是“不能稳定地讀到”。蜘蛛池要的是可预测,而不是靠某一次运气刚好被發現。
小结
iframe 的 src 通常能被發現,iframe 内部連結、noscript 里的連結則不确定。想让搜尋蜘蛛稳定發現目标 URL,最省事的做法仍然是:把連結放在静態 HTML 正文里,其余形式只当补充。另外要记住,發現不等于收錄,發現之後能否被抓取、被索引,還取决于目标頁本身的狀態和质量。