Dynamic serving(動的配信)

Dynamic servingの仕組み、Vary: User-Agentヘッダーの2つの役割、レスポンシブデザインやdynamic renderingとの違い、監査と移行方法を解説します。

初回公開:2026年7月2日 · 最終更新:2026年8月22日 · Advanced
言語

Dynamic servingは、同じURLから要求元のユーザーエージェントに応じて異なるHTML/CSSを返す方式です。キャッシュとクローラーへ端末差分を伝えるVary: User-Agentヘッダーが必要です。Googleは、UA判定やヘッダーの誤設定がなく内容の同等性を保ちやすいレスポンシブデザインを推奨しています。ボット向けにJavaScriptページを事前レンダリングするdynamic renderingとは別の概念です。2026年には新規採用ではなく、古い企業サイトで監査しレスポンシブへ移行する対象です。

要点 — Dynamic servingは、同じURLからユーザーエージェント別に異なるHTML/CSSを返すサーバー側の方式で、レスポンスの**Vary: User-Agentヘッダーで通知します。モバイル構成には、Google推奨のレスポンシブデザイン**、Dynamic serving、別URL(m-dot)の3種類があります。Varyには、(1) キャッシュが別端末向けの版を返すのを防ぐ、(2) 歴史的にはGooglebotによるモバイル版の発見を助ける、という2つの役割があります。一方、Vary: User-AgentはUA文字列ごとにCDNキャッシュキーを分断し、オリジン負荷を増やします。古いUA一覧やタブレットの誤判定など、端末判定は失敗しやすく、判定不良やVary欠落によってGoogleが誤った版を見ることがクローキング上の実害につながります。クローラー向けにJavaScriptページを事前レンダリングするdynamic renderingとは別の概念です。2026年には新規採用ではなく、既存構成からの移行を検討するレガシーパターンです。

Evidence for this claim Dynamic serving uses one URL with device-dependent HTML and should send Vary: User-Agent. Scope: Current official or standards documentation. Confidence: high · Verified: Google: Mobile configurations Evidence for this claim Google supports dynamic serving but recommends responsive design because it is easier to implement and maintain. Scope: Current official or standards documentation. Confidence: high · Verified: Google: Mobile-first indexing

Dynamic servingの正確な定義

Googleのモバイルファーストインデックスのベストプラクティスでは、次のように定義されています。“Dynamic serving: Uses the same URL regardless of device. This configuration relies on user-agent sniffing and the Vary: user-agent HTTP response header to serve a different version of the HTML to different devices.” (翻訳) 「Dynamic servingは端末にかかわらず同じURLを使い、ユーザーエージェント判定とVary: user-agent HTTPレスポンスヘッダーによって、端末ごとに異なるHTMLを配信する構成です。」廃止済みの専用ページでは、さらに具体的に、“a setup where the server responds with different HTML (and CSS) on the same URL depending on which user agent requests the page (mobile, tablet, or desktop).” (翻訳) 「ページを要求するユーザーエージェント(モバイル、タブレット、デスクトップ)に応じて、同じURLから異なるHTML(およびCSS)を返す構成」と説明されていました。

3種類のモバイル構成を比較すると、違いが明確になります。

構成同じURLか同じHTMLか主なシグナル
レスポンシブデザインはいはいCSSメディアクエリ(サーバー側処理なし)
Dynamic servingはいいいえ(ユーザーエージェント別)Vary: User-Agentヘッダー
別URL(m-dot)いいえいいえrel=canonical/rel=alternate + Vary

3方式のうち2つはVaryヘッダーに依存します。Googleは別URLについても、“like dynamic serving, this configuration relies on the user-agent and Vary HTTP headers.” (翻訳) 「Dynamic servingと同様に、ユーザーエージェントとVary HTTPヘッダーに依存する」と明記しています。同期ずれの要因がないのはレスポンシブデザインだけであり、Googleが推奨する理由もそこにあります。詳しくはレスポンシブデザインモバイルSEOを参照してください。

仕組み:ユーザーエージェント判定とVaryヘッダー

サーバーは各クライアントが送る識別子であるユーザーエージェント文字列を調べ、モバイル、タブレット、デスクトップのどれかを判定して対応するHTMLを返します。URLは全員で共通なので、レスポンスがユーザーエージェントによって変わることも通知しなければなりません。それがVary: User-Agentヘッダーです。Googleのアーカイブ資料は、このヘッダーに異なる2つの役割があると説明しています。

“It signals to caching servers used in ISPs and elsewhere that they should consider the user agent when deciding whether to serve the page from cache or not. Without the Vary HTTP header, a cache may mistakenly serve mobile users the cache of the desktop HTML page or vice versa. It helps Googlebot discover your mobile-optimized content faster, as a valid Vary HTTP header is one of the signals we may use to crawl URLs that serve mobile-optimized content.” (翻訳) 「ISPなどのキャッシュサーバーへUAを考慮するよう通知し、モバイルとデスクトップのキャッシュ取り違えを防ぐ。有効なVary HTTPヘッダーはGooglebotによるモバイル最適化コンテンツの発見も早める。」

