見出し階層H1-H3の最適化|AIの要約精度と強調スニペット採用率を高める構造化
各章へクイックジャンプ:
第2章で扱った"三枚舌"問題は主題の矛盾でしたが、主題が一致していても引用されないケースがあります。 原因は、H1配下の見出し階層そのものが壊れていること。 LLMはH2・H3・H4の入れ子構造から「情報の包含関係」を抽出しており、階層が壊れていると文脈の継承に失敗します。 結果、要約・強調表示・タイトル理解の安定性が下がる可能性があります。 本章ではそのメカニズムと、リライトによる回復手順を示します。
1. LLMはなぜ見出し階層を"構文解析"するのか
人間が記事を読む時、見出しは「視覚的な区切り」です。しかしLLM(および検索エンジンのページ理解モジュール)にとって、 見出しは木構造(tree)として読み解く対象です。H1がルート、H2が第1階層、H3が第2階層—— この入れ子が情報の包含関係を表現します。
H1: 顧問税理士の選び方
├── H2: 選定前に整理すべき3条件
│ ├── H3: 事業規模と業種
│ ├── H3: 記帳代行の要否
│ └── H3: 連絡頻度の希望
├── H2: 料金相場(2026年版)
│ ├── H3: 月額顧問料
│ └── H3: 決算申告料
└── H2: 契約前の確認事項
├── H3: 専門分野の適合性
└── H3: 担当者の変更ルール
→ LLMはこの木構造から、
「事業規模と業種」は「選定前の条件」の一部、
「月額顧問料」は「料金相場」の一部、と理解する。- 文脈の継承失敗: H3の内容がどのH2に属するか曖昧になり、LLMは「月額顧問料は何についての話か」を特定できなくなります。 結果、スニペット生成時に文脈を伴わない断片として抽出され、意味が通らず棄却されます。
- セクション要約の破綻: AI Overviews や各種要約システムでは、見出しを手がかりに本文のまとまりを把握しやすくなります。 H2配下に入るべきH3が別の枝に漂っていると、セクション単位の理解が不安定になります。
- 強調スニペット候補からの脱落: Google の強調スニペットは、質問に対して分かりやすい構造のページが採用されやすい傾向があります。 見出し階層が整理されているほど、回答候補となる段落やセクションを切り出しやすくなります。
2. 階層破綻の典型4パターン
実務で頻出する見出し階層の破綻を、4つのパターンに整理します。 いずれもブラウザ上では見た目が整っているため、視覚確認だけでは発見できないのが特徴です。
パターン① 階層スキップ(H1 → H3)
H2を飛ばしてH1の直下にH3が登場するケース。最も頻発する破綻パターンです。 デザイナーが「H2は目立ちすぎる」として、見出しサイズを落とすためにH3タグを選んだ結果、 LLMは「H2という中間カテゴリが存在しない」と解釈し、トピック構造が1段浅くなります。
❌ BEFORE:階層スキップ
<h1>顧問税理士の選び方</h1> <h3>事業規模で選ぶ</h3> <!-- H2 が欠落 --> <p>…</p> <h3>業種で選ぶ</h3> <p>…</p> <h3>料金相場</h3> <!-- 別トピックなのにH3 --> <p>…</p>
✅ AFTER:階層を復元
<h1>顧問税理士の選び方</h1> <h2>選定前に整理すべき3条件</h2> <h3>事業規模で選ぶ</h3> <h3>業種で選ぶ</h3> <h2>料金相場(2026年版)</h2> <h3>月額顧問料</h3> <h3>決算申告料</h3>
💡 見た目の大きさはCSSで調整する
H2タグを使うとデザイン上「目立ちすぎる」場合は、CSSでフォントサイズを落とすのが正解です。 H1/H2/H3のタグは意味(包含関係)を表現し、見た目はスタイル側で調整する—— これがセマンティックHTMLの基本原則です。
パターン② 複数H1問題(同階層の乱立)
1ページ内にH1が複数存在するケース。HTML上は複数H1が許容される場面もありますが、実務上は1ページ1 H1のほうが主題を明確に伝えやすいと考えるのが安全です。 Google も title link 生成で main visual title や heading を参照するため、同格の大見出しが複数あると主題の中心が曖昧になりえます。
| 状況 | HTML仕様 | LLM・Googleの解釈 |
|---|---|---|
| 1ページ1 H1 | ✅ 推奨 | ✅ 主題が明確 |
| sectioning content内のH1 | △ 仕様上は許容 | △ 主題判定が曖昧になりうる |
| ヘッダーロゴ画像のalt=サイト名がH1扱い | △ 要件次第 | △ 本文タイトルの主役を弱めうる |
| 記事一覧ページで各カードにH1 | ❌ 典型的誤用 | ❌ 主題の分裂 |
パターン③ 意味のないH3連打
H2配下で本来1段落で済む内容を、短いH3を装飾目的で連打するパターン。 「読みやすさ」のために見出しを追加しているが、機械側から見ると「H2のトピックがH3という細かい粒度でさらに分割されている」ように見え、 木構造を不必要に深くしてしまいます。これはセクション要約や段落抽出を混乱させることがあります。
❌ H3連打(装飾目的)
<h2>料金相場</h2> <h3>まず結論</h3> <p>月3万円〜が相場です。</p> <h3>理由</h3> <p>業務範囲と業種による変動があるためです。</p> <h3>具体例</h3> <p>法人決算込みの場合は月5万円前後…</p>
✅ H3を整理し、強調は別手段で
<h2>料金相場</h2> <p><strong>結論:月3万円〜が相場</strong>。業務範囲と業種による変動があります。 具体的には、法人決算込みの場合は月5万円前後、個人事業主の記帳代行のみなら月1.5万円前後が目安です。</p>
パターン④ 見出しと本文のトピックずれ
H2に「料金相場」と書いてあるのに、直下の本文が「税理士選びの心構え」から始まる—— 見出しと本文のトピックが一致しないケース。見出しは「そのセクションのラベル」として読まれやすいため、 ラベルと中身がずれると、段落の意味づけが不安定になります。
3. AIOGeoScan診断レポートで階層破綻を特定する
AIOGeoScanの「見出し & コンテンツ」カテゴリは、ページ内の見出しを階層ツリーとして可視化します。 以下の3つのサインが出ていたら、本章のパターン①〜④に該当する可能性が高いと考えられます。
H1からH3、H2からH4へ飛んでいる箇所をリストアップ。→ パターン①に該当。中間のH2/H3を補う
1ページ内にH1が2つ以上存在する状態を検知。ロゴやナビゲーションがH1化しているケースも含む。→ パターン②。本文タイトル以外のH1をH2以下に降格
1ワード〜5文字程度のH3が連続しているセクションを検知。多くが装飾目的の連打。→ パターン③。強調を<strong>に委ねる
4. 階層を回復する"3ステップ・リライト"
破綻が特定できたら、以下の3ステップで回復します。本文に手を入れる前に構造だけを先に直すのがコツです。
Step 1: 見出しだけを抜き出して木構造に並べる
ページのH1〜H4をインデント付きのテキストに書き出し、本文を一旦無視して見出しツリーだけを俯瞰します。 この時点で「H2が抜けている」「H3がどのH2に属するか不明」といった問題が一目で可視化されます。
Step 2: ツリーを論理順に再配置する
H1の主題に対して、H2セクションが「前提 → 本論 → 応用 / 補足」の順に並ぶよう並び替えます。 必要ならH2を新設し、孤立していたH3を適切な親の下に移動します。この時点で本文はまだ触らないことが重要です。
Step 3: 本文を新ツリーに沿って再配置・加筆
新しい見出しツリーに合わせて本文を移動。新設したH2には2〜3文の導入段落を書き、 そのH2配下のH3群が何を扱うかを宣言します。この導入段落がLLMのセクション要約を劇的に助けます。
5. Next.js / MDX での実装パターン
ブログやナレッジ記事をMDXで書くプロジェクトでは、見出しスキップを型レベルで防ぐことができます。 以下は、mdxComponentsで見出し階層を監視するパターンです。
// mdx-components.tsx
import type { MDXComponents } from 'mdx/types';
let lastLevel = 0;
function warnIfSkip(level: number) {
if (process.env.NODE_ENV === 'development'
&& lastLevel > 0
&& level > lastLevel + 1) {
console.warn(
`[heading-hierarchy] skipped: H${lastLevel} → H${level}`
);
}
lastLevel = level;
}
export function useMDXComponents(
components: MDXComponents
): MDXComponents {
return {
h1: (p) => { warnIfSkip(1); return <h1 {...p} />; },
h2: (p) => { warnIfSkip(2); return <h2 {...p} />; },
h3: (p) => { warnIfSkip(3); return <h3 {...p} />; },
h4: (p) => { warnIfSkip(4); return <h4 {...p} />; },
...components
};
}⚠️ Server Components での注意
上記パターンはモジュールレベルの変数 lastLevel を使っているため、 Next.js App Routerでページ境界を越えた状態共有が起きないよう、 ビルド時のlintに組み込むか、ページ単位でのASTチェックに移す設計が本番向きです。
6. リライト効果の測定:3つの観測指標
階層を直したあとは、効果を測定します。検索表示やAI由来トラフィックの変化は即座には動かないことが多いため、2〜6週間の観測期間を前提に 以下3つの指標を追跡します。
Search Console の検索パフォーマンスで、対象クエリ群の CTR・表示回数・掲載順位の変化を確認。 強調スニペットは専用レポート前提ではなく、手動SERP観測と併読するのが安全。
対象トピックでGoogle検索を行い、AI Overviews 内で自サイトURLが見えるかを定期確認。 Search Console では AI Overviews 専用レポートではなく、全体の Web パフォーマンス変化とあわせて見る。
再診断で「見出し & コンテンツ」カテゴリの警告数が減っていれば、構造面の改善が達成されています。 階層サイン(①②③)のゼロ化を目指す。
7. 階層とh3内容の"二重整合"が最終到達点
完成形は、「見出しツリーの構造」と「各見出し配下の本文内容」の両方が一致している状態です。 構造だけ整えても、本文がそのラベリングに応答していなければAIは混乱します。 逆に本文が充実していても、階層が壊れていれば木構造として読めません。この両者を揃えるのが、本章のゴールです。
- AIOGeoScanの「見出し & コンテンツ」で、階層スキップ / 複数H1 / H3連打の有無を確認
- 見出しだけを抜き出して木構造テキストに書き出す
- ツリーを論理順に再配置(この段階で本文は触らない)
- 新ツリーに沿って本文を移動・加筆、新設H2に導入段落を追加
- MDXプロジェクトなら mdxComponents でスキップ検知を組み込む
- 2〜6週間、対象クエリのSERP観測とSearch ConsoleのWebパフォーマンスを継続確認
8. 次章:運用で整合性を"落とさない"仕組み
本章と第2章で扱った修正は、いずれも1回の手術です。 しかし運用を続ければ、記事リライト・CMS変更・デザインリニューアルのたびに整合性は再び崩れます。 次の 第4章「運用編」では、 3層の同期を継続的に維持するためのチェックリスト・レビュー観点・CI組み込みパターンを体系化します。
全4章を通して、カテゴリ横断の整合性がAIに与える影響を体系的に理解します。
見出し階層、
"木構造"として読める状態ですか?
AIOGeoScanの診断レポートなら、階層スキップ・複数H1・H3連打の3つのサインを自動検知。 見出しツリーをそのまま可視化するので、リライト対象の箇所が一目で決まります。
今すぐ自社サイトの見出し階層を診断する