新しいソフト ナビゲーションのオリジン トライアル

公開日: 2025 年 7 月 31 日

Chrome 139 から、以前に試験運用を行っていた Soft Navigations API の新しいオリジン トライアルが開始されます。このオリジン トライアルでは、サイトで実際のユーザーを対象に API を試して、API のフィールド テストを実施し、Chrome チームにフィードバックを提供できます。

ソフト ナビゲーションとは

ソフト ナビゲーションとは、JavaScript がナビゲーション(リンクのクリックなど)をインターセプトし、新しいページを読み込むのではなく、既存のページのコンテンツを更新するものです。その後、アドレスバーの URL が更新されます(履歴状態により、前後のソフト ナビゲーションが可能になります)。ユーザーには従来のナビゲーションと同じように見えますが、ブラウザから見るとページは元のページです。

ソフト ナビゲーション API が必要な理由

Soft Navigations API は、シングルページ アプリケーション(SPA)サイトで使用されるいわゆる「ソフト ナビゲーション」をヒューリスティック ベースで検出できるようにする API として提案されています。ソフト ナビゲーションでは実際のページ ナビゲーションは発生しないため、通常ナビゲーションで発生する特定のアクションは JavaScript で手動で管理する必要があります。ナビゲーション履歴の管理など、一部のアクションは現在の API で可能です。ただし、これらのナビゲーションでは、Core Web Vitals の測定などの他のアクションは実行できません。

Soft Navigation API を使用すると、ソフト ナビゲーションを監視できます。ソフト ナビゲーションを開始する JavaScript(通常は JavaScript フレームワーク)はナビゲーションの発生を認識しますが、他の JavaScript やブラウザ自体は認識しません。

Core Web Vitals と SPA

Soft Navigation API の主な目的の一つは、SPA のウェブに関する主な指標を測定できるようにすることです。ウェブに関する主な指標は、ブラウザ(Chrome ユーザー エクスペリエンス レポートなどのツールに表示される)と、リアル ユーザー モニタリング(RUM)JavaScript ライブラリの両方で測定されます。

JavaScript フレームワークでは、ウェブに関する主な指標の一部を測定できます。特に Interaction to Next Paint(INP)Cumulative Layout Shift(CLS)は、任意の期間で測定して INP 指標と CLS 指標を計算できるプリミティブ(それぞれ Event Timing APILayout Instability API)に基づいています。ただし、Largest Contentful Paint(LCP)などの他の指標は、ブラウザによってのみ出力されます。これは、ページ ナビゲーションに基づいており、インタラクション時に確定されます。

Soft Navigation API で SPA のウェブに関する主な指標を測定する方法

Soft Navigation API の最初のイテレーションでは、ソフト ナビゲーション ヒューリスティクスと LCP のリセットが組み合わされていました。リセット後、新しいコンテンツフル ペイントのソフト ナビゲーションで LCP を再発行できるようになり、ソフト ナビゲーションのこの指標を測定できるようになります。

この最新のイテレーションでは、異なるアプローチを採用し、これらのコンセプトを Soft Navigation API と新しい Interaction to Contentful Paint パフォーマンス エントリに分離しています。interaction-contentful-paint エントリは、インタラクション後の「コンテンツフル ペイント」を測定します。現時点では、これはソフト ナビゲーションでのみ出力されますが、すべてのインタラクションで有効にすると、LCP 以外のユースケースにも対応できるようになります。

また、API は largest-contentful-paintinteraction-contentful-paintevent-timinglayout-shift の各パフォーマンス エントリを拡張し、エントリが対象とするナビゲーションの識別子を含めるようにしました。パフォーマンス エントリは、測定対象のイベントの後に(通常はアイドル時間中に)出力されます。つまり、パフォーマンス エントリが出力されるまでに URL が変更されていることがよくあります。エントリにナビゲーションを含めることで、パフォーマンス エントリの時刻とソフト ナビゲーション エントリの時刻を照合することなく、特定の URL のウェブに関する主な指標を簡単に測定できるようになります。

