在线检测
JSON工具
编码/加密
图片处理
文字处理
格式化
网络
前端
后端
搜索工具、优惠码…⌘K
对比 发布 By 出海导航编辑部

出海内容站建站框架横评 2026:Astro 5 凭什么把 Lighthouse 干到 100

Astro 5 / Next.js 15 / SvelteKit 2 / Hugo / Eleventy 5 个候选,6 维度对照 + chdh.me 自己迁移的实测数据

AstroNext.jsSvelteKitHugo建站框架静态站出海建站Lighthouse

出海内容站选 Astro、Next.js 还是 SvelteKit?chdh.me 把自己从 Next.js 15 迁到 Astro 5,Lighthouse 69→100、TBT 800ms→0ms、bundle -72%、HTML -43%。本文用真实迁移数据 + 6 维度横评告诉你不同场景该选哪个框架。

TL;DR · 一句话结论

chdh.me 用了一天把自己从 Next.js 15 迁到 Astro 5,Lighthouse 性能从 69 飙到 100,TBT 从 800ms 干到 0ms。 这不是 Astro 的营销话术,是我们自己跑 PageSpeed Insights 截图实测的数字。

如果你做的是内容驱动型出海站(工具导航、SEO 内容站、博客、官网、Landing Page),结论极其简单:

场景推荐理由
工具评测站 / 内容站 / 博客Astro 5Islands Architecture 让首页 client JS 接近零
DTC 电商前台(含购物车 / 用户态)Next.js 15 + Shopify HydrogenRSC + Server Actions 处理动态交互
SaaS 营销站 + DashboardNext.js 15营销页用 RSC SSG + Dashboard 用 client component
极简博客(1 个人维护)Hugo 或 Eleventy零运行时、最小依赖、最长寿命
追求 Svelte 语法美学SvelteKit 2性能与 Astro 接近,生态薄一截

下面是 6 维度横评数据 + 实测对照 + 选型决策树。

---

这一节为什么写:建站框架决定了内容站的 SEO 天花板

出海内容站这门生意,90% 流量来自搜索引擎自然搜索。这意味着:

1. Google Core Web Vitals 是排名信号 —— LCP / CLS / INP 直接进 Google 算法 2. 首屏渲染速度决定跳出率 —— 慢 1 秒,移动端跳出率涨 32%(Google 自家数据) 3. HTML 体积影响爬虫预算 —— 大型站点动辄上万 URL,Googlebot 抓取时长有限

但内容站对前端交互复杂度的需求很低 —— 不需要购物车、用户态、复杂表单、实时数据。理论上生成纯 HTML + 极少 JS 就够了。

矛盾点:过去 5 年 React 生态(Next.js 为代表)的设计目标是满足复杂应用,把整套 React runtime(约 45-60 KB gzip)打进首屏 client bundle。对内容站来说这是过度工程

2024 年起 Islands Architecture(孤岛架构)兴起 —— Astro / Qwik / Fresh 都基于这个理念:默认 0 client JS,只有标记为 "island" 的组件才送 JS。这对内容站是质变性的优化。

chdh.me 编辑部 2026 年 5 月把自己从 Next.js 15 迁到 Astro 5,Lighthouse 桌面性能从 69 直接打到 100。下面把这次迁移的真实数据 + 5 个候选框架的实测横评一起讲清楚。

---

5 个候选框架 + 6 维度横评矩阵

入选标准:

  • 支持纯静态导出(不需要 Node runtime 也能跑)
  • 截至 2026-05 仍在活跃维护
  • 至少有 1 个出海内容站典型案例可查
  • 中文社区有可参考文档

入选名单:

1. Astro 5(2024-11 发布 5.x,2026 已迭代到 5.16)—— Islands Architecture 标杆 2. Next.js 15(React 19 + Server Components)—— 全球最流行的 React 元框架 3. SvelteKit 2(2024 发布)—— Svelte 5 runes 加持 4. Hugo(Go 写的静态生成器,10+ 年历史)—— 最快的纯静态生成器 5. Eleventy 3(11ty)—— JavaScript 写的极简静态生成器

横评维度:

维度 1:性能(Lighthouse 移动端典型分数)

