「この長いREADME、目次から各セクションに飛べたらいいのに…」 「ページの最後から先頭に戻るリンクが欲しい」 「関連する項目同士をリンクでつなぎたい!」
そんな願い、Markdownのページ内リンク(アンカーリンク)で全部実現できるんです!
技術ドキュメントやREADME、ブログ記事が長くなると、読者が目的の情報を見つけるのが大変になりますよね。でも大丈夫。ページ内リンクを使えば、クリック一つで好きな場所にジャンプできる、使いやすい文書が作れるんです。
この記事では、Markdownでページ内リンクを作る方法を、初心者でも10分でマスターできるように完全解説します。基本から応用テクニックまで、全部お見せしますね!
ページ内リンクって何?どんな時に便利?

ページ内リンク(アンカーリンク)とは
ページ内リンクとは、同じページの中で別の場所にジャンプするリンクのことです。目次から各章へ、または「トップに戻る」ボタンなど、長い文書には欠かせない機能ですね。
ページ内リンクの仕組み:
- 各見出しには自動的にIDが付与される
- そのIDを使ってリンクを作成する
- クリックするとスムーズにスクロール
こんな場面で大活躍!
README.mdで:
- 目次から各セクションへジャンプ
- インストール方法から使い方へ直接移動
- FAQの質問一覧から回答へリンク
技術ドキュメントで:
- APIリファレンスの関数一覧
- 用語集での相互参照
- トラブルシューティングの索引
ブログ記事で:
- 長い記事の目次作成
- 関連セクションへの誘導
- まとめから各詳細への参照
【基本編】見出しへのページ内リンクを作る
基本の書き方(これだけ覚えればOK!)
Markdownでは、見出しに自動的にIDが付きます。そのIDを使ってリンクを作成します。
基本構文:
[リンクテキスト](#見出しのID)
実例:
## はじめに
ここに内容...
## 使い方
ここに内容...
## まとめ
ここに内容...
<!-- 目次を作る -->
- [はじめに](#はじめに)
- [使い方](#使い方)
- [まとめ](#まとめ)
たったこれだけ!見出しのテキストをそのまま使えるんです。
見出しIDのルールを理解しよう
自動生成されるIDのルール:
- 日本語はそのまま使える(多くの環境で)
## 日本語の見出し [リンク](#日本語の見出し)
- 英語は小文字に変換される
## Getting Started [リンク](#getting-started)
- スペースはハイフンに置換
## How to Use [リンク](#how-to-use)
- 記号は削除または変換
## Q&A(よくある質問) [リンク](#qaよくある質問) <!-- 環境により異なる -->
階層の違う見出しへのリンク
見出しのレベル(h1~h6)に関係なく、同じ方法でリンクできます。
# 大見出し
## 中見出し
### 小見出し
#### もっと小さい見出し
<!-- どの階層にも同じようにリンク -->
- [大見出しへ](#大見出し)
- [中見出しへ](#中見出し)
- [小見出しへ](#小見出し)
- [もっと小さい見出しへ](#もっと小さい見出し)
【応用編】GitHub独自のルールと対処法
GitHubでのID生成ルール
GitHubは独自のルールでIDを生成します。知っておくと安心!
GitHubのルール:
- 日本語は残る
## 日本語セクション [リンク](#日本語セクション) ✓ OK
- 英数字は小文字化
## ABC123 [リンク](#abc123) ✓ 小文字にする
- スペースと特殊文字はハイフンに
## Step 1: Install [リンク](#step-1-install)
- 絵文字は削除
## 🎉 完成! [リンク](#-完成) <!-- 絵文字部分は削除 -->
重複する見出しの処理
同じ名前の見出しがある場合、GitHubは自動的に番号を付けます。
## 設定
内容1...
## 設定
内容2...
## 設定
内容3...
<!-- リンクする時は -->
- [最初の設定](#設定)
- [2番目の設定](#設定-1)
- [3番目の設定](#設定-2)
プロのコツ: 重複は避けた方が管理しやすいです!
カスタムアンカーを使った高度なテクニック
HTMLアンカーで確実にリンク
Markdown環境によってID生成ルールが違う場合は、HTMLを使って確実にリンクしましょう。
HTMLアンカーの作成:
<a id="custom-anchor"></a>
## 任意の見出し
または
## 見出し {#my-custom-id} <!-- 一部の環境でサポート -->
リンクする:
[このセクションへジャンプ](#custom-anchor)
見出し以外へのリンク
段落や画像など、見出し以外の場所にもリンクできます。
<!-- アンカーを設置 -->
<a id="important-note"></a>
**重要な注意事項:** ここに大切な内容...
<!-- 画像の前にアンカー -->
<a id="architecture-diagram"></a>

<!-- リンクする -->
- [重要な注意事項を見る](#important-note)
- [構成図を確認](#architecture-diagram)
ページトップへ戻るリンク
長い文書には必須の「トップへ戻る」リンク。
方法1:ページ最上部へ(簡単)
[↑ トップへ戻る](#)
方法2:特定の見出しへ
<!-- 文書の最初に -->
# 目次
<!-- 文書の最後に -->
[↑ 目次へ戻る](#目次)
方法3:HTMLアンカー使用(確実)
<!-- 文書の最初に -->
<a id="top"></a>
<!-- 文書の最後に -->
[↑ トップへ戻る](#top)
自動目次生成のベストプラクティス
手動で目次を作る
小規模な文書なら手動でも十分です。
# 目次
1. [はじめに](#はじめに)
2. [インストール](#インストール)
- [必要要件](#必要要件)
- [手順](#手順)
3. [使い方](#使い方)
- [基本的な使い方](#基本的な使い方)
- [高度な使い方](#高度な使い方)
4. [FAQ](#faq)
5. [お問い合わせ](#お問い合わせ)
VSCode拡張機能で自動生成
Markdown All in Oneを使う:
- 拡張機能をインストール
- コマンドパレット(
Ctrl+Shift+P
)を開く - 「Markdown All in One: Create Table of Contents」を実行
- 自動で目次が生成される!
生成される目次の例:
- [見出し1](#見出し1)
- [見出し1.1](#見出し11)
- [見出し1.2](#見出し12)
- [見出し2](#見出し2)
- [見出し2.1](#見出し21)
GitHubでの目次表示
GitHubでは、[[_TOC_]]
や[TOC]
タグは使えません。代わりに:
方法1:手動または拡張機能で作成 上記の方法で目次を作成
方法2:GitHub Actionsで自動生成 CIツールを使って、プッシュ時に自動で目次を更新
プラットフォーム別の違いと対処法
主要プラットフォームの対応状況
完全対応(問題なし):
- GitHub
- GitLab
- VSCode(プレビュー)
- Obsidian
- Notion
一部制限あり:
- Qiita(日本語IDは要エンコード)
- Zenn(基本的にOK)
- はてなブログ(Markdown記法モード)
独自仕様:
- Confluence(異なるID生成)
- Slack(ページ内リンク非対応)
互換性を保つコツ
万能な方法:
- 英数字とハイフンのみの見出しを使う
- HTMLアンカーを併用する
- 重複する見出しを避ける
<!-- 互換性の高い書き方 -->
<a id="installation"></a>
## インストール方法
[インストール方法へ](#installation) <!-- どこでも動く -->
[インストール方法へ](#インストール方法) <!-- 環境による -->
よくあるトラブルと解決方法
Q1. リンクをクリックしても飛ばない
確認ポイント:
- IDが正しく生成されているか確認
- ブラウザの開発者ツールで確認
- HTMLソースを表示してIDをチェック
- 大文字小文字を確認
## Getting Started [×間違い](#Getting-Started) [○正解](#getting-started) <!-- 小文字に -->
- 特殊文字の処理を確認
## Q&A [試す1](#qa) [試す2](#q-a) [試す3](#qa-1) <!-- 環境により異なる -->
Q2. 日本語の見出しにリンクできない
解決策:
- URLエンコードする
## 日本語見出し [リンク](#%E6%97%A5%E6%9C%AC%E8%AA%9E%E8%A6%8B%E5%87%BA%E3%81%97)
- 英語IDを併記
<a id="japanese-heading"></a> ## 日本語見出し [リンク](#japanese-heading)
Q3. 目次の番号がずれる
対処法:
- 見出しレベルを確認(h1→h3のような飛びがないか)
- 自動生成ツールの設定を確認
- 手動で調整
Q4. スムーズスクロールにしたい
CSSを追加:
html {
scroll-behavior: smooth;
}
JavaScriptで実装:
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
document.querySelector(this.getAttribute('href')).scrollIntoView({
behavior: 'smooth'
});
});
});
実践!効果的な目次とナビゲーションの作り方
読みやすい技術ドキュメントの構成
# プロジェクト名
<a id="top"></a>
## 📑 目次
- [⚡ クイックスタート](#quick-start)
- [📦 インストール](#installation)
- [🔧 設定](#configuration)
- [📖 使い方](#usage)
- [🤔 FAQ](#faq)
- [📝 ライセンス](#license)
---
<a id="quick-start"></a>
## ⚡ クイックスタート
3分で始められます!
[↑ 目次へ](#top)
---
<a id="installation"></a>
## 📦 インストール
### 必要要件
- Node.js 14以上
- npm または yarn
### インストール手順
詳細...
[↑ 目次へ](#top)
ブログ記事の目次パターン
# タイトル
## この記事の内容
この記事では以下について解説します:
1. [基礎知識](#basics)
2. [実装方法](#implementation)
3. [応用テクニック](#advanced)
4. [まとめ](#conclusion)
所要時間:約10分
---
<a id="basics"></a>
## 1. 基礎知識
[次のセクション →](#implementation)
FAQページの作り方
# よくある質問
## 質問一覧
- [Q1. インストールできません](#q1)
- [Q2. エラーが出ます](#q2)
- [Q3. 動作が遅いです](#q3)
---
<a id="q1"></a>
### Q1. インストールできません
**A:** 以下を確認してください...
[↑ 質問一覧へ](#質問一覧)
---
<a id="q2"></a>
### Q2. エラーが出ます
**A:** エラーメッセージを確認して...
[↑ 質問一覧へ](#質問一覧)
まとめ:ページ内リンクで読みやすい文書を作ろう!
Markdownのページ内リンク、思っていたより簡単だったのではないでしょうか?
この記事の重要ポイント:
- 基本の書き方
[リンクテキスト](#見出し名)
だけでOK- 日本語見出しもそのまま使える(多くの環境で)
- 確実にリンクする方法
- HTMLアンカー
<a id="xxx"></a>
を使う - 英数字とハイフンのIDを使う
- HTMLアンカー
- 便利な活用法
- 目次の自動生成(VSCode拡張機能)
- 「トップへ戻る」リンク
- セクション間の相互参照
- トラブル対策
- 大文字は小文字に変換
- スペースはハイフンに置換
- 環境差はHTMLアンカーで吸収
まずは、今書いている文書に簡単な目次を追加してみてください。読者にとって格段に使いやすい文書になるはずです。
長い文書も、ページ内リンクがあれば怖くない!読みやすくて親切な文書作りを心がけていきましょう!📝✨
コメント