做蜘蛛池或站群入口頁时,正常正文里能放的位置往往有限,于是有人開始把目标 URL 塞進各種邊角位置:noscript 标簽、HTML 注释、HTTP 响應头的 Link 字段。這些位置搜尋蜘蛛到底看不看,取决于它是不是被当成連結解析,而不是取决于人能不能看到。下面按位置逐個說明。
判断标准:能不能被連結提取程序识別為 href
搜尋蜘蛛發現新 URL 的主要途径,是從已经抓取過的頁面里提取可解析的超連結。提取對象通常是原始 HTML 或渲染後 DOM 中的 <a href>,此外還有 sitemap、响應头等辅助渠道。一個 URL 只要没有落在這些结构里,就算被抓取程序讀到了字符串,也未必會進入待抓队列。這是理解後面所有情况的前提。
noscript 里的連結
主流搜尋蜘蛛現在具备 JavaScript 渲染能力。当渲染环境開啟 JS 时,noscript 内部的内容通常不會被渲染,因此其中的連結可能不會進入最终 DOM。但在原始 HTML 解析阶段,部分抓取器仍然會看到這些节点,這就造成了结果不稳定:有的站点能靠 noscript 被带到,有的完全没動静。
比較稳妥的做法是:如果确實想為不支持 JS 的环境留一條後路,noscript 可以保留,但同时在正常的 body 里放一份同样可见、可点击的 <a href> 連結。不要把 noscript 当成唯一入口。
HTML 注释里的連結
注释节点不属于可渲染内容,連結提取环节一般會直接跳過。把目标 URL 寫成 <!-- https://example.com/a --> 這種形式,基本不會被当作連結跟進。類似地,只把 URL 寫成纯文本、不包在 <a> 里,發現概率也很低。
有些人用注释来“藏”連結,以為這样既不影响頁面又能被蜘蛛捡走,實际效果通常相反:既没被用戶看到,也没被抓取程序当成連結。
HTTP 响應头里的 Link 字段
RFC 8288 定义了 Link 响應头,例如 Link: <https://example.com/a>; rel="alternate"。搜尋引擎對响應头中某些特定 rel 值(如 canonical、hreflang)有明确處理,但對一般 rel 的 URL 發現並没有對外承诺。它可以作為补充手段,但不能当作主要發現路径,也不适合用来批量投喂目标 URL。
<link rel="alternate"> 和 RSS 的情况
這類声明會被搜尋引擎部分讀取,站点地图與 feed 的抓取也有相應支持,但抓取节奏和覆盖范围不可控。它們更适合做内容同步和聚合,不适合作為蜘蛛池的連結輸送通道。
更稳妥的几個做法
- 目标 URL 優先放在正常的 <a href> 中,确保在渲染後的 DOM 里真實存在。
- noscript、注释、响應头只做补充,不作為唯一入口。
- 入口頁數量不决定收錄结果,頁面本身的可抓取性更重要。
- 用服務器日誌確認蜘蛛是否真的請求了目标 URL,而不是只看頁面里放没放。
- 對不确定的頁面,检查渲染後的 DOM 结构,確認連結节点還在不在。
把 URL 放進搜尋引擎不解析的位置,等于没放。判断标准不是“人能不能看到”,而是“連結提取程序能不能把它当成 href”。
小结
noscript 中的連結能否被發現,取决于渲染阶段的行為,结果不稳定;HTML 注释里的連結基本不會被跟進;HTTP 响應头 Link 字段只能算辅助渠道。想提高目标 URL 被發現的机會,就把連結放回正常的可点击结构中,用日誌驗證實际抓取情况,而不是把希望寄托在隐蔽角落里。