很多蜘蛛池入口页并不是把链接写在 HTML 里,而是用前端脚本拼出目标 URL,再插到页面上。这种页面在浏览器里看起来正常,但搜索蜘蛛拿到源码时可能什么都看不到。于是问题就变成:搜索蜘蛛到底会不会执行脚本,把链接补出来?
搜索蜘蛛处理入口页的两个阶段
抓取一个页面,搜索引擎通常分两步走。第一步是取回原始 HTML,解析其中已有的链接、图片和脚本资源;第二步是决定是否把页面排进渲染队列,用类似浏览器的环境执行脚本,拿到脚本跑完之后的 DOM,再从里面补充一批新的 URL。
第一步基本一定会发生,第二步则取决于页面的重要程度、渲染资源的调度情况以及是否有必要。所以,纯 JS 注入的链接处在“可能被发现、也可能一直不被发现”的中间状态,它不是一条稳定通道。
三种 JS 注入方式的差别
URL 字符串直接写在 HTML 的脚本里
如果目标链接以文本形式出现在源码的 <script> 块中,即便没有渲染,抓取阶段也可能把它当作疑似 URL 提取出来。但这属于顺带捞到:链接的上下文和锚文本不完整,发现之后是否跟进也不确定,不能当主力手段。
通过接口异步取回数据再插入 DOM
链接来自后端接口,由脚本拿到 JSON 后再生成 DOM,源码里只有一个接口地址,看不到任何目标 URL。这类入口页几乎必须依赖渲染抓取,而渲染抓取有排队、超时、失败重试等不确定因素,链接被漏掉很常见。
需要点击、滚动或等待才出现
链接藏在折叠区、Tab 切换或者懒加载里,只有在交互之后才插入页面。渲染抓取一般不会主动模拟复杂交互,这类链接被发现的可能性最低。
怎么判断你的入口页属于哪一种
- 禁用浏览器 JS,或者直接用抓取工具看原始 HTML,目标链接还在不在。
- 翻服务器日志,区分普通抓取和渲染抓取(渲染请求常带特定 UA 标识或来自不同 IP 段)。
- 查看抓取快照,确认里面有没有脚本执行后才出现的链接。
- 对比“入口页被访问次数”和“目标 URL 被访问次数”,两者长期不匹配,往往说明链接没有被有效解析。
更稳妥的做法
- 把关键链接放进服务端输出的 HTML,尽量安排在首屏内容里。
- 确实要用脚本,也先输出基础 HTML 再用 JS 增强,而不是给搜索蜘蛛一个空壳页面。
- 入口页不是唯一渠道,把 sitemap、URL 提交接口作为冗余一起使用。
- 用日志逐个核对目标 URL 的抓取情况,别只看入口页有没有被抓。
渲染抓取只是把“被发现的概率”抬高一点,它既不等于收录,也不等于目标 URL 一定会被抓取。不要把发现链接这件事押在单一环节上。
几个容易踩的误区
一是把“浏览器里能看到”等同于“搜索蜘蛛能看到”;二是以为入口页被抓取,就等于里面的链接都会被跟进;三是发现链接没被抓,就一味加更多入口页,而不是先解决渲染依赖的问题。入口页的价值在于提供一条可被解析的路径,路径越简单、越靠前,越容易被走通。