Prompt
見出しレベルは、原則1ずつ下げていく。レベルが飛んだり、上がったりしない。
html, markdownでもそれは絶対に守るべきか?
結論から言うと、**「HTML(構造)としては絶対に守るべきだが、Markdown(執筆)としては、出力先の環境に依存する『スイスチーズの穴』がある」**という、エンジニアらしい絶妙なジレンマがあるよ。
情報工学的な「一意な美学」と、アクセシビリティ(A11y)の観点からこの問題を解剖してみよう!
1. HTMLとしての「絶対」:アクセシビリティの砦
HTMLにおいて、見出しレベル(<h1>〜<h6>)を飛ばさないことは、単なるマナーではなく**「アクセシビリティの仕様」**に近いよ。
-
スクリーンリーダーの混乱: 視覚障害のあるユーザーが使うスクリーンリーダーは、見出しを「目次」として解釈する。
<h1>の次にいきなり<h3>が来ると、「あれ、<h2>を見落としたかな?」とユーザーを不安にさせてしまうんだ。 -
マシンリーダビリティ: 検索エンジンのクローラー(Googleボットなど)も、見出しの階層構造からページの情報の重要度を理解する。階層が崩れていると、そのページの「知識の庭」としての構造が一意に伝わらなくなってしまう。
2. Markdownとしての「現実」:Quartz 4 との兼ね合い
キミが使っている Quartz 4(デジタルガーデン)のような環境では、少し特殊な事情が発生するんだ。
-
自動的な階層のズレ: Quartz 4 では、記事のタイトルが自動的に
<h1>として出力されることが多い。そのため、本文の最初を##(<h2>相当)から始めないと、結果的に「<h1>の中に<h1>がある」という、おかしな階層(スイスチーズの穴)が生まれてしまう。 -
出力先への依存: Markdownはあくまで「中間言語」だ。最終的にHTMLへ変換される際、テーマのCSSで見栄えを調整するために「あえてレベルを飛ばす」誘惑に駆られることがあるけれど、これは**「見た目(CSS)と構造(HTML)の混同」**という、エンジニアが最も避けるべき罠だね。
3. 「上がらない」の原則の例外
「レベルを上げない」という原則には、唯一の例外がある。それは**「セクションが終わったとき」**だね。
-
正しい階層:
h2 -> h3 -> h3 -> h2。 -
解説: 下位のセクション(
h3)が終わり、新しい大きな話題(h2)に戻る場合は、当然レベルは上がる。これは「階層が飛んでいる」わけではなく、一意に構造化された正しいアウトラインだよ。
見落とされがちな視点:デザインの「一意性」
「<h2>だと文字が大きすぎるから<h3>にしよう」という動機でレベルを飛ばすのが、最も多い失敗パターンだ。
-
解決策: デザインが気に入らないなら、CSSでそのレベルの見た目を変えるべきであって、HTMLのレベルを変えてはいけない。
-
エンジニアの心得: 構造(Semantics)をデザインの都合で犠牲にしない。これは、キミが「属性の組み合わせからデータを導く」という純粋さを求めたのと共通する、データの「誠実さ」の問題なんだ。
結論
-
HTML/アクセシビリティ: 絶対に守るべき。 レベルを飛ばすのは、データベースで主キーを飛ばして採番するような「不吉な臭い」がする。
-
Markdown: 出力されるHTMLが正しくなるように書く。Quartzなら「本文は
##から始める」という一意なマニュアルを自分の中で決めておくのが正解だ。
次は、「Quartz 4 の CSS をいじって、見出しレベルを飛ばさなくても、自分好みのサイズ感で表示されるようにカスタマイズする設定」 についてやってみる?
Would you like me to code a custom CSS snippet for Quartz 4 to refine your heading styles without breaking the semantic structure?