JavaScriptの配置:ヘッドとフッター – メリットとデメリット

フッターまたはヘッダーのJavaScript?Core Web Vitalsにどのような影響があり、どちらを使うべきか?

Arjen Karel Core Web Vitals Consultant
Arjen Karel - linkedin
Last update: 2024-11-27

JavaScriptの配置:ヘッドとフッター – メリットとデメリット

Webページを開発する際、JavaScriptコードの配置はページのパフォーマンス、読み込み速度、user experienceに大きな影響を与えます。従来、JavaScriptはページの<head>に配置することが推奨されてきました。これは安全な選択ですが、正しい選択でしょうか?この記事では、ページのヘッドとフッターにJavaScriptを配置する違いを探り、各アプローチのメリットとデメリット、そしてそれぞれが最も適しているコンテキストを検証します。

背景:プリロードスキャナー

プリロードスキャナーは、ページのHTML全体を非常に高速にスキャンし、画像、CSSファイル、JavaScriptファイル、その他ページの正しいレンダリングに必要なアセットなどの重要なリソースを取得する2番目のHTMLパーサーです。プリロードスキャナーは通常、ページ上で検出した順序でリソースを取得します。ここでJavaScriptの配置が関係してきます。JavaScriptがフッターに配置されている場合、検出が遅くなり、その上にあるリソースの後にダウンロードがトリガーされます。

ヘッドのJavaScript: 

HTMLドキュメントの<head>セクションにJavaScriptコードを配置することにはいくつかの利点があり、特にコードの整理とHTMLマークアップからの分離に関しては有利です。ヘッドにJavaScriptを使用するメリットとデメリットは以下の通りです:

メリット:

  1. コードの分離:JavaScriptコードを<head>に保持することで、スクリプトロジックとHTMLコンテンツを明確に分離でき、コードベースの保守性と可読性が向上します。
  2. 早期ダウンロード:ヘッドのJavaScriptは、ページ本文のリソース(画像、動画、iframeなど)よりも先にダウンロードキューに入ります。
  3. 早期実行:ダウンロードキューに入れられたスクリプトは、通常フッターのスクリプトよりも早く実行されます。正確な実行タイミングは多くの要因に依存します。詳しく知りたい方はDefer vs Async JavaScriptとCore Web Vitalsへの影響をお読みください。

デメリット:

  1. レンダリングブロッキング:JavaScriptが<head>に(defer属性なしで)配置されると、HTML要素のレンダリングがブロックされ、スクリプトの実行が完了するまでページの表示が遅延する可能性があります。
  2. ページ読み込みの低下:早期ダウンロードのため、Largest Contentful Paint要素など他の重要なリソースと競合します。

JavaScriptをヘッドに配置すべき場合は?

重要なスクリプト:レンダリングやページ体験にとって重要なスクリプトは、ページのヘッドに配置すべきです。例えば、メニュー、メインスライダー、Cookie通知を処理するスクリプトは、ページのヘッドに配置すべきです。

機能検出スクリプト:特定のシナリオでは、機能検出に使用されるModernizrなどのJavaScriptライブラリを、ページのライフサイクルの早い段階でブラウザの機能を検出するために<head>に配置する必要がある場合があります。

フッターのJavaScript: 

JavaScriptコードをページの下部、閉じタグ</body>の直前に配置することは、広く使われている手法になっています。これにより、スクリプトは画像や動画などボディ内の他の要素の後にダウンロードキューに入ります。これにより、機能性よりも描画速度が向上します。フッターにJavaScriptを使用するメリットとデメリットは以下の通りです:

メリット:

  1. 高速なページ読み込み:JavaScriptをページの最後に配置することで、HTMLコンテンツが先に読み込まれ、JavaScriptは後で実行されるため、初期ページ読み込みが高速になります。
  2. 単一障害点(SPOF)の回避:JavaScriptを最後に読み込むことで、SPOFに遭遇する可能性が減少し、JavaScriptの読み込みや実行が失敗しても残りのページコンテンツが表示されることが保証されます。

デメリット:

  1. 実行の遅延:フッターのJavaScriptは特定のスクリプトの実行が遅延する可能性があり、JavaScriptへの早期アクセスに依存する機能に影響を与えます。

JavaScriptをフッターに配置すべき場合は?

