zudo-doc
GitHub リポジトリ

検索したい単語を入力

いつでも検索バーを開ける

Heading Links

作成 2026年5月28日更新 2026年6月7日Takeshi Takatsudo

h2 以上の見出しにスラグベースの id 属性と自己参照アンカーリンクを追加します。

Core 機能 — 常に有効です。アンカー ID の 方式 は設定可能です(後述)。

概要

h2 以上のすべての見出しに以下が自動的に付与されます。

  1. zfb 独自の slugify で見出しテキストから生成されたスラグベースの id 属性(github-slugger に近い挙動ですが、./ などの記号を除去せず - にまとめます)。

  2. 見出しテキストをラップする自己参照アンカー要素。読者がページ内の直接リンクをコピーできます。

  3. 重複解消: 同じスラグが複数生成される場合、カウンターサフィックスが付与されます(overviewoverview-1overview-2 など)。

h1 には id が付与されません。ドキュメント唯一の h1 はフロントマターのページタイトルです。

ID 方式

id の生成方式は zfb.config.tsmarkdown.features.headingIds.strategy で選択します。zudo-doc ではこれを単一の設定 src/config/settings.tsheadingIdStrategy に紐付けており、レンダリングされる ID と右側 TOC のアンカーが 1 つの設定値で駆動されます。

// zfb.config.ts
markdown: {
  features: {
    headingIds: { strategy: settings.headingIdStrategy }, // "flat" | "hierarchical"
  },
}

flat

h2h6 全体で 1 つの重複カウンターを共有するスラグ方式(overviewoverview-1 など)。スラグは npm の github-slugger ではなく zfb 独自の slugify で生成されます。zfb のデフォルトです。

hierarchical(このサイトで使用)

各見出しの id は、祖先の連なりを - で結合したプレフィックスを持ちます。

## Foo

### Moo

#### Mew

id="foo"id="foo-moo"id="foo-moo-mew" としてレンダリングされます(フラットな foomoomew ではなく)。見出し内アンカーの href、右側 TOC、Heading Marker TOCTOC export はすべて同じ ID に従います。

詳細:

  • 完全パスが重複した場合は重複カウンターが付与されます(a-ba-b-1)。

  • 重複解消された親はその 最終 ID を子に与えます。2 つ目の ## Foofoo-1 となり、その配下の ### Barfoo-1-bar になります。

  • 階層アンカーは見出しのアウトラインから再構築でき、フラットなスラグより衝突がはるかに少なくなります(URL が長くなる代わりに)。

アンカーが変わります

方式を切り替えると 既存のアンカーが壊れます。ネストした見出しへの既存ディープリンク(#moo)は、ID が #foo-moo になると解決されなくなります。zudo-doc は後方互換性を取らずに意図的に hierarchical を採用しました(upstream zfb#871、元の指摘 #1938)。

他のページからのディープリンク

各見出しに安定した id が付与されるため、別のページの特定セクションにリンクできます。hierarchical 方式では、ネストした見出しには祖先プレフィックス付きの形式を使います。

[Moo セクションを参照](./other-page.mdx#foo-moo)

補足

  • zudo-doc の右側 TOC ビルダー(pages/lib/_extract-headings.ts)も同じ方式をミラーしているため、TOC の href="#…" 値は常にレンダリングされた見出し id と一致します。

  • オプトインの Heading Marker TOC 機能は、このプラグインが生成した安定した見出し識別子に依存します。headingMarkerToc が有効な場合、Heading Links の後で実行されます。

Revision History

Takeshi Takatsudo作成: 2026-05-29T01:40:39+09:00更新: 2026-06-07T17:11:47+09:00

AI Assistant

Ask a question about the documentation.