浅谈前后端分离系统的SEO优化

开发一个系统,不管是从头开始,还是在已有系统上二次开发,从来都不是一蹴而就的事情。在上线以前总觉得已经做够了足够的测试,但是在上线之后还是会出现各种各样的问题。

有的问题,如果是新系统完全可以避免,正是由于是在已有系统上开发的为了兼容wp才会引入一系列的问题,这类问题主要是wp原生的一些机制兼容问题导致的包括但不限于:

1.wp固定连接的兼容

2.shortcode的解析处理

3.wp资源文件与新系统资源文件的路径兼容处理

4.wp启用插件的功能实现,邮件通知、micro-post、邮件发送、邮件模板等等

5.其他的未知问题

也有一部分是新系统天生的缺陷:seo不友好,搜索引擎爬虫无法获取网页内容,毕竟robot不会执行js,这个是前后端分离系统的必然缺陷。

<!doctype html>
<html lang="zh-CN">
  <head>
    <meta charset="UTF-8" />
    <link
      rel="icon"
      href="https://zhongxiaojie.cn/wp-content/uploads/2026/01/uugai.com-166111691272754-100x100.png"
      sizes="32x32"
    />
    <link
      rel="icon"
      href="https://zhongxiaojie.cn/wp-content/uploads/2026/01/uugai.com-166111691272754-200x200.png"
      sizes="192x192"
    />
    <link
      rel="apple-touch-icon"
      href="https://zhongxiaojie.cn/wp-content/uploads/2026/01/uugai.com-166111691272754-200x200.png"
    />
    <meta
      name="msapplication-TileImage"
      content="https://zhongxiaojie.cn/wp-content/uploads/2026/01/uugai.com-166111691272754-300x300.png"
    />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta
      name="description"
      content="爱好广泛的女王 独立APP开发者 AI修理师 爬虫砖家 逆向工程师 人工智能 全栈工程师"
    />
    <meta
      name="keywords"
      content="人工智能,机器学习,ml,逆向分析,信息安全,物联网,ida,uniapp,python,爬虫,妹子图,秀人集,java,vue"
    />
    <meta
      name="theme-color"
      content="#ff4f87"
    />
    <link
      rel="manifest"
      href="/manifest.json"
    />
    <link
      rel="stylesheet"
      href="/vendor/enlighterjs.min.css"
    />
    <link
      rel="stylesheet"
      href="/vendor/simple-microblogging.css"
    />
    <title>obaby 𝐢‍𝐧⃝ void - 程序媛 / 独立开发者 / 智商不稳定的女神经</title>
    <script type="module" crossorigin src="/assets/index-DFHpxK1A.js"></script>
    <link rel="stylesheet" crossorigin href="/assets/index-CKljzL1r.css">
  </head>
  <body>
    <div id="app"></div>
    <script
      defer
      src="/vendor/enlighterjs.min.js"
    ></script>
    <script defer src="/vendor/obaby.js"></script>

  </body>
</html>

 

当然有人会比较在意这个东西,不是说这个东西不对。可能是自己没那么在乎吧,之前就曾经收到过数次关于seo友链不显示的问题,上次是搞页面静态化。

其实,在我的博客添加的友链,也并不是全部都不显示,毕竟还有其他的域名,zhongxiaojie.com 以及 oba.by等还是会显示完整的友链信息,这两个域名并没有切换到新的前后端分离的系统。所以,我博客的友链,相当于数个站都给友链做了多次链接,我不知道这个东西对于seo有没有作用,至于是有好处,还是有坏处,我并不清除,我自己并不是那么关注所谓的seo。如果觉得这样反而会出问题的,欢迎反馈,我会及时删除相关链接哈。

当然,这个东西有办法解决吗?答案自然是有,至于解决方法,那就是继续回归服务器渲染。

这解决方案真的是简单粗暴啊,合着这折腾来折腾去,又要弄回服务器渲染,这辛辛苦苦四十年,一夜回到解放前?

采用这种简单粗暴的方法来解决seo问题,显示不是本仙女的作风。既然是针对搜索引擎的,那就直接对搜索引擎做单独的处理就完了。检测ua,如果是收缩引起的ua返回服务器渲染之后的内容,如果是正常浏览(搜索引擎爬虫意外的ua)返回前后端分离的内容。

要实现服务器渲染,基于vue的可以参考nuxt.js(百度百科):

