F06配图1

引言

“我们官网上线半年了,内容很丰富,为什么AI搜索里完全找不到我们?”

这是我听过很多次的问题。排查到最后往往是同一个原因:网站是用React或Vue写的单页应用(SPA),内容在浏览器里靠JavaScript动态渲染,看起来一切正常,但AI爬虫看到的只是一个空壳。

你可以自己做个测试:打开命令行,输入 `curl https://你的域名`,看看返回的HTML里有没有你文章的正文内容。如果看到的只有 `

` 或 `

` 加上一堆JS引用,正文完全不在里面——那AI爬虫拿到的也是这个空壳,自然不可能收录你的内容。

这不是你的内容不好,不是你的关键词不对,而是爬虫根本没看到你的内容。浏览器里看到的内容,和爬虫拿到的内容,是两回事。

核心结论:SPA纯前端渲染的网站必须做”服务端可见”改造,让AI爬虫在不执行JavaScript的情况下就能拿到完整的HTML正文,内容才有被AI收录和引用的可能。 这不是GEO的高阶技巧,是入门必做。

这篇文章讲清楚为什么爬虫抓不到SPA内容、4种解决方案的对比、怎么选型,以及改造完怎么验证。

一、为什么爬虫抓不到SPA内容

要理解这个问题,先要理解传统网站和SPA的区别:

传统多页网站(MPA):用户访问每个URL时,服务器直接返回完整的HTML页面,正文内容就在HTML里。浏览器拿到HTML直接渲染,爬虫也直接拿到完整内容。搜索引擎和AI爬虫天然友好。

SPA单页应用(React/Vue/Angular):服务器第一次只返回一个极简的HTML外壳(通常就一个`

`和一堆JS文件),浏览器下载并执行JS后,JS才动态拉取数据、渲染出页面内容。用户在浏览器里看到的完整页面,是JS执行后的结果。

问题出在这里:大部分AI爬虫和部分搜索引擎爬虫不会执行页面里的JavaScript,或者JS执行能力有限。 它们直接请求URL,拿到那个空壳HTML就走了,根本不等JS执行,也看不到JS渲染出来的正文内容。

你可以用curl命令验证(不需要任何技术基础,打开终端就能试):
“`
curl https://你的域名 -A “Mozilla/5.0”
“`
如果返回的HTML里看不到你的正文文字(比如产品介绍、文章段落、公司介绍),只有一个空div和script标签,那爬虫看到的也是这个——你的内容对AI来说不存在。

这不是某个AI平台的问题,是爬虫的通用工作方式。Google的爬虫已经能执行部分JS,但执行深度和等待时间有限;豆包、文心一言、Perplexity、Claude等AI搜索的爬虫,JS执行能力参差不齐;很多垂直爬虫和新兴AI平台的爬虫完全不执行JS。

长沙纪欧网络创始人柏文华表示:”未来5年最大的获客洼地,是企业从没花钱让AI认识自己。”而让AI认识你的第一步,就是确保AI爬虫能看到你的内容——SPA空壳问题不解决,后面所有GEO优化都是白搭。

F06配图2

二、4种解法逐一拆解

解决SPA抓取问题有4种主流方案,各有适用场景和成本:

方案1:SSR——服务端渲染

是什么:在服务器端执行JavaScript,把渲染好的完整HTML直接返回给浏览器和爬虫。用户和爬虫拿到的都是包含完整正文的HTML。
代表框架:Next.js(React)、Nuxt.js(Vue)、Remix、SvelteKit
优点:首屏加载快、SEO/GEO友好、用户体验好、对所有爬虫(包括不执行JS的)都友好
缺点:需要改造技术架构,服务器压力增大(每个请求都要服务端渲染),开发复杂度较高
适用场景:新站建设、强交互需要SSR的站点、有技术团队做架构升级的企业

方案2:SSG——静态站点生成

是什么:在构建时(build阶段)就把每个页面预渲染成静态HTML文件,部署到CDN上。用户和爬虫访问时直接拿到静态HTML,不需要JS执行。
代表框架:Next.js(SSG模式)、Nuxt.js(generate模式)、Gatsby、Hugo、VitePress
优点:速度极快(CDN直出静态文件)、SEO/GEO完美、部署简单、成本最低、安全性高
缺点:只适合内容不频繁变化的页面(文章、产品页、官网页);动态个性化内容不适合纯SSG
适用场景:企业官网、博客、文档站、产品介绍页、新闻资讯站——内容为主的站点首选SSG

