先分清两件事:能不能发现,和算不算数
搜索蜘蛛抓取一个页面时,拿到的是服务器返回的 HTML 源码。只要源码里存在一个带 href 属性的链接标签,蜘蛛在解析阶段通常就能提取出这个 URL 并把它排进抓取队列。CSS 里的 display:none、字号设成 0、把元素挪到屏幕外,这些都只是视觉层面的处理,并不改变源码里那个链接的存在。
所以结论可以拆成两半:隐藏一般不影响蜘蛛发现这个链接;但会影响搜索引擎对这个链接的态度。而后者往往才是入口页做蜘蛛池时真正关心的部分。
常见的几种藏链接方式
- display:none 或 visibility:hidden,元素不渲染或不显示
- 字号设为 0,或者小到 1px
- 用 text-indent 负值、绝对定位负坐标,把内容推出可视区域
- 容器高度为 0 并配合 overflow:hidden
- 文字颜色与背景色设成一样
- 靠用户点击后由 JS 插入 DOM,而不是一开始就写在源码里
前五种属于纯 CSS 或排版层面的隐藏,链接本身在源码里;最后一种性质不同,后面单独说。
搜索引擎对隐藏链接的态度
隐藏文本、隐藏链接在各大搜索引擎的垃圾内容说明里,基本都被归到操纵排名的手法一类。理由很直接:它的目的就是只给蜘蛛看、不给用户看。实际表现通常分几个层次:
- 抓取层面:URL 大概率仍然会被请求,你在日志里能看到蜘蛛来访。
- 链接关系层面:这条链接可能被判定为不可信,不传递权重,甚至不计入链接图谱。
- 站点层面:如果整站大量使用隐藏链接,可能触发算法层面的降权;情况严重时还可能收到人工处理。
换句话说,用隐藏链接做入口页,抓取可能有了,但信任没有。对于一个本来就靠入口页带出目标 URL 的玩法来说,这等于把一半目的丢掉了。
要区分「正常交互隐藏」和「刻意藏链接」
不是所有 display:none 都等于作弊。移动端折叠菜单、下拉导航、选项卡里未激活的面板、无障碍用的跳转链接、懒加载占位,这些写法在正常站点里到处都是,搜索引擎也不会一刀切处理。
判断标准不在技术实现,而在意图和整体模式:用户在一次正常浏览里,能不能看到并且点到这个链接?展开菜单后能看到,就属于正常交互;如果一个页面上几十条外链全部藏得严严实实,用户永远碰不到,那就完全是另一回事。搜索引擎看的是模式,不是单个属性。
靠 JS 后插入的链接,情况不一样
纯 CSS 隐藏的元素本来就在 HTML 源码里,蜘蛛解析源码时就能拿到 href。而必须等用户点击才由 JS 动态插入的链接,初始源码里可能根本不存在,需要搜索引擎执行 JS 之后才能看到。
现在的搜索引擎大多具备渲染抓取能力,但渲染是有延迟和预算限制的,并不是每个 URL 都会被完整渲染。相比之下,一开始就写在 HTML 源码里的链接,被发现的机会要稳定得多。所以别把「反正蜘蛛会渲染」当成默认前提。
更稳妥的入口页做法
- 目标链接尽量以可见的正文链接形式出现,锚文本写清楚指向什么内容,而不是「点击这里」。
- 确实需要折叠或收起时,让链接先存在于 HTML 源码里,交互只控制显示与否。
- 不要用隐藏链接堆数量。一条正常的可见链接,长期价值高于十条藏起来的。
- 入口页本身要有对用户有一点用的内容,而不是纯粹为了塞链接而存在。
怎么自查
- 看服务器日志:目标 URL 是否真的被蜘蛛请求过,请求来源是哪个入口页。
- 用抓取工具的「查看源码」确认链接出现在原始 HTML 里,而不只是渲染后的 DOM 里。
- 在站长工具里检查入口页是否存在「隐藏文本或链接」相关的手动操作或安全问题提示。
- 在浏览器里临时禁用 CSS 看一眼页面,如果链接全没了、只剩一堆不可见文字,就该重新考虑这种写法。
隐藏链接不是一条更快的发现通道,它只是把「被发现」和「被信任」拆开了。想让目标 URL 被稳定抓取,入口页的链接保持可见、可点、有上下文,通常更省事。
最后补一句:抓取、索引、排名是三件独立的事。就算隐藏链接让蜘蛛请求了目标 URL,也不代表它会被收录,更不代表会有排名。与其在隐藏手法上反复微调,不如把力气花在入口页质量和目标页内容本身。