動的な配信

動的な配信の場合、ページをリクエストするユーザー エージェントに応じて、同じ URL で異なる HTML(および CSS)がサーバーから配信されます。

この設定では、パソコン用ユーザー エージェントのクロール時にはモバイル コンテンツが「隠されている」ため、モバイル用ユーザー エージェント向けにサイトの HTML が変更されることはすぐにはわからない状態になっています。そのため、サーバーから送信するヒントとして、スマートフォン用 Googlebot もそのページをクロールしてモバイル コンテンツを検出するようリクエストすることをおすすめします。このヒントは Vary HTTP ヘッダーを使用して実装します。

動的な配信では、同じ URL からデバイスに応じて異なるコードが配信されます。

要約

  • Vary HTTP ヘッダーを使用して、ユーザー エージェントに応じた変更を伝えます。
  • ユーザー エージェント文字列を正しく検出します。

Vary HTTP ヘッダー

Vary HTTP ヘッダーには重要で役立つ効果が 2 つあります。

  • キャッシュからページを配信するかどうかを決定する際にユーザー エージェントを考慮する必要があることを、ISP などで使用されるキャッシュ サーバーに知らせます。Vary HTTP ヘッダーがないと、モバイル ユーザーにパソコン用 HTML ページのキャッシュが誤って配信される(またはその逆の)可能性があります。
  • Googlebot がモバイル端末向けのコンテンツを迅速に検出できるようになります。有効な Vary HTTP ヘッダーは、モバイル端末向けコンテンツを配信する URL をクロールする際に利用できるシグナルです。

Vary HTTP ヘッダーは、リクエストに対するサーバーからの応答の一部です。次に例を示します。

GET /page-1 HTTP/1.1
Host: www.example.com
(...rest of HTTP request headers...)

HTTP/1.1 200 OK
Content-Type: text/html
Vary: User-Agent
Content-Length: 5710
(... rest of HTTP response headers...)

Vary ヘッダーは、ページをリクエストするユーザー エージェントによって、応答の内容が異なることをブラウザに伝えます。サーバーで既に Vary HTTP ヘッダーを使用している場合は、既に配信されているリストに「User-Agent」を追加できます。

ユーザー エージェントの正確な検出

一般に、ユーザー エージェントの検出(ユーザー エージェント「スニッフィング」と呼ばれることもあります)はミスが発生しやすい傾向があります。原因はさまざまですが、よく発生するのが次の 3 種類の問題です。

  1. ユーザー エージェントの検出は、ユーザー エージェント文字列(またはサブ文字列)のリストに基づいて行われます。このようなリストは、常に管理して更新しておかないと、新しいユーザー エージェントに合致しなくなります。実際には、このようなリストの多くが適切に管理されず、最新の状態ではないため、ユーザー エクスペリエンスを損ねる原因となっています。
  2. ユーザー エージェントの照合で不一致が発生することもよくあります。パソコン ユーザー エージェントがモバイル ユーザー エージェントとして検出されたり、モバイル ユーザー エージェントがパソコン ユーザー エージェントとして検出されたりします。同様に、タブレットが誤ってスマートフォンとして処理されることもよくあります。サイトにアクセスするブラウザのユーザー エージェントを検出する場合は、一般的なモバイル文字列を探す(たとえば「Android」だけをチェックする)のではなく、スマートフォン固有の文字列を探す(たとえば「Android」と「Mobile」の両方をチェックする)ようにします。詳しくは Google のブログ投稿をご覧ください。

  3. ユーザー エージェントの検出ではクローキングに十分注意してください。サイトでユーザー エージェントを検出する場合、ユーザー エージェント文字列でデバイス名を探してデバイスクラスやデバイスタイプを検出します。Googlebot だけを検索しないでください。すべての Googlebot ユーザー エージェントは、自身を特定の携帯端末と見なすため、そうした携帯端末の場合とまったく同様に扱う必要があります。たとえば、スマートフォン用 Googlebot が自身を iPhone と見なしている場合は、iPhone ユーザーに対するのと同じレスポンス(リダイレクト、最適化されたコンテンツなど)を返す必要があります。

フィードバックを送信...