理想的な <head> の記述順序

理想的なheadの構造

<head> 内の要素は、記述する順序によってブラウザの挙動やSEOに影響を与える。本記事では、可読性・保守性・役割分離の観点から最も美しく、かつレンダリングパフォーマンスを最大化できる「階層構造に基づいた理想の <head> 設計」を紹介したい。

ブラウザは HTML を上から順に読み込むため、画面を描画するために必要なものを上に、クローラーや SNS が見るだけの描画に関係ないものを下に配置するのが鉄則。以下に、コード記述例を示す。

<head>
  <!-- 1. 最優先:ブラウザの基本設定 -->
  <meta charset="UTF-8">
  <meta name="viewport" content="...">

  <!-- 2. タイトル -->
  <title>...</title>

  <!-- 3. preconnectを設置: Google FontsやCDN -->
  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  <link rel="preconnect" href="https://cdnjs.cloudflare.com">
  <link rel="preconnect" href="https://www.googletagmanager.com">

  <!-- 4. CSSは初期描画に直結、早めに読み込む -->
  <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=...">
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/...">
  <link rel="stylesheet" href="/styles.css">
  <style>/* クリティカルCSS */</style>

  <!-- 5. GTMはここでいいが意識が必要(後述) -->
  <script>(function(w,d,s,l,i){...})()</script>

  <!-- 6. SEOはクローラー向けなので後半でOK -->
  <meta name="description" content="...">

  <!-- 7. OGPはSNSクローラー向け -->
  <meta property="og:..." content="...">

  <!-- 8. アイコンは描画に無関係 -->
  <link rel="icon" href="...">
  <link rel="apple-touch-icon" href="...">

  <!-- 9. 構造化データは完全にクローラー向け -->
  <script type="application/ld+json">...</script>
</head>

1. 最重要メタデータ(charset, viewport)
文字化けやパースエラーを防ぐため、charset は必ず先頭(最初の1024バイト以内)に置く。続いて viewport を配置し、ブラウザにページの基本骨格を最速で認識させる。

2. title を配置
ブラウザのタブにサイト名を1ミリ秒でも早く表示させる。

3. preconnect (ネットワーク接続の事前準備)
外部フォントやCDNなどの事前接続(preconnect)が必要な場合、CSSより前に設置する。preconnect は DNS 解決・TCP 接続を先行して始める命令なので、ローカルCSSより前に宣言するほど効果が出る。GTMの先読みも効果がある。

4. 外部CSS / 内部 CSS / style (レンダリングブロックの解消)
画面のスタイル付けを行う CSS 群を次に読み込む。レンダリングをブロックするリソースなので、早めに読み込んで画面の描画をスムーズにスタートさせたい。上書きの優先順位としては、外部 CSS の後にローカルやインラインの <style> を置く。

5. GTM スクリプト
Google は「なるべく上に」と推奨しているが、画面描画を優先するため、CSS の直後に配置するのがモダンなバランス。GTM はあくまで解析用途と割り切る。3. の preconnect を活用するとベター。

6. 一般メタデータ(description など)
SEO (検索エンジン) 向けの基本的な概要情報。

7. OGP / SNS系メタデータ(Open Graph, X Cards)
SNS シェア時の表示を制御するブロック。画像 URL を絶対パスで指定するなど特有のルールがあるため、ブロックとして独立させておくと、後から SNS 側の仕様変更があった際にもメンテナンスが非常に楽になる。

8. アイコン・リソースリンク(favicon, Apple Touch Icon, webmanifest)
フォールバック用の .ico、モダンブラウザ向けの .svg、そしてPWAやスマホ用の .png などのアイコン群。

9. JSON-LD(構造化データ)
構造化データは完全にクローラー向けなので最後で良い。

</head>

個人的には、この「JSON-LD を最後に寄せる」ことで head 全体の視認性がかなり上がると感じている。
構造化データは組織情報やパンくずリストなど記述量がどうしても長くなりがちなので、上部に置くと人間が読むべき他のメタデータが埋もれてしまうからだ。

ブラウザのレンダリングに必要なものを先に、クローラー・ボット向けは後にという鉄則を抑えておきたい。

これが今のところ、自分の中での“黄金構成” かなと。忘れないようにメモっておく。

<head> 内の黄金の並び順・2026最強まとめ表

順序要素理由
1charset / viewportブラウザの最基本設定、必ず先頭
2title初期レンダリングに関与
3preconnect早期接続開始、CSSより前に
4外部 / CSSレンダリングブロッキングリソース
5GTM計測は早く、ただしCSS後
6SEO metaクローラー向け、描画不要
7OGPSNSクローラー向け
8アイコン描画に無関係
9JSON-LD構造化データ、完全にクローラー向け

文字コードと画面サイズを瞬時に確定させ、最速でタブに名前を出した直後、ネットワークの空き時間を使ってフォントサーバーに事前接続(Preconnect)の指示を投げる。 その後、外部CSS → ローカル CSS → インラインの <style> (上書き)の順に記載する。
なお、Google Fonts 用の preconnect を使用する場合、対応する CSS は近くに置いた方が良い。

人間(ユーザーの視覚)には直接関係なく、Googlebot や SNS のクローラーだけが読み取る重たいテキストデータ(説明文や JSON-LD など)を、すべて <head> の下半分に隔離する。
これにより、ブラウザの限られた初期メモリと CPU リソースを、クローラー向けデータの解析に奪われることなく画面表示にフルコミットできる。

この記事があなたのサイトの開発者体験(DX)向上とサイトパフォーマンス向上につながれば幸いだ。

コメント

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.