完璧な Core Web Vitals でチャットウィジェットを読み込む方法

PageSpeed や Core Web Vitals に影響を与えないチャットウィジェットの読み込み方法

Arjen Karel Core Web Vitals Consultant
Arjen Karel - linkedin
Last update: 2026-02-07

チャットウィジェットを正しく読み込む方法!

何度も繰り返し言ってきました。スクリプトには重要度の違いがあります。ページ読み込みの最初の500ミリ秒以内にチャットウィジェットが読み込まれなかったことに腹を立てた人は、インターネットの歴史上一人もいません。ページがまだ白紙の状態のその時間帯です。

ページのメインコンテンツがまだ読み込み始めてもいない段階でチャットウィジェットを読み込むなんて、意味がないですよね?最も重要な要素(ロゴ、メイン画像、スタイルシート、フォント、ナビゲーションやコンバージョンを処理する重要なスクリプトなど)を先に読み込む方がはるかに理にかなっています。

残念ながら、ほとんどのウェブサイトはこのようにしていません。私は毎日のように、重要でないスクリプト(チャットスクリプトなど)がページ読み込みの開始直後に最高優先度で読み込まれているのを目にしています。

この記事では、チャットスクリプトを正しく読み込む方法と、Largest Contentful Paint や Interaction to Next Paint などの重要な指標にどのような影響を与えるかについて説明します。

背景:チャットウィジェットの仕組み

チャットウィジェットは通常、ページに小さなスクリプトを読み込むことで動作します。そのスクリプトがスタイルを読み込み、ページにiframeを挿入します。iframeとは、ウェブページ内に埋め込まれた小さな独立したウェブページです。そしてそのiframeが顧客とのチャットに必要なすべてを処理します。

チャットウィジェットは Core Web Vitals にどのような影響を与えるか?

チャットウィジェットは、いくつかの方法で Core Web Vitals に影響を与えます:

1. 初期のネットワークリソースを競合することで、First Contentful Paint と Largest Contentful Paint に影響を与えます。

2. メインスレッドをブロックしたり、インタラクション後の更新が遅くなることで、Interaction to Next Paint に影響を与えます。

3. ページ上で正しくレンダリングされない場合、レイアウトシフトを引き起こす可能性があります。

チャットウィジェットが引き起こす Largest Contentful Paint の問題

チャットウィジェットは、ネットワークリソースを競合する場合に Core Web Vitals に影響を与えます。JavaScript は通常、画像よりも先にダウンロードキューに入れられます。これは、最悪の場合(チャットスクリプトがレンダリングブロッキングの場合)、ブラウザはチャットスクリプトのダウンロードと実行が完了するまで、他の処理を続行できないことを意味します。

チャットスクリプトがdeferredであっても、いくつかの方法でペイント指標に影響を与える可能性があります。まず、deferredスクリプトの動作を説明します。ブラウザはdeferredスクリプトを並行してダウンロードでき、DomContentLoadedイベントまでレンダリングを続行できます。その後、スクリプトを実行します。問題は、リピーターの場合、DomContentLoadedイベントの時点で LCP 要素がまだ読み込まれていない可能性があるのに対し、(キャッシュされた)チャットスクリプトが実行されることで LCP 指標に遅延が生じることです。

チャットウィジェットが引き起こす Interaction to Next Paint (INP) の問題

チャットウィジェットは、2つの方法で Interaction to Next Paint に影響を与えます。1つ目は、チャットウィジェットがスクリプトを実行したり更新をチェックする間、メインスレッドを短時間ブロックすることです。これは仕組み上避けられないことです。ページに「追加する」ものはすべて、ページを少し遅くします。 

