総ブロッキング時間(TBT)

TBTが測定するもの、50msのロングタスク計算、INPのラボ用プロキシである理由(Core Web Vitalsではない)、そして赤いスコアを修正する方法—技術SEOの視点から。

初回公開:2026年6月26日 · 最終更新:2026年8月21日 · Advanced
言語

総ブロッキング時間(TBT)は、First Contentful PaintからTime to Interactiveまでの間に発生した各ロングタスクについて、50 msを超えたブロッキング部分を合計した値です。ラボ専用の指標で、Lighthouseパフォーマンススコアでは単独で最大の重み(30%)を占め、Core Web VitalであるINPのラボ用プロキシとして使われます(以前はFIDのプロキシでした)。TBT自体はCore Web Vitalではなく、Search ConsoleやCrUXには表示されません。Lighthouseモバイルのしきい値は、良好が200 ms以下、不良が600 ms超です。改善方法はINPと同じで、長いJavaScriptタスクの分割、コード分割、未使用JavaScriptの遅延または削除、サードパーティスクリプトの負荷削減が中心です。私の率直な見解では、順位上昇のためではなく、ユーザーとコンバージョンのために改善すべきです。

TL;DR — TBTは、First Contentful PaintからTime to Interactiveまでの間に、メインスレッドが入力応答を妨げるほど長くブロックされた時間の合計です。すべての長いタスク(50 msを超えるメインスレッドタスク)のブロック部分(実行時間 − 50 ms)を合計します。これはラボメトリクスであり、Lighthouse 10スコアで最大の重み(30%)を持ち、INPのラボ上の代替指標ですが、Core Web Vitalsではなく、CrUXやSearch Consoleには表示されません。モバイルのしきい値:良好 ≤200 ms、不良 >600 ms。INPを修正するのと同じように修正します。長いJSタスクを分割し、コード分割し、未使用のJSを遅延/削除し、サードパーティスクリプトを抑制します。私の正直な見解:ランキング向上のためではなく、ユーザーのために修正してください。

Evidence for this claim Lighthouse classifies mobile TBT at 200 milliseconds or less as good and above 600 milliseconds as poor. Scope: Lighthouse mobile TBT scoring guidance; desktop scoring differs. Confidence: high · Verified: Chrome Developers: Total Blocking Time

TBTが実際に測定するもの

Googleの定義から始めるのが良いでしょう。TBTとは*「First Contentful Paint(FCP)の後、メインスレッドが入力応答を妨げるほど長くブロックされた時間の合計」*です。ブラウザのメインスレッドは一度に1つのタスクを処理します。長い処理に忙しい間は、クリック、タップ、キー入力に反応できません。TBTは、ページの読み込みウィンドウのうち、そのブロックされた状態に費やされる時間を定量化します。

ここで重要な定義は2つあります:

  • 長いタスクとは、*「メインスレッドで50ミリ秒以上実行されるタスク」*です。
  • タスクのブロック部分は、その実行時間から50 msを引いたものです。50 ms以下のタスクは、正確に0 msを加算します。

TBTは、FCPから**Time to Interactive(TTI)**までの間にあるブロッキング部分の合計です。つまり、First Contentful Paintがスタートラインです。最初のペイントより前は何もカウントされません。なぜなら、まだ画面上に操作できるものがないからです。

Evidence for this claim TBT sums the portion above 50 milliseconds of long main-thread tasks between FCP and Time to Interactive. Scope: Lighthouse lab metric definition; not a field Core Web Vital. Confidence: high · Verified: Chrome Developers: Total Blocking Time

具体的な例

Google自身の表が最も明確な例です。FCPとTTIの間にメインスレッドで5つのタスクが実行されると想像してください。

タスクの所要時間ブロッキング時間(所要時間 − 50 ms)
タスク1: 250 ms200 ms
タスク2: 90 ms40 ms
タスク3: 35 ms0 ms
タスク4: 30 ms0 ms
タスク5: 155 ms105 ms
Total Blocking Time345 ms

タスク3と4は50 msのライン未満なので、何も寄与しません。タスク1は250 − 50 = 200 ms、タスク5は155 − 50 = 105 msブロックします。ブロッキング部分を合計すると — 200 + 40 + 0 + 0 + 105345 msのTBTになります。これは「改善が必要」スコアであり、ほぼ2つの重いタスクによって引き起こされています。

ここが直感に反する部分で、ぜひ理解しておきたい点です:“A small number of tasks on the main thread doesn’t necessarily mean low blocking time. Conversely, a large number of tasks doesn’t necessarily lead to tons of blocking time.” (翻訳) 「メインスレッド上のタスクの数が少ないからといって、必ずしもブロッキング時間が短いとは限りません。逆に、タスクの数が多いからといって、必ずしも大量のブロッキング時間につながるとは限りません。」(この表現はNitroPackのもので、ここで紹介しています — ライブソースに対して2026-07-18に再検証済み。)重要なのは、個々のタスクが50 msを超えるかどうかであり、タスクの数ではありません。