なぜヒューリスティックを使用するのか

Soft Navigation API は、次の条件が満たされた場合にソフト ナビゲーションとみなします。

  • ユーザーベースのインタラクションが発生する(ユーザーの操作なしで URL が更新された場合はカウントされません)
  • … これにより、DOM の変更とペイントが発生します。
  • … URL の更新が発生する
  • URL の更新(履歴の変更を含む)。

この API は、JavaScript フレームワークがソフト ナビゲーションを「発行」したり、Navigation API をベースに構築したりすることを許可するのではなく、ヒューリスティック ベースのアプローチを採用しています。これにより、フレームワークやデベロッパーの使用方法に関係なく、ソフト ナビゲーションを構成する要素を常に把握できます。

フレームワークやデベロッパーは、ユーザーがナビゲーションと認識するユーザー操作や DOM の更新がなくても、ソフト ナビゲーションの URL を更新できます。また、URL の更新のタイミングも、やり取りの開始時、完了時のみ、またはその間の任意のタイミングなど、さまざまです。

フレームワークの選択に依存するのではなく、ブラウザにソフト ナビゲーション検出を組み込むことで、標準的な「ヒューリスティック」(このオリジン トライアルからのフィードバックを含む)が確立され、ソフト ナビゲーションの Core Web Vitals を大規模に測定し、そのような測定値を大規模に比較できるようになります。

フレームワークとデベロッパーは、Soft Navigations API のヒューリスティックを無視して、基盤となる Event Timing、Layout Instability、Interaction to Contentful Paint の各 API を使用して、必要に応じて追加のパフォーマンス指標を測定することもできますが、サイト全体で測定できるように、ヒューリスティックを使用する Core Web Vitals をおすすめします。

ソフト ナビゲーション API のテストにご協力ください

ソフト ナビゲーション API をテストして、ソフト ナビゲーションが発生したタイミングに関するヒューリスティックが期待どおりに機能するかどうかを確認する必要があります。ソフト ナビゲーションが発生したとみなされる場合に、API がソフト ナビゲーションを報告しないことはありますか?逆に、ソフト ナビゲーションと見なさないナビゲーションを API が繰り返すことはありますか?

問題を引き起こす例としては、履歴を追加する代わりに replaceState で URL を更新した場合や、ユーザーが開始したものではないナビゲーションが発生した場合(タイムアウト時のログアウトなど)があります。どちらのケースもヒューリスティックに一致しないことで説明できます。Chrome チームはこれらを含めないことに同意していますが、ウェブ デベロッパーの皆様のご意見をお聞かせください。特に、ヒューリスティックが満たされているように見えるにもかかわらず、API がソフト ナビゲーションを認識しないケースについてお聞かせください。

また、この API と新しい Interaction to Contentful Paint プリミティブが、SPA のウェブに関する主な指標の測定を可能にするという主なユースケースに対応しているかどうかについても把握したいと考えています。

API をできるだけ有用なものにしたいと考えています。サイトが実装に依存し始める前に、API を有用なものにする方がはるかに簡単です。そのため、SPA デベロッパーや、こうしたサイトのウェブ パフォーマンスの測定に関心をお持ちの方には、ぜひこの API をお試しいただき、その結果をお知らせいただきたいと思います。

テスト方法

この API は、Chrome のフラグまたはコマンドライン オプションを使用してローカルでテストできます。また、オリジン トライアルでフィールド テストを行うこともできます。

API の技術的な詳細、特にコア ウェブ バイタルの測定方法については、ドキュメントまたは GitHub リポジトリをご覧ください。また、試験運用版のウェブに関する主な指標ライブラリのソフト ナビゲーション バージョンも利用できます。

フィードバック

このテストに関するフィードバックは、以下の場所で積極的に募集しています。

どちらにすべきか迷った場合は、あまり心配しないでください。どちらの場所でもフィードバックをお寄せいただければ、両方の場所で問題をトリアージし、正しい場所に問題をリダイレクトいたします。