База знаний

GitHub Pages — бесплатный хостинг статических сайтов прямо из GitHub

Бесплатный хостинг статических сайтов от GitHub: быстрый старт, деплой через Actions, свой домен, ограничения и практические сценарии.

Опубликовано

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.iohttps://username.github.io/repo-name
КоличествоОдин на аккаунтБез ограничений
Когда использоватьПортфолио, личный сайт, блогДокументация проекта, лендинг продукта
💡
Пользовательский сайт — один на аккаунт, зато адрес короче. Проектных — сколько угодно, по одному на каждый репозиторий.

Быстрый старт: первый сайт за 5 минут

Вам нужен только аккаунт на GitHub.

Шаг 1. Создайте репозиторий

  1. Зайдите на github.comNew repository
  2. В Repository name введите username.github.io, где username — ваш логин на GitHub
  3. Оставьте репозиторий Public
  4. Поставьте галочку Add a README file
  5. Нажмите 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

  1. Перейдите в Settings репозитория
  2. В боковом меню — Pages (раздел «Code and automation»)
  3. Build and deployment → Source → выберите Deploy from a branch
  4. Branch → выберите main и папку / (root)
  5. Нажмите Save

Шаг 4. Проверьте результат

Через 1–2 минуты откройте https://username.github.io — сайт работает.

💡
Первый деплой может занять до 10 минут. Последующие обновления — 1–2 минуты.

Три способа разместить проектный сайт

Допустим, у вас есть репозиторий my-project и вы хотите добавить к нему сайт.

Из корня репозитория

  1. Положите index.html в корень
  2. Settings → Pages → Branchmain и / (root)
  3. Адрес: https://username.github.io/my-project

Из папки /docs

Удобнее — код проекта и сайт не перемешиваются:

  1. Создайте папку docs/ в репозитории
  2. Положите туда index.html
  3. Settings → Pages → Branchmain и /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).

Как переключиться

  1. Settings → Pages → SourceGitHub Actions
  2. GitHub предложит готовые шаблоны workflow
  3. Или создайте свой вручную

Пример: деплой статики

Файл .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

  1. Settings → Pages → Custom domain → введите ваш домен
  2. Нажмите Save
  3. Поставьте галочку Enforce HTTPS
⚠️
DNS-изменения могут занять до 24 часов. Если сайт не открывается сразу — подождите.

GitHub автоматически создаст файл CNAME в корне репозитория. Не удаляйте его — без этого файла привязка домена слетит.


Тарифы и лимиты

ПараметрЛимит
Стоимость (публичные репозитории)Бесплатно на любом тарифе GitHub
Стоимость (приватные репозитории)GitHub Pro, Team или Enterprise
Размер репозитория1 ГБ (рекомендация)
Размер опубликованного сайта1 ГБ
Пропускная способность100 ГБ в месяц
Количество деплоев10 в час
Серверный кодНе поддерживается
📌
GitHub Pages — только статика. Если нужна серверная логика, базы данных или авторизация — Vercel, Netlify или собственный VPS.

Практические сценарии

Портфолио разработчика

Репозиторий 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 добавлен или настроен генератор сайтов
Pages включён в Settings → Pages
Выбран источник: ветка или GitHub Actions
Сайт открывается по адресу
Кастомный домен привязан (если нужен)
HTTPS включён
Файл .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 в конфиге.


Ссылки


По теме

Статья: Семь перерождений pimenov.ai: от ночного эксперимента с OpenClaw до рабочей системы на Codex

Блог: Notion Workers: GitHub-звёзды, база Notion и агент, который ими управляет

База знаний: GitHub для новичков — полное руководство: от регистрации до работы с Codex


Если вы хотите разобраться, как встроить GitHub Pages в свою рабочую систему — например, связать с CMS, настроить автоматический деплой или добавить аналитику — пишите в Telegram @pimenov.

Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov