⌘K でツールを切替
NETWORK · HTTP

見出し・リンク抽出

URL からページの見出し構造とすべてのリンクを抽出します。

server
page-outline

🌐 sitekits fetches the URL server-side (private/internal addresses are blocked). The HTML is parsed as delivered — JavaScript is not executed, so client-rendered headings will not appear.

§01 このツールについて

概要

ページの見出し階層はそのページの目次であり、多くの人が思うより多くのものが 読んでいます。要約を組み立てる検索エンジン、移動可能な見出し一覧を提供する スクリーンリーダー、ページの主題を判断する AI の回答エンジンです。階層が誤って いると、それらが同時に劣化します。しかも画面上では見えません。セクション見出しの 見た目に整えられた h3 は、h2 と全く同じに見えます。

このツールは URL をサーバー側で取得し、配信されたままの HTML を解析して、 完全な見出しツリー、h1 の数、飛ばされたレベル、そして内部/外部に分けた 全リンク(nofollow の表示付き)を返します。

使い方

  1. URL を貼ります。スキームは省略できます(https を仮定します)。
  2. 要約行を読みます。h1 の数、見出しの本数、レベルの飛びです。
  3. 詳細は OutlineLinks を切り替えて見ます。

「配信されたままの HTML」の意味

JavaScript は実行しません。これは回避すべき制約ではなく意図した設計です。 スクリプトを実行しないものから見たページを示すためです。

見出しがクライアント側のフレームワーク由来なら、ここでの階層はほぼ空になります。 そしてそれが結果です。検索エンジンは JavaScript を描画しますが、独自の スケジュールで、保証はありません。そして HTML を消費する他の多くのものは 描画を一切しません。リンクのプレビュー、フィードリーダー、テキストブラウザ、 そして多くの AI クローラーです。サーバーで描画された階層は、すべての消費者が 見る唯一のものです。

<script><style> の中身、および HTML コメントは解析前に取り除くので、 コメントアウトされた部分やテンプレート文字列の中の見出しは階層に現れません。 見出しテキスト内のタグは除去し、HTML エンティティは復号するので、 <h2>Pricing &amp; plans</h2>Pricing & plans として読まれます。

レベルの飛びの読み方

直前の見出しより 2 段以上深い見出しがあるたびに報告します。h1 から h3、 あるいは h2 から h5 です。浅くなる方向は飛びではありません。h3 の次の h2 は、単に小節を閉じているだけです。

気にする理由は、HTML において入れ子を示す信号が見出しレベルだけだからです。 スクリーンリーダーの利用者はレベルを辿って文書を移動するので、飛ばされた レベルは「内容にはない小節が存在する」と伝えることになります。原因は通常 見た目です。ちょうどよい大きさだったから h4 を選び、その後 CSS で大きさを 変えてしまった、という経緯です。

対処は、レベルは構造で選び、大きさは CSS で決めることです。そうすれば階層は どの読者に対しても正しくなり、見た目は変わりません。

リンク一覧の読み方

すべてのリンクはページの最終 URL を基準に解決するので、相対 href はクローラーが 辿る絶対 URL として現れます。プロトコル相対リンク(//host/path)はページの スキームを継承します。不正な href はリンクとして報告せず捨てます。

rel="nofollow" は大文字小文字を無視し、複数値の rel 属性の中でも検出するので rel="NoFollow noopener" も印が付きます。なお nofollow は 2019 年以降、 クロールに対する指示ではなくヒントになっています。リンクを辿らせない手段としては もう確実ではないので、URL をインデックスから外す目的で頼っていた場合は注意が 必要です。それができるのは対象ページ側の noindex だけです。

テキストが空のリンクは明示的に示します。テキストの無いリンク(aria-label の 無いアイコンだけのアンカーが典型)は、スクリーンリーダーの利用者には到達不能で、 行き先についての情報も持ちません。

使用例

  • ページではなくテンプレートの点検 — テンプレートごとに 1 ページ実行します。 見出しの不備はほぼ必ずテンプレートにあるので、数個の URL でサイト全体を 覆えます。
  • サーバーで描画されているかの確認 — ページは見出しで埋まっているのに階層が 空なら、JavaScript を実行しないものは何も読めていません。
  • 移行の前 — 主要ページの階層とリンク数を記録し、移行後に比較します。h1 が 落ちた、1 段階降格した、といった変化は気づかずに出してしまいがちです。
  • 意図しない外部リンクの発見 — 外部一覧にステージングや CDN のホストが 混ざっていれば、通常はデプロイを生き延びた絶対 URL のハードコードです。
  • AI の回答エンジン向けの準備 — 正しい見出し階層は最も低コストな構造の信号で、 最も頻繁に壊れているものでもあります。マークアップの誤りは HTML バリデーター、共有時の見え方は OG プレビューが扱います。

数えないもの

収集するのは <a href> 要素だけです。<link><form action><iframe src>・ JavaScript による遷移は対象外です。文書からクローラーが辿るリンクではないからです。

注意事項

リダイレクトは 5 つまで追い、各ホップで同じアドレス判定を再度通すので、公開 URL からプライベートネットワークへリダイレクトさせることはできません。階層は最終応答 のものを表し、経路も表示します。

読み取りは 1 MB で止まり、報告は見出し 300 件・リンク 500 件で打ち切ります。 いずれかに達した場合はお伝えします。無言で切り詰められた階層は、完全なものと 見分けが付かないからです。

プライベート・ループバック・リンクローカル・予約済みのアドレスへのリクエストは 接続前に拒否します。応答本文はこの結果を作るためにメモリ上で解析するだけで、 保存はしません。詳細はプライバシーポリシーに書いてあります。

FAQ
ブラウザで見える見出しが出てこないのはなぜですか?
サーバーが配信した HTML をそのまま解析し、JavaScript を実行しないためです。読み込み後にクライアント側のフレームワークが描画する見出しは現れません。この差自体が有用な情報です。JavaScript を実行しないクローラーは、このツールと同じ空の階層を見ています。
h1 が複数あると SEO に不利ですか?
直接には不利になりません。HTML5 のセクショニングでも許されています。失うのは明確さです。h1 が複数あるページは最上位で主題を 1 つも述べていないので、それを要約するもの(検索エンジン、スクリーンリーダーの見出し一覧、AI の回答エンジン)はどれが主題かを推測することになります。件数は採点せず報告するだけなので、判断はご自身で行えます。
レベルの飛びとは何で、なぜ問題なのですか?
h1 の直後に h3 が来るように、レベルを飛ばした見出しのことです。スクリーンリーダーの利用者は見出しレベルで文書を移動するため、飛ばされたレベルは実際には無い入れ子の深さを主張することになります。画面上では見えない構造上の不備なので、報告する価値があります。
フラグメントリンクや mailto: は数えますか?
数えません。href が空のもの、ページ内フラグメント(#top)、javascript:、mailto: は除外します。どれもページへのリンクではないからです。それ以外はページの URL を基準に解決するので、相対リンクはクローラーが辿る絶対 URL の形で表示されます。
内部と外部はどう判定していますか?
リダイレクト後の最終 URL のホストと、解決したリンクのホストを比較します。サブドメインが違えば外部として数えます。検索エンジンやブラウザもおおむねそのように扱うためです。
読み取る量に上限はありますか?
応答は 1 MB まで読み、見出しは最大 300 件、リンクは最大 500 件まで報告します。1 MB を超えた場合は明示的にお伝えします。完全に見えて実は途中で切れた階層を見せないためです。