做蜘蛛池的人经常遇到这样的纠结:入口页链接太多显得堆砌,于是把一部分链接塞进折叠菜单、Tab 面板或者“展开更多”的区块里,用 CSS 把它藏起来。页面上看不到,但源码里还在。问题也就来了——搜索蜘蛛到底还发不发现这些 URL?
先看结论:多数情况下仍然能发现
搜索蜘蛛解析的是服务器返回的 HTML 源码,不是渲染后的视觉效果。只要链接以 a 标签 href 的形式真实存在于原始 HTML 里,无论它是被 display:none、visibility:hidden、高度设为 0,还是挪到可视区域之外,爬虫在解析时都会把它提取出来,放进待抓取队列。隐藏影响的是链接被如何评估,而不是能不能被看到。
不过要注意,这里的“隐藏”有两种完全不同的实现方式,结果差别很大。
第一种:链接本来就写在 HTML 里,只是用 CSS 藏起来
折叠面板、下拉菜单、隐藏的 Tab 内容,只要 HTML 源码中包含这些 a 标签,通常都能被发现。这种做法对搜索引擎来说和普通链接没有本质区别,差别主要在权重和可信度的判断上。
第二种:HTML 里没有,靠 JS 点击后才生成
如果折叠区域打开后才由 JavaScript 动态创建链接,或者内容来自异步接口,那么能不能被发现就取决于搜索引擎的渲染队列。渲染资源有限、排队时间长,入口页本身权重往往不高,这部分链接经常等不到渲染,最后就成了“写在页面上但从来没被抓过”。
能发现,不等于没有风险
搜索引擎对隐藏文字和隐藏链接有明确的检测。如果入口页真正展示给用户的内容很少,却通过 CSS 藏了大量链接,很可能被判定为刻意操纵。常见的后果不是立刻被惩罚,而是入口页的可信度下降、抓取优先级降低,连带着里面的目标 URL 也拿不到足够的抓取机会。
换句话说,隐藏链接解决的是页面好不好看,不解决搜索引擎愿不愿意抓。
实操中更稳妥的做法
- 能用 CSS 折叠就不要用 JS 注入,让链接一开始就存在于 HTML 源码里。
- 折叠区域里的链接数量控制在合理范围,不要为了多塞链接而隐藏。
- 保持入口页可见内容与链接主题有一定相关性,别做成纯粹的链接墙。
- 入口页本身要有基本的内容和结构,不要只是一个空壳。
怎么验证这些链接到底有没有被发现
- 用抓取工具查看原始 HTML(不是渲染后的 DOM),确认链接确实在源码中。
- 查看服务器日志,看目标 URL 有没有被蜘蛛真实请求过。有请求说明发现环节没问题,问题在收录环节。
- 如果日志里始终没有出现目标 URL,优先检查入口页是否被 robots.txt 屏蔽、是否返回 4xx 或 5xx、是否被验证码或登录拦住。
- 确认链接是否依赖用户点击或滚动才生成,必要时改成静态输出。
- 以上都正常,再考虑更新入口页内容、调整链接位置、增加外部入口等手段。
隐藏只是呈现方式的改变,不改变链接是否能被解析这一基本判断。但刻意隐藏大量无关链接,会拉低入口页的可信度,反而拖慢目标 URL 的抓取。抓取和收录受多重因素影响,没有哪种写法能保证结果。