GitHub Pagesの使い方:無料でサイトを公開する手順と注意点

公開 更新 書いた人 大林 諒

GitHub Pagesは、リポジトリに置いたHTMLファイルをそのままWebサイトとして公開する機能です。サーバーを借りなくても、GitHubのアカウントがあればサイトを出せます。その手軽さの反面、公開範囲を誤解したまま使うと困ったことになります。

ここでは小さな料理教室のホームページを例に、公開の手順、独自ドメインの設定、使ってよい範囲、よくある失敗を順に見ます。読み終わると、自分のサイトをPagesに置いてよいかを判断して、置くなら最後まで設定できるようになります。

この記事の内容
  1. 先に答えると
  2. GitHub Pagesとは何か
  3. いちばん大事なこと:公開サイトは誰でも見られる
  4. 公開の手順
  5. 独自ドメインを設定する
  6. 使ってよい範囲
  7. 他の置き場所との比較
  8. できないことと、その代わり
  9. よく詰まるところ
  10. 次に読む

先に答えると

GitHub PagesはGitHubに付いている、静的なサイト(あらかじめ用意したファイルをそのまま見せるサイト)の公開機能です。Freeプランでは公開リポジトリからしか公開できません。非公開リポジトリから公開するにはTeam以上(1ユーザー月$4から)が要ります。どちらの場合も、公開されたサイト自体は誰でも見られます(2026年11月時点)。

  • 向いているのは手順書、資料、説明ページ、試作の画面です
  • 問い合わせフォームの処理、ログイン、データベースは動きません
  • 会社の内部資料を置く場所ではありません。リポジトリを公開にすると、過去の履歴まで見られます
  • 手順は「Settings」→「Pages」で公開元を選んで「Save」を押すだけで、独自ドメインも使えます
  • ネットショップや事業を動かすための無料サーバーとして使うことは、公式に禁止されています

GitHub Pagesとは何か

GitHubでファイルを保管する単位をリポジトリと呼びます。Pagesを有効にすると、リポジトリの中のHTML、CSS、JavaScriptがそのままサイトになります。index.html を更新してGitHubに送れば、サイトも更新されます。公開の作業が保存の作業の延長で終わるのが便利なところです。

動かないのは、サーバーで処理が要るものです。Pagesはファイルを渡すだけで、受け取った入力を処理する仕組みを持っていません。

作りたいものPagesで動くか補足
会社や教室の紹介ページ動く下の「使ってよい範囲」も確かめる
操作手順書、社外向けの資料動く全世界から見えてよいものに限る
新しいデザインの試作動く見られて困らないものに限る
問い合わせフォームの送信処理動かない外部のフォームを埋め込む
会員ログイン、予約の管理画面動かないサーバーが動くサービスを使う
データベースを読み書きするページ動かない同上
クレジットカードの決済動かない公式に、パスワードやカード番号を扱うサイトに使わないよう書かれている

サンプル料理教室で考えると、料金表や教室の案内は静的なページなので表示できます。一方で reservation-mail のようなメール送信のスクリプトは、Pagesでは動きません。

いちばん大事なこと:公開サイトは誰でも見られる

公式にも「リポジトリが非公開でも、Pagesのサイトはインターネットに公開される」と書かれています。URLを教えていない相手にも見られます。サイト自体を社内の人だけに限定できるのは、OrganizationがGitHub Enterprise Cloudを使っている場合のプロジェクトサイトだけで、小さな会社の選択肢にはまず入りません。

プラン公開リポジトリから公開非公開リポジトリから公開サイトの見え方
Freeできるできない誰でも見られる
Team(1ユーザー月$4)できるできる誰でも見られる
Enterprise(1ユーザー月$21)できるできる誰でも見られる。Enterprise Cloudならプロジェクトサイトを限定公開にできる

