圧縮辞書による Google 検索の改善

公開日: 2025 年 5 月 14 日

圧縮辞書転送は、リクエスト間で繰り返し発生するコンテンツを圧縮できる新しい標準です。2024 年後半の Chrome 130 でリリースされました。Google 検索ではこの新しいテクノロジーを採用し、大幅な改善を実現しています。

YouTube が提供する機会

アクセスするウェブページに重複が多い。同じウェブサイトの多くのページは、HTML、CSS、JavaScript など、同じコードの大部分で構成されており、これらのコードの間にあるコンテンツのみが変更されます。各結果は数百の特徴の独自の組み合わせであり、完全に独自のコンテンツになりますが、ブラウザに送信されてコンテンツを生成するためのコードには多くの共通点があります。

入力した検索キーワードにかかわらず、ほとんどの検索結果ページは視覚的に似ています。上部には Google のロゴ、検索バー、いくつかのコントロールがあります。中央には検索タイプ用のタブがあり、左側にはユーザーをサポートするさまざまなウィジェットが交互に配置された検索結果のリストがあり、右側には「概要」パネルで追加のコンテキストが表示されます。

一般的な Google 検索結果ページ。上部に検索バー、左側のメイン列に結果、右側に追加情報が表示されています。
Google 検索結果ページ

最後に、下部にページネーション オプションと標準のフッターがあります。これは、視覚的に確認できるものだけです。このページを生成するために、裏では多くのコード(HTML、CSS、JavaScript)が使用されています。このコードの多くは、パフォーマンスの最適化のためにページの HTML に直接インライン化されています。これによりページの読み込みが速くなりますが、外部にキャッシュに保存されたリソースのように、異なる結果ページ間でコードを共有できないというデメリットがあります。

ウェブでの圧縮

圧縮は、ウェブで広く使用されている技術です。gzip や Brotli、Zstandard などの新しいアルゴリズムでリソースを圧縮すると、ファイル内の重複を回避し、送信前にサーバーですべての情報を可能な限り圧縮できます。ブラウザは圧縮されたバイトを展開して元のコンテンツを復元できます。画像の場合、非可逆圧縮は、ユーザーが認識できない余分なバイトを削除することで、同様のメリットをもたらします。

最近まで、ウェブでの圧縮はリソース内の圧縮に限られていました。異なるリソース間で圧縮することはできず、ページ間で圧縮することは当然できませんでした。これは、ウェブ エンジニアが長い間解決しようとしてきた制限として認識されていました。

圧縮辞書転送の活用

Browser Support

  • Chrome: 130.
  • Edge: 130.
  • Firefox: not supported.
  • Safari: not supported.

Source

圧縮辞書転送は、共有辞書を使用してリソース間で圧縮を可能にする新しい標準です。これにより、共通のバイトの連続を共有辞書からの参照に置き換えることができます。

Brotli や Zstandard などの最新の圧縮アルゴリズムは、一般的な用語の辞書の使用をサポートしています。これにより、それらの用語を辞書への小さな参照に置き換えることで、より高い圧縮が可能になります。Brotli には、一般的なウェブ用語の辞書が組み込まれています。圧縮辞書転送は、サーバーとブラウザがカスタム辞書を共有できるようにすることで、この仕組みを拡張しています。

カスタム辞書は、サイト上ですでに使用されているリソースでも、たとえば、app.v2.js のダウンロード時に app.v1.js を辞書として使用すると、基本的に差分のみ(「差分圧縮」とも呼ばれます)をダウンロードできます。または、<link rel="compression-dictionary"> タグ(または同等の Link HTTP ヘッダー)を使用して、別の辞書リソースを指定することもできます。

これにより、共有コンテンツやコードが多いリソース(前述の検索結果ページなど)のダウンロード サイズを大幅に削減できます。

Google 検索での圧縮辞書の使用

Google 検索チームは、検索のパフォーマンスの向上に継続的に取り組んでいます。同社は、このテクノロジーの可能性を見越して、圧縮辞書をいち早く採用しました。

検索では、検索結果ページに共有 Brotli 圧縮を使用し、検索結果の代表的なサンプルから作成された別の辞書ファイルを使用します。堅牢な自動化パイプラインにより、頻繁に変更され、1 日に複数回リリースされる SRP コンテンツに合わせて、辞書を常に最新の状態に保つことができます。DevTools を使用して、この仕組みを正確に確認できます。

