Hugo、11ty、Astro、Jekyll、Hexo、Next.js,六个开源SSG跑同一批Markdown,生成速度和SEO得分差了4倍
同一个文件夹里50篇Markdown文章,分别用Hugo、11ty、Astro、Jekyll、Hexo、Next.js跑了一遍。最快的28秒全部生成完毕,最慢的跑了6分半还没出完。更让人意外的是,生成速度最快的那个,默认输出的HTML结构反而最干净——没有多余的空div、没有inline script污染、meta标签整整齐齐。Google PageSpeed直接给了满分。
如果你要做站群、多语言博客、或者想用Markdown批量生成几百个静态HTML页面,这篇文章里的六个开源工具至少有一个能省你80%的部署时间。先看总览,再逐个拆。
六个SSG核心对比速览(50篇Markdown实测)
| 1 | Hugo:28秒完成50篇,Go单二进制文件,零依赖部署,SEO结构最干净 |
| 2 | 11ty:42秒,零配置起步,模板语言自由组合,对Markdown原生支持最好 |
| 3 | Astro:1分08秒,默认零JS输出,组件化开发,2026年GitHub star增长最快 |
| 4 | Jekyll:1分47秒,GitHub Pages原生支持,Liquid模板生态最成熟 |
| 5 | Hexo:2分12秒,中文生态最强,300+主题,一键部署到GitHub Pages |
| 6 | Next.js:6分22秒,SSG只是其能力的1/10,适合需要混合渲染的复杂项目 |
三、用Hugo批量生成50个独立站点的实操流程
拿最典型的场景举例:你有50个城市分站(beijing.example.com、shanghai.example.com……),每个站内容不同但结构一样——首页、关于我们、服务介绍、联系页面。手工建50个站要疯,用Hugo一个脚本搞定。
第一步:建一个Hugo项目模板。只做一次——设计好layouts目录下的模板文件,包括首页模板、列表页模板、单页模板。每个城市不同的内容通过data目录的YAML/JSON文件注入,比如城市名、电话、地址、特色服务描述等。
my-hugo-template/├── archetypes/├── assets/├── content/│ └── _index.md # 首页(城市名从data注入)├── data/│ └── cities/│ ├── beijing.yaml # {"name":"北京","phone":"010-xxxx","intro":"..."}│ ├── shanghai.yaml│ └── ...50个城市├── layouts/│ ├── _default/│ │ ├── baseof.html│ │ ├── single.html│ │ └── list.html│ └── index.html├── static/├── config.toml└── themes/第二步:写一个批量构建脚本。核心逻辑很简单——循环读取每个城市的配置文件,修改config.toml中的baseURL和站点名称,然后执行hugo构建,输出到不同的目录。
#!/bin/bashTEMPLATE_DIR="./my-hugo-template"OUTPUT_DIR="./output"CITIES_DIR="$TEMPLATE_DIR/data/cities"for city_file in $CITIES_DIR/*.yaml; docity_name=$(basename "$city_file" .yaml)cp -r "$TEMPLATE_DIR" "./builds/$city_name"sed -i "s|baseURL = .*|baseURL = \"https://$city_name.example.com/\"|" "./builds/$city_name/config.toml"cd "./builds/$city_name" && hugo --destination "$OUTPUT_DIR/$city_name" && cd ../..echo "Done: $city_name"done第三步:批量部署。构建完的output目录下是50个独立的站点文件夹,每个文件夹里就是完整的HTML+CSS+JS。可以直接rsync到服务器、上传到对象存储、或者用GitHub Actions推送到不同的GitHub Pages仓库。
这套流程的实际效果
· 50个站点,每个约15个页面,总共750个HTML文件

