写在前面:今天学了一个让我"惊掉下巴"的知识------Next.js 。以前我们做前端,SPA 单页应用体验虽好,但在搜索引擎眼里就是个"透明人"------爬虫顺着 URL 爬进来,看到的只有一个空的
#root节点,扭头就走。老师说,Next.js 把 React 组件搬到了服务器端渲染(SSR),SEO 好得离谱,很多 AI 产品的官网都在用它!这期内容比较多,我拆成上下两篇:上篇 先把"为什么"讲透------SEO、CSR/SSR、GEO;下篇再来"怎么做"------App Router、服务端/客户端组件、Todos 全栈 demo。准备好了吗?开讲!
一、SEO:前端网站的"生死线"
1.1 SPA 的好处:体验天花板
老师说:
"体验很好,组件时在前端挂载(useEffect去异步请求数据),不需要刷新页面。前端路由的支持,让页面切换效果快、好。"
SPA(单页应用)的优点,放在用户端看确实是天花板:
| 优势 | 说明 |
|---|---|
| 体验好 | 组件在前端挂载,用 useEffect 异步请求数据,不刷新页面 |
| 切换快 | 前端路由支持,页面切换效果又快又好 |
| 像原生 App | SPA 抄的原生 APP 体验,做得和 APP 一模一样 |
1.2 SPA 的短板:爬虫眼里的"透明人"
但是!老师说了一句扎心的大实话:
"根本就不是为了SEO,不是用浏览器搜索引擎(baidu,google)推荐打开" "SEO 非常差,没有SEO #root 节点"
为什么?因为 SPA 的 HTML 长这样:
html
<div id="root"></div>
<script src="main.js"></script>
爬虫顺着 URL 爬进来,#root 是空的,内容全靠 main.js 在浏览器里"现炒"出来。爬虫不点单,它只看橱窗------橱窗是空的,它就走人了。
1.3 移动端时代:20% 原生,80% SPA
那为什么前端还这么爱用 SPA?因为移动端时代的逻辑变了:
老师说:
"移动端时代(超级App ,20% 原生, 80% 都是SPA)" "App 里80%页面使用spa 做的,原生的要写两套,WebView 组件,用于显示网页,前端来做" "html 只需要写一次,不需要写两套。"
微信、抖音这种超级 App,20% 是原生页面(要写 Android、iOS 两套),80% 都是 SPA(一个 HTML 通吃)。但 PC 时代不一样:
"pc时代是流量的入口 SEO就是命"
在 PC 时代,流量入口是搜索引擎,SEO 就是命。老牌内容站(掘金、CSDN)的流量基本都是 SEO 带来的。所以主流的 SPA 开发之外,就需要 Next.js 这种全栈 SEO 友好的框架。
二、SEO 的基本做法:三层
那 SEO 到底怎么做?老师说就三层:
"第一层 你是谁? title 做什么的? description 有什么价值提供 keywords" "第二层 做内容 用户来的原因" "第三层 ssr 服务器端渲染"
第一层,把门脸装修好:
html
<title>我的网站</title>
<meta name="description" content="这是一个描述" />
<meta name="keywords" content="这是一个关键词" />
第二层,做内容------用户凭什么来?得有真东西。
第三层,SSR 服务端渲染------这才是根治:
"/post/:id 一个页面 千万篇 ssr 整站被seo 收录的内容给你的加权"
内容型网站一篇篇文章被收录,SEO 加权越来越多,这就是老牌内容站(掘金、CSDN)活下来的底层逻辑。
三、CSR 和 SSR:组件到底在哪里渲染
3.1 CSR:客户端渲染
SPA 的模式是 CSR(Client Side Rendering,客户端渲染):
| 环节 | 谁在干活 |
|---|---|
| Server | 前端项目所在的服务器,只返回 index.html |
| Client | 用户浏览器,运行 main.js、App.jsx、Todos.jsx 渲染页面 |
爬虫通过 URL 爬取的时候,看到的只有 #root + script,内容在客户端才生成------SEO 自然为零。
3.2 SSR:服务端渲染
Next.js 的杀手锏是 SSR(Server Side Rendering,服务端渲染):
"jsx + todos(数据) = 服务端UI html"
React 组件其实可以在后端运行------只要组件不做事件监听、不用 useEffect,它就是一个函数 + 模板,可以在 Node 环境里编译成 HTML 字符串。服务器返回的就是带内容的完整 HTML,爬虫直接能读。
3.3 前后端分离 vs 全栈
以前做 Java 全栈,前后端是分离的:server, 3000 端口,/todos 是后端路由,controller 处理请求,去 mysql 查数据,返回 JSON 数组。前端拿到 JSON 自己渲染。
而全栈项目不一样:/todos 这个 URL 返回的直接就是 React 组件编译过后的 HTML 。CSR 和 SSR 的根本区别就是------组件到底在哪里渲染:
| CSR | SSR | |
|---|---|---|
| 渲染地点 | 客户端(浏览器) | 服务端(Node) |
| 爬虫看到 | 空 #root |
完整 HTML |
| 代表 | 纯 SPA | Next.js |
四、GEO:生成式引擎优化
SEO 还没玩明白,新词又来了:GEO(Generative Engine Optimization,生成式引擎优化)。
老师说:
"用户入口:豆包" "生成的时候,带上我们的内容,购买链接"
现在的用户入口变了,很多人不搜百度,直接问豆包这种 AI。AI 生成回答的时候,会把相关的内容和购买链接带上。而且:
"AI超厉害,OPC 产品多如牛毛,AI Agent 产品站点,SEO去推广"
AI 产品多如牛毛,官网还得靠 SEO 推广。所以不仅搜索引擎爬虫要伺候,AI 生成引擎也得讨好。
写在最后(上篇)
今天把"为什么"讲透了:SPA 体验虽好但 SEO 是短板;SEO 三层做法里最狠的是 SSR------把 React 组件搬到服务器渲染,爬虫就能读到完整内容;现在还得伺候 GEO,连豆包这种 AI 入口都要能搜到你。
下一篇(下篇)我们来看"怎么做" :create-next-app 一条命令创建全栈项目、App Router 约定大于一切、layout.tsx / page.tsx / route.ts 怎么组织,还会手把手跑通一个 Todos 全栈 demo。
下次面试官问你:"SPA 有什么短板?CSR 和 SSR 有什么区别?"
你可以淡定地说:
"SPA 是客户端渲染(CSR),组件在前端挂载,用 useEffect 异步请求数据,体验好、切换快,但 HTML 里只有一个空的 #root 节点,爬虫抓不到内容,SEO 很差。SSR 是服务端渲染,React 组件在服务器上编译成 HTML 再返回,只要组件不做事件监听、不用 useEffect,它就能在 Node 环境里渲染成字符串,爬虫能直接读到完整内容。PC 时代流量入口是搜索引擎,SEO 就是命,所以主流的 SPA 之外还需要 Next.js 这种全栈 SEO 友好的框架。现在还有 GEO------生成式引擎优化,连豆包这种 AI 入口都要能搜到你的内容。"
然后看着面试官满意的表情,心里默念:这波,又稳了。
本文所有代码示例均来自课堂学习资料,真实可运行。