框架性能LCPTBT备注
Astro 599-100< 1.0s0msIslands 让 client JS 趋零
Hugo99-100< 0.8s0ms纯 HTML 输出
Eleventy 399-100< 0.8s0ms同 Hugo
SvelteKit 295-100< 1.2s50-150msSvelte 编译体积小
Next.js 15 静态导出65-85< 1.2s200-1000msReact runtime + hydration 拖累

注:以上是同样内容(首页 + 110 个工具 tile)在 5 个框架下的典型分数区间,基于真实部署测试 + 公开 case study 综合。

维度 2:SEO 友好度

框架SSR/SSGURL 结构控制Meta 灵活度Schema.org 支持
Astro 5✅ SSGtrailingSlash 可配✅ 灵活✅ 原生 `<script type=ld+json>`
Next.js 15✅ SSG/SSRtrailingSlash 可配✅ Metadata API✅ 通过 Next/script
SvelteKit 2✅ SSG类似✅ +page.ts
Hugo✅ 纯 SSG类似✅ Front matter
Eleventy 3✅ 纯 SSG类似✅ Data cascade

5 家在 SEO 控制力上都达标。差异在于默认输出 HTML 干净度: - Astro / Hugo / Eleventy:输出极简 HTML,无任何运行时框架痕迹 - Next.js:HTML 中含 `__NEXT_DATA__` JSON(React hydration 用),约 50-200KB 冗余 - SvelteKit:含 `__SVELTEKIT_DATA__` 类似冗余,比 Next.js 小

维度 3:开发效率 + 学习曲线

框架上手成本生态TypeScript 支持
Astro 5中(学新 `.astro` 语法 + Islands 心智模型)中(生态年轻但成熟度快速提升)极佳
Next.js 15中(React 19 RSC + Server Actions 复杂)全球最大极佳
SvelteKit 2中(Svelte 5 runes 改了响应式语法)较薄极佳
Hugo高(Go template 语法反直觉)中(主题市场成熟)❌(不写 Go)
Eleventy 3低(纯 JS / Markdown 友好)较薄一般

关键点: - Astro 支持 React / Vue / Svelte / Solid 共存,可以把任何 React 组件直接当 Astro 的 island 用,迁移成本极低(chdh.me 迁移时复用了 90% 的 React 组件) - Next.js 15 的 RSC + Client Components 心智模型对新人不友好(要懂 "use client" / "use server" / Streaming 等) - Hugo 的 Go template(`{{ range }}` / `{{ partial }}`)对前端开发者反直觉 - Eleventy 适合只写 Markdown + 偶尔加点 JS 的场景

维度 4:构建速度 + Bundle 体积

实测 chdh.me 数据(4,065 个静态路由):

框架Build 时间dist 总大小首页 First Load JS
Astro 5107s365 MB3 KB(仅 Workspace island)
Next.js 15222s(3.7 min)1.3 GB128 KB
Hugo(理论)~30s~300 MB0 KB
Eleventy(理论)~60s~300 MB0 KB
SvelteKit 2(理论)~150s~400 MB30-40 KB

Next.js 比 Astro 多 3.5 倍 dist 大小是因为: 1. `_next/data/*.json` 每个页面一份(4,065 个) 2. React 服务端渲染产物 + client bundle 重复 3. ISR / 增量再生成相关元数据

维度 5:维护 + 长期可演进

框架当前主版本历史破坏性升级中文社区
Astro 55.x(2024-11)4→5 较平滑中(增长快)
Next.js 1515.x(2024-10)App Router 引入是重大破坏极大
SvelteKit 22.x(2024-02)Svelte 4→5 runes 是大改
Hugov0.135(2026-05)缓慢渐进
Eleventy 33.x(2024)平滑

Next.js 历史上有 3 次重大破坏性升级(Pages Router → App Router、SWC 替换 Babel、React Server Components 引入)。SvelteKit 跟随 Svelte 5 runes 也算一次重大语法变化。

Astro 5 的优势:版本迭代相对克制,对静态导出场景几乎无破坏性。

维度 6:部署兼容性