ここで困るのが非公開のリポジトリです。サンプル料理教室の website は非公開なので、Freeのままでは公開できません。Freeで使うにはリポジトリを公開に変えることになります。公開に変えると、今のファイルだけでなく過去の履歴も、これまでのActions(自動処理)のログも誰でも読めるようになります。今のファイル一覧から消してあっても、履歴には残っています。手元で確かめると、消したはずの .env が履歴に出てきます。

$ ls -A
.git
index.html
$ git log --oneline --all -- .env
bebff65 .envを削除
725fc6a 最初の版

.env はパスワードなどを入れるファイルです。これが出てきたら、そのリポジトリは公開に変えません。中の鍵を作り直してから、公開用のリポジトリを別に作って新しい履歴で始めるか、Teamにして非公開のまま公開します。

公開に変えるのは、リポジトリの「Settings」の一番下、「Danger Zone」の「Change visibility」です。確認の画面で影響の説明を読んでから進みます。

公開に切り替えるボタンは Danger Zone にある
公開に切り替えるボタンは Danger Zone にある

実際に運用していると、1つのリポジトリに社内の手順や請求関係のメモを入れてしまう例をよく見ます。Pagesで公開するリポジトリには、公開するものだけを入れておきます。

公開の手順

Organization sample-cooking のリポジトリ website がTeamプランにある、または公開リポジトリになっている前提です。一番上の階層に index.html がある状態から始めます。

  1. リポジトリの「Settings」を開きます。
  2. 左の「Code, planning, and automation」の欄で「Pages」を押します。
  3. 「Build and deployment」の「Source」で「Deploy from a branch」を選びます。
  4. ブランチのプルダウン(初期表示は「None」)で main を選びます。
  5. フォルダのプルダウンで「/(root)」を選びます(/docs フォルダから公開したいならそちらを選びます)。
  6. 「Save」を押します。
  7. 少し待ってから「GitHub Pages」の見出しの下の「Visit site」を押して、表示を確かめます。
Pagesの設定は4か所
Pagesの設定は4か所

URLは次の形です。

種類置くリポジトリURL
組織のサイトsample-cooking.github.io という名前のリポジトリhttps://sample-cooking.github.io
プロジェクトのサイトwebsite など好きな名前のリポジトリhttps://sample-cooking.github.io/website

組織のサイトは1つのアカウントで1つ、プロジェクトのサイトは1つのリポジトリで1つです。更新は、GitHubに送ってから反映まで最大10分ほどかかります。

ブランチから公開する以外に、公開元を「GitHub Actions」にして自動処理で公開する方法もあります。公開の前にファイルを組み立てる工程があるサイトで使います。HTMLをそのまま置くだけなら、「Deploy from a branch」で足ります。

独自ドメインを設定する

https://sample-cooking.github.io/website のままだと名刺に載せにくいので、www.sample-cooking.example で開けるようにします。DNS(ドメイン名とサーバーを結びつける仕組み)の変更が必要で、ドメインを取った会社の管理画面で操作します。

  1. リポジトリの「Settings」→「Pages」を開きます。
  2. 「Custom domain」に www.sample-cooking.example と入れます。
  3. 「Save」を押します。ブランチから公開している場合、CNAME というファイルが追加されるコミット(変更の保存)が自動で入ります。
  4. DNSの管理画面で、下の表の CNAME レコードを追加します。
  5. 手元のパソコンにも変更を取り込みます(git pull)。
  6. 表示を確かめ、「Enforce HTTPS」にチェックを入れます。
種類名前値
CNAMEwwwsample-cooking.github.io

値はリポジトリ名を付けず、sample-cooking.github.io までです。ここに /website を付けないのがよくある間違いの1つです。DNSの反映は次のコマンドで確かめられます(Windowsには dig がないので、PowerShellの Resolve-DnsName を使います)。結果に CNAME の行があり、その値が sample-cooking.github.io. なら設定は通っています。

$ dig www.sample-cooking.example +nostats +nocomments +nocmd