役割1は検索エンジンと独立したUX・正確性の問題であるキャッシュの正しさ、役割2はクロール時の発見です。競合する多くの用語解説は前者だけを扱うか、両者を混同しています。実際のHTTPレスポンスは次のようになります。

HTTP/1.1 200 OK
Content-Type: text/html
Vary: User-Agent
Content-Length: 5710

サーバーがAccept-Encodingなど別の目的ですでにVaryヘッダーを送っている場合は、置き換えずにUser-Agentを一覧へ追加します。

Vary自体は通常のHTTPキャッシュ機構であり、SEO固有の仕組みではありません。適切な版を保存するため、キャッシュキーへ含めるリクエストヘッダーをキャッシュへ伝えます。端末判定やSEOの理解は行わず、端末判定はサーバー側のUAロジックが別に担います。前述のクロール発見での利用は、Googleが監視するシグナルとして説明したもので、すべてのキャッシュが同じ方法で従うプロトコル要件ではありません。304 Not Modifiedや既定・フォールバックのレスポンスを含め、同じURLでは一貫して送信しないと、保存対象のメタデータがキャッシュ内で不整合になります。

多くのガイドが見落とすコスト:CDNキャッシュの分断

Vary: User-Agentは無償ではなく、キャッシュを分断します。キャッシュキーの一部にVary指定ヘッダーが使われるため、サイトへ来たブラウザー版、OSビルド、ボットなど、異なるユーザーエージェント文字列ごとに別のキャッシュコピーが作られます。実際の表示版が2~3種類でも、文字列は数千種類に増え得ます。ただし再利用率の低下はCDN独自のキャッシュキー処理に左右されます。似たUAを正規化・分類するCDNもあるため、普遍的なヒット率低下を示す単一の数値はありません。SiteGroundを含む具体的な倍率は、利用中の構成を保証する値ではなく、1ベンダーの推定として扱ってください。

SiteGroundは実務上のコストを、“With the User-Agent [header] enabled, the system will keep different copies for each combination of OS and browser version visiting your site… you will have 5-30 dynamic requests for the same 100 visits. So the very same site will use 5-30 times the resources.” (翻訳) 「User-Agentヘッダーを有効にすると、OSとブラウザー版の組み合わせごとにコピーを保持する。同じ100訪問でも5~30件の動的リクエストとなり、同じサイトが5~30倍のリソースを使う」と説明しています。クローラーについても、“If such [a] bot starts crawling your site and you have the Vary: User-Agent header, each request it makes to your site would be a dynamic one and will eat up your resources.” (翻訳) 「そのようなボットがクロールを始め、Vary: User-Agentがあると、各リクエストが動的処理となりリソースを消費する」としています。

問題は新しくありません。2013年にCindy KrumはSearch Engine Landで、企業向けCDNがこのヘッダーを、コンテンツは*“cannot be cached or served from the CDN and must be fetched directly from your server”* (翻訳) 「キャッシュもCDN配信もできず、サーバーから直接取得する必要がある」というシグナルとして扱い、動的配信ページでは*“rendering your CDN completely useless”* (翻訳) 「CDNを完全に無用にする」可能性があると警告しました。2013年当時のベンダー挙動は変化しましたが、Vary: User-Agentがキャッシュキーを分断するという技術的な緊張は残り、SEO以外でもDynamic servingが廃れた主因です。SiteGroundも、“most of the sites don’t actually serve different HTML for their mobile versions. It’s the responsive CSS that does all the heavy lifting” (翻訳) 「多くのサイトはモバイル版へ異なるHTMLを配信せず、レスポンシブCSSが主要処理を担う」と指摘しています。実際にはレスポンシブなのにVary: User-Agentだけが残る誤設定も少なくありません。

Dynamic servingはクローキングか

本質的にはクローキングではありません。問題は技法ではなく、結果と意図です。端末を検出して端末に適した内容を返すこと自体は問題ありません。危険なのは、(a) 判定不良やVary欠落によってGooglebotへ壊れた版・誤った版を返すこと、または(b) 検索エンジンへ利用者とは実質的に異なる内容を意図的に返すことです。Googleのアーカイブ資料も明確に警告しています。

“Be very careful of cloaking when detecting user agents… it should not be looking specifically for Googlebot. All Googlebot user agents identify themselves as specific mobile devices, and you should treat these Googlebot user agents exactly like you would treat these devices.” (翻訳) 「UAを検出するときはクローキングに注意し、Googlebotだけを特別に探してはならない。Googlebot UAは特定のモバイル端末として識別されるため、その端末と同じように扱うべきである。」

