Зачем я выбрал Astro для контентного сайта: архитектура островов, минимум JS, три режима рендеринга, Content Collections и сравнение с конкурентами.
GitHub Pages — сервис статического хостинга от GitHub. Берёт HTML, CSS и JavaScript из репозитория, при необходимости прогоняет через сборку и публикует как сайт. Бесплатно, с HTTPS и поддержкой своего домена.
Что это такое
GitHub Pages — встроенный в GitHub хостинг для статических сайтов. Вы пушите код в репозиторий, GitHub собирает и публикует сайт по адресу username.github.io. Серверная логика (PHP, Python, Node.js) не поддерживается — только статика.
Сервис доступен бесплатно для публичных репозиториев на любом тарифе GitHub. Для приватных — нужен GitHub Pro, Team или Enterprise.
Основные возможности
| Возможность | Что даёт |
| Автоматический деплой | Пушите код — сайт обновляется сам, без ручных действий |
| HTTPS из коробки | Бесплатный SSL-сертификат на все сайты, включая кастомные домены |
| Свой домен | Привязка любого домена вместо github.io через DNS |
| GitHub Actions | Гибкая сборка: Astro, Hugo, Next.js, Jekyll и любые другие генераторы |
| Два типа сайтов | Пользовательский (username.github.io) и проектный (username.github.io/repo) |
| Jekyll из коробки | Встроенная поддержка Jekyll — пишете в Markdown, получаете сайт |
Два типа сайтов
От типа зависит, как называть репозиторий и по какому адресу будет доступен сайт.
| Параметр | Пользовательский / организационный | Проектный |
| Репозиторий | username.github.io | Любое название |
| Адрес сайта | https://username.github.io | https://username.github.io/repo-name |
| Количество | Один на аккаунт | Без ограничений |
| Когда использовать | Портфолио, личный сайт, блог | Документация проекта, лендинг продукта |
Быстрый старт: первый сайт за 5 минут
Вам нужен только аккаунт на GitHub.
Шаг 1. Создайте репозиторий
- Зайдите на github.com → New repository
- В Repository name введите
username.github.io, гдеusername— ваш логин на GitHub - Оставьте репозиторий Public
- Поставьте галочку Add a README file
- Нажмите Create repository
ivanov, репозиторий — ivanov.github.io. Иначе GitHub не распознает его как пользовательский сайт.Шаг 2. Добавьте index.html
В репозитории нажмите Add file → Create new file, назовите index.html:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Мой первый сайт</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
max-width: 800px;
margin: 0 auto;
padding: 2rem;
background: #f8f9fa;
color: #333;
}
h1 { color: #0969da; }
.card {
background: white;
padding: 1.5rem;
border-radius: 8px;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
margin-top: 1rem;
}
</style>
</head>
<body>
<h1>Привет, мир!</h1>
<div class="card">
<p>Это мой первый сайт на GitHub Pages.</p>
<p>Он работает бесплатно и доступен всему интернету.</p>
</div>
</body>
</html>Нажмите Commit changes.
Шаг 3. Включите GitHub Pages
- Перейдите в Settings репозитория
- В боковом меню — Pages (раздел «Code and automation»)
- Build and deployment → Source → выберите Deploy from a branch
- Branch → выберите
mainи папку/ (root) - Нажмите Save
Шаг 4. Проверьте результат
Через 1–2 минуты откройте https://username.github.io — сайт работает.
Три способа разместить проектный сайт
Допустим, у вас есть репозиторий my-project и вы хотите добавить к нему сайт.
Из корня репозитория
- Положите
index.htmlв корень - Settings → Pages → Branch →
mainи/ (root) - Адрес:
https://username.github.io/my-project
Из папки /docs
Удобнее — код проекта и сайт не перемешиваются:
- Создайте папку
docs/в репозитории - Положите туда
index.html - Settings → Pages → Branch →
mainи/docs
Отдельная ветка gh-pages
Классический подход — сайт живёт в отдельной ветке:
git checkout --orphan gh-pages
git rm -rf .
echo "<h1>Документация проекта</h1>" > index.html
git add index.html
git commit -m "Initial GitHub Pages"
git push origin gh-pagesВ Settings → Pages выберите ветку gh-pages.
Деплой через GitHub Actions
GitHub рекомендует деплоить Pages через Actions — больше контроля над сборкой. Критично, если вы используете генераторы сайтов (Astro, Hugo, Next.js).
Как переключиться
- Settings → Pages → Source → GitHub Actions
- GitHub предложит готовые шаблоны workflow
- Или создайте свой вручную
Пример: деплой статики
Файл .github/workflows/deploy.yml:
name: Deploy to GitHub Pages
on:
push:
branches: ["main"]
permissions:
contents: read
pages: write
id-token: write
jobs:
deploy:
environment:
name: github-pages
url: $ steps.deployment.outputs.page_url
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/configure-pages@v5
- uses: actions/upload-pages-artifact@v3
with:
path: "."
- id: deployment
uses: actions/deploy-pages@v4Пример: Astro-сайт
name: Deploy Astro to GitHub Pages
on:
push:
branches: ["main"]
permissions:
contents: read
pages: write
id-token: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- run: npm ci
- run: npm run build
- uses: actions/upload-pages-artifact@v3
with:
path: ./dist
deploy:
needs: build
environment:
name: github-pages
url: $ steps.deployment.outputs.page_url
runs-on: ubuntu-latest
steps:
- id: deployment
uses: actions/deploy-pages@v4Привязка собственного домена
Вместо username.github.io можно использовать свой домен.
Настройте DNS
У регистратора домена добавьте записи.
Для корневого домена (например, mysite.ru) — четыре A-записи:
185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153Для субдомена (например, www.mysite.ru) — CNAME-запись:
CNAME www username.github.io.Укажите домен в GitHub
- Settings → Pages → Custom domain → введите ваш домен
- Нажмите Save
- Поставьте галочку Enforce HTTPS
GitHub автоматически создаст файл CNAME в корне репозитория. Не удаляйте его — без этого файла привязка домена слетит.
Тарифы и лимиты
| Параметр | Лимит |
| Стоимость (публичные репозитории) | Бесплатно на любом тарифе GitHub |
| Стоимость (приватные репозитории) | GitHub Pro, Team или Enterprise |
| Размер репозитория | 1 ГБ (рекомендация) |
| Размер опубликованного сайта | 1 ГБ |
| Пропускная способность | 100 ГБ в месяц |
| Количество деплоев | 10 в час |
| Серверный код | Не поддерживается |
Практические сценарии
Портфолио разработчика
Репозиторий username.github.io с резюме, списком проектов и контактами. Работающий сайт, который можно отправить вместе с откликом на вакансию.
Документация к проекту
Папка /docs в репозитории с включённым Pages. Пользователи получат удобный сайт вместо чтения README на GitHub. Для полноценной документации — Starlight или Docusaurus.
Блог
Генератор статических сайтов (Jekyll, Hugo, Astro, 11ty) + GitHub Pages. Пишете посты в Markdown, пушите — блог обновляется.
Лендинг продукта
Одностраничник для приложения, бота или сервиса. Бесплатно, с HTTPS и кастомным доменом.
Прототипы и демо
HTML/CSS/JS прототип можно мгновенно показать заказчику — запушили в репозиторий с Pages, отправили ссылку.
Онлайн-визитка
Минимальная страница с именем, фото, ссылками на соцсети. Создаётся за 10 минут, работает бесплатно.
Совместимые инструменты
- Jekyll — встроенная поддержка в GitHub Pages, работает без настройки CI/CD. Пишете в Markdown, получаете сайт
- Hugo — быстрый генератор на Go. Тысячи страниц за секунды. Деплой через GitHub Actions
- Astro — современный фреймворк, минимум JavaScript на выходе. Подходит для контентных сайтов
- Cloudflare — бесплатный CDN и DNS поверх GitHub Pages. Ускоряет загрузку и добавляет защиту
- Starlight — тема Astro для сайтов документации с поиском, i18n и навигацией из коробки
Чеклист быстрой проверки
username.github.io)index.html добавлен или настроен генератор сайтов.nojekyll добавлен, если не используете JekyllЧастые проблемы
Сайт не появляется после деплоя
Подождите до 10 минут. Проверьте Settings → Pages: правильный branch и папка. Убедитесь, что в репозитории есть index.html.
404 при переходе на страницу
GitHub Pages чувствителен к регистру. Файл About.html и ссылка на about.html — разные вещи. Всегда используйте нижний регистр в именах файлов.
Кастомный домен не работает
Проверьте DNS-записи. Убедитесь, что файл CNAME существует в репозитории. DNS может обновляться до 24 часов.
CSS и картинки не грузятся на проектном сайте
Базовый путь проектного сайта — /repo-name/. Используйте относительные пути (./style.css) вместо абсолютных (/style.css). В генераторах — укажите base или baseURL в конфиге.
Ссылки
- Официальная документация GitHub Pages
- Quickstart
- Настройка кастомного домена
- GitHub Pages examples
- pages.github.com
По теме
Статья: Семь перерождений pimenov.ai: от ночного эксперимента с OpenClaw до рабочей системы на Codex
Блог: Notion Workers: GitHub-звёзды, база Notion и агент, который ими управляет
База знаний: GitHub для новичков — полное руководство: от регистрации до работы с Codex
Если вы хотите разобраться, как встроить GitHub Pages в свою рабочую систему — например, связать с CMS, настроить автоматический деплой или добавить аналитику — пишите в Telegram @pimenov.
Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov