Справочник по Astro 6 — фреймворку для контент-ориентированных сайтов. Архитектура островов, серверные острова, Content Layer API, сравнение с Next.js и Nuxt.

Я выбрал Astro для своих проектов не из-за хайпа, а из-за одной конкретной идеи: на клиент уходит ровно столько JavaScript, сколько нужно для интерактива, и ни байтом больше. Страница генерируется в чистый HTML, а интерактивные компоненты подключаются точечно — там, где они действительно нужны. В 2026 году этот подход стал дефолтом для контентных сайтов.

Astro — это JavaScript-фреймворк для блогов, портфолио, маркетинговых страниц и баз знаний. По данным HTTP Archive, сайты на Astro стабильно лидируют по доле прохождения Core Web Vitals среди популярных фреймворков, заметно опережая Next.js, Nuxt и Gatsby. В опросе State of JS 2025 Astro занял 1-е место по удовлетворённости среди мета-фреймворков. Версия 6.4.x — стабильная, ветка 7 — в alpha-превью. Лицензия MIT. Сайт — astro.build.

Главное событие 2026 года: в январе 2026 Astro вошёл в состав Cloudflare. Это долгосрочные инвестиции в фреймворк и тесная интеграция с edge-инфраструктурой — адаптер Cloudflare в Astro 6 переписан с нуля.

Что это

Astro — это мета-фреймворк для контент-ориентированных сайтов, который собирает страницы в статический HTML по умолчанию. Не «ещё один React-альтернатива», а принципиально другая архитектурная философия: HTML генерируется на этапе билда (или на сервере по запросу), а в браузер уходит только то, что нужно для интерактива. Это даёт скорость загрузки, которую Next.js и Nuxt физически не могут дать при прочих равных — потому что они генерируют JavaScript-бандл по умолчанию.

Четыре принципа, на которых стоит Astro:

  • Server-First. Компоненты рендерятся на сервере, в браузер отправляется чистый HTML.
  • Zero JS by Default. По умолчанию никакого JavaScript на клиенте — вы сами решаете, где он нужен.
  • Content-Driven. Спроектирован для работы с контентом из любых источников: файлы, API, CMS.
  • Customizable. Поддержка React, Vue, Svelte и других фреймворков в одном проекте.

Зачем нужно

Если вы делаете сайт, где главное — контент (статьи, услуги, описания, документация), а не сложные интерфейсы вроде Figma или Notion, Astro даст лучшую скорость загрузки среди всех популярных фреймворков. Три типичных сценария, где Astro выигрывает:

  • Контент-сайты и блоги. Десятки и сотни страниц, основная работа — текст и картинки. Минимальный JavaScript в браузере = моментальная отрисовка.
  • Документация. Тот же подход: контент + структура, интерактив нужен точечно (поиск, переключатель темы).
  • Лендинги и маркетинговые страницы. Каждая миллисекунда загрузки влияет на конверсию. Astro отдаёт страницу за десятки миллисекунд.
  • Базы знаний и справочные порталы. Структурированный контент, минимум динамики, нужны быстрые переходы между страницами.

Astro не подходит для полноценных SaaS-приложений с богатой клиентской логикой — там Next.js или Nuxt дадут больше пользы. Но для всего, где контент важнее интерфейса, Astro — лучший выбор в 2026 году.

Как устроено

Архитектура Astro строится вокруг двух идей: острова (Islands) и выбор режима рендеринга на уровне отдельных страниц. Эти две идеи дают вам скорость статического сайта и гибкость серверного приложения одновременно.

Острова (Islands) — главная архитектурная идея

Astro Islands — интерактивные UI-компоненты на статической HTML-странице. Каждый «остров» загружается и работает независимо, остальная страница остаётся чистым HTML.

На практике это значит: у вас статическая страница с текстом и картинками, а посередине — интерактивный калькулятор на React. Только калькулятор загружает JavaScript, остальная страница моментально отображается. Это не SPA, где каждая страница тянет весь бандл фреймворка. Это MPA с точечным интерактивом.

Вы сами решаете, когда загружать интерактивный компонент, через директивы гидрации:

ДирективаКогда загружаетсяКогда применять
client:loadСразу при загрузке страницыКритичные элементы (навигация, поиск)
client:idleКогда браузер свободенНекритичные виджеты, метрики, аналитика
client:visibleКогда элемент появляется на экранеКомпоненты ниже по странице
client:mediaПри совпадении media queryМобильные/десктопные версии одного компонента
client:onlyТолько на клиенте, без серверного HTMLКомпоненты, завязанные на браузерные API (геолокация, canvas)

Правило простое: чем позже загружается компонент, тем меньше он мешает первому рендеру. client:visible для блока «оставить отзыв» в конце страницы — идеальный кандидат. client:load для основного меню — обязателен.

Серверные острова (Server Islands) — динамика без потери скорости

Server Islands — техника, которую Astro развивает с ветки 4.x: статическая страница отдаётся мгновенно, а отдельные «острова» с динамикой дорисовываются с сервера уже после загрузки, не блокируя первый рендер.

Если клиентские острова решают вопрос интерактивности в браузере, то серверные острова решают вопрос динамического контента без потери скорости. Персональное приветствие, аватар авторизованного пользователя, цены по региону, счётчик просмотров — всё это можно вынести с сервера, не задерживая отрисовку остальной страницы.

Чтобы превратить компонент в серверный остров, достаточно директивы server:defer (нужен установленный адаптер):

---
import Avatar from '../components/Avatar.astro';
---
<Avatar server:defer>
  <GenericAvatar slot="fallback" />
</Avatar>

Страница рендерится сразу с заглушкой (fallback), а содержимое острова подгружается параллельно и появляется, как только готово. В отличие от обычного SSR, где всю страницу держит ответ сервера, здесь ждёт только сам остров.

Три режима рендеринга

Astro позволяет комбинировать подходы на уровне отдельных страниц:

1. SSG — Static Site Generation (по умолчанию). Все страницы генерируются в HTML на этапе билда. Максимальная скорость, сервер просто отдаёт готовые файлы. Идеален для контентных сайтов — блогов, документации, лендингов.

2. SSR — Server-Side Rendering. Страницы рендерятся при каждом запросе. Нужен серверный рантайм. Подходит для страниц с авторизацией или персонализацией.

3. Hybrid Rendering. Комбинация SSG и SSR в одном проекте. Основная часть сайта — статика, отдельные страницы — динамические. Самый частый production-режим в 2026 году.

Пример проекта с гибридным рендерингом:

---
// pages/about.astro — статическая страница (по умолчанию)
const data = await fetch('...');
---
<h1>About</h1>
---
// pages/dashboard.astro — динамическая страница
export const prerender = false;
const user = await getUser();
---
<h1>Welcome, {user.name}</h1>

Когда использовать

Выбор между Astro и конкурентами зависит от типа сайта и того, что важнее — контент или интерактив. Сравнение с главными альтернативами в 2026 году:

КритерийAstroHugoNext.jsGatsby
JS на клиентеМинимум (острова)НетМного (React)Много (React)
UI-фреймворкиЛюбыеНетТолько ReactТолько React
Content CollectionsВстроенныеВстроенныеНет (плагины)GraphQL
Кастомные лоадерыДа (Content Layer API)НетНетЧерез плагины
Core Web Vitals62%~55%29%45%
Для контент-сайтовИдеаленИдеаленИзбыточенУстарел

Когда брать Astro:

  • Контентный сайт, блог, документация, лендинг — Astro выигрывает по скорости и простоте.
  • Нужен гибридный рендеринг — несколько статических страниц и одна-две динамические.
  • Команда хочет использовать разные UI-фреймворки в одном проекте (React + Vue + Svelte).
  • Важна интеграция с Notion или другими CMS через Content Layer API.

Когда НЕ брать Astro:

  • Полноценное SaaS-приложение с богатой клиентской логикой — Next.js или Nuxt подойдут лучше.
  • Сложный роутинг и stateful-интерфейсы на уровне всего приложения — это не про Astro.
  • Команда не готова разбираться с островной архитектурой и директивами гидрации.

Пример

Установка и первый запуск

Установка нового проекта — одна команда:

# Создание нового проекта
npm create astro@latest

# Добавление интеграций
npx astro add tailwind
npx astro add react

# Разработка
npm run dev

# Билд
npm run build

Требования: Node.js 22+ (в Astro 6 поддержка Node 18 и 20 прекращена).