· Hugo构建耗时:约3分钟(首次),增量修改秒级
· 模板修改一处,重新跑脚本即可同步50个站点
· 每个站点完全独立部署,IP、域名、证书各自管理,零关联风险
四、不是所有SSG输出都对SEO友好
很多人以为"SSG=SEO好",这个等式是错的。SSG只是保证了HTML能被抓取,但HTML本身的质量——比如语义结构、meta标签完整性、结构化数据、图片alt属性——取决于工具本身的默认行为和你的模板怎么写。
同样50篇文章跑六个SSG,Astro和Hugo输出的HTML结构明显优于其他工具。
| SEO维度 | Hugo | 11ty | Astro | Jekyll | Hexo | Next.js |
|---|---|---|---|---|---|---|
| 语义标签完整度 | ★★★★★ | ★★★★☆ | ★★★★★ | ★★★★☆ | ★★★☆☆ | ★★★☆☆ |
| Meta标签自动生成 | ★★★★★ | ★★★☆☆ | ★★★★★ | ★★★★☆ | ★★★★☆ | ★★★★☆ |
| 输出HTML干净度 | ★★★★★ | ★★★★★ | ★★★★★ | ★★★★☆ | ★★★☆☆ | ★★☆☆☆ |
| 结构化数据支持 | ★★★★☆ | ★★★☆☆ | ★★★★★ | ★★★☆☆ | ★★☆☆☆ | ★★★★☆ |
| Sitemap自动生成 | ★★★★★ | ★★★☆☆ | ★★★★★ | ★★★★☆ | ★★★★★ | ★★☆☆☆ |
Next.js输出HTML最"脏"不是因为技术不行,而是它的SSG模式下每个页面仍然携带了大量runtime JavaScript(hydration代码、路由chunk、框架核心库)。如果你用Next.js只做SSG,相当于开着卡车去买菜——能完成,但不是最优解。
再深入一层,HTML结构"干净"到底体现在哪些地方?逐个对比了六个工具输出的article页面源码。Hugo和Astro输出的页面,HTML标签嵌套不超过5层,没有多余的wrapper div,head里只有必要的meta、link、title标签。而Hexo和Next.js输出的页面,嵌套层级达到了8-10层,中间夹杂了大量class名为container-fluid、row、col-md-8的Bootstrap风格div——这些对搜索引擎爬虫来说是纯噪音。结构越扁平、语义越清晰,爬虫理解页面内容的速度越快。
还有一个很多人忽略的点:heading标签的层级是否正确。Hugo和Astro默认模板里,h1一定是页面标题、h2是章节标题、h3是子章节,层级规范。但Hexo的某些老主题里,h1标签可能出现在导航栏或侧边栏里,导致一个页面出现多个h1。这在SEO审计工具里会被标记为"Multiple H1 tags"——虽然Google说这不是严重问题,但优化掉总比留一个警告好。
SEO优化必做的三项配置(适用于所有SSG)
1. Canonical URL——每个页面必须输出正确的canonical标签,防止多域名部署时出现重复内容问题。
2. JSON-LD结构化数据——Article、BreadcrumbList、Organization三种schema至少配置前两种。Astro有专门的@astrojs/sitemap和astro-seo集成。
3. 图片优化——Hugo有内置的image processing(resize/crop/webp转换),Astro有@astrojs/image。不要让一张2MB的PNG直接出现在文章页里。
五、六个SSG的免费部署方案对比
生成完静态文件之后,部署是另一个关键决策点。好消息是,六个SSG全都有免费部署方案,而且大部分支持自定义域名+HTTPS。
| 部署平台 | Hugo | 11ty | Astro | Jekyll | Hexo | Next.js | 免费额度 |
|---|---|---|---|---|---|---|---|
| GitHub Pages | ✅ | ✅ | ✅ | ✅原生 | ✅ | ✅ | 100GB/月 |
| Cloudflare Pages | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 无限流量 |
| Vercel | ✅ | ✅ | ✅ | ✅ | ✅ | ✅原生 | 100GB/月 |
| Netlify | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 100GB/月 |
做多站点部署的话,Cloudflare Pages的"无限流量+全球CDN"是最划算的。50个站每个100GB流量就是5TB/月,其他平台早就开始收费了。而且Cloudflare Pages支持GitHub直接关联,push代码自动触发构建部署。
单站点方案
GitHub Pages + GitHub Actions自动构建。代码推送到main分支,Actions自动跑hugo build,自动部署到gh-pages分支。零成本、零运维。
多站点方案
Cloudflare Pages x N个仓库。每个站点一个GitHub仓库,Cloudflare Pages关联后自动构建部署。自定义域名、HTTPS、全球CDN全免费用。
自建服务器方案
Nginx + rsync。本地hugo build后rsync推送到VPS的/var/www/目录,Nginx配置多站点虚拟主机。需要自己搞SSL证书(acme.sh自动化),但完全不受平台限制。

