你刚上线一个酷炫的交互页面,动画丝滑、逻辑缜密,结果搜自己网站名字——首页都排不进前五。你翻遍 robots.txt,检查了 sitemap,甚至手动提交了 URL……可搜索结果里,还是空的。
不是搜索引擎不想收,是它根本没看见你塞在 JS 里的内容。
为什么搜索引擎看不懂你的JS内容?
Google 确实会执行 JavaScript,但这件事儿不像你想的那么“全自动”。
它分两步走:先抓原始 HTML,再排队渲染 JS。中间隔着网络延迟、资源加载、执行超时、队列拥堵……哪一环卡住,你的内容就直接被跳过。
我帮一个用 Vue 做产品列表页的电商站排查过。他们首页所有商品都是 JS 动态拉取的。我在 Google Search Console 里点开“查看已抓取页面”,看到的源码只有 <div id="app"></div>——连个商品名都没冒出来。爬虫第一次来,只拿到一个空壳,不会等你 JS 加载完再走。
更现实的是:爬虫不是浏览器,它不点按钮、不滚页面、不等 API 返回。如果你的页面要等 3 秒才出标题,或者靠点击“加载更多”才补全正文,那对搜索引擎来说,那些内容就等于不存在。
3个方法检测你的JS内容是否被识别
别等上线后靠猜。开发阶段就能验证,而且不用装新工具。
方法一:查看原始 HTML 响应
右键 → “查看网页源代码”(不是“检查元素”)。你看到的,就是搜索引擎第一眼看到的全部。
如果核心文字、标题、链接、产品名都不在这份源码里,那它们大概率不会出现在搜索结果中。
之前有个 React 博客站,所有文章列表都靠 JS 渲染。源码里只有 #root 容器和几行脚本。作者改成服务端渲染后,文章标题直接出现在 HTML 里,一周内收录量明显提升。
方法二:用 Google Search Console 的网址检查工具
打开 Search Console → 左侧菜单点“URL 检查” → 粘贴你要测的页面地址 → 点“测试已发布的网址”。
重点看两个标签:
- “抓取”:显示爬虫拿到的原始 HTML
- “呈现”:显示 Google 渲染后的最终效果
如果“呈现”里能看到完整内容,说明 OK;如果还是一片空白、只有骨架、或满屏“加载中…”,那就得动手改了。
我合作过一个在线计算器工具站,所有计算结果都靠 JS 实时生成。测试发现,“呈现”结果里数字全是空的。后来他们在 HTML 里预埋了一组默认示例数据,问题当场解决。
方法三:使用 curl 命令模拟爬虫
打开终端,输入:
curl -H "User-Agent: Googlebot" https://你的网址
返回的内容,就是 Googlebot 看到的“第一版”。如果关键信息不在里面,说明你的 JS 内容对搜索引擎是隐形的。
哪些JS写法最容易坑搜索引擎
有些写法,看着很现代,但对 SEO 来说,就是隐形地关上了大门。
写法一:完全依赖客户端渲染的SPA
所有路由、所有内容,全靠 JS 在浏览器里拼。比如用 Vue Router 或 React Router 切换页面,每个 URL 返回的都是同一份空 HTML。
我见过一个企业官网,从“关于我们”到“客户案例”,全用 SPA 实现。半年过去,除了首页,其他页面在 Google 里搜都找不到。
解决方向很明确:要么上 Nuxt.js / Next.js 做服务端渲染,要么至少让每个页面的 HTML 里带着标题和核心段落。
写法二:通过 API 异步加载关键内容
职位详情、文章正文、用户评论……这些内容如果全靠 fetch 或 axios 拉,搜索引擎基本不会等。
它不发请求,不等响应,不处理回调。API 返回前,页面就是静态的“加载中”。
之前优化一个招聘站时,职位描述全靠接口获取。Search Console 测试结果里,“呈现”页面只显示三个字:“加载中…”。后来把职位标题、公司名、岗位关键词直接写进 HTML,再用 JS 补充交互,收录立刻恢复正常。
写法三:用 JS 事件触发内容显示
“点击展开全文”、“悬停显示提示”、“滑动加载更多”……这类内容,搜索引擎不会点、不会悬停、不会滑动。
它只读初始 HTML。如果重要内容被藏在 onclick 或 onmouseover 后面,那它永远看不到。
想被收录?那就让它一开始就在 HTML 里——哪怕只是静态文本,也比藏在事件里强。
实战:如何让搜索引擎顺利识别你的JS内容
不用推翻重做,这几个动作今天就能上手。
技巧一:使用动态渲染(Dynamic Rendering)
给真实用户发 JS 页面,给爬虫发预渲染好的 HTML。原理简单:服务器检测 User-Agent,如果是 Googlebot,就用 Puppeteer 或 Rendertron 提前跑一遍 JS,吐出完整 HTML 给它。
我帮一个 Angular 仪表盘站配了这套逻辑。原来一直空白的“数据报表”页,配置完当天就被 Google 收录了,自然流量也大幅增长。
技巧二:把核心内容提前到 HTML 中
最省事的办法:标题、副标题、产品名、价格、简介、导航文字……这些必须被索引的内容,直接写死在 HTML 里。
JS 不是用来“生成内容”的,而是用来“增强体验”的——比如加个切换按钮、做个平滑滚动、补个动态计数。
有个做菜谱的朋友,原来所有步骤都靠 JS 渲染。我让他把菜名、用料清单、烹饪时长这三项硬写进 HTML,其余交互保留。改完第三天,Google 就开始收录他的菜谱页了。
技巧三:合理使用 <noscript> 标签
如果你暂时没法改架构,又必须让 JS 内容被索引,可以在 <noscript> 里放一份纯 HTML 版本的核心内容。
搜索引擎会读它,用户看不到它(因为有 JS)。适合内容结构简单、更新不频繁的页面。
但别滥用:如果 <noscript> 里塞一堆动态组件或复杂表格,反而会让爬虫困惑。真要长期维护,还是建议回归服务端渲染。
不同JS框架的搜索引擎友好度对比
你选的框架,决定了搜索引擎第一眼看到的是“满汉全席”,还是“一碗白米饭”。
- Vue / React(纯客户端):默认不友好。内容全靠 JS 注入,爬虫看到的就是空壳。
- Nuxt.js / Next.js:服务端渲染开箱即用。HTML 在发给浏览器前就已生成,搜索引擎秒懂。我经手的一个博客项目,从 Vue 切到 Nuxt 后,收录率从不到三成升到接近九成。
- Angular Universal:能做服务端渲染,但配置门槛高,容易踩坑。如果是内容型站点,建议咬牙配好,否则收录会持续掉线。
- 纯静态 HTML + 少量 JS:最稳妥。标题、正文、链接全在源码里,JS 只负责加个轮播、切个 tab、验个表单。搜索引擎喜欢这种“直给”。
今天就能执行的一个具体操作步骤
打开你的网站,挑一个你最想被搜到的页面(比如产品页、文章页、服务介绍页),右键 → “查看网页源代码”。
从上往下快速扫一遍,找三样东西:
✅ 页面标题(<title> 里的文字)
✅ 主要标题(比如 <h1>)
✅ 至少一段你能想到用户会搜的关键词(比如“智能插座”“红烧肉做法”“合同模板下载”)
如果这三样里有任何一样,是靠 JS 插入的、藏在 <script> 标签里的、或者压根没出现——
今天就打开这个页面的 HTML 模板文件,把它们直接写进去。
不用等接口、不用等组件、不用等状态管理。就一行 <h1>智能插座</h1>,就够搜索引擎迈出第一步。