框架部署到自建 VPS + nginxCloudflare PagesVercelNetlify
Astro 5static / Node / SSR
Next.js 15静态导出 / Vercel / Node✅ 但限制多⚠️ ISR 等高级特性不支持✅ 最佳
SvelteKit 2Adapter 制
Hugo纯静态
Eleventy 3纯静态

Next.js 静态导出有不少限制(不支持 ISR、不支持 Image Optimization、Route Handlers 必须 force-static),如果未来要加动态特性会受限。

---

实测案例:chdh.me 用 1 天从 Next.js 15 迁到 Astro 5

这一节是本文最有价值的部分 —— 不是理论数据,是 chdh.me 编辑部自己 2026-05-25 当天完成的迁移

迁移前后 Lighthouse 实测

指标阈值Next.js 15Astro 5变化
性能桌面 ≥ 9069100+31
FCP< 1.0s0.5s0.4s-0.1s
LCP< 1.2s0.8s0.7s-0.1s
TBT< 200ms800ms0ms-800ms
CLS< 0.10.0450.001-0.044
Speed Index< 1.3s1.8s0.4s-1.4s
SEO100100100持平
Accessibility≥ 959797持平
Best Practices10081100(桌面)+19

TBT 800ms → 0ms 是质变。这意味着用户点击 / 输入的响应延迟从"明显卡顿"变成"零延迟"。Google INP 指标(替代旧 FID)现在直接进 Core Web Vitals 排名信号,TBT 0ms 意味着 INP 也会优秀。

实测:迁移工程量

类别工作量
数据层(types / lib / data)复用0 改动(100% 直接复制)
React 组件复用(含工位拖拽逻辑)90% 直接复用(只需把 `next/link` 用 vite alias shim 到原生 `<a>`)
页面模板(17 个 page.tsx → 17 个 .astro)1 day(用 Agent 批量协助)
OG 图迁移(2,212 个工具 OG + 站点级 OG)2 小时(`next/og` → `@vercel/og`,API 几乎一样)
SEO 端点(sitemap / robots / rss / search-index)1 小时(改文件位置 + Response 写法)
nginx 配置调整(dist/ 替代 out/)5 分钟
部署脚本调整 + 灰度切换30 分钟
总计~1 个工作日

迁移期间 chdh.me 用了双源部署 + symlink 切换策略,零停机,老 Next.js 版本随时可回滚。

实测:Bundle 体积变化

指标Next.js 15Astro 5
First Load JS(首页)128 KB3 KB
首页 HTML377 KB215 KB
dist 总大小1.3 GB365 MB
Build 时间3.7 min107s
静态页路由数4,0654,065

First Load JS 从 128 KB 降到 3 KB = 节约 97.7% 客户端 JS。

这是 Islands Architecture 的核心红利:除了交互必需的 1 个 island(chdh.me 的"我的工位"模块用 React 写),其他全部页面 client JS = 0。

实测:迁移踩过的 3 个坑

1. trailingSlash 必须显式配 `'always'` + `build.format: 'directory'`,否则 Astro 默认生成 `/about.html` 而不是 `/about/index.html`,造成 4,065 个 URL 全部 404。

2. OG 图 URL 后缀变了:Next.js 用 `/tools/.../opengraph-image`(无扩展名),Astro 静态导出必须 `.png` 后缀。Twitter / Facebook 缓存中的旧 OG URL 短期内显示失败(1-2 周自动更新),无 SEO 影响。

3. nginx `add_header` 继承陷阱:迁移后发现 7 个安全 header(HSTS / CSP / X-Frame-Options 等)全消失。原因不是 Astro,是 nginx 配置中 location 内有任何 `add_header` 会让 server-level `add_header` 全部失效。修复方案:用 `include snippets/security.conf;` 在每个 location 内复用。

---

逐家深度评测

1. Astro 5 —— 内容站 + Islands 的最优解

核心优势: - 默认 0 client JS,按需挂载 island - React / Vue / Svelte / Solid 共存,迁移成本极低 - trailingSlash + format: directory 完美支持 SEO 友好 URL - Content Collections 原生支持 Markdown / MDX 内容管理 - @vercel/og 兼容 next/og 的 ImageResponse API,OG 图迁移零成本

