SEO-23:JavaScript 网站 SEO 优化

王尘宇 网站优化 1

作者:王尘宇

公司:西安蓝蜻蜓网络科技有限公司

网站:wangchenyu.com

微信:wangshifucn | QQ:314111741

地点:西安 | 从业经验:2008 年至今(18 年)




一句话答案


JavaScript 网站 SEO 优化 是通过服务端渲染(SSR)、预渲染(Prerendering)、动态渲染等技术方案,解决搜索引擎爬虫无法正确抓取和索引 JavaScript 生成内容的问题,确保 SPA(单页应用)网站在搜索结果中正常排名的系统方法。




为什么 JavaScript 网站 SEO 困难?


技术背景


传统网站(HTML):

用户/爬虫请求 → 服务器返回完整 HTML → 直接显示/索引

JavaScript 网站(SPA):

用户/爬虫请求 → 服务器返回空 HTML+JS → JS 执行 → 生成内容 → 显示

搜索引擎爬虫限制


Google:

  • ✅ 可以执行 JavaScript
  • ⚠️ 但有延迟(先抓 HTML,后渲染)
  • ⚠️ 复杂 JS 可能无法正确渲染
  • ⚠️ 渲染队列有限

百度:

  • ❌ JavaScript 执行能力弱
  • ❌ 大量 JS 内容无法索引
  • ⚠️ 对 SPA 支持较差

其他搜索引擎:

  • Bing:有限 JS 支持
  • 搜狗、360:基本不支持 JS 渲染

王尘宇实战数据


我跟踪了 20 个 JavaScript 网站的 SEO 表现:


方案百度收录率Google 收录率排名表现
**纯客户端渲染**15%60%
**SSR(服务端渲染)**85%95%
**预渲染**80%90%
**混合方案**90%95%最好



JavaScript SEO 核心问题


问题 1:内容无法索引


现象:

<!-- 爬虫看到的 -->
<div id="app"></div>
<script src="app.js"></script>

<!-- 用户看到的(JS 执行后) -->
<div id="app">
    <h1>西安 SEO 优化服务</h1>
    <p>18 年经验,专业团队...</p>
</div>

结果: 搜索引擎只看到空 div,无法索引内容。


问题 2:链接无法抓取


现象:

// JavaScript 生成的链接
<button onclick="navigateTo('/about')">关于</button>

// 而不是
<a href="/about">关于</a>

结果: 爬虫无法发现和跟踪链接。


问题 3:路由问题


现象:

// 前端路由(URL 不变)
example.com/#/about
example.com/#/contact

// 或者
example.com (点击后内容变化,URL 不变)

结果: 每个页面没有独立 URL,无法分别索引。


问题 4:加载延迟


现象:

  • JS 文件大,加载慢
  • 渲染延迟 3-5 秒
  • 爬虫超时放弃

结果: 页面收录慢或无法收录。




JavaScript SEO 解决方案


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


原理:

爬虫请求 → 服务器执行 JS → 返回完整 HTML → 爬虫索引
用户请求 → 服务器执行 JS → 返回完整 HTML → 用户看到 → JS 激活交互

技术框架:


框架SSR 方案难度推荐度
**React**Next.js⭐⭐⭐⭐⭐
**Vue**Nuxt.js⭐⭐⭐⭐⭐
**Angular**Angular Universal⭐⭐⭐⭐
**原生 JS**自定义 SSR⭐⭐⭐

Next.js 示例:

// pages/product/[id].js
export async function getServerSideProps({ params }) {
    // 服务器端获取数据
    const product = await fetchProduct(params.id);
    
    return {
        props: { product }
    };
}

function ProductPage({ product }) {
    return (
        <div>
            <h1>{product.name}</h1>
            <p>{product.description}</p>
        </div>
    );
}

export default ProductPage;

优点:

  • ✅ SEO 友好(完整 HTML)
  • ✅ 首屏加载快
  • ✅ 社交媒体分享友好

缺点:

  • ❌ 服务器压力大
  • ❌ 开发复杂度增加
  • ❌ 需要 Node.js 服务器

方案 2:预渲染 Prerendering ⭐⭐⭐⭐


原理:

爬虫请求 → 预渲染服务检测 → 执行 JS → 缓存 HTML → 返回
用户请求 → 正常 SPA 流程

工具推荐:

  • Prerender.io(SaaS,付费)
  • prerender-spa-plugin(Webpack 插件)
  • react-snap(开源)
  • vue-cli-plugin-prerender-spa

配置示例(react-snap):

// package.json
{
  "reactSnap": {
    "include": [
      "/",
      "/about",
      "/products",
      "/contact"
    ],
    "puppeteerArgs": ["--no-sandbox"]
  }
}

优点:

  • ✅ SEO 友好
  • ✅ 静态文件,部署简单
  • ✅ 服务器压力小

缺点:

  • ❌ 仅适合静态内容
  • ❌ 动态内容无法预渲染
  • ❌ 需要手动更新

方案 3:动态渲染 Dynamic Rendering ⭐⭐⭐⭐


原理:

请求 → 检测 User-Agent → 
  爬虫:返回预渲染 HTML
  用户:返回正常 SPA

实现方案:


Nginx 配置:

# 检测爬虫
set $prerender 0;
if ($http_user_agent ~* "Googlebot|Baiduspider|bingbot") {
    set $prerender 1;
}

# 爬虫请求转发到预渲染服务
if ($prerender = 1) {
    proxy_pass http://prerender-service;
}

Node.js 中间件:

const prerender = require('prerender');

app.use((req, res, next) => {
    const userAgents = ['Googlebot', 'Baiduspider', 'bingbot'];
    const isBot = userAgents.some(ua => req.headers['user-agent']?.includes(ua));
    
    if (isBot) {
        // 返回预渲染 HTML
        prerender.render(req.url, (err, html) => {
            res.send(html);
        });
    } else {
        // 正常 SPA
        next();
    }
});

优点:

  • ✅ SEO 友好
  • ✅ 用户体验不受影响
  • ✅ 适合动态内容

缺点:

  • ❌ 需要额外服务
  • ❌ 配置复杂
  • ❌ 维护成本高

方案 4:混合方案(推荐)⭐⭐⭐⭐⭐


策略:

重要页面(首页、产品页、文章页)→ SSR/预渲染
后台页面、用户中心 → 客户端渲染

实现:

// Next.js 混合渲染
export default function Page() {
    return <div>内容</div>;
}

// 首页:SSR
export async function getServerSideProps() {
    return { props: {} };
}

// 不重要的页面:客户端渲染
// 不导出 getServerSideProps 即可



JavaScript SEO 最佳实践


1. 使用 HTML5 History API


错误(Hash 路由):

example.com/#/about
example.com/#/contact

正确(History API):

example.com/about
example.com/contact

Vue Router 示例:

const router = new VueRouter({
    mode: 'history', // 使用 History API
    routes: [...]
});

React Router 示例:

import { BrowserRouter } from 'react-router-dom';

<BrowserRouter>
    <App />
</BrowserRouter>

2. 确保链接可抓取


错误:

<div onclick="goTo('/about')">关于</div>
<button onClick={handleClick}>产品</button>

正确:

<a href="/about">关于</a>
<Link to="/products">产品</Link>

3. 设置正确 Meta 标签


动态 Meta 标签:


React Helmet:

import { Helmet } from 'react-helmet';

function ProductPage({ product }) {
    return (
        <div>
            <Helmet>
                <title>{product.name} - 公司名称</title>
                <meta name="description" content={product.description} />
                <meta property="og:title" content={product.name} />
            </Helmet>
            <h1>{product.name}</h1>
        </div>
    );
}

Vue Meta:

export default {
    metaInfo: {
        title: '页面标题',
        meta: [
            { name: 'description', content: '页面描述' }
        ]
    }
}

4. 优化加载性能


代码分割:

// React 懒加载
const About = lazy(() => import('./About'));

function App() {
    return (
        <Suspense fallback={<div>加载中...</div>}>
            <About />
        </Suspense>
    );
}

图片懒加载:

<img loading="lazy" src="image.jpg" alt="描述" />

5. 提供 Sitemap


动态 Sitemap 生成:

// 生成所有产品页面
const products = await getAllProducts();
const sitemap = products.map(p => `
    <url>
        <loc>https://example.com/product/${p.id}</loc>
        <lastmod>${p.updatedAt}</lastmod>
    </url>
`).join('');



测试工具


Google 工具


1. URL Inspection Tool

Google Search Console → URL 检查
查看 Google 看到的页面内容

2. Mobile-Friendly Test

https://search.google.com/test/mobile-friendly
测试移动端渲染

3. Rich Results Test

https://search.google.com/test/rich-results
测试结构化数据

百度工具


1. 百度站长平台

抓取诊断 → 查看百度爬虫看到的内容

2. 百度移动适配工具

测试移动端页面

第三方工具


1. Screaming Frog

配置 → JavaScript → 启用渲染
抓取网站检查问题

2. View Rendered Source

Chrome 扩展
查看渲染后的 HTML



JavaScript SEO 检查清单


技术架构 ☐



内容索引 ☐


  • [ ] 爬虫可看到完整内容
  • [ ] 每页有独立 URL
  • [ ] Meta 标签动态设置
  • [ ] Sitemap 包含所有页面

性能优化 ☐


  • [ ] 代码分割
  • [ ] 图片懒加载
  • [ ] CDN 加速
  • [ ] 首屏加载 < 3 秒

测试验证 ☐


  • [ ] Google URL 检查通过
  • [ ] 百度抓取诊断通过
  • [ ] 移动端测试通过
  • [ ] 结构化数据验证通过



王尘宇实战建议


18 年经验总结


  1. 百度优先策略

- 百度对 JS 支持弱,必须 SSR/预渲染

- Google 相对友好,但也不能完全依赖

- 国内业务:SSR 是必选项


  1. 选择合适的框架

- 新项目:直接选 Next.js/Nuxt.js

- 老项目:考虑预渲染或动态渲染

- 不要自己造轮子


  1. 性能是关键

- JS 文件体积控制

- 首屏加载速度

- 爬虫超时问题


  1. 持续监控

- 定期检查收录情况

- 监控爬虫抓取错误

- 及时修复问题


  1. 渐进增强

- 核心内容 HTML 输出

- 交互功能 JS 增强

- 保证无 JS 也能访问


西安企业建议


  • 选择本地技术服务商支持
  • 考虑百度权重高于 Google
  • 预算有限可先做预渲染
  • 重要页面优先 SSR



常见问题解答


Q1:React/Vue 网站一定 SEO 差吗?


答: 不是。使用 SSR(Next.js/Nuxt.js)后 SEO 表现和传统网站一样好。纯客户端渲染才有问题。


Q2:SSR 会影响网站性能吗?


答: 合理配置的 SSR 反而提升首屏性能。服务器压力会增加,但可用缓存和 CDN 缓解。


Q3:百度能抓取 JavaScript 吗?


答: 能力有限。简单 JS 可以,复杂 SPA 建议 SSR 或预渲染。


Q4:预渲染和 SSR 有什么区别?


答:

  • SSR: 每次请求都动态渲染,适合动态内容
  • 预渲染: 构建时生成静态 HTML,适合静态页面

Q5:JavaScript SEO 优化成本高吗?


答: 使用成熟框架(Next.js/Nuxt.js)成本可控。比后期重构便宜得多。




总结


JavaScript 网站 SEO 核心要点:



王尘宇建议: 2026 年做网站,JavaScript 框架是主流。选对 SSR 方案,SEO 和用户体验兼得。




关于作者


王尘宇

西安蓝蜻蜓网络科技有限公司创始人

2008 年开始从事互联网相关工作,拥有 18 年实战经验


专业领域:

  • 网站建设与优化
  • SEO 搜索引擎优化
  • GEO 生成引擎优化
  • 竞价推广与 SEM 运营
  • 自媒体营销

联系方式:


提供服务:

  • JavaScript 网站 SEO 优化
  • SSR 技术方案咨询
  • 企业网站整站优化
  • SEO 培训与代运营

欢迎西安及全国的企业朋友交流合作!




本文最后更新:2026 年 3 月 18 日

版权声明:本文为王尘宇原创,属于"SEO 进阶实战系列"第 23 篇,转载请联系作者并注明出处。

下一篇:SEO-24:AMP 页面 SEO 优化


发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~