wwwなしでも開けるようにする

公式は www を付けた形を常に使うことを勧めています。sample-cooking.example のように www なしで入力した人も同じサイトに届くようにしたいときは、次のレコードも足します。両方のレコードが正しければ、PagesがURLを自動で転送します。

種類名前値
A@185.199.108.153
A@185.199.109.153
A@185.199.110.153
A@185.199.111.153
AAAA@2606:50c0:8000::153
AAAA@2606:50c0:8001::153
AAAA@2606:50c0:8002::153
AAAA@2606:50c0:8003::153

ドメイン会社が最初から入れているレコードは、公式に従って先に外します。公式の手順に MX の話は出てきませんが、メールの行き先を決める別のレコードなので、実際に運用するときは触らずに残します。すでにホームページが動いているドメインなら、切り替えた瞬間に今のサイトが見えなくなるので、作業する時間を決めてから変えます。

*.sample-cooking.example のような、なんでも当てはまるレコード(ワイルドカード)は使いません。公式が、他人に乗っ取られるおそれがあるとして強く止めています。

HTTPSとドメインの確認

「Enforce HTTPS」は、サイトを暗号化された通信で開くように強制する設定です。設定から表示されるまで最大24時間かかることがあります。DNSを設定した直後に押せないのは正常です。証明書(暗号化の通信に必要な電子的な証明)が用意されないまま数分以上たつ場合は、「Custom domain」の横の「Remove」を押し、入れ直して「Save」を押します。チェックの印が出れば完了です。HTTPSにしたら、HTMLの中で http:// のまま読み込んでいる画像やCSSも https:// に直します。

もう1つやっておきたいのがドメインの確認です。リポジトリを消す、Pagesを止める、プランを下げるなどで設定が浮いたときに、他のユーザーにドメインを使われないようにします。

  1. Organizationの「Settings」を開きます。
  2. 左の「Pages」を押します。
  3. 「Add a domain」を押し、ドメインを入れて「Add domain」を押します。
  4. 画面の指示どおりに、DNSへ TXT レコードを足します(値は画面に出ます)。
  5. DNSの反映(最大24時間)を待って「Verify」を押します。

TXT レコードは確認の後も消さずに残します。

Organizationのドメインの確認で使う TXT レコード
Organizationのドメインの確認で使う TXT レコード

使ってよい範囲

公式の上限は次のとおりです(2026年11月時点)。

項目上限
リポジトリの大きさ推奨1GBまで
公開サイトの大きさ1GBまで
公開処理の時間10分を超えると失敗
転送量目安として月100GB
公開の回数目安として1時間に10回(Actionsで公開する場合は対象外)

小さな教室の紹介ページなら、この数字に当たることはまずありません。写真を入れすぎてページが重くなるくらいです。

気にすべきなのは数字より用途です。公式は、Pagesを「事業を動かすための無料のサーバー」として使うことを認めていません。商取引を主な目的にしたサイトやSaaS(ネットで提供するサービス)の販売も禁止で、パスワードやカード番号といった機微な情報も扱えません。

一方で、会社の紹介ページがどこまで許されるかの細かい線引きは公式の文面にありません。実際に運用していると、次のように分けると迷いません。

サイト判断
操作手順書、公開資料、説明ページPagesでよい
試作、社外レビュー用の見本(見られて困らないもの)Pagesでよい
申込みや売上につながる会社の本番サイト別の置き場所も並べて検討する
ネットショップ、決済のあるサイトPagesは使わない

なお、サイトを訪れた人のIPアドレスは、セキュリティのためGitHubに記録されます。プライバシーの説明をサイトに載せているなら、その点も確かめておきます。

他の置き場所との比較

公式で確かめた範囲で短く並べます。料金は2026年11月時点です。