測定ウィンドウ: FCPからTTIまで

ウィンドウはTime to Interactiveで終わります — “the time from when the page starts loading to when its main sub-resources have loaded and it is capable of reliably responding to user input quickly.” (翻訳) 「ページの読み込みが始まってから、主要なサブリソースが読み込まれ、ユーザーの入力に迅速かつ確実に応答できるようになるまでの時間。」Lighthouseでは、TTIは、長いタスクがなく、進行中のネットワークリクエストが2つ以下の5秒間の「静かなウィンドウ」を前方に検索することで見つけられます。

注目すべき点:TTI自体はLighthouse 10から削除されました。なぜなら、外れ値のネットワークリクエストや長いタスクに過度に敏感で、変動が大きくなることが判明したからです。TBTは存続し、主要なインタラクティブ性の指標となりました。Philip Waltonが述べたように、“Newer, alternative, metrics like Largest Contentful Paint (LCP), Total Blocking Time (TBT), and Interaction to Next Paint (INP) are usually better metrics to use in place of TTI.” (翻訳) 「Largest Contentful Paint (LCP)、Total Blocking Time (TBT)、Interaction to Next Paint (INP)などの新しい代替指標は、通常、TTIの代わりに使用するのに適した指標です。」TBTはウィンドウの終了点としてTTIを置き換えたわけではありません — 同じ根本的な問題に対するより優れた単一の数値です。また、LighthouseレポートUIからTTIが消えたことは、TTIがLighthouseのデフォルトのナビゲーションウィンドウを制限しなくなったという主張と同じではありません — ウィンドウ自体は今でも内部的にそのように測定されています。

Evidence for this claim TTI being removed as a displayed Lighthouse metric does not by itself mean TTI stopped bounding the default Lighthouse navigation TBT window. Scope: lab recommended Confidence: high · Verified: Total Blocking Time (TBT)

もう1つの範囲に関する注意点:「FCPからTTI」は、Lighthouseのデフォルトのナビゲーション監査を具体的に指しています。他のツールや、完全なページ読み込みナビゲーションではなくタイムスパントレースを実行するLighthouse自体は、異なる測定ウィンドウを合計する場合があります — 50 msの長いタスクの計算は変わりませんが、合計される開始点と終了点はツールおよびトレースモード固有であり、指標の普遍的な法則ではありません。

Evidence for this claim TBT begins after FCP, but the endpoint is tool and trace-mode specific: page-load tools commonly use TTI, Lighthouse navigation audits default to stopping at TTI, and other tools or timespan traces may total a different measured window. Scope: navigation audits Confidence: high · Verified: Total Blocking Time

TBTはCore Web Vitalsですか?いいえ。

これは最も一般的な誤解なので、はっきり言いましょう。3つのCore Web VitalsはLCP、INP、CLSです。TBTはそのうちの1つではありません。Google自身の表現:“Total Blocking Time (TBT) is a lab metrics is vital in catching and diagnosing potential interactivity issues that can impact INP. However, it is not part of the Core Web Vitals set because they are not field-measurable, nor do they reflect a user-centric outcome.” (翻訳) 「Total Blocking Time (TBT)は、INPに影響を与える可能性のある潜在的なインタラクティブ性の問題を発見および診断する上で重要なラボ指標です。ただし、フィールドで測定できず、ユーザー中心の結果を反映していないため、Core Web Vitalsセットの一部ではありません。」(その文の文法は彼らのものであり、私のものではありません。)

では、TBTはどこに表示され、どこに表示されないのでしょうか?

  • 表示される場所: LighthousePageSpeed Insightsのラボタブ、Chrome DevTools — すべてシミュレーション/ラボ環境です。
  • 表示されない場所: Google Search ConsoleのCore Web Vitalsレポート、CrUX、または フィールドデータ。これらはLCP、INP、CLSのみを保持します。

「Search ConsoleでTBTを見ている」と言う人がいたら、それは誤解です — GSCはフィールドデータを報告し、TBTはフィールド指標ではありません。

正確にしておくべき修正が1つあります: TBTがラボ推奨であることは、TBTがフィールド不可能であることと同じではありません。Long Tasks APIを使えば、技術的にはフィールドでTBTスタイルの合計を計算できます — Googleは直接そう述べています: “It is possible to measure TBT in the field, but we don’t recommend this as user interaction can affect your page’s TBT in ways that lead to lots of variance in your reports.” (翻訳) 「フィールドでTBTを測定することは可能ですが、ユーザー操作がページのTBTに影響を与え、レポートに大きなばらつきをもたらす可能性があるため、これは推奨しません。」 これは技術的な壁ではなく、それに対する推奨事項です。例外なく実際に正しいことは、より狭い範囲です: CrUXとSearch ConsoleのCore Web VitalsレポートはTBTを決して保持せず、完全に — それらのパイプラインはLCP、INP、CLSのみを収集します。

TBTはINPのラボプロキシ

TBTがそもそも存在する理由はここにあります。ラボツールは実際のユーザーがいないシミュレーション環境でページを読み込むため、Interaction to Next Paintを測定できません — INPには実際のクリックとタップが必要です。TBTはそのギャップを埋めます: “the Total Blocking Time (TBT) metric is lab-measurable and is a proxy for INP.” (翻訳) 「Total Blocking Time (TBT) メトリックはラボで測定可能であり、INPのプロキシです。」

この2つは機械的に関連しています: “Although INP and TBT are calculated differently, they are both reflections of a blocked main thread during the bootstrap process. When the main thread is blocked, the browser is delayed in responding to user interactions.” (翻訳) 「INPとTBTは計算方法が異なりますが、どちらもブートストラッププロセス中のメインスレッドのブロックを反映しています。メインスレッドがブロックされると、ブラウザはユーザー操作への応答が遅れます。」 そして経験的に、“A low TBT often correlates with a low Interaction to Next Paint (INP).” (翻訳) 「TBTが低いことは、多くの場合、Interaction to Next Paint (INP) の低さと相関します。」

しかし「プロキシ」は「代替」ではありません。Googleは明確に述べています: “Total Blocking Time (TBT) may be a reasonable proxy metric for INP, but it’s not a substitute for INP in and of itself.” (翻訳) 「Total Blocking Time (TBT) はINPの合理的なプロキシメトリックかもしれませんが、それ自体がINPの代替ではありません。」 それらは実際に乖離します:

  • TBTが高く、INPは良好。 TBTは読み込み中のブロックを測定します。ユーザーがそのブロックされた時間帯に実際に操作しようとしない場合 — ページが完成して見えるまで待つ場合 — INPは悪いTBTでも良好になり得ます。
  • TBTが良好で、INPが不良。 INPは、読み込み後に発生する遅いイベントハンドラやレンダリング処理、さらにモバイル向けに最適化されていないページで生じるブラウザの300 msのタップ遅延なども対象にします。これらはTBTでは捉えられません。

ラボとフィールドが一致しない場合は、フィールドを信頼してください。INP (実際のユーザー数値) はTBT (ラボ推定値) よりも優先されます。

人々を混乱させる歴史的なメモが1つあります: TBTはかつて**First Input Delay (FID)**のラボプロキシでした。INPは2024年3月12日にCore Web VitalとしてFIDに取って代わったため、TBTは現在INPのプロキシです。根本的なメカニズムは決して変わっていません — 常に読み込み中のメインスレッドのブロックに関するものでした — しかし、TBTを「FIDのプロキシ」と呼ぶ古い記事はすべて、その切り替えより前のものです。

TBTがLighthouseスコアを支配する理由

TBTは**Lighthouseパフォーマンススコアで最大の単一ウェイト — 30%**を占めます。このウェイトはLighthouse 10で導入され、2026-07-18にChromeのスコアリングドキュメントに対してライブで検証され、現在のLighthouse 13まで変更されていません:

メトリックウェイト
First Contentful Paint10%
Speed Index10%
Largest Contentful Paint25%
Total Blocking Time30%
Cumulative Layout Shift25%

その表はバージョンと日付にスコープされたものであり、恒久的な定数ではないと扱ってください — Lighthouseは以前にウェイトを変更したことがあり、再度変更する可能性があります。監査デッキで引用する前に、Lighthouse パフォーマンス スコアリング を参照して再検証してください。

これは、TBTがランキングシグナルではないにもかかわらず、SEO監査で重要になる実務上の理由です。TBTが悪いと、誰もがスクリーンショットを撮るLighthouseの大きなスコア値にひときわ強く影響します。Addy Osmaniの実例では、Intersection Observerのポリフィルを1つ削除しただけで、TBTが400 msから300 msに短縮され、Lighthouseのパフォーマンススコアが63から70に上がりました。1件の修正で7ポイント上昇したのは、TBTの重みが30%あるためです。

もう1つのニュアンス:「Good ≤200 ms」のカテゴリしきい値とLighthouseのスコアは異なる尺度です。TBTサブスコアで90以上を取るには、モバイルでおおよそ≤300 msが必要で、100を取るには≤100 msが必要です。(これらのサブスコアの数値は、DebugBearのスコアリングカーブのドキュメントに基づき、2026-07-18にライブソースに対して再検証済みです。)「Good」と「100」は同じ基準ではありません。