Деплой на VPS

Astro поддерживает деплой на любую платформу: VPS с nginx (статика), Node.js, Cloudflare Workers, Vercel, Netlify, Deno, AWS. Для статического сайта деплой максимально прост:

# Билд
npm run build
# Выход: ./dist/ — готовые HTML/CSS/JS

# Копирование на сервер
rsync -avz ./dist/ user@server:/var/www/site/

Content Collections с кастомным лоадером

Встроенная система управления контентом с типобезопасностью через Zod. Контент может загружаться из файлов или через кастомный лоадер из любого источника — например, из Notion API:

// src/content.config.ts
import { defineCollection, z } from 'astro:content';

const articles = defineCollection({
  loader: async () => {
    const response = await fetch('https://api.notion.com/v1/databases/...', {
      headers: { 'Authorization': 'Bearer ...' }
    });
    const data = await response.json();
    return data.results.map(page => ({
      id: page.id,
      title: page.properties.Name.title[0].plain_text,
      content: page.properties.Content.rich_text[0].plain_text,
    }));
  },
  schema: z.object({
    title: z.string(),
    content: z.string(),
  }),
});

export const collections = { articles };

Так контент хранится в Notion (где с ним удобно работать редактору), а при билде автоматически подтягивается в Astro с проверкой типов.

Поддержка UI-фреймворков в одном проекте

Astro позволяет использовать компоненты из любого фреймворка в одном проекте — React, Vue, Svelte, Solid, Preact, Angular. Можно даже комбинировать:

---
import ReactCounter from '../components/Counter.jsx';
import VueHeader from '../components/Header.vue';
import SvelteFooter from '../components/Footer.svelte';
---
<VueHeader />
<main>
  <ReactCounter client:visible />
</main>
<SvelteFooter />

Это уникальная возможность Astro: вы не привязаны к одному фреймворку и можете выбирать лучший инструмент под каждую задачу.

Что нового в Astro 6 (2026)

Astro 6 — это не косметика, а серьёзная техническая модернизация. Что стоит знать:

  • Переработанный dev-сервер на Vite 7. Быстрее сборка и горячая перезагрузка, меньше различий между dev и production.
  • Встроенный Fonts API. Управление шрифтами (локальными и из Google Fonts) переехало внутрь фреймворка, с автоматической оптимизацией.
  • Live Content Collections. Коллекции, которые подтягивают данные не на этапе билда, а в момент запроса. Удобно для контента, который часто меняется.
  • Content Security Policy (CSP). Встроенная поддержка политик безопасности контента.
  • Переписанная интеграция с Cloudflare. Адаптер собрали с нуля, логичное следствие покупки Astro компанией Cloudflare.
  • Экспериментальный Rust-компилятор. Преемник прежнего Go-компилятора .astro: быстрее и в ряде случаев надёжнее. Команда развивает его на протяжении всей ветки 6.x.

Важно: Если мигрируете с Astro 5: главные ломающие изменения — удаление legacy Content Collections (остаётся только Content Layer API), переход на Zod 4 и отказ от старых версий Node. Используйте автоматический апгрейд: npx @astrojs/upgrade.

Content Collections и Content Layer API — управление контентом

Мощная система с типобезопасностью и валидацией через Zod. Позволяет организовать контент из любого источника — файлы, API, CMS.

Важно для Astro 6: старый (legacy) API коллекций полностью удалён. Все коллекции теперь работают только через Content Layer API — с лоадерами (glob(), file() или кастомный лоадер). Если переносите проект с Astro 5, это обязательный шаг миграции.

Как это работает:

  • Определяете коллекцию в src/content.config.ts — источник данных и схема валидации.
  • Данные загружаются через встроенные лоадеры (glob(), file()) или кастомный лоадер (API, CMS).
  • Запрашиваете через getCollection() и getEntry() — с автокомплитом и проверкой типов.

Это позволяет хранить контент в привычных инструментах (Notion, Sanity, Strapi, файлы), но при этом получать строгую типизацию в коде — TypeScript подсказывает структуру данных прямо в IDE.

Встроенные возможности

