做蜘蛛池入口頁时,常有人想把目标連結“藏”起来:要么用 display:none 让訪客看不见,要么塞進折叠面板,要么把字号设成 0。理由大多是“不想让用戶点,只想让蜘蛛看到”。這個思路能不能成立,要先搞清楚搜尋蜘蛛在頁面上到底讀什么。
搜尋蜘蛛讀的主要是 HTML 源碼
搜尋引擎抓取頁面时,拿到的是服務器返回的 HTML,以及後續渲染出来的 DOM。它並不像用戶一样“看”屏幕。所以只要連結是以 a 标簽加 href 属性的形式寫在 HTML 里,理论上就有被解析出来的可能,這和頁面视觉上是否可见没有直接關系。
但“能被解析”和“會被正常当作可用路径處理”是两件事。搜尋引擎對隐藏内容有专门的判断逻辑,隐藏得越彻底、數量越多、和可见内容越不搭,越容易被当成刻意操纵。
几種常见的“隐藏”寫法
- display:none:元素完全不在渲染树里,用戶看不到,HTML 源碼里仍然存在。
- visibility:hidden 或 opacity:0:布局位置還在,只是视觉上不可见。
- 文字颜色與背景同色:经典的隐藏文字手法。
- font-size 设為 0 或极小值:视觉上近似消失。
- 把元素移到视口外,例如 left:-9999px。
- 折叠面板、Tab 里的連結:預設收起,用戶点击後展開。
- 被遮罩层盖住的連結:技術上在頁面上,但用戶点不到。
哪些情况相對正常,哪些容易被判定異常
折叠面板這類“用戶主動点開就能看到”的内容,通常属于正常的頁面交互,搜尋引擎一般能理解它是内容的一部分,只是權重可能低于直接可见的内容。
而 display:none、同色文字、极小字号、屏幕外定位,属于典型的隐藏文本或隐藏連結手法。入口頁如果大量使用,目标連結又反复出現,風險就不只是“抓不抓得到”,還可能影响整站的抓取策略。
還要注意一点:隐藏内容即使被讀到,也不代表會正常參與連結計算。很多情况下它會被單獨處理,甚至直接忽略。
蜘蛛池入口頁更稳妥的做法
- 連結尽量正常可见。入口頁存在的意义就是让蜘蛛有路可走,把連結藏起来,等于自己把最容易识別的路径删掉了。
- 折叠可以,但要有合理理由。比如“展開更多”這類交互,用戶点開能看到完整列表,就別再叠加多层隐藏。
- 不要為了數量硬塞。一屏塞几十條隐藏連結,比放几條正常連結更容易被识別為異常。
- 保持内容與連結相關。入口頁有可讀的文字内容,連結是正文的一部分,看起来才自然。
- 源碼里有的連結,渲染後最好也在。如果抓取工具看到的源碼和渲染後的 DOM 差別太大,本身就是一個信号。
怎么自查
最简單的办法是抓一次頁面源碼,用浏览器里的“查看源代碼”(不是元素面板)搜一下目标連結在不在。如果連結只出現在渲染後的 DOM 里,說明它依赖脚本执行,不同抓取环境下结果可能不一样。
另一個办法是临时關掉 CSS 看頁面:關掉样式後連結正常出現,說明它本来就是内容;關掉样式才“冒出来”,那它在預設狀態下就是隐藏内容。
隐藏不等于發現。搜尋蜘蛛能看到源碼里的連結,但相当一部分隐藏方式會被当成異常處理。入口頁把連結放到明面上,比研究怎么藏更划算。
總结一下:CSS 隐藏不會让連結從 HTML 里消失,所以理论上蜘蛛有可能發現它;但隐藏本身會带来判断風險,最终能否被抓取、會不會參與計算,取决于隐藏方式、數量和整体頁面质量。與其在隐藏上做文章,不如把入口頁做成有正常内容、連結可见的頁面。