Hugo и Astro — оба отличные генераторы статических сайтов, оба создают быстрые HTML-файлы. Но различия между ними фундаментальны: один написан на Go и делает ставку на скорость сборки, другой — на JavaScript и ставит во главу угла экосистему и удобство компонентной разработки.
Философия двух подходов
Hugo — написан на Go. Он существует с 2013 года и до сих пор удерживает рекорды скорости сборки. Шаблонизатор Go-templates мощный, но синтаксически далёк от привычного HTML/JSX.
Astro — написан на JavaScript/TypeScript, использует Vite. Синтаксис .astro-файлов максимально похож на HTML. Поддерживает компоненты React, Vue, Svelte.
Скорость сборки: безоговорочная победа Hugo
Это единственный параметр, где Hugo не имеет конкурентов:
| Кол-во страниц | Hugo | Astro |
|---|---|---|
| 1 000 | 0.1 с | ~3 с |
| 10 000 | 0.8 с | ~30 с |
| 100 000 | 6 с | ~5 мин |
Если у вас новостной портал с 50 000+ статьями и деплой должен занимать секунды — Hugo вне конкуренции.
Возможности и экосистема
| Параметр | Astro | Hugo |
|---|---|---|
| Язык шаблонов | .astro (похоже на HTML) | Go-templates (специфический синтаксис) |
| Компоненты React/Vue/Svelte | ✅ Да | ❌ Нет |
| TypeScript | ✅ Нативно | ❌ Не поддерживается |
| Npm-пакеты | ✅ Любые | ⚠️ Ограниченно через Hugo Pipes |
| MDX (JSX в Markdown) | ✅ Нативно | ❌ Нет |
| Tailwind CSS | ✅ 1 команда | ⚠️ Возможно, но сложнее |
| Content Collections (типизация) | ✅ Zod-валидация | ❌ Базовый фронтматтер |
| Модули/плагины | npm-интеграции | Hugo Modules (Go modules) |
| JS-острова (частичная гидратация) | ✅ Да | ❌ Нет |
| Активное развитие | ✅ Cloudflare | ✅ Независимо |
Шаблонизация: сравнение синтаксиса
<!-- Hugo: Go-шаблоны -->
{{ range .Pages }}
<article>
<h2><a href="{{ .Permalink }}">{{ .Title }}</a></h2>
<time>{{ .Date.Format "02.01.2006" }}</time>
{{ .Summary }}
</article>
{{ end }} <!-- Astro: знакомый JSX-синтаксис -->{
posts.map((post) => (
<article>
<h2>
<a href={post.url}>{post.data.title}</a>
</h2>
<time>{post.data.date.toLocaleDateString('ru-RU')}</time>
<p>{post.data.description}</p>
</article>
))
} Для разработчиков, знакомых с React или Vue, синтаксис Astro освоить в разы проще.
Кривая обучения
Hugo требует изучения:
- Go-templates (условия, циклы, функции — свой синтаксис)
- Hugo-специфической структуры папок (
archetypes,layouts,partials) - Hugo Pipes для обработки ресурсов
Astro требует изучения:
- Frontmatter в
.astro-файлах (фактически TypeScript) - Директивы
client:*для островов - Остальное — привычный HTML/CSS/JS
Большинство JS-разработчиков начинают продуктивно работать с Astro в первый же день.
Экосистема тем и шаблонов
У Hugo огромная библиотека бесплатных тем — тысячи вариантов на themes.gohugo.io. Это преимущество для не-разработчиков.
Astro themes (astro.build/themes) активно растёт: 300+ тем в 2026 году. Подробнее — в статье Шаблоны для Astro.
Когда выбрать Hugo?
Гигантские сайты
100 000+ страниц? Hugo соберёт за секунды. Astro будет строиться минутами, что критично при CI/CD на больших редакциях.
Go-разработчики
Если команда знает Go — Go-templates будут органичны. Не нужно погружаться в JavaScript-экосистему.
Нет React/Vue
Если проект — чистый HTML/CSS без интерактивных компонентов, Hugo достаточно и работает надёжно.
Когда выбрать Astro?
- Нужны компоненты React, Vue или Svelte
- Используется Tailwind CSS, npm-пакеты
- Контент в MDX с кастомными компонентами в тексте
- Команда — JS/TS разработчики
- Нужны TypeScript и строгая типизация контента (Zod)
- Меньше 50 000 страниц (сборка комфортная)
Миграция Hugo → Astro
Если у вас есть проект на Hugo и вы хотите перейти на Astro:
- Markdown-файлы совместимы — frontmatter тот же формат
- Нужно переписать Go-шаблоны на
.astro-компоненты config.toml→astro.config.mjs- Маршрутизация:
content/blog/post.md→src/content/articles/post.mdx
Итог
Hugo — непобедимый чемпион по скорости сборки для порталов с сотнями тысяч страниц. Astro — гораздо более современный DX, полная JS-экосистема, компонентная модель и типизация. Для большинства новых проектов с объёмом до 50 000 страниц Astro предпочтительнее. Для гигантских порталов — Hugo незаменим.