見出し構造の階層とH1エラーをチェック
h1、h2、h3、h2、h3の並びは合格、h2からいきなりh4に進めばその位置でh3の抜けを知らせるというように、見出しの階層を確認します。見出しをページの順に入れるだけで、h1はちょうど1つ必要です。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 見出し
- h1, h2, h3, h2, h3
- 見出しの数
- 5
- H1の数
- 1
画面上では正しく見える見出し階層でも、内部のタグ構造が崩れている場合があります。このチェッカーは、h1、h2、h3、h2のように文書順で並べたタグを受け取り、h1が正確に1つあることと、一度に2段階以上深くならないことを検証します。有効性、h1の数、各階層飛び越しの正確な位置を返すため、編集担当者や公開システムが問題箇所を確実に修正できます。
文書に現れる順番でタグを準備してください
デザイン案や編集用アウトラインではなく、実際に表示された文書内の順番どおりに見出しタグを用意してください。一般的な入力は、h1、h2、h3、h2、h3のようになります。階層は直前の見出しから次の見出しへの移動で表されるため、順番が重要です。
このチェッカーはh1からh6までを受け付け、前後の空白を取り除き、H2のような大文字表記も小文字と同じものとして扱います。任意のHTML、見出し本文、CSSクラス、数字だけの値は受け付けません。空の一覧には評価できる文書構造がないため、不正な入力として拒否されます。
不正形式のタグも配列インデックスとともに拒否されるので、抽出処理の不具合を調べやすくなります。抽出段階で存在するタグを決め、この機能では順序と階層だけを評価する分離設計は、自動処理にも適しています。
2つの階層ルールをご確認ください
第1のルールでは、一覧全体にh1が正確に1つ必要です。h1がなければ文書に単一の最上位見出しがなく、2つ以上あれば最上位階層が重複しているため不合格になります。第2のルールでは隣り合う各組を比較し、次の数字が直前より2以上大きい場合に飛び越しを報告します。
したがって、h2からh4への移動ではh3の欠落を示します。h1からh5への移動では、その間にh2、h3、h4がないことを示します。h4からh2のように浅い階層へ戻る動きは、入れ子の内容を閉じて上位セクションへ戻るため許可されます。
同じ階層の繰り返しも可能で、連続したh2は同格のセクションを表せます。最初の問題で停止せず、すべての飛び越しを返します。各記録には0始まりの移動先インデックス、遷移内容、不足した中間タグが含まれます。
h1が1つで、飛び越し一覧が空の場合だけ有効です。
レビューや公開判定に結果をご利用ください
見出し総数から評価対象のタグ数を確認でき、h1の数から最上位ルールに合格したか判断できます。各飛び越しは不正な下降が起きた移動先インデックスを示すため、編集者やビルドツールは曖昧な文章を解釈せず該当箇所を特定できます。問題一覧には、ログ、レビューコメント、コンテンツ管理画面に利用できる簡潔な英語要約が入ります。
この機能は、見出しの文言、キーワード、見た目の大きさ、空の本文、適切なセクション数を評価しません。また、URLの取得やHTML解析も行わないため、ページから利用する場合は先に順序付きタグを抽出してください。ネットワーク、乱数、時刻、隠れた状態に依存しないので、同じ一覧からは常に同じ応答が得られます。
活用例
不正な記事アウトラインを公開前に止める
抽出タグにh1が1つだけ存在しない場合や、不適切な深さへ直接移動する場合に下書きを拒否できます。
再設計後のテンプレートを確認する
代表的な表示ページを比較し、再利用部品やテーマ変更によって生じた階層飛び越しを検出できます。
CIに構造チェックを追加する
静的サイトのビルドから得た順序付きタグ一覧を、デプロイ前の決定的な合否結果に変換できます。
よくある質問
h4からh2へ戻る動きも飛び越しですか?
いいえ。 浅い階層へ戻ることは許可され、2段階以上深くなる移動だけを報告します。
大文字のタグも使用できますか?
はい。 H1やH3は検証後に小文字へ正規化され、前後の空白は無視されます。
この機能はHTMLページを解析しますか?
いいえ。 文書順に抽出済みのh1からh6までのタグ一覧を受け取り、その並びだけを検証します。
h1がない、または2つ以上ある場合はどうなりますか?
どちらも不合格になります。h1がなければ最上位の見出しがなく、2つ以上あれば最上位が重複しているためです。h1の数も返すので、どちらに当たるかが分かります。
h1からh5へ飛んだ場合はどう報告されますか?
その移動の位置で、h2、h3、h4の3つが抜けていると報告します。飛び越しが複数あっても最初の1つで止めず、すべてを移動先の位置とともに示します。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/seo/heading-structure-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"headings":["h1","h2","h3","h2"]}'const res = await fetch("https://api.kit.forhosting.com/seo/heading-structure-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"headings": [
"h1",
"h2",
"h3",
"h2"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/seo/heading-structure-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"headings": [
"h1",
"h2",
"h3",
"h2"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/seo/heading-structure-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"headings":["h1","h2","h3","h2"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"headings":["h1","h2","h3","h2"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/seo/heading-structure-check", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"headings": [
"h1",
"h2",
"h3",
"h2"
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "seo.heading_structure_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
文書に現れる順番でタグを準備してください
入力を明確なタグ一覧にするため、これらの情報はリクエスト前に抽出してください。
レビューや公開判定に結果をご利用ください
有効性フィールドは単純な合否判定に使い、詳しいフィールドは修正案内のために保持してください。
技術的な質問
検査の料金はいくらですか?
APIリクエスト1回につき$0.002です。計算は決定的で、外部サービスを呼び出しません。
見出し一覧が空の場合はどうなりますか?
空の並びには検証できる構造がないため、invalid_inputエラーを返します。