重要度の低いコード: ページのレンダリングに影響しないスクリプトや、ページ読み込み直後に必要とされない機能については、フッターに配置することで全体的なパフォーマンスが向上します。

ベストプラクティスと推奨事項: 

JavaScriptをヘッドとフッターに配置するさまざまな側面を考慮して、以下のベストプラクティスと推奨事項をまとめました:

  1. レンダリングクリティカルスクリプト:ページのメインコンテンツに影響するスクリプトは、ページのヘッドにレンダリングブロッキングとして読み込むべきです。これらのタイプのスクリプトはCore Web Vitalsとページスピードに大きな影響を与える可能性があるため、できるだけ避けるようにしてください。

  2. クリティカルスクリプト:コンバージョンやページインタラクションに重要なスクリプトは、ページのヘッドにasyncまたはdeferで配置すべきです。

  3. 通常のスクリプト: レイアウトに影響したり早期アクセスが必要な場合を除き、通常のスクリプトはフッターに配置してページ読み込み速度を向上させてください。

  4. あれば便利なスクリプト:絶対に必要であればなくても済むスクリプトは、ブラウザがアイドル状態になってからインジェクトすべきです。

  5. イベントをリッスンする。DOMContentLoaded またはloadイベントを使用すると、配置場所に関係なく、これらのタイミングイベント時またはその後にJavaScriptが実行されることを保証できます。

JavaScriptをWebページのヘッドまたはフッターに配置する決定は、ウェブサイトの具体的な要件と関連するスクリプトの機能に基づいて行うべきです。JavaScriptをヘッドに配置すると、コードの分離と早期アクセスのメリットがありますが、レンダリングのブロックとページ読み込みの低下につながる可能性があります。逆に、フッターのJavaScriptはページ読み込み時間の高速化とSPOFリスクの最小化を提供しますが、特定の機能の実行が遅延する可能性があります。Web開発者として、トレードオフを理解し、ウェブサイトのuser experienceと全体的なパフォーマンスを最適化するために十分な情報に基づいた決定を行うことが不可欠です。

例1:ヘッドのJavaScript



    JavaScript in the Head Example
        <script src="script.js">


    Click Me


この例では、JavaScript関数showMessage()がHTMLドキュメントの<head>セクションに配置されています。この関数はボタンがクリックされたときに呼び出され、アラートを表示します。ただし、ファイル「script.js」が読み込まれて実行されるまで、bodyは解析されません。

例2:フッターのJavaScript

この例では、同じJavaScript関数showMessage()<body>セクションの下部、閉じタグ</body>の直前に配置されています。JavaScriptをフッターに配置することで、HTMLコンテンツが先に読み込まれ、JavaScriptコードはボタンがクリックされたときに実行されます。その結果、アラートは目立った遅延なく表示され、よりスムーズなuser experienceを提供します。また、このスクリプトはファイル「script.js」がバックグラウンドでダウンロードされるため、その影響を受けません。

例3:イベントリスナーの使用



    Event listener Example
    


    


この例では、loadイベントリスナーとコールバック関数を使用して、関数内のJavaScriptコードがページの完全な読み込み後にのみ実行されることを保証しています。ヘッドまたはフッターのどちらに配置されていても関係ありません。このアプローチにより、ページ上のすべての要素が準備できるまでコードが実行されないことが保証され、信頼性が高く一貫した動作が提供されます。

これらの例は、JavaScriptをヘッドに配置した場合とフッターに配置した場合の動作の違いを示しています。JavaScriptをフッターに配置すると、特に大きなスクリプトや即時実行を必要としない機能を扱う場合、ページ読み込みの高速化とよりスムーズなuser experienceにつながります。ただし、機能検出や特定のライブラリの使用など、特定のシナリオではJavaScriptをヘッドに配置する必要がある場合があります。Webページの具体的な要件を常に考慮し、それに応じてJavaScriptの適切な配置を選択してください。

Stop debating in Jira.

Get a definitive answer on your performance issues. I deliver a granular breakdown of your critical rendering path.

Book a Deep Dive >>

  • Definitive Answers
  • Granular Breakdown
  • Critical Path Analysis
JavaScriptの配置:ヘッドとフッター – メリットとデメリットCore Web Vitals JavaScriptの配置:ヘッドとフッター – メリットとデメリット