核心劣势: - 中文社区相对薄(增长很快但不如 Vue / Next.js) - 对复杂客户端交互(拖拽 / 实时数据 / 全局状态管理)不如 React/Vue 生态成熟 - Astro 自己的 `.astro` 语法学习曲线(但只是模板层,业务逻辑用 React/Vue/Svelte)

适合谁: - 工具评测站 / 博客 / 文档站 / 营销站 / Landing Page - 已用 React 组件想保留但减少 client JS 开销 - 追求 Lighthouse 满分 + SEO 极致优化

不适合谁: - DTC 电商前台需要复杂购物车 / 用户态 - SaaS 产品的 Dashboard 部分(大量动态交互) - 团队全部 Vue 开发者且不愿学新语法

2. Next.js 15 —— 复杂应用的事实标准

核心优势: - React Server Components + Server Actions 是当前最成熟的全栈方案 - Vercel 部署体验业内最佳 - 中文社区最大,遇到问题搜得到答案 - next/image 自动 WebP / AVIF + 响应式 - 生态最丰富(Auth / ORM / 国际化等都有官方推荐)

核心劣势: - 静态导出场景性能天然吃亏(React runtime + hydration 必交税) - App Router 心智模型复杂(RSC / Client / Streaming / Suspense) - 升级破坏性大(Pages Router → App Router 是事实上的重写) - 自建 VPS 部署需要绕开很多 Vercel-specific 特性

适合谁: - DTC 电商前台 + 用户态 + 购物车 - SaaS Dashboard + 营销站 + 文档站合一 - 团队已有 React 资深开发者 - 需要 ISR / Edge Runtime / Middleware 等高级特性

不适合谁: - 纯静态内容站(杀鸡用牛刀) - 追求 Lighthouse 满分的内容驱动型站点 - 不能上 Vercel 又想要 ISR 的场景

3. SvelteKit 2 —— 性能优秀但生态短板

核心优势: - Svelte 编译为极小运行时(gzip ~10 KB) - Svelte 5 runes 让响应式语法接近 React Signals - 性能接近 Astro,比 Next.js 强

核心劣势: - 生态比 React/Vue 薄一个量级 - Svelte 5 runes 改了响应式语法,老代码迁移有成本 - 中文社区小,问题搜索体验差 - 不支持 Astro 那样的"多框架 island 共存"

适合谁: - 团队认同 Svelte 哲学且能接受生态短板 - 性能优先 + 不需要丰富 UI 组件库

不适合谁: - 想用现成 React 组件(如 shadcn/ui)的团队 - 中文社区依赖度高的团队

4. Hugo —— 最快但模板反人类

核心优势: - Go 写的,构建速度业内最快(1 万页 < 10s) - 零运行时依赖(一个二进制就跑) - 主题市场成熟 - 10+ 年历史,最稳定

核心劣势: - Go template 语法对前端开发者极不友好(`{{ range $.Pages }}` 这种) - 不支持 JSX / 现代组件化思想 - 数据层管理用 TOML / YAML 较僵硬 - 客户端交互全靠你自己写 Vanilla JS

适合谁: - 1 个人维护的极简博客 / 文档站 - 内容 100% Markdown 没有复杂逻辑 - 接受 Go template 心智模型

不适合谁: - 团队有前端开发者且想用 React/Vue - 需要任何客户端交互(搜索框 / 评论 / 暗色模式切换等)

5. Eleventy 3 —— 极简但功能少

核心优势: - 纯 JavaScript,前端开发者友好 - 数据层灵活(JSON / JS / Markdown 任意组合) - 模板可选(Nunjucks / EJS / Markdown / Liquid 多种)

核心劣势: - 没有原生组件化(不能像 Astro 那样写 `.astro` 组件) - 客户端 JS 需要自己接 esbuild / Vite - 生态薄 - 中文社区几乎为零

适合谁: - 极简静态博客 / 文档站 - 想全 JS 但不想 Astro 那么"重"

不适合谁: - 复杂内容站(多种数据源 + 多种页面模板) - 需要现代组件化心智

---

3 个典型出海站场景的选型决策

