不少蜘蛛池入口页为了省事或让页面看起来更“动态”,把目标 URL 交给 JavaScript 拼出来,再插入到页面里。问题也随之出现:搜索蜘蛛到底会不会执行这些脚本,并顺着链接发现目标 URL?答案不是简单的“会”或“不会”,得看它走到了哪一步。
先分清两条抓取路径
搜索蜘蛛第一次抓取时,拿到的是服务器返回的原始 HTML。如果目标链接不在原始 HTML 里,第一遍解析就看不到。之后搜索引擎可能把页面放进渲染队列,用无头浏览器执行 JavaScript,再解析一次渲染后的 DOM。渲染要消耗额外资源,是否执行、多久执行、执行到什么程度,各搜索引擎策略不同,也会受页面优先级影响。
蜘蛛池入口页往往数量多、正文薄、链接结构复杂,在渲染队列里通常不占优势。链接只靠 JavaScript 生成,被发现的时间会被拉长,也可能一直等不到渲染那一步。
哪些写法风险较高
- 用 document.write 或 innerHTML 在页面加载后插入 a 标签。
- 用 onclick 做跳转,href 写成空值或 javascript:void(0)。
- 链接地址放在接口返回的 JSON 里,前端请求后再渲染。
- 前端框架客户端渲染,首屏 HTML 里没有可跟的链接。
这些写法对真实用户可能正常,但搜索蜘蛛不一定执行到那一步。尤其是链接地址依赖异步请求时,渲染时机和网络状态都会影响结果。
怎么验证是否被跟到
- 用 curl 或查看网页源代码,确认目标 URL 是否出现在原始 HTML 中。
- 用搜索引擎的 URL 检查工具,查看渲染后的 HTML 里有没有链接。
- 看服务器日志:搜索蜘蛛有没有请求相关 JS 文件或接口,有没有直接访问目标 URL。
如果原始 HTML 没有、渲染后也没有,就不要指望它自动发现。反过来,如果原始 HTML 里已经存在链接,即使样式或位置不起眼,被跟到的概率也会高很多。
更稳妥的做法
- 把关键链接直接写进初始 HTML 的 里,JavaScript 只做交互增强。
- 确实需要动态生成时,至少保留服务端渲染或预渲染版本。
- 入口页数量大时,用 sitemap 或提交接口补充 URL 发现渠道,别把发现完全押在脚本上。
- 检查 robots.txt,避免误屏蔽 JS 文件或接口路径,导致页面无法正常渲染。
JavaScript 渲染是补充手段,不是发现链接的可靠主路径。入口页这种场景,能写在 HTML 里的链接就别留给脚本。
总结一句:搜索蜘蛛会执行一部分 JavaScript,但不等于会执行你的每一段脚本。目标 URL 能不能被发现,先看原始 HTML 里有没有它。