做蜘蛛池入口页时,一个常见的纠结是:目标URL的链接要不要让真实访客看见。有人直接上 CSS,把链接容器设成 display:none、visibility:hidden,或者用 font-size:0、text-indent:-9999px、绝对定位挪到屏幕外。这样页面看起来干净,但问题随之而来——搜索蜘蛛到底还认不认这些链接?
先说结论
多数搜索蜘蛛在抓取 HTML 阶段是“看源码”的,CSS 隐藏不会让链接从源码里消失,所以它通常仍能解析出 href,进而发现目标URL。但这只解决了“发现”,没解决“信任”和“抓取配额”的问题。隐藏链接在搜索引擎的作弊特征库里是长期存在的项目,一旦入口页整体被判定为刻意隐藏,后续来访频次、目标URL被跟进的机会都会打折扣。
搜索蜘蛛分两个阶段看链接
解析 HTML 源码阶段
爬虫拿到响应后先做解析,提取 a 标签的 href。这个阶段基本不考虑 CSS 与布局,链接藏在哪一层容器里都一样。所以单从“能不能发现”的角度看,隐藏链接是有效的。
渲染与质量判断阶段
部分引擎会用无头浏览器渲染页面,检查元素是否可见、是否在首屏、是否被其他元素覆盖。渲染后如果发现链接全部不可见,页面就可能被标记为可疑。这一步不一定马上体现在抓取上,但会进入质量评估的数据里,影响后续排期。
几种隐藏写法与各自的麻烦
- display:none、visibility:hidden:最典型的隐藏手法,风险最高。
- font-size:0 或文字颜色与背景同色:同属隐藏文本、隐藏链接的范畴。
- 绝对定位到可视区域外,例如 left:-9999px:同样会被识别出来。
- 放在折叠层里、必须交互才展开:相对温和,但仍属于“非默认可见”。
这些问题不只是“可能不抓”,而是入口页本身可能被降权。入口页一旦被归入低质量,蜘蛛来访频次下降,池子里的目标URL自然更难被发现,前面的投入也就打了水漂。
什么情况下确实需要隐藏
并不是所有隐藏都不可接受,关键看动机和程度:
- 页面本身是给内部或特定渠道用的工具页,不想被普通访客看到。
- 链接属于功能性导航,需要交互(展开菜单、点击“加载更多”)后才出现。
- 同一页面上有大量重复链接,为避免干扰访客而收起一部分。
如果属于这几种,更稳妥的做法是:让核心目标URL保持默认可见,只把次要或重复的部分收起,而不是把整批链接一次性藏掉。
比隐藏更实用的做法
- 正常可见的列表:入口页放一段简短说明,下面用列表列出目标URL,链接默认可见,蜘蛛和访客看到的是同一份内容。
- 控制链接数量:一个入口页别堆太多链接,几十条以内更容易被完整跟进。
- 把“不想让访客进来”和“不想让蜘蛛看到”分开处理:前者用访问控制,后者才需要谈抓取策略,不要用 CSS 糊弄访客。
- 避免给蜘蛛和访客返回不同内容:短期看似有效,长期风险比隐藏链接更大。
怎么判断是否越界
一个简单的自检:把页面截图给不熟悉技术的同事看,如果对方完全看不出这里有链接,那在搜索引擎眼里也基本属于隐藏内容。入口页的定位是给搜索蜘蛛提供一条走得通的路径,不是做视觉魔术。
实操调整顺序
如果已经在用 CSS 隐藏链接,可以按下面的顺序调整:先把最重要的目标URL改成可见链接,观察服务器日志里的蜘蛛来访情况;再逐步把其余链接也放出来,同时减少单页链接总量;最后回查入口页本身能不能被正常抓取、有没有被 robots.txt 挡住、响应是否稳定。隐藏链接只是“发现”环节里的一个小变量,真正决定目标URL能不能被抓的,还是入口页的可访问性、稳定性和整体质量。