GitHub Pagesは、リポジトリに置いたHTMLファイルをそのままWebサイトとして公開する機能です。サーバーを借りなくても、GitHubのアカウントがあればサイトを出せます。その手軽さの反面、公開範囲を誤解したまま使うと困ったことになります。
ここでは小さな料理教室のホームページを例に、公開の手順、独自ドメインの設定、使ってよい範囲、よくある失敗を順に見ます。読み終わると、自分のサイトをPagesに置いてよいかを判断して、置くなら最後まで設定できるようになります。
この記事の内容
先に答えると
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」です。確認の画面で影響の説明を読んでから進みます。

実際に運用していると、1つのリポジトリに社内の手順や請求関係のメモを入れてしまう例をよく見ます。Pagesで公開するリポジトリには、公開するものだけを入れておきます。
公開の手順
Organization sample-cooking のリポジトリ website がTeamプランにある、または公開リポジトリになっている前提です。一番上の階層に index.html がある状態から始めます。
- リポジトリの「Settings」を開きます。
- 左の「Code, planning, and automation」の欄で「Pages」を押します。
- 「Build and deployment」の「Source」で「Deploy from a branch」を選びます。
- ブランチのプルダウン(初期表示は「None」)で
mainを選びます。 - フォルダのプルダウンで「/(root)」を選びます(
/docsフォルダから公開したいならそちらを選びます)。 - 「Save」を押します。
- 少し待ってから「GitHub Pages」の見出しの下の「Visit site」を押して、表示を確かめます。

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(ドメイン名とサーバーを結びつける仕組み)の変更が必要で、ドメインを取った会社の管理画面で操作します。
- リポジトリの「Settings」→「Pages」を開きます。
- 「Custom domain」に
www.sample-cooking.exampleと入れます。 - 「Save」を押します。ブランチから公開している場合、
CNAMEというファイルが追加されるコミット(変更の保存)が自動で入ります。 - DNSの管理画面で、下の表の
CNAMEレコードを追加します。 - 手元のパソコンにも変更を取り込みます(
git pull)。 - 表示を確かめ、「Enforce HTTPS」にチェックを入れます。
| 種類 | 名前 | 値 |
|---|---|---|
CNAME | www | sample-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を止める、プランを下げるなどで設定が浮いたときに、他のユーザーにドメインを使われないようにします。
- Organizationの「Settings」を開きます。
- 左の「Pages」を押します。
- 「Add a domain」を押し、ドメインを入れて「Add domain」を押します。
- 画面の指示どおりに、DNSへ
TXTレコードを足します(値は画面に出ます)。 - DNSの反映(最大24時間)を待って「Verify」を押します。
TXT レコードは確認の後も消さずに残します。

使ってよい範囲
公式の上限は次のとおりです(2026年11月時点)。
| 項目 | 上限 |
|---|---|
| リポジトリの大きさ | 推奨1GBまで |
| 公開サイトの大きさ | 1GBまで |
| 公開処理の時間 | 10分を超えると失敗 |
| 転送量 | 目安として月100GB |
| 公開の回数 | 目安として1時間に10回(Actionsで公開する場合は対象外) |
小さな教室の紹介ページなら、この数字に当たることはまずありません。写真を入れすぎてページが重くなるくらいです。
気にすべきなのは数字より用途です。公式は、Pagesを「事業を動かすための無料のサーバー」として使うことを認めていません。商取引を主な目的にしたサイトやSaaS(ネットで提供するサービス)の販売も禁止で、パスワードやカード番号といった機微な情報も扱えません。
一方で、会社の紹介ページがどこまで許されるかの細かい線引きは公式の文面にありません。実際に運用していると、次のように分けると迷いません。
| サイト | 判断 |
|---|---|
| 操作手順書、公開資料、説明ページ | Pagesでよい |
| 試作、社外レビュー用の見本(見られて困らないもの) | Pagesでよい |
| 申込みや売上につながる会社の本番サイト | 別の置き場所も並べて検討する |
| ネットショップ、決済のあるサイト | Pagesは使わない |
なお、サイトを訪れた人のIPアドレスは、セキュリティのためGitHubに記録されます。プライバシーの説明をサイトに載せているなら、その点も確かめておきます。
他の置き場所との比較
公式で確かめた範囲で短く並べます。料金は2026年11月時点です。
| 置き場所 | 無料の範囲 | 会社で使うときの注意 | サーバー側の処理 |
|---|---|---|---|
| GitHub Pages | Freeは公開リポジトリのみ | 事業の無料サーバーとしては不可 | なし |
| Netlify | Free $0(300クレジット)、独自ドメインとSSLあり | 利用条件は規約で確かめる。有料はPersonal $9、Pro $20 | Functionsあり |
| Vercel | Hobby $0 | Hobbyは個人の非商用に限られる。会社はPro(1ユーザー月$20)を検討する | Functionsあり |
| レンタルサーバー | 基本は有料 | 会社のサイトの置き場所として一般的 | PHPなどが動くプランが多い |
選び方は単純です。公開してよい資料ならPages、会社の本番サイトで問い合わせフォームも自前で処理したいならレンタルサーバー、という分け方でほとんど足ります。NetlifyやVercelはサーバー側の処理も置ける点がPagesと違いますが、使う前に料金の仕組みと利用条件を読みます。
できないことと、その代わり
| できないこと | 代わり |
|---|---|
| 問い合わせフォームの送信を処理する | Googleフォームなど外部のフォームを埋め込む |
| ログインで見る人を限定する(Free、Team) | Googleドライブや社内Wikiのように閲覧権限を付けられる場所に置く |
| 予約の管理やデータベース | サーバーが動くサービス、kintoneのような業務アプリ |
| メールの定時送信 | GitHub Actionsや自動化ツール |
社内だけで読む手順書なら、Pagesに置かず、Googleドキュメントや閲覧権限を付けられるWikiに置きます。GitHubを使い続ける必要はありません。
よく詰まるところ
| 症状 | 原因 | 直し方 |
|---|---|---|
| 開くと404 | index.html が公開元の一番上にない | pages/index.html のように入っていたら一番上に移す |
| 開くと404 | ファイル名の大文字小文字が違う | Index.html や index.HTML は不可。index.html に直す |
| 非公開にしたら404 | Freeで非公開に変えた、または有料プランが切れた | 公開に戻すかTeamを契約する |
| 独自ドメインで404 | DNSの値に /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・非公開リポジトリ にあります。