先给结论:能不能发现,取决于它是不是真的“链接”
搜索蜘蛛从入口页发现 URL,靠的是解析 HTML 里的 a 标签加 href 属性。凡是能还原成这个结构的写法,都有被发现的机会;还原不出来的,基本不会被当成链接处理。图片、按钮、表单之所以让人困惑,是因为它们在浏览器里都能“点击跳转”,但对解析器来说完全是另一回事。
图片链接:外面有 a 才有链接
- 用 a 标签包住 img,并且 a 的 href 指向目标 URL:href 是标准链接,和普通文字链接一样会被解析。
- 只写 img 的 src 指向目标 URL:这是引用图片资源,不是链接,蜘蛛不会把它当成页面地址去跟进。
- 用图片热区(map 加 area 的 href)做入口:href 属于链接,理论上可解析,但结构复杂,实际跟进情况通常不如普通 a 稳定。
按钮:button 不是链接
button 元素和 input type=button 都不是链接元素,即使绑定脚本里写着跳转地址,也不属于 HTML 解析阶段的链接发现范围。用 CSS 把 a 标签做成按钮外观是可以的,因为底层还是 href;用真正的 button 元素再靠脚本跳转,就回到了“链接由脚本生成”的老问题。
判断标准很简单:把页面 HTML 抓下来,在源码里搜索目标 URL。搜不到,就不要指望搜索蜘蛛从链接层面发现它。
表单:action 一般不算可跟进的链接
表单的 action 是提交地址,通常不作为普通链接跟进。GET 表单的 action URL 偶尔会被收录,但这不是可依赖的机制,POST 表单更不会。把目标页做成表单提交后的结果页,等于把发现路径交给了用户行为,而不是链接结构。
常见的“看起来能跳转但抓不到”写法
- 按钮用 onclick 跳转:源码里没有 href,只有脚本事件。
- 用 div 或 span 加点击事件:没有链接语义。
- 图片入口只给 img 的 src,外面没有 a 包裹。
- a 标签的 href 写成 javascript:void(0),真实地址藏在 data 属性里。
- 按钮提交表单后 302 到目标页,中间隔了一层 POST 请求,蜘蛛一般不会主动去走。
想被稳定发现,可以怎么改
- 优先用 a 标签,href 写完整地址,不要依赖脚本再拼接路径。
- 需要按钮样式时,用 a 加 class 做外观,不要用 button 元素代替链接。
- 图片入口保留外层 a,图片的 alt 写清目标页主题,便于人工核对。
- 让服务端直接输出链接,避免首屏 HTML 里没有、靠脚本补上。
- 链接位置尽量靠近正文区域,页脚堆叠、隐藏层或折叠面板里的链接,被发现的机会通常更低。
怎么验证改完是否生效
不要在浏览器里点一下能跳转就认为没问题,要看源码和日志:
- 查看页面源代码(不是右键检查元素后的 DOM),确认目标 URL 出现在 href 中。
- 关闭 JavaScript 后打开入口页,看链接是否还存在于 HTML 里。
- 在服务器日志里观察入口页被抓之后,是否出现对目标 URL 的请求,注意两者时间可能相隔数小时到数天。
- 如果长期只有入口页被抓、目标页没有任何请求记录,先回到链接写法本身排查,而不是急着增加入口页数量。
需要说明的是,链接写法正确只解决了“可被发现”这一步。是否抓取、什么时候抓取、抓取后如何处理,仍由搜索引擎自己决定,任何入口页都无法保证结果。把结构写规范,是为了不给自己制造无谓的障碍。