クライアントが検索結果ページを初めて読み込むと、サーバーは rel=compression-dictionary タイプの Link: HTTP ヘッダーを使用して辞書へのリンクを提供します。

Chrome DevTools のレスポンス HTTP ヘッダー(Link rel=compression-dictionary ヘッダーがハイライト表示されています)
Chrome DevTools の [ネットワーク] タブに Link ヘッダーが表示されている

クライアントが Brotli 辞書圧縮をサポートしていても、共有辞書をキャッシュに保存していない場合、ブラウザはアイドル状態のときにこの辞書をダウンロードします。辞書レスポンスには、この辞書を使用できるリソースをブラウザに通知する Use-As-Dictionary レスポンス ヘッダーが含まれています。

Chrome DevTools のレスポンス HTTP ヘッダー(Use-As-Dictionary ヘッダーがハイライト表示されています)
Chrome DevTools の [ネットワーク] タブに Use-As-Dictionary ヘッダーが表示されている

辞書は標準の cache-control セマンティクスを使用し、そのヘッダーで定義されたルールに一致するすべてのリソースで使用できます。この例では、/search で始まるページです。

今後検索結果ページを読み込む際に、ブラウザは Available-Dictionary HTTP リクエスト ヘッダーを使用して、ディクショナリがあることをサーバーに伝えることができます。ページを再読み込みすると、次のように表示されます。

Chrome DevTools のレスポンス HTTP ヘッダー(Available-Dictionary ヘッダーがハイライト表示されています)
Chrome DevTools の [ネットワーク] タブに Available-Dictionary ヘッダーが表示されている

[ログを保持] チェックボックスをオンにしてフィルタリングすると、2 つのレスポンスを比較できます。

同じリソースの 2 つのダウンロードの比較(上部が 107 kB、下部が 60 kB)
Chrome DevTools の [ネットワーク] タブ

この例では、最初のリクエストは 107 KB の完全なレスポンスで、Brotli(br)圧縮を使用しています。一方、2 回目の再読み込みリクエストはサイズがほぼ半分の 60 KB で、辞書圧縮 Brotli(dcb)圧縮を使用しているため、ダウンロード時間が短縮されます。

Chrome では、chrome://net-internals/#sharedDictionary ページで共有辞書を表示し、この例を最初から繰り返す場合は消去できます。

共有辞書ページに 1 つの共有辞書が表示されている
Net-Internals #sharedDictionary ページ

結果

この変更は 2025 年春に検索ユーザーにリリースされました。最初は Chrome ユーザーを対象としていました。これにより、すべての Chrome ユーザーの HTML ペイロードの平均サイズが、標準の Brotli 圧縮と比較して 23% 削減されました。この全体的な平均には、辞書圧縮されていない結果(辞書のない初回ユーザーなど)と辞書圧縮された検索結果の両方が含まれます。辞書圧縮された結果では、前述の例で 50% 近くの改善が見られたように、さらに大きな節約が可能です。

これにより、Largest Contentful Paint(LCP)が全体で 1.7%、レイテンシの高いネットワークでは最大 9% 改善されました。小さな数字に思えるかもしれませんが、Google 検索は高度に最適化されたサイトであるため、この程度の増加は非常に大きなものです。他のサイトでは、この技術によってさらに大きな改善が見られる可能性があります。

サイトでお試しください。

圧縮辞書転送は、すべての Chromium ベースのブラウザ(Chrome、Edge、Opera など)で使用できるようになりました。これは段階的な拡張機能であり、サポートしていないブラウザでは無視されますが、サポートするブラウザが増えるにつれて、それらのブラウザでもメリットが得られます。

この技術が解決する課題は、Google 検索に固有のものではありません。多くのサイトでは、検索などの別の辞書を使用するか、既存のリソースを辞書として使用することで(新しいバージョンをロールアウトする際のアプリの以前のバージョンなど)、圧縮辞書転送のメリットを享受できます。

この技術の仕組みとサイトへの実装方法について詳しくは、MDN のガイドをご覧ください。

これには、辞書ベースの圧縮リソースを作成して適切に提供するサーバーまたはビルドプロセスの設定が必要ですが、パフォーマンスの面で非常に優れた結果が得られます。