【実務・中級編】見出し階層のバリデーション手法 – HTML実践ガイド

見出し階層の「順序」はなぜ重要か?――アクセシビリティを「義務」から「武器」へ変える設計術

現場でコードレビューをしていると、`

`の直後に突然`

`が来るようなマークアップを時折見かけます。実装担当者に聞くと「CSSで文字サイズを調整すればいいから、タグは適当でいいと思ってた」という答えが返ってくる。 耳が痛い話かもしれませんが、結論から言います。その考え方、今日で捨てましょう。 フロントエンドエンジニアにとって、見出しタグ(`h1`〜`h6`)は単なる「文字を大きくする道具」ではありません。それは、検索エンジンと支援技術(スクリーンリーダー)に対して「このドキュメントはどういう階層で構成されているか」を伝える、唯一無二のロードマップなのです。 ブラウザとアクセシビリティツリーの「裏側」

ブラウザはHTMLをパースする際、DOMツリーとは別に「アクセシビリティツリー」という独自の木構造を構築します。スクリーンリーダーを使っているユーザーは、このツリーを頼りにページ内を移動します。

例えば、`

`の次に`

`がいきなり現れると、彼らのデバイスは「えっ、` `はどこ? 読み飛ばしたのか?」と混乱します。これは、晴眼者がWebサイトを見るときに、メニューからいきなり項目が飛んでいるような違和感を与えます。 Lighthouseやaxe-coreが「Heading levels should only increase by one(見出しレベルは1つずつ増やすべき)」と警告を出すのは、単なるお節介ではなく、「構造の断絶」を防ぐための生存戦略なのです。 実践:見出し階層をバリデーションする思考法

では、現場でどうやってこの「階層の崩れ」を検知し、防げばいいのか。まずはLighthouseのレポートを眺めるのが第一歩ですが、開発段階で「構造」を可視化するコードを書いてみましょう。

以下は、ブラウザのコンソールに現在の見出し構造を視覚的に出力するスクリプトです。デバッグ時に重宝します。

/

  • 現在のページの見出し構成を階層的にコンソール出力する
  • 開発中の「構造チェック」にコピペして使ってください

/
const validateHeadings = () => {
const headings = Array.from(document.querySelectorAll(‘h1, h2, h3, h4, h5, h6’));

console.group(‘— 文書構造チェック:見出し階層の可視化 —‘);

headings.forEach((h, index) => {
const level = parseInt(h.tagName.replace(‘H’, ”));
const prev = headings[index – 1];
const prevLevel = prev ? parseInt(prev.tagName.replace(‘H’, ”)) : 0;

// 前の見出しとの階層差をチェック
const isInvalid = prev && (level > prevLevel + 1);

const indent = ‘ ‘.repeat(level – 1);
const status = isInvalid ? ‘⚠️ 警告: 階層スキップ発生!’ : ‘✅ OK’;

console.log(`${indent}${h.tagName} (${h.textContent.trim().substring(0, 20)}…) – ${status}`);
});

console.groupEnd();
};

// コンソールで実行
validateHeadings();

「見た目」と「構造」を分離するプロの流儀

「デザイン通りに組むと、どうしても見出し順序が守れないんだよ」という悩みもよく聞きます。ですが、それはHTMLの役割をCSSに押し付けすぎている証拠です。

ベストプラクティスは、「HTMLは構造のためだけに使い、スタイルはクラス名で制御する」こと。

メインのタイトル

メインのタイトル

`h1` 〜 `h6` は、あくまで文書の骨格です。デザイン上のフォントサイズがどうであれ、適切なタグを配置する。その上で、`h1` に `font-size: 1.5rem` を当てるなり、ユーティリティクラスを当てるなりして、見た目を調整する。これが、保守性が高く、SEOにもアクセシビリティにも強い「現場で戦えるコード」の条件です。

最後に:自動化を過信しない

axe-coreのようなツールは強力ですが、あくまで「機械的な順序」をチェックしているに過ぎません。

本当に重要なのは、「ユーザーがこの見出しを辿って、コンテンツの内容を正しく理解できるか?」という、人間による文脈の検証です。ツールで警告が出ないことをゴールにするのではなく、「論理的な構造を組み立てることで、誰にとっても読みやすい体験を作る」という意識を、明日からのコーディングに加えてみてください。

もし、この記事を読んだあなたが今、自分の書いたコードに不安を感じたなら、それは成長の証です。さあ、エディタを開いて、まずは `

` から順にマークアップを見直してみませんか?

コメント

タイトルとURLをコピーしました