做蜘蛛池入口页时,常有人想把目标链接“藏”起来:要么用 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 里消失,所以理论上蜘蛛有可能发现它;但隐藏本身会带来判断风险,最终能否被抓取、会不会参与计算,取决于隐藏方式、数量和整体页面质量。与其在隐藏上做文章,不如把入口页做成有正常内容、链接可见的页面。