场景 A:工具评测站 / 内容站 / 博客(chdh.me 同款)

推荐:Astro 5

理由: - 内容驱动,对 client JS 要求极低 - SEO 关键,需要 Lighthouse 满分 - 大量动态路由(每个工具 / 文章一个页面)+ Build 时间敏感

如果坚持用 Next.js 15,需要做额外优化(lazy load / RSC / 自定义 Webpack 配置),收益有限。

场景 B:DTC 独立站前台

推荐:Shopify + Hydrogen(Remix-based)Next.js 15

理由: - 购物车 / 结算 / 用户态需要复杂客户端交互 - 库存 / 价格实时数据 - 客户经常需要 SPA 流畅切换

Astro 不适合:它的 Islands 模型针对的是"少量交互",DTC 前台是"大量交互"。

场景 C:SaaS 营销站 + Dashboard

推荐:Next.js 15

理由: - 营销页可以 SSG 优化性能 - Dashboard 用 Client Component + Server Actions - 同一个 codebase 同一个框架

如果营销站和 Dashboard 完全分离,可以营销站用 Astro + Dashboard 用 Next.js(但运维 + 团队学习成本高)。

---

选型决策树

``` 你的站点主要是? ├─ 内容驱动(90% 静态文章 / 工具评测 / 文档) │ ├─ 团队懂 React/Vue → Astro 5 │ ├─ 1 个人极简博客 → Hugo 或 Eleventy 3 │ └─ 追求 Svelte 美学 → SvelteKit 2 │ ├─ 应用驱动(购物车 / 用户态 / Dashboard) │ ├─ 复杂全栈 → Next.js 15 │ ├─ 电商前台 → Shopify Hydrogen 或 Next.js │ └─ 不要 React → SvelteKit 2 │ └─ 混合(营销站 + 应用) ├─ 同 codebase → Next.js 15 └─ 分开维护 → 营销站 Astro + 应用 Next.js ```

---

注意事项 + 8 个迁移踩坑

如果你打算从 Next.js 迁到 Astro(chdh.me 同款路径),下面这些坑提前知道能省 1-2 天:

1. trailingSlash 必须显式配置:默认 `'ignore'` 会让 `/about` 和 `/about/` 都返回内容但 URL 不统一,造成 canonical 混乱。设 `'always'` + `build.format: 'directory'`。

2. next/link 用 vite alias shim:写一个 5 行 shim 把 `next/link` 映射到原生 `<a>`,所有 React 组件不用改。

3. `next/og` → `@vercel/og`:API 几乎一样(都是 ImageResponse + JSX)。如果 OG 图用了 React JSX 语法,要在 Astro 里改成 `React.createElement(...)` 形式(因为 Astro endpoint 是 TS 而不是 TSX)。

4. Schema.org JSON-LD:Astro 不像 Next.js 有 `<Script>` 组件,直接 `<script type="application/ld+json" set:html={JSON.stringify(data)} />` 即可。

5. Compare / Tool 等大量 dynamic routes:用 `getStaticPaths()` 替代 Next.js `generateStaticParams()`,返回 `[{ params, props }]` 结构。

6. Astro 默认所有 .tsx 组件是 server-rendered,不需要 `'use client'`。要让组件 client hydrate,在使用处加 `client:load` / `client:idle` / `client:visible` directive。

7. Lib 文件 client/server 分离仍然必要:如果一个 lib 文件 import 了大量数据(如 chdh.me 的 allTools 2,200+ 条),而 client island 又 import 了这个 lib,bundle 会爆。规则同 Next.js:写 client-safe lib 和 server-only lib 两份。

8. nginx add_header 继承陷阱:location 内任何 `add_header` 让 server-level 全部失效。把安全 headers 放进 nginx snippet,每个 location 内 `include`。

---

6 维度横评打分表(最终版)

满分 5,越高越好。

维度(权重)Astro 5Next.js 15SvelteKit 2HugoEleventy 3
性能(25%)⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
SEO 友好度(20%)⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
开发效率(15%)⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
生态成熟度(15%)⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
中文社区(10%)⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
长期可演进(15%)⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
加权总分4.304.053.703.853.80