置き場所無料の範囲会社で使うときの注意サーバー側の処理
GitHub PagesFreeは公開リポジトリのみ事業の無料サーバーとしては不可なし
NetlifyFree $0(300クレジット)、独自ドメインとSSLあり利用条件は規約で確かめる。有料はPersonal $9、Pro $20Functionsあり
VercelHobby $0Hobbyは個人の非商用に限られる。会社はPro(1ユーザー月$20)を検討するFunctionsあり
レンタルサーバー基本は有料会社のサイトの置き場所として一般的PHPなどが動くプランが多い

選び方は単純です。公開してよい資料ならPages、会社の本番サイトで問い合わせフォームも自前で処理したいならレンタルサーバー、という分け方でほとんど足ります。NetlifyやVercelはサーバー側の処理も置ける点がPagesと違いますが、使う前に料金の仕組みと利用条件を読みます。

できないことと、その代わり

できないこと代わり
問い合わせフォームの送信を処理するGoogleフォームなど外部のフォームを埋め込む
ログインで見る人を限定する(Free、Team)Googleドライブや社内Wikiのように閲覧権限を付けられる場所に置く
予約の管理やデータベースサーバーが動くサービス、kintoneのような業務アプリ
メールの定時送信GitHub Actionsや自動化ツール

社内だけで読む手順書なら、Pagesに置かず、Googleドキュメントや閲覧権限を付けられるWikiに置きます。GitHubを使い続ける必要はありません。

よく詰まるところ

症状原因直し方
開くと404index.html が公開元の一番上にないpages/index.html のように入っていたら一番上に移す
開くと404ファイル名の大文字小文字が違うIndex.html や index.HTML は不可。index.html に直す
非公開にしたら404Freeで非公開に変えた、または有料プランが切れた公開に戻すかTeamを契約する
独自ドメインで404DNSの値に /website が付いている、変更後の再公開がされていない値を sample-cooking.github.io に直し、もう一度公開する
更新が出ない反映待ち、ブラウザに古い表示が残っている10分待ち、ブラウザを再読み込みする。1時間たっても出なければ「Actions」タブで公開処理の失敗を見る
Actionsから送ったのに更新が出ないGITHUB_TOKEN を使った自動処理のpushではPagesの公開が始まらない公開元を「GitHub Actions」にして、その処理の中で公開する
画像だけ出ないパスの書き方が公開先のURLと合っていない下の説明のとおり相対パスで書く
_ で始まるフォルダだけ出ないサイト生成のJekyllが飛ばしている公開元の一番上に空の .nojekyll を置く
CNAME ファイルを置いたのに独自ドメインにならないファイルを置くだけでは設定されない「Settings」→「Pages」の「Custom domain」に入れて「Save」を押す
「Enforce HTTPS」が押せない証明書の準備中、余分なDNSレコードがある最大24時間待つ。@ や www の余分なレコードを外す

画像のパスの話

/website の付くプロジェクトのサイトでは、サイトの一番上がドメイン直下ではありません。<img src="/images/logo.png"> のように / から始めると、/website を飛ばした場所を探しに行きます。手元で website フォルダの下にファイルを置いて試すと、その差が出ます。

/website/                 200
/website/images/logo.png  200
/images/logo.png          404

200は見つかった、404は見つからないという意味です。index.html からは images/logo.png のように / を付けずに書きます。独自ドメインへ切り替えると一番上の位置が変わるので、最初からこの書き方にしておくと直しが要りません。

画像のパスの書き方で、表示されるかどうかが変わる
画像のパスの書き方で、表示されるかどうかが変わる

次に読む

公開を自動にしたいときは GitHub Actionsの使い方:自動で動かす仕組みと無料枠 を、Teamにするか迷うなら GitHubの料金:Free・Team・Enterpriseと無料でできる範囲 を見てください。公開と非公開の考え方は GitHubとは:できることと、公開・非公開の考え方 に、誰に何を触らせるかは GitHubの権限と2段階認証:共同作業者・Organization・非公開リポジトリ にあります。

あわせて読む