Nuxt.js是由NuxtLabs团队于2016年10月推出的基于Vue.js的开源Web框架,采用MIT License授权。该框架灵感来源于Next.js,Nuxt采用了约定俗成的规范以及一种明确的目录结构,以实现对重复性任务的自动化处理,并使开发人员能够专注于推进新功能的开发。 [2] [5] [8]
Nuxt默认内置服务器端渲染(SSR)功能、支持静态站点生成(SSG)和单页面应用(SPA)三种部署模式,可通过”nuxt generate”命令生成预渲染HTML文件实现静态化部署 [5] [7]。采用模块化架构提供50多个扩展模块,支持TypeScript类型安全、推送和现代化开发工具链 [4] [6]

接下来也就简单了,创建nuxt项目,实现与frontend同样的页面路由和相关的页面文件布局。接口可以直接复用当前的接口,

配置openresty的处理逻辑:

# -----------------------------------------------------------------------------
# Dynamic Rendering(SEO):爬虫 UA → Nuxt SSR;普通用户 → 现有 SPA
# - Nuxt SSR 服务建议监听 127.0.0.1:3000(可按需调整)
# - ?__ssr=1 可强制走 SSR(方便自测/排障)
# - 仅对“页面路由”生效,不影响 /assets、/vendor、/bp-api、WP 后台等
# -----------------------------------------------------------------------------
set $bp_force_ssr 0;
if ($arg___ssr = "1") {
    set $bp_force_ssr 1;
}

set $bp_is_bot 0;
if ($http_user_agent ~* "(googlebot|bingbot|baiduspider|yandexbot|duckduckbot|slurp|sogou|360spider|bytespider|petalbot|facebookexternalhit|twitterbot|rogerbot|ahrefsbot|semrushbot|mj12bot)") {
    set $bp_is_bot 1;
}

location @nuxt_ssr {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Uri $request_uri;
}

# 418 跳转技巧:在页面路由里 return 418 → error_page 转到 @nuxt_ssr
error_page 418 = @nuxt_ssr;

启动之后就可以查看服务器渲染的页面了:

当然,这个实现方法的缺点就是得完全复刻frontend的相关路由和页面,优点就是不用关注原来的系统实现逻辑,哪怕爬虫seo系统出问题也不会影响现有的系统运行。

 



闺蜜圈APP

You may also like