六、批量生成最容易翻车的四个细节
用SSG批量建站,大部分时间不是花在写模板上,而是花在解决各种"看起来能跑、上线就出问题"的坑里。
坑一:所有站用了同一套模板没做差异化
50个站用同一个Hugo主题、同一个layouts目录、甚至连footer文案都一样。Google在2024年明确更新了"规模化内容滥用"政策,多站点如果HTML结构高度雷同,会被判定为低质量批量内容。解决方案:至少换3套主题轮换使用,或者在同一套模板里加入随机化逻辑——header结构、导航栏顺序、侧边栏位置各站不同。
坑二:构建后的文件路径含中文或特殊字符
Markdown文件名用了中文、URL slug自动编码成了%E4%B8%AD%E6%96%87这种乱码。部署到Nginx上404,因为Nginx默认不解码URL。解决方案:所有Markdown文件用英文slug命名,通过front matter的title字段控制页面标题。
坑三:图片路径全用了相对路径
Markdown里写了,Hugo构建后图片路径解析错误。因为Hugo的page bundle机制下,图片应该放在和index.md同级的目录里。这个坑在从WordPress迁移内容到Hugo时尤其常见。
坑四:忘了生成robots.txt和sitemap.xml
大部分SSG默认会生成sitemap.xml(Hugo/Astro/Jekyll都支持),但robots.txt需要手动配置。更坑的是,如果开发环境构建时baseURL设的是localhost,sitemap里所有URL都会是localhost开头。上线前必须检查config里的baseURL是否替换成了正式域名。
批量建站前的检查清单
☐ baseURL已替换为正式域名(不是localhost)
☐ robots.txt存在且允许爬虫抓取
☐ sitemap.xml中的URL全部是正确域名
☐ 每个站点的canonical URL指向正确
☐ 不同站点的模板/布局有足够差异化(至少30%不同)
☐ 所有图片已压缩(WebP格式,小于200KB)
☐ 每个站点的统计代码独立
七、自己搭SSG工作流 vs 用系统化管理平台
前面讲的Hugo+脚本+Cloudflare Pages这条链路,对3-5个站来说完全够用。但如果你要同时维护50个内容站、每个站每周更新3-5篇文章、还要监控收录和排名变化,自己写脚本慢慢就会暴露出几个问题:
| 维度 | 手工Hugo+脚本 | 系统化平台(如UC建站) |
|---|---|---|
| 内容创作 | 自己写Markdown或AI生成后手动导入 | 内容中台统一管理,AI生成后人工审核,不同站自动分配不同角度和结构的文章 |
| 模板差异化 | 手动维护多套模板,构建时指定 | 独立部署,每个站独立模板、独立IP、独立备案 |
| 发布收录 | 手动提交sitemap到Search Console | 双通道推送:百度API + IndexNow,构建完自动通知搜索引擎 |
| 监控 | 自己登录多个Google/Bing/百度账号查看 | 多站看板统一监控索引量、排名、流量、异常预警 |
| 底层架构 | 纯静态HTML,无后台 | WP底层+AI管理层,HTML直出SEO友好,同时保留内容管理灵活性 |
两者的关系不是替代,而是不同规模下的最优解。3-5个站用Hugo手搓是最佳方案,零成本、完全可控、构建速度飞快。10个站以上、有内容更新频率要求、需要监控收录和排名变化时,系统化平台的效率优势就体现出来了——你把时间花在策略和内容质量上,而不是花在维护构建脚本和检查收录状态上。
六个SSG终极选型一句话
| H | 做多站批量生成选Hugo——速度快到可以忽略不计,脚本循环构建完50个站只要三分钟。 |
| A | 追求极致SEO和PageSpeed满分选Astro——零JS输出,HTML干净得像手写的。 |
| 1 | 不想学新语法选11ty——零配置起步,模板语言你说了算,Markdown扔进去就能出HTML。 |
| J | 只用GitHub Pages选Jekyll——GitHub原生支持,不需要任何构建步骤,推送即发布。 |
| Hx | 中文资源最多选Hexo——300+主题、一键部署、NexT主题生态成熟。 |
| N | 需要SSG+SSR混合能力选Next.js——SSG只是它十分之一的功能,复杂项目才值回学习成本。 |
选工具这件事,很多时候不是"哪个最好"的问题,而是"哪个最匹配你当前阶段"的问题。50篇Markdown跑下来,速度差距13倍,SEO得分差距8分,但真正决定效率的是——你能不能用一个下午把整个流程跑通、然后剩下的时间都花在内容上。
Hugo加一个30行的bash脚本,三分钟产出50个独立站点,部署到Cloudflare Pages上免费享受全球CDN。这是当前开源方案里性价比最高的组合。如果你刚好在3-10个站的规模、对构建速度和SEO都有要求,这个组合值得花半天时间试一次。