Помимо архитектуры островов, Astro из коробки даёт всё, что нужно для продакшн-сайта:

  • Файловый роутинг. Структура src/pages/ = структура URL. src/pages/blog/\[slug\].astro → динамические маршруты.
  • View Transitions. Плавные переходы между страницами на нативных браузерных API, без SPA и без React Router.
  • Оптимизация изображений. Встроенная, с автоконвертацией в WebP/AVIF.
  • Prefetching. Автоматическая предзагрузка страниц при наведении на ссылки — клик по ссылке открывает страницу мгновенно.
  • Middleware. Перехват запросов для аутентификации и обработки данных.
  • Sitemap и RSS. Официальные интеграции для SEO.

Ограничения

Ограничения

Что учитывать

Astro не заменяет React для сложных интерфейсов — если приложение требует богатого stateful-интерфейса (drag-and-drop, сложные формы с реактивной валидацией, real-time обновления), островная архитектура становится сложнее, чем обычный SPA.

В таких случаях Astro уступает Next.js или Nuxt.

Требует Node.js 22+ — в Astro 6 прекращена поддержка Node 18 и 20.

На старых серверах нужно обновить рантайм до 22 или 24.

Content Layer API обязателен в Astro 6 — если у вас большой проект на legacy Content Collections, миграция потребует времени.

Используйте npx @astrojs/upgrade для автоматической миграции.

Rust-компилятор экспериментален

даёт прирост скорости в ряде случаев, но для production-критичных проектов лучше оставаться на стабильном Go-компиляторе до выхода Astro 7.

Cloudflare-интеграция переписана

если у вас был кастомный Cloudflare Worker, миграция на новый адаптер потребует тестирования edge-логики.

Документация английская — большая часть официальной документации и гайдов на английском.

Русскоязычные материалы появляются, но их меньше.

Антипаттерны

Антипаттерны

Чего не делать

Делать SPA на Astro — островная архитектура не предполагает, что вся страница — интерактивный остров.

Если вам нужен полноценный SPA, возьмите Next.js или Nuxt, не мучайте Astro.

Использовать `client:load` для всего подряд — каждый такой компонент блокирует рендер страницы до загрузки.

Используйте client:visible, client:idle, client:media для всего, что не критично при первом открытии.

Хранить API-ключи в коде Astro-проекта — даже в приватном репозитории.

Используйте .env файлы (которые в .gitignore) или переменные окружения платформы деплоя.

Игнорировать Content Layer API в Astro 6 — legacy Content Collections удалены.

Если проект был на старом API, миграция потребуется перед обновлением до Astro 6.

Гонять Rust-компилятор в production без тестов — экспериментальный статус означает, что поведение может меняться.

Используйте его в dev, в production оставайтесь на Go-компиляторе.

Деплоить через `npm run dev` на сервере — это dev-сервер, не production.

Для production используйте npm run build + npm run preview или настройте свой сервер (nginx + Node SSR-адаптер).

Чеклист

Чеклист

Проверка перед запуском

Тип сайта определён

понятно, контентный это сайт (Astro подходит) или SaaS-приложение (лучше Next.js/Nuxt).

Версия Node.js проверена

на сервере и в окружении разработчика установлен Node.js 22+ или 24.

Astro CLI установлен

npm create astro@latest отрабатывает без ошибок.

Dev-сервер запускается

npm run dev поднимает сайт на http://localhost:4321, страницы рендерятся.

Один интерактивный компонент работает

выбрана правильная директива гидрации (client:load, client:visible и т.д.), компонент загружается только когда нужно.

Content Collections настроены

схема Zod описана в src/content.config.ts, данные загружаются через лоадер.

Build проходит без ошибок

npm run build создаёт ./dist/ с готовыми файлами.

Контент типобезопасен

TypeScript проверяет структуру данных из коллекций, автокомплит работает в IDE.

Sitemap и RSS генерируются

интеграции @astrojs/sitemap и @astrojs/rss подключены, файлы появляются в ./dist/.

Деплой настроен

определён хостинг (VPS, Cloudflare Pages, Vercel, Netlify), команда деплоя задокументирована.

CSP-политика настроена

если используется встроенная поддержка CSP в Astro 6, заголовки проставляются правильно.

Производительность проверена

Lighthouse или PageSpeed Insights показывают зелёные Core Web Vitals на representative странице.

Ссылки

Ссылки