37 comments

  1. Level 1
    Google Chrome 147.0.0.0 Google Chrome 147.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition cn中国–北京–北京 新国信通信有限公司 IPv4

    前端都用框架了,直接一步到位SSG托管得了。

    1.  公主 Queen Queen 
      Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–崂山区–中国联通–3GNET网络 IPv6

      不大喜欢这种静态页面生成逻辑,改了东西还得再跑一遍生成。嘎嘎。

      1. Level 1
        Google Chrome 147.0.0.0 Google Chrome 147.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition cn中国–江苏省–南京市–溧水区–中国联通–3GNET网络 IPv6

        还好吧,action自动构建又不用自己打包!另外你的#app内空空如也 是不是被NUXT的Fallback机制给回退了 smile 我记得以前写的时候也出现过这种情况,

        1.  公主 Queen Queen 
          Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–崂山区–中国联通–3GNET网络 IPv6

          #app 哪个地方?没注意呢

  2. Level 4
    Firefox 140.0 Firefox 140.0 GNU/Linux x64 GNU/Linux x64 cn中国–广东省–珠海市–香洲区–中国电信–CTNET网络 IPv6

    还是要借用 nuxt.js 来做服务器渲染么,我也想过,但是要换框架,改代码唉~

    1.  公主 Queen Queen 
      Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–崂山区–中国联通–3GNET网络 IPv6

      我这个是独立运行的,只给搜索引擎用,不影响现有的系统。

  3. Level 4
    Google Chrome 147.0.0.0 Google Chrome 147.0.0.0 Windows 11 x64 Edition Windows 11 x64 Edition cn中国–江苏 移动 IPv4

    开发这种事,感觉总会有新的需求和问题出来,然后就是再一遍的修改

    1.  公主 Queen Queen 
      Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–崂山区–中国联通–3GNET网络 IPv6

      是啊,一旦开始了之后,需求就越来越多

  4.  Level 3
    Google Chrome 147.0.0.0 Google Chrome 147.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition cn中国–广东–深圳 电信 IPv4

    不考虑彻底分离,pjax 也是一种轻量解决方案,可以在不换框架的情况下兼顾前端性能与SEO 。
    这个头图很有诱惑力啊

    1.  公主 Queen Queen 
      Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–崂山区–中国联通–3GNET网络 IPv6

      pjax 这个没用过,找时间了解下。
      图片喜欢就行啦。

  5.  Level 2
    Google Chrome 147.0.0.0 Google Chrome 147.0.0.0 Windows 11 x64 Edition Windows 11 x64 Edition cn中国–辽宁–沈阳–沈河区 电信 IPv4

    还有骨架屏,真不错啊,这个应该是前后端分离最好的优化首屏加载的方式了

      1.  公主 Queen Queen 
        Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–崂山区–中国联通–3GNET网络 IPv6

        我就是纯粹因为菜,找了个能看懂的办法来解决问题。

    1.  公主 Queen Queen 
      Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–崂山区–中国联通–3GNET网络 IPv6

      嗯嗯,我也觉得暂时也就这样了,这个地方没想到什么别的优化方法了。

  6. Level 1
    Firefox 150.0 Firefox 150.0 Windows 10 x64 Edition Windows 10 x64 Edition cn中国–甘肃省–兰州市–城关区–中国移动–公众宽带 IPv6

    几个月前好像是React还是哪个,因为服务器渲染出了很大的Bug,影响非常广泛。

    1.  公主 Queen Queen 
      Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–崂山区–中国联通–3GNET网络 IPv6

      react也有独立的服务器渲染组件。所以怎么说呢,十年河东十年河西,以前都是前后端分离,现在又开始搞服务器渲染了。
      我这也算逆势而为了。

  7.  Level 2
    Microsoft Edge 147.0.0.0 Microsoft Edge 147.0.0.0 Android 10 Android 10 cn中国–江西省–九江市–德安县–中国联通–3GNET网络 IPv6

    既然都前后端分离了 感觉就彻底脱离WordPress算了,数据迁移也不是什么很复杂的事情。

    1.  公主 Queen Queen 
      Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–崂山区–中国联通–3GNET网络 IPv6

      没太大动力,管理后台开发比前端开发复杂多了。
      管理后台

  8.  Level 4
    Google Chrome 148.0.0.0 Google Chrome 148.0.0.0 Windows 11 x64 Edition Windows 11 x64 Edition cn中国–中国广播电视网络有限公司 IPv6

    好用就行,关键是文档和快速。我觉得非商业推广类的网站,比如我们这些个人博客,其实SEO并没有太多意义。我也不关注SEO。

    1.  公主 Queen Queen 
      Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–崂山区–中国联通–3GNET网络 IPv6

      是的,seo这个东西,现在感觉即使关注也难有什么作为。

  9.  Level 4
    Google Chrome 147.0.0.0 Google Chrome 147.0.0.0 GNU/Linux x64 GNU/Linux x64 cn中国–辽宁–朝阳–北票市 电信 IPv4

    纯html结构的SEO基本上没啥问题,尽可能的生成原生的HTML 就好了。

  10.  Level 4
    Google Chrome 147.0.0.0 Google Chrome 147.0.0.0 GNU/Linux x64 GNU/Linux x64 cn中国–辽宁–朝阳–北票市 电信 IPv4

    要不是因为wordpress有个不错的后台,估计大部分人早换程序了。

    1.  公主 Queen Queen 
      Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–崂山区–中国联通–3GNET网络 IPv6

      是的,wp的后台还是不错的。主要也是用习惯了。

  11.  Level 3
    Google Chrome 131.0.6778.200 Google Chrome 131.0.6778.200 Android 16 Android 16 cn中国–湖南省–永州市–道县–中国联通–3GNET网络 IPv6

    钟小姐的博客越来越好了, 能不能优化一下表情按钮, 单次点击不会弹窗的,要按到不放才会弹出窗口。不知道是不是专门这样设计的 hunter

    1.  公主 Queen Queen 
      Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–崂山区–中国联通–3GNET网络 IPv6

      尝试强制刷新试试

      1. Level 3
        Microsoft Edge 147.0.0.0 Microsoft Edge 147.0.0.0 Android 10 Android 10 cn中国–安徽省–中国电信–公众宽带 IPv6

        话说,我评论过之后,是看不到我这个评论的,就是不像YP或者WP那样,自己能看到,然后上面显示个待审核么,不然我不知道是不是提交成功了

        1.  公主 Queen Queen 
          Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–崂山区–中国联通–3GNET网络 IPv6

          下面有个提示,有的可能会需要审核哈。(会走评论检测)
          审核提示

          1.  公主 Queen Queen 
            Google Chrome 146.0.0.0 Google Chrome 146.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7 cn中国–山东省–青岛市–崂山区–中国联通–3GNET网络 IPv6

            提示的确是不太明显,嘎嘎

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注