点击正常,不等于入口存在
站内很多链接在浏览器里点得动,但对搜索蜘蛛来说并不算入口。典型情况是 <a> 标签没有 href,或 href 写成了 #、javascript:void(0),真正的跳转由 onclick 或事件委托完成。蜘蛛解析 HTML 时取不到目标 URL,自然不会把该地址排进抓取队列。
容易踩到的几种形态
- 空 href 与占位符:href="#"、href="javascript:;",点击后由脚本改地址。
- 按钮或 div 充当链接:用 button、span、div 绑点击事件,元素本身不携带 URL。
- 事件委托统一拦截:列表容器绑定一次点击,靠 data-url 属性取地址。
- 表单跳转:筛选、排序、翻页通过表单提交实现,蜘蛛通常不会主动提交。
- 前端路由:history.pushState 或 hash 变化,服务端没有对应的可抓取 HTML。
排查顺序
- 禁用 JavaScript 打开页面,看目标地址是否还存在于 HTML 源码中。
- 对比原始 HTML 与渲染后的 DOM,确认 href 是否运行时才写入。
- 在抓取日志里搜索目标路径,如果长期没有请求记录,基本可以判断入口缺失。
- 检查 Sitemap 是否覆盖这些 URL,确认兜底入口是否正常。
修复的方向
核心是让需要被发现的内容,都有一段服务端输出的真实 href。JavaScript 用来增强体验,而不是作为唯一跳转方式。
- 把 data-url 还原成真实链接,脚本只负责拦截和视觉反馈。
- 筛选、排序参数尽量用链接承载,或保留一个可抓取的基础列表页。
- 分页不要只留“加载更多”按钮,保留 page=2 这类可直接访问的地址。
- 前端路由页面,考虑提供对应的服务端渲染或静态入口。
Sitemap 是补充,不是替代
Sitemap 能补入口,但替代不了内链。内链同时承担层级表达和权重传递,Sitemap 更像是一份发现清单。两者指向同一批 URL 时,抓取路径会更稳定。
抓取路径上的连带影响
如果导航和列表页大量依赖脚本跳转,蜘蛛能顺着的真实链接会变得很少,抓取容易集中在首页和一级栏目。把关键入口改成真实 href,再配合扁平的内链结构,深层页面被发现的概率才会提高。
服务器稳定性同样影响恢复
入口修好后如果长期没有访问,要检查服务器响应。超时、5xx、连接重置都会让抓取中断,蜘蛛会降低后续访问频率。先把响应时间和错误率控制在正常区间,再观察入口是否逐步被发现。
链接形态修复后,抓取恢复通常需要一段时间,不要因为一两天没有变化就反复调整站点结构。
验证与长期维护
改动上线后,用抓取日志按路径统计请求量,对比修改前后。也可以定期在无 JS 环境下抽查关键入口。把“每个可点击项是否对应真实 URL”写进前端评审清单,比事后排查更省力。
最后提醒一句:不要用 nofollow 或 robots 去遮盖失效入口,那只是隐藏症状。真正要解决的是服务端输出里没有可解析的链接地址。