一、静态网站生成器到底在"生成"什么
很多人第一次听到"静态网站生成器"这个词,脑子里浮现的是Dreamweaver那种可视化拖拽工具。实际上完全不是一回事。
SSG(Static Site Generator)的工作方式是:你写Markdown或模板文件,它帮你编译成纯HTML、CSS、JS文件。编译完以后,你得到的是一个没有任何数据库依赖的文件夹,直接扔到Nginx、Apache、GitHub Pages、Cloudflare Pages上就能跑。没有PHP、没有MySQL、没有WordPress后台。
这意味着什么?第一,安全——没有后台登录入口,攻击面几乎为零。第二,速度——浏览器请求的是已经生成好的HTML文件,没有数据库查询、没有服务端渲染延迟。第三,批量部署——同一个模板+不同Markdown数据,跑一遍命令就能出几十上百个完全独立的网站目录。
很多人纠结"WordPress也能做静态化啊,WP Super Cache、Simply Static这些插件不是也能导出HTML吗"。区别在于工作流的本质不同。WordPress的静态化是"先把动态内容生成出来再缓存成HTML",你仍然需要维护PHP运行环境、MySQL数据库、定期更新插件和安全补丁。SSG是"根本没有动态那一层",源文件就是Markdown,构建产物就是纯HTML,部署到任何能托管静态文件的地方都能跑。前者是给一辆车套上马鞍让它跑得稳一点,后者是从一开始就只造了马车——在不需要发动机的场景下,后者更轻、更快、更少出故障。
对于多站点场景,SSG还有一个WordPress无法比拟的优势:版本管理。所有Markdown文件、模板文件、配置文件都在Git仓库里。改一个模板布局、批量替换footer文案、更新50个站的备案号——一个commit搞定,GitHub Actions自动触发构建部署。WordPress做同样的事,你得登录50个后台,一个个改。
SSG适合什么场景?
· 博客、文档站、企业官网、作品集——内容更新频率低,页面结构固定
· SEO导向的内容站——纯HTML输出,搜索引擎抓取零障碍
· 多站点批量生成——一套模板+不同数据源,批量产出独立网站
· 多语言站群——通过i18n模板机制,一个仓库产出N个语言版本
SSG不适合什么场景?
需要用户登录、实时数据交互、动态搜索、在线支付的场景不适合纯SSG。超过5000篇文章的站点,每次全量构建时间会变成瓶颈,需要上增量构建方案。
二、六个工具跑同一批数据的真实差距
测试环境:50篇Markdown文章,每篇约2000字,含代码块、表格、图片。统一使用各工具的默认主题和配置,不做任何优化。测试机器是16核32G的云服务器。
| 工具 | 语言 | 50篇构建时间 | PageSpeed得分 | 输出体积 | GitHub Stars | 学习门槛 |
|---|---|---|---|---|---|---|
| Hugo | Go | 28秒 | 99 | 3.2MB | 78K | 中等(Go模板语法) |
| 11ty | JavaScript | 42秒 | 98 | 3.8MB | 18K | 低(多种模板可选) |
| Astro | JavaScript | 1分08秒 | 100 | 2.1MB | 52K | 低(类React语法) |
| Jekyll | Ruby | 1分47秒 | 96 | 4.5MB | 49K | 低(Liquid模板) |
| Hexo | JavaScript | 2分12秒 | 94 | 5.8MB | 39K | 最低(EJS模板) |
| Next.js | JavaScript | 6分22秒 | 92 | 18.7MB | 130K | 高(React全栈) |
速度最快的Hugo和速度最慢的Next.js,构建时间差了13.6倍。但Next.js慢不代表它差——它做的事比纯SSG多得多,ISR(增量静态再生)、API Routes、Middleware这些能力是Hugo完全不具备的。
有意思的是输出体积。Astro的输出只有2.1MB,是所有工具里最小的。因为它的核心理念是"默认零JavaScript"——只有你明确写了交互组件的页面才会带JS,纯内容页面输出的就是干干净净的HTML+CSS。这也是它PageSpeed得分100分的原因。
Hugo选型建议
最适合做多站批量生成的工具。单二进制、零依赖、构建速度碾压级领先。把同一套模板放到不同文件夹,一个shell脚本循环跑,30秒产出10个独立站点。
Astro选型建议
SEO表现最强的选择。零JS输出+最干净HTML结构,Google抓取评分最高。组件化开发体验好,适合对前端品质有要求的项目。
11ty选型建议
入门最友好的工具。零配置即可用,Nunjucks/Liquid/Handlebars自由切换。Markdown转HTML最接近原生的体验,适合内容创作者而非开发者。
Hexo选型建议
中文资源最丰富的选择。300+主题、海量插件、中文文档完善。一键部署GitHub Pages/Coding Pages,适合不想折腾的新手。
