返回文章列表

系列文章

教程

Next.js + Strapi 架构:Cloudflare + VPS + R2 搭建可扩展的 SEO 内容站(从 0 到上线)

系列: 独立站 · #1

你可能已经踩过这种坑:页面做得挺快,文章也开始写了,但访问一多就慢;图片把 VPS 磁盘吃满;多语言一上来 URL 乱套;加广告后页面抖动(CLS)把体验和排名一起拖下水。要把内容站做成“能长期跑”的资产,Next.js + Strapi 架构需要从一开始就把职责拆清楚。

架构图


这套最终推荐架构长什么样

核心思路就一句话:前台渲染交给 Next.js,内容管理交给 Strapi,静态与安全交给 Cloudflare,图片与附件交给 R2。

架构总览(推荐版)

  • 域名 → Cloudflare DNS/CDN → Next.js 前端
  • VPS 内部:Strapi + Postgres + Nginx(或反代)
  • Cloudflare R2:存图片 / 封面 / 附件(不占 VPS 磁盘)

每一层各做什么

  • Cloudflare(DNS/CDN/SSL):入口、缓存、加速、防护、自动证书
  • Next.js(App Router):SEO 页面输出、路由、多语言、SSG + ISR、广告位渲染
  • Strapi(Headless CMS):编辑发布内容、内容模型、权限、API 输出
  • Postgres:内容与配置数据(文章、分类、标签、多语言关联)
  • R2(对象存储):图片/封面/附件,减少 VPS 压力并便于 CDN

上线前你需要准备的清单(一次买对)

1)域名:短、品牌型、别绑死未来

建议:

  • .com 优先
  • 简短、好拼写
  • 不带年份、不带地区

推荐购买:Cloudflare Registrar(省心,和 DNS/CDN 天然整合)

2)VPS:跑 CMS + 数据库的“地基”

推荐起步配置(内容站足够):

  • 2 vCPU
  • 4GB RAM
  • 40–80GB NVMe
  • Ubuntu 22.04 LTS

3)对象存储:图片/封面/附件不要放 VPS

推荐:Cloudflare R2

适合放:

  • 文章图片
  • 封面图
  • 下载附件

不建议放 VPS 的原因很现实:磁盘增长不可控、备份麻烦、迁移成本高、带宽与缓存不经济。

R2.png

4)CDN + DNS:Cloudflare 免费版就能打满基本盘

Cloudflare 免费版的价值点:

  • 全球加速(边缘缓存)
  • 基础防护
  • 静态缓存
  • SSL 自动证书

5)技术栈:用“内容站友好”的组合

  • 前端:Next.js(App Router),SSG + ISR
  • CMS:Strapi(Headless)
  • 数据库:Postgres

SEO 最佳实践:多语言、URL、slug、hreflang 一次做好

内容站最常见的 SEO 问题不是“关键词没写”,而是 URL 与语言策略从第一天就错了

URL 结构(推荐)

  • example.com/zh/xxx
  • example.com/en/xxx

英文建议使用:

  • en-US

不建议:

  • en-GB(除非你专门做英区)
  • 用参数切语言(如 ?lang=en
  • 用子域名分语言(如 en.example.com)——能做,但复杂度更高,起步不划算

slug 规则(长期稳定最重要)

  • 全小写
  • - 连接
  • 不加日期
  • 不要数字 ID

hreflang(必须做)

推荐组合:

  • zh-CN
  • en-US
  • x-default

你可以把它理解为:告诉搜索引擎“同一篇内容的不同语言版本在哪里”,减少互相竞争与错误收录。


广告策略:AdSense 能上,但别让 CLS 毁了体验和排名

如果你做内容站变现,最常见组合就是 Google Ads / AdSense。但广告上得越早,越要注意“页面稳定性”。

国家定向:先把不想要的流量挡在门外

建议只选:

  • US / CA / AU / SG / JP 等

不选:

  • EEA / UK(如果你明确不做这部分流量与合规)

广告加载方式:async + 预留高度

两条硬规则:

  1. 广告脚本 async 加载
  2. 广告容器预留高度(防止页面跳动导致 CLS 上升)

一个简单可执行的检查清单:

  • [ ] 广告位容器是否设置了固定高度或最小高度
  • [ ] 广告是否在正文“自然段落之间”而不是标题正下方
  • [ ] 首屏是否避免塞太多广告(影响体验与停留)
  • [ ] 移动端是否单独调整广告位间距与高度

从 0 到上线:最省返工的步骤顺序

按下面顺序做,几乎不会走回头路:

  1. 买域名
  2. 买 VPS
  3. 部署 Docker
  4. 起 Strapi + Postgres
  5. 配 R2(媒体上传走对象存储)
  6. 上 Next.js 前端(SSG + ISR)
  7. Cloudflare CDN 接入
  8. 接 Google Ads / AdSense

两个关键节点别跳过

A)先把媒体存储定下来(R2)

一旦内容量上来,迁移媒体最痛苦。先定 R2,后面只是扩容与优化。

B)前端优先用 ISR,别一上来就全 SSR

内容站的大多数页面是“发布后很久才更新一次”,ISR 更贴合成本与性能。


扩展路径:流量上来后怎么升级才稳

这套架构的好处是升级路线清晰,不需要推倒重来:

  1. 升级 VPS → 4C / 8G(最直接)
  2. 开 Redis(缓存/会话/热点数据)
  3. 拆数据库到独立实例(稳定性显著提升)
  4. 前端上 Vercel/边缘部署(可选,追求更极致的全球访问体验)

这套方案为什么适合“长期做内容站”

  • 成本低:Cloudflare 免费版 + 一台 VPS 起步
  • SEO 强:Next.js 输出稳定、URL/slug/hreflang 结构清晰
  • 可长期扩展:缓存、数据库、前端部署都能独立升级
  • 不被平台锁死:内容在 Strapi + Postgres,媒体在 R2,迁移有主动权

如果你要把它落成真正可用的生产站点,下一步最值得先做的是:把 Strapi 的内容模型(Article/Category/Tag)和 Next.js 的多语言路由(/zh、/en)定死,后面再加 sitemap、广告位和 webhook 刷新,节奏会非常顺。

系列导航

当前第 1 篇,共 1 篇

独立站

上一篇查看系列目录下一篇