做蜘蛛池入口页时,一个常见做法是把链接“藏”起来——放进 HTML 注释、noscript 标签,或者用 CSS 隐藏的区块里,让访客看到的页面尽量干净。问题是,这些位置的链接,搜索蜘蛛到底能不能发现?答案不是简单的能或不能,而要看你指的是哪一个解析阶段。
先分清两个阶段:抓取解析与页面渲染
搜索引擎处理一个入口页,通常会经历两步:先拿到服务器返回的原始 HTML 做解析,再(有条件地)执行 JavaScript,得到渲染后的 DOM。两步都会提取链接,但提取规则并不相同。
- 原始 HTML 解析:只看源码里真实存在的 a 标签和 href 属性。注释里的内容属于注释节点,不会被当成链接。
- 渲染后的 DOM:执行 JS 后的最终结构,动态插入的 a 标签、被脚本改写的 href 都可能在这里被发现,但渲染有配额和延迟,不是每个页面都会走到这一步。
几类常见写法的实际结果
HTML 注释里的链接
写成 <!-- <a href="..."> --> 的链接,对原始解析来说只是纯文本,不是节点,基本不会被当成可跟进的链接。早些年有人靠注释藏链接,现在收益很低,风险却不小。
noscript 里的链接
noscript 的内容在原始 HTML 里是真实存在的,禁用 JS 的用户也会看到。部分解析器会把它读出来,但不同引擎的处理策略不一致,不能当成稳定可靠的入口。想靠它做 URL 发现,属于碰运气。
CSS 隐藏的区块
display:none、visibility:hidden、字体色与背景色相同、把区块定位到屏幕外——这类链接在 DOM 里依然存在,理论上能被提取。但“对用户不可见”是搜索引擎判定作弊的经典特征之一。隐藏链接过多时,受影响的不只是这条链接,而是整个入口页的信任度。
template 与脚本里的模板字符串
template 内部的内容在页面加载时不会渲染成可见节点,是否被提取取决于引擎实现,同样不建议作为主要入口来源。写在 JS 字符串里、只有执行时才插入 DOM 的链接,则完全依赖渲染能力,发现率更低、延迟更长。
图片、按钮、表单里的地址
这些位置的 URL 通常不会被当作可跟进链接,除非外面包了 a 标签。这一点在别处已有专门讨论,这里不展开。
为什么“把链接藏起来”这条路越来越窄
一是链接提取的容错在收紧,二是隐藏链接本身就是被重点监控的模式。把它当成主力手段,往往是入口页里的目标链接没被处理,入口页自己反倒先被降权。
想让链接被稳定发现,按这个顺序做
- 用最普通的 a 标签,href 写完整可访问的地址,不要用 onclick 或 JS 跳转替代。
- 链接放在页面主体内容里,和上下文有一定语义关系,不要集中堆在页脚或空白区块。
- 控制单页链接数量,过多会稀释每条的权重,也让页面更像纯导航页。
- 入口页本身要能正常返回 200、加载速度别太慢,否则蜘蛛可能拿不到完整 HTML。
- 辅助手段可以用 sitemap 或提交接口补齐,但它们是补充,不是用来替代站内链接结构的。
把链接藏进注释和隐藏层,短期可能骗过一次解析,长期只会让入口页整体掉出正常的抓取节奏。老老实实放在正文里的 a 标签,才是 URL 发现最稳的来源。
最后提醒一句:不同搜索引擎在渲染能力、超时时间上的差异不小,同一份入口页在两个引擎上的链接发现结果可能完全不同。与其猜规则,不如用服务器日志确认蜘蛛实际请求了哪些 URL,再决定要不要改结构。