関連するJavaScriptレンダリングについては、現在も公開されているGoogleのdynamic rendering資料 が一般原則を示しています。“As long as your dynamic rendering produces similar content, Googlebot won’t view dynamic rendering as cloaking,” (翻訳) 「動的レンダリングが同様の内容を生成する限りGooglebotはクローキングと見なさない」一方、“serving completely different content to users and crawlers can be considered cloaking.” (翻訳) 「利用者とクローラーへ完全に異なる内容を返すことはクローキングと見なされ得る」としています。Dynamic servingも同じで、端末ごとに実質同一の内容を返すのは問題ありません。クローキングに見える誤設定が本当の危険です。

Dynamic servingとdynamic renderingを混同しない

競合記事で最も明確に誤られやすい点なので、違いをはっきり分けます。

  • Dynamic serving = 端末による差分。同じURLからモバイルとデスクトップへ異なるHTMLを返します。本稿の対象で、Googleの案内はモバイルファーストインデックス資料へ統合されました。
  • Dynamic rendering = ボット向けのJavaScriptレンダリング差分。JavaScript依存ページの事前レンダリング/サーバーレンダリング版をクローラーへ返し、利用者にはクライアントレンダリング版を返します。Googleには現在も専用資料があり、Bingも2018年のbingbot記事 で、“Dynamic rendering is about detecting user agent and rendering content differently for humans and search engine crawlers” (翻訳) 「Dynamic renderingはUAを検出し、人と検索エンジンのクローラーへ異なる方法で内容をレンダリングすること」と説明しています。これはbingbot向けJSレンダリングであり、端末別配信ではありません。

どちらもユーザーエージェント判定を使い、クローキングの論点があるため混同されますが、問題も資料も異なります。

ユーザーエージェント判定が失敗しやすい理由

Googleのアーカイブ資料が挙げた典型的な失敗は今も当てはまります。UA一覧は継続的な保守が必要で、新しいUAには対応できません。“sometimes detecting a desktop user agent as a mobile one or detecting a mobile user agent as a desktop” (翻訳) 「デスクトップUAをモバイル、またはモバイルUAをデスクトップと誤判定する」ことがあり、“a common mistake for sites is to inadvertently treat tablet devices as smartphones.” (翻訳) 「タブレットを誤ってスマートフォンとして扱う」のも典型例です。Googleの要約、“Use the Vary HTTP header to signal your changes depending on the user agent. Detect user agent strings correctly.” (翻訳) 「UAによる変更はVary HTTPヘッダーで通知し、UA文字列を正しく検出する」は簡潔ですが、この2文が保守負担の全体です。

Googleは10年以上この誤りへ対応してきました。2015年1月にはGoogleのPierre FarがVaryヘッダーだけでなく、端末間でJavaScript、CSS、画像の版を正しく処理できない問題を主要な実装ミスとして挙げています。「ヘッダーを追加する」だけで十分だったことはありません。

レスポンシブデザインが標準になった理由

2つの要因がDynamic servingをレガシーパターンにしました。第1に、Googleは少なくとも2015年から、レスポンシブデザインを*“because it’s the easiest design pattern to implement and maintain”* (翻訳) 「実装と保守が最も容易な設計パターンだから」と推奨しています。版は1つで、端末判定の危険がありません。第2に、モバイルファーストインデックスが2023~2024年に完了し、誤配信の影響が大きくなりました。Googleが主にクロール、インデックス登録、順位付けするのはモバイル版なので、誤設定は単に悪いモバイルページを返すのではなく、主要なインデックス対象を誤って返します。別のm-dot URLと同様、1つのレスポンシブURLへ統合すれば、この問題群をまとめて取り除けます。

Evidence for this claim Google supports dynamic serving but recommends responsive design because it is easier to implement and maintain. Scope: Current official or standards documentation. Confidence: high · Verified: Google: Mobile-first indexing

コンテンツ同等性、モバイルのCore Web Vitals、ユーザビリティ、インタースティシャル、AMPを含む全体像は、モバイルSEOモバイルSEOチェックリストを参照してください。

Dynamic servingを確認する方法

手早い確認方法は、異なるユーザーエージェント文字列で同じURLを2回要求し、比較することです。HTMLが異なり、レスポンスにVary: User-AgentがあればDynamic servingです。HTMLが同一でCSSにより組み替わるだけならレスポンシブです。Scriptsタブにはcurl、DevTools、ブックマークレットの手順があります。端末ごとにHTMLが異なるのにVaryがない場合は、キャッシュとクローラーが誤った版を見るおそれがある誤設定です。

Evidence for this claim Dynamic serving uses one URL with device-dependent HTML and should send Vary: User-Agent. Scope: Current official or standards documentation. Confidence: high · Verified: Google: Mobile configurations

Add an expert note

Pin an expert quote

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