不少蜘蛛池入口页为了改版方便,会用 JavaScript 在页面加载后把目标链接插入 DOM。对访客来说没问题,但链接能不能被搜索蜘蛛发现,取决于蜘蛛有没有执行脚本、执行到什么程度。
搜索蜘蛛会执行 JavaScript,但触发条件不确定
主流搜索引擎的抓取流程通常分两步:先用普通请求拿到原始 HTML,再决定要不要把页面放进渲染队列,用无头浏览器执行 JS。渲染后的 DOM 里如果出现新的 a 标签链接,理论上就能被发现。
关键在于“是否渲染”和“何时渲染”由搜索引擎自己决定。渲染资源有限,页面可能被跳过、延迟,或渲染中途超时。所以 JS 注入的链接,发现速度和稳定性都不如直接写在 HTML 里。
这些写法更容易让链接漏掉
- 链接要点击、滚动或悬停后才注入,蜘蛛不会主动触发交互。
- 提供链接的 JS 文件被 robots.txt 屏蔽,或被 CDN、防火墙拦截,渲染阶段根本拿不到脚本。
- 链接数据来自需要登录态、Cookie 或特定 UA 的接口,蜘蛛请求时返回空。
- 用 onclick、location.href 之类的跳转代替标准超链接,DOM 里没有可跟进的 href。
- 链接地址拼接在字符串里,渲染完成后也没有插入到可点击的元素中。
渲染抓取有时间和次数上的限制
即便页面被渲染,搜索引擎也要控制成本:渲染耗时过长、脚本报错、首次抓取和渲染结果差异过大,都可能让这次抓取不解析出链接。渲染型抓取普遍比纯 HTML 抓取慢,入口页数量一多,目标 URL 被发现的节奏就会明显拉长。
JS 渲染可以当补充手段,但把 URL 发现完全押在渲染上,风险偏高。
更稳妥的处理顺序
- 需要被发现的目标链接,尽量由服务端输出到 HTML,用标准 a 标签,href 给完整 URL。
- 必须用 JS 注入的,保证初始 HTML 里有一份静态链接兜底,或使用服务端渲染、预渲染。
- 同时用 sitemap、HTTP Link 响应头等方式声明 URL,减少对单一路径的依赖。
- 避免把链接放在必须交互后才出现的位置,分页、更多按钮等内容尽量在初始 DOM 中可见。
- 结合服务器日志观察蜘蛛是否抓取了 JS 文件和目标 URL,用真实记录判断效果。
怎么验证入口页的链接是否可见
可以先用抓取工具关闭 JS 抓一次,统计 HTML 里有多少可跟进的 a 标签;再开启渲染抓一次做对比。如果关闭 JS 后链接几乎为零,说明入口页对脚本依赖过重。也可以借助站长后台的 URL 检查或渲染结果,确认渲染后确实出现了目标链接。日志里如果蜘蛛只取了入口页和 JS,却没有目标 URL 的请求记录,通常意味着渲染环节没有交出链接,或者这些链接不满足跟进条件。
常见误区
一是认为所有蜘蛛都能执行 JS,忽略版本差异和渲染预算;二是把“页面看起来有链接”等同于“HTML 里有链接”;三是只在一个入口页上反复调整,却不检查站点是否用了统一的前端渲染方式。入口页更换模板、改版后,链接呈现方式往往一起变化,URL 发现效果也会跟着波动。
总而言之,搜索蜘蛛具备执行 JavaScript 的能力,但执行与否、执行到不到位都不确定。蜘蛛池入口页要把 URL 发现做得稳一些,优先用静态 HTML 链接,JS 渲染只做辅助,再用 sitemap 等方式补一层,不要依赖单一发现路径。