2つ目は、コードの品質が悪い場合です(信じてください、粗悪なコードのチャットウィジェットは実際に存在します)。チャットウィジェットに関しては、「人気がある」ことは「コードが優れている」ことを意味しません。粗悪なコードが表示の更新に時間がかかると、自動的に INP の問題が発生します。一部のチャットプロバイダーはもっと改善する必要があるでしょう。この部分は残念ながら私の手の及ぶところではありません。「粗悪なコード」のチャットウィジェットを選んでしまった場合、そのコードを改善する方法はありません。 

チャットウィジェットが引き起こす Layout Shift (CLS) の問題

チャットウィジェットがレイアウトシフトを引き起こすことがあります。チャットウィジェット関連のレイアウトシフトをチェックする際に、私が確認する3つの一般的な原因があります。

  • チャット読み込み時に毎回発生するレイアウトシフト
  • 遅延した「チャットオープン」時に発生するレイアウトシフト
  • チャット履歴の読み込み時に発生するレイアウトシフト(リピーター)

チャットスクリプトが引き起こす Core Web Vitals の問題を修正する方法

幸いなことに、チャットウィジェットがペイント指標(LCP と FCP)および Interaction to Next Paint (INP) の一部に与える影響を最小限に抑えることは比較的簡単です。冒頭で述べたように、スクリプトには適切なタイミングと場所があります。チャットスクリプトの場合、それは「すぐに、何としてでも」ではありません。私はチャットスクリプトをloadイベントの後に、ページがユーザー入力に応答していない 時に読み込み、ネットワーク競合を避けるためにプリロードスキャナーをバイパスすることを好みます。 

では、どうすればいいのでしょうか?loadイベントを使用します。loadイベントが発生した時点で、LCP 要素はページ上にペイントされているはずだからです(JavaScript で遅延読み込みしていない限り)。requestIdleCallback を使用して、ブラウザがユーザー入力に応答していないアイドル状態を待ちます。そして JavaScript を使用してチャットスクリプトを挿入することで、プリロードスキャナーがスクリプトのsrcをすぐに認識して早期ダウンロードをトリガーすることを防ぎます(それこそが私たちが避けたいことです!)

<script>
<script>

チャットウィジェットが引き起こす Cumulative Layout Shift の問題を修正する方法

チャットウィジェットは通常、小さなレイアウトシフトを引き起こします。これは大きな問題になる必要はありません。しかし、チャットウィジェットのレンダリングが粗悪な場合もあります。幸いなことに、ウィジェットのレンダリングが完了するまで粗悪なレンダリングを非表示にすることで、(ある程度)修正することもできます。

これを行うには、チャットウィジェットのドキュメントを読む必要があります(さまざまなチャットプロバイダーがあり、それぞれ少しずつ動作が異なります)。ドキュメントで、チャットレンダリングのさまざまな段階で呼び出されるコールバック関数を探してください。どのチャットウィジェットを使用しているかわからないため、メカニズムを説明するために、ここでは chat.ready() 関数を使用します。

スマートなスタイリングで、CSS の opacity プロパティを使用してチャットを非表示にしたり表示したりできます。まず、チャットウィジェットをデフォルトで非表示にするクラスを追加します(ディスクリプタはお使いのチャットウィジェットに合わせて変更してください)。次に、chat.ready() コールバックで body のクラスリストに「showchat」を追加し、チャットを再表示する2番目の CSS 行を有効にします。
<style>
/*hide chat widget by default*/
.chatwidget{opacity:0}
/*show chat widget after .showchat body class*/
body.showchat .chatwidget {opacity:1}
<style>
<script>
chat.ready(function(){
  document.documentElement.classList.add('showchat');})
<script>

以上です!チャットウィジェットの高速化、頑張ってください!

Make decisions with Data.

You cannot optimize what you do not measure. Install the CoreDash pixel and capture 100% of user experiences.

Create Free Account >>

  • 100% Capture
  • Data Driven
  • Easy Install
完璧な Core Web Vitals でチャットウィジェットを読み込む方法Core Web Vitals 完璧な Core Web Vitals でチャットウィジェットを読み込む方法