在蜘蛛池入口页里放链接,最常见的写法是 a 标签加 href。但实际运营中,很多人会把目标地址藏在图片、按钮、表单甚至 CSS 背景里,理由是“用户点得过去,蜘蛛应该也看得到”。这里其实是两件事:能被点击,和能被搜索蜘蛛解析成可跟进的链接,并不等价。
搜索蜘蛛发现链接,靠的是什么
搜索蜘蛛抓到一个 HTML 之后,会先做文档解析,再从解析结果里提取链接。对绝大多数搜索引擎来说,最稳定、最直接的可发现链接就是 a 元素上的 href,以及 area 这类语义相同的标签。其他位置上的地址,要么需要额外的渲染成本,要么根本不在链接提取的范围内。
能被解析成链接的,才会进入 URL 发现队列;能被点击的,不一定进得去。
几种常见写法的实际结果
a 标签包住图片:可以
这是最稳妥的图片链接写法。a 的 href 里放目标地址,图片只作为锚文本的替代内容。蜘蛛从 href 就能拿到 URL,图片本身只影响这条链接的可读性,不影响发现。
单独的 img,地址写在 src 里:不行
图片的 src 是资源地址,不是链接。蜘蛛会把它当成需要抓取的图片资源,但不会把它当成“可以继续跟进的页面入口”。即使这张图本身就是一张可点击的导航图,只要外面没套 a,就不会产生链接关系。
button、div 加 onclick 或事件监听:不行
这类写法依赖 JavaScript 执行,地址往往藏在脚本变量里。搜索引擎对 JS 渲染的支持程度不一,就算能渲染,按钮本身在链接图里也没有明确位置。把入口页的 URL 发现押在这上面,稳定性很差。
表单的 action:不作为普通链接跟进
表单的 action 是提交地址。蜘蛛一般不会像对待页面链接那样主动去“点”一个表单并跟进提交结果。把它当链接通道用,基本是无效的。
CSS 背景图或伪元素里的地址:不行
写在样式文件或 style 属性里的图片地址,连图片资源都未必被抓,更不可能产生页面链接。
图片热区 area:可以
area 标签带 href 时,语义上等同于链接,通常能被正常提取。不过它依赖 map 结构,可读性和维护性都不如直接写 a,实际用得少。
为什么这些写法容易让人误判
因为判断标准常常是“我自己点了一下,能打开”。但人工点击走的是浏览器渲染路径,而链接发现走的是文档解析路径。这两条路径的交集只有一部分。入口页恰恰是拿来给蜘蛛发现 URL 用的,如果结构上不具备可解析性,用户端再顺滑也没有意义。
想保留按钮或图片外观,可以这样改
- 外观交给 CSS,结构交给 a。 想做按钮样式,就给 a 加样式类,让它看起来像按钮,而不是用 button 元素代替链接。
- 图片一定要套 a。 图片导航、banner 入口,外层都补一个指向目标页的 a 标签,href 写真实地址。
- href 里直接放最终地址。 不要留空再用脚本补,也不要只写 # 或 javascript:。
- 地址不要经过事件函数。 需要记录点击可以做埋点,但不要让埋点成为获取地址的唯一途径。
改完之后按这个顺序自查
- 查看页面源码,搜目标域名或路径,确认它出现在某个 href 里,而不是只出现在脚本、样式或图片属性中。
- 禁用 JavaScript 再打开页面,看关键入口是否还能以链接形式存在。
- 用抓取工具的纯 HTML 抓取模式取一次页面,看返回的源码里有没有这些链接。
- 清理掉指向已失效页面的旧链接,避免入口页里堆积无效入口。
几个常见误区
第一,认为“蜘蛛会渲染,所以什么写法都行”。渲染是有成本的,也不保证完整执行。第二,认为链接数量够多就一定有效,如果其中大部分不是 a 标签,实际能被发现的可能很少。第三,只改首页模板,忽略了列表页、详情页里的同类问题。
总结一句:入口页里想让搜索蜘蛛发现并跟进某个地址,最省事的做法始终是把它放进 a 标签的 href 里。样式可以做得花哨,但承载地址的那层结构越简单越好。