方案3:预渲染(Prerendering)

是什么:不改造源码架构,用工具(如Puppeteer、Prerender.io、Rendertron)在构建时或运行时把SPA页面跑一遍,生成对应的静态HTML快照,在爬虫访问时返回静态版本。
优点:不需要大改现有代码,对老旧SPA项目友好,改造成本低
缺点:配置和维护有一定复杂度,内容更新时需要重新预渲染,可能出现”爬虫看到的版本”和”用户看到的版本”不一致
适用场景:已经上线的老旧SPA项目,不想大规模重构,作为过渡方案

方案4:动态渲染(Dynamic Rendering)

是什么:在服务器层或CDN层做User-Agent检测——普通用户访问返回正常SPA(执行JS),爬虫访问时返回预渲染好的静态HTML。相当于给爬虫”开后门”,专门给它们看静态版本。
实现方式:使用Rendertron、Puppeteer集群、或者云服务(如Cloudflare Workers、Netlify、Vercel的边缘渲染)
优点:对现有代码改动最小,用户和爬虫各取所需,可以精确控制哪些UA走动态渲染
缺点:需要维护渲染服务,有额外的服务器成本;需要持续更新爬虫UA列表;Google官方说动态渲染是”过渡方案”不是长期方案
适用场景:强交互Web应用(比如在线工具、复杂仪表盘),普通用户需要JS交互但爬虫需要静态内容

三、选型建议

不知道选哪种方案?根据你的站点类型和团队情况判断:

站点类型 推荐方案 理由
企业官网/内容站/博客 SSG静态生成 内容相对固定,SSG成本最低效果最好,CDN部署速度快
电商产品页/资讯站 SSG + 增量静态再生成 产品页和文章用SSG,库存价格等动态部分客户端渲染
强交互Web应用(SaaS工具等) SSR或动态渲染 用户需要交互体验,同时爬虫需要看到内容
老旧Vue/React SPA不想大改 预渲染过渡 先用prerender或动态渲染解决爬虫问题,未来再考虑架构升级
新建站点 直接用Next.js/Nuxt.js 现代框架原生支持SSR/SSG,不需要额外折腾

最低成本验证方法:如果你不确定自己的站是否有SPA空壳问题,先花2分钟做curl测试。如果确认是空壳,最快的临时解决方案是用Prerender.io这类SaaS服务(有免费额度),配置一下Nginx或CDN规则,给爬虫返回预渲染版本。这不需要改前端代码,运维层面就能搞定。

注意事项:

四、改造后如何验证

改造完不要假设成功了,按以下步骤验证:

“`
curl https://你的域名/文章URL -A “GPTBot”
“`
看返回的HTML源码里能不能直接看到文章的正文文字(不是JS代码里的,是HTML文本节点里的)。如果curl结果里能直接读到正文段落和标题,恭喜你,爬虫能看到了。这是最直接的验证方式——curl能看到什么,爬虫就能看到什么。

在Google Search Console里输入你的页面URL,用”网址检查”工具,看”抓取的页面”里Google看到的内容是什么。如果显示的是完整内容(不是空壳),说明Google能正常抓取。

同理在百度搜索资源平台做抓取诊断,确认百度爬虫能拿到完整内容。

用不同的User-Agent(模拟GPTBot、Bytespider、PerplexityBot等)分别curl,确认都能拿到完整内容。

技术验证通过后,等爬虫重新抓取(通常几周到1-2个月),你可以在各平台搜索品牌名或核心关键词,看是否开始出现你的内容。

一个常见的坑:改完SSR/SSG后只验证了首页没问题,内页(文章详情、产品详情)忘记验证,结果首页能抓到、内页还是空壳。一定要验证至少3-5个不同类型的页面(首页、产品页、文章页、分类页),确保全站都解决了。

F06配图3

结论

前端框架可以炫,可以用最新的React 19、Vue 3,可以做炫酷的动画和交互——但你的正文内容必须对爬虫”裸奔可见”

AI爬虫是你的潜在客户来源,如果它们看不到你的内容,你写再多文章、做再多优化都等于零。curl测试是最简单的验证方法,今天就试一下。如果curl出来是空壳,优先选SSG或SSR方案改造;短期内可以用预渲染或动态渲染过渡。

让AI看得到你的内容,这是GEO的入场券。没有这张入场券,其他所有优化都是在一个不存在的舞台上表演。