TBTはSEOランキングに影響しますか?

直接は影響しません。そして、私はほとんどの人よりも率直に言います。

TBTはランキングシグナルではありません。Googleのインタラクティブ性のランキング入力はINPであり、フィールド指標です。TBTは、INPを損なう長いタスクを見つけて修正するのに役立つ診断指標です。TBTを改善するとINPが改善される可能性があり、それが順位のPage Experience側にわずかに役立つかもしれません。しかし、それはあなたの順位から「かもしれない」が2つ離れています。

Core Web Vitals全体に対する私の実際の立場は、以前ページ速度ガイドで書いた とおりです。Core Web VitalsがSEOに大きな影響を与えるとは思いません。極端に遅い場合を除き、通常は優先しません。順位上昇のためではなく、ユーザーとコンバージョンのために改善してください。フィールド指標のラボ用プロキシであり、ランキングへの寄与も小さいTBTでは、なおさらです。順位を追うためではなく、フリーズしたページで顧客を失わないために直してください。

TBTが高くなる原因

ほとんどの場合、JavaScriptが原因です:

  • 不要なJavaScriptの読み込み、解析、または実行 — Lighthouse監査の言葉そのものです。ページが読み込み時に必要としない大きなバンドルを配信することが典型的な原因です。
  • 非効率なJavaScriptステートメント — メインスレッドを占有する重い同期処理。
  • サードパーティスクリプト — タグマネージャー、チャットウィジェット、アナリティクス、広告スクリプト。多くの場合、最大の貢献要因であり、最も制御が効かないものです。
  • 重いフレームワークのブートストラップ — Reactのハイドレーションなどは、起動中に長いタスクを実行できます。
  • スタイル/レイアウトの再計算とガベージコレクション — 強制同期レイアウト、大規模なスタイル再計算、GCポーズもメインスレッドタスクとして表示されます。トレース内のすべての長いタスクがJavaScript実行であると想定しないでください。

バンドルの転送サイズがすべてだと思わないでください。トレースの属性には実際のギャップがあります。クロスオリジンフレームとワーカースレッドには、長いタスクオブザーバーがそれらについて報告できる内容にプライバシーとセキュリティの制限があります(トラブルシューティングを参照)。そのため、トレース内の属性なしタスクは、サードパーティが関与していない証拠ではありません。属性APIがそれを伝えることを許可されていないだけかもしれません。

高いTBTを修正する方法

修正方法はINPの修正と同じ系統です。どちらもメインスレッドのブロックに帰着します。

  1. 長時間タスクを見つける。 Chrome DevTools の Performance パネルを開き、50 ms を超えるタスク(赤い角でマークされます)を探すか、Lighthouse の「Avoid long main-thread tasks」監査を実行します。
  2. まずサードパーティスクリプトを監査する。 通常、これらが最も簡単な改善点です。DevTools の Coverage タブと Network タブを使用して各スクリプトのコストを確認し、重い埋め込み(YouTube、マップ、チャット)をファサードの背後で遅延読み込みします。
  3. 長時間タスクを分割する。 メインスレッドに譲歩して、ブラウザがチャンク間で入力を処理できるようにします — 「タスクが分割されると、ブラウザはより優先度の高い作業(ユーザー操作を含む)にはるかに早く応答できます。」 最新の API は scheduler.yield() で、setTimeout(resolve, 0) のフォールバックがあります(パターンについては Cheat Sheets タブを参照)。Google は もはや isInputPending() を推奨していないことに注意してください — 入力が保留中かどうかに関係なく譲歩します。
  4. JavaScript を削減する。 大きなバンドルをコード分割して読み込み時の解析と評価を減らし、未使用の JS を削除し(DevTools の Coverage タブで確認できます)、重要でないスクリプトには defer を使用します。
  5. 重い計算をメインスレッドから移動する。 Web Workers は CPU 負荷の高い作業を別のスレッドで実行し、メインスレッドを応答可能な状態に保ちます。

便利な副作用: メインスレッドをブロックする長時間タスクは、Largest Contentful Paint のレンダリングも遅延させる可能性があるため、TBT を修正すると LCP も改善されることがあります — 特にレンダリングをブロックする JS が関与している場合です。

次に進む場所

TBT は Core Web Vitals ファミリーに属し、フィールド版の Interaction to Next Paint、読み込みメトリクスの Largest Contentful PaintFirst Contentful Paint、およびそれらを報告するラボツールの LighthousePageSpeed Insights、Speed Index と並んでいます。1 つだけ覚えておくなら: TBT は フィールド の応答性に対する ラボ の警告灯です — 数値ではなく長時間タスクを追いかけましょう。

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.