做蜘蛛池入口頁时,一個常见做法是把連結“藏”起来——放進 HTML 注释、noscript 标簽,或者用 CSS 隐藏的区块里,让訪客看到的頁面尽量干净。問题是,這些位置的連結,搜尋蜘蛛到底能不能發現?答案不是简單的能或不能,而要看你指的是哪一個解析阶段。
先分清两個阶段:抓取解析與頁面渲染
搜尋引擎處理一個入口頁,通常會经歷两步:先拿到服務器返回的原始 HTML 做解析,再(有條件地)执行 JavaScript,得到渲染後的 DOM。两步都會提取連結,但提取規則並不相同。
- 原始 HTML 解析:只看源碼里真實存在的 a 标簽和 href 属性。注释里的内容属于注释节点,不會被当成連結。
- 渲染後的 DOM:执行 JS 後的最终结构,動態插入的 a 标簽、被脚本改寫的 href 都可能在這里被發現,但渲染有配額和延迟,不是每個頁面都會走到這一步。
几類常见寫法的實际结果
HTML 注释里的連結
寫成 <!-- <a href="..."> --> 的連結,對原始解析来说只是纯文本,不是节点,基本不會被当成可跟進的連結。早些年有人靠注释藏連結,現在收益很低,風險却不小。
noscript 里的連結
noscript 的内容在原始 HTML 里是真實存在的,禁用 JS 的用戶也會看到。部分解析器會把它讀出来,但不同引擎的處理策略不一致,不能当成稳定可靠的入口。想靠它做 URL 發現,属于碰运气。
CSS 隐藏的区块
display:none、visibility:hidden、字体色與背景色相同、把区块定位到屏幕外——這類連結在 DOM 里依然存在,理论上能被提取。但“對用戶不可见”是搜尋引擎判定作弊的经典特征之一。隐藏連結過多时,受影响的不只是這條連結,而是整個入口頁的信任度。
template 與脚本里的模板字符串
template 内部的内容在頁面加载时不會渲染成可见节点,是否被提取取决于引擎實現,同样不建议作為主要入口来源。寫在 JS 字符串里、只有执行时才插入 DOM 的連結,則完全依赖渲染能力,發現率更低、延迟更長。
图片、按钮、表單里的地址
這些位置的 URL 通常不會被当作可跟進連結,除非外面包了 a 标簽。這一点在別處已有专门讨论,這里不展開。
為什么“把連結藏起来”這條路越来越窄
一是連結提取的容错在收紧,二是隐藏連結本身就是被重点监控的模式。把它当成主力手段,往往是入口頁里的目标連結没被處理,入口頁自己反倒先被降權。
想让連結被稳定發現,按這個顺序做
- 用最普通的 a 标簽,href 寫完整可訪問的地址,不要用 onclick 或 JS 跳轉替代。
- 連結放在頁面主体内容里,和上下文有一定语义關系,不要集中堆在頁脚或空白区块。
- 控制單頁連結數量,過多會稀释每條的權重,也让頁面更像纯導航頁。
- 入口頁本身要能正常返回 200、加载速度別太慢,否則蜘蛛可能拿不到完整 HTML。
- 辅助手段可以用 sitemap 或提交接口补齐,但它們是补充,不是用来替代站内連結结构的。
把連結藏進注释和隐藏层,短期可能骗過一次解析,長期只會让入口頁整体掉出正常的抓取节奏。老老實實放在正文里的 a 标簽,才是 URL 發現最稳的来源。
最後提醒一句:不同搜尋引擎在渲染能力、超时時間上的差异不小,同一份入口頁在两個引擎上的連結發現结果可能完全不同。與其猜規則,不如用服務器日誌確認蜘蛛實际請求了哪些 URL,再决定要不要改结构。