按出海内容站场景加权下来:Astro 5 排第一,Next.js 15 第二,SvelteKit 2 / Hugo / Eleventy 平手第三梯队

但如果你的站点不是纯内容站(含购物车 / Dashboard),Next.js 会反超 —— 它的生态优势在复杂场景才能兑现。

---

编辑结论

2026 年做出海内容站,默认选 Astro 5。 这不是因为它"新"或"潮",是因为它的 Islands Architecture 直接消除了 React/Vue 时代的客户端 JS 税。

chdh.me 自己用 1 个工作日完成迁移,性能从 Lighthouse 69 干到 100,TBT 从 800ms 干到 0ms —— 这种"零代码改动 React 业务逻辑就能拿到性能巨幅提升"的事情,技术圈里不多见。

如果你已经在 Next.js 上跑得舒服,且没有 Lighthouse 跑分焦虑,不用强迫迁移。Next.js 15 + RSC + Server Actions 是一套自洽的方案。

但如果你的站点是纯内容驱动 + Lighthouse 满分焦虑 + 想留 React 组件,Astro 5 是 2026 年最优解。

---

5 个常见问题

Q1:Astro 适合做后台 / Dashboard 吗?

不太适合。Astro 的 Islands 架构是为"少量交互、大量静态内容"设计的。Dashboard 通常是反过来 —— 大量动态数据、复杂状态管理、实时更新。这种场景用 Next.js(React Server Components + Client Components)或者干脆 SPA(React + Vite + TanStack Router)更合适。如果你的应用是 90% 静态营销 + 10% 后台,可以把营销站独立用 Astro,后台独立用 Next.js / Vite。

Q2:从 Next.js 迁到 Astro,已经写的 React 组件能复用吗?

绝大部分能直接复用。chdh.me 迁移时 90% 的 React 组件没改任何代码。关键技巧:

1. 用 vite alias 把 `next/link` shim 到一个 5 行的原生 `<a>` 包装; 2. `next/image` 改成原生 `<img>`(chdh.me 本来就没用 next/image); 3. 用了 `next/navigation` 的 `useSearchParams` / `useRouter` 改成原生 `window.location` 和 `window.history` API。

Server-rendered React component(不带 'use client')在 Astro 中默认 SSR 出 HTML 后不送 client JS,等同于 Astro 的 .astro 模板。Client component 在使用处加 `client:load` / `client:idle` 等 directive 就能 hydrate。

Q3:Astro 的 Lighthouse 100 是不是只在桌面端拿到?移动端怎么样?

桌面 100 大多数内容站都能做到。移动端因为 4× CPU 减速模拟,95-100 都正常。chdh.me 的实测桌面 100、移动端预估 95-99(取决于 client island 数量)。如果只追求"主流绿区"(≥ 90),Astro 是最稳的选择。如果非要拼移动端 100,可以进一步用 `client:visible` 替代 `client:load`、把首屏 Critical CSS inline 等极致优化,但边际收益有限。

Q4:纯静态站为什么还需要 OG 图动态生成?直接放静态图不行吗?

可以放静态图,但你会失去每个页面独立 OG 图的 SEO 收益。OG 图是用户在社交媒体(Twitter / Facebook / 微信 / LinkedIn)分享链接时看到的预览图。每个工具 / 文章 / 评测有自己的标题、品牌、关键参数渲染成 OG 图,分享时的点击率会显著提升。chdh.me 用 `@vercel/og`(Astro 兼容)+ Satori 引擎,build 时自动给 2,200+ 工具页生成 OG 图,每张 1200×630 PNG,30-100 KB。

Q5:自建 VPS 用 nginx,迁框架后部署脚本要改多少?

很少。chdh.me 的 `scripts/deploy.sh` 只改了 3 处:build 产物目录 `out/` → `dist/`、文件计数命令、rsync 源路径。其他逻辑(双源同步 / 原子 symlink 切换 / CF 缓存清除 / IndexNow 推送 / Bing / 百度推送)100% 不变。nginx 配置不动(指向 `/var/www/chdh` symlink)。整个 deploy.sh 只有 5 行 sed 替换就跑通了。

其他评测报告