リダイレクトとユーザーエージェント判定|スマートフォンに最適なウェブサイトガイドライン
2012年06月11日
SEO

※この記事は英語文書を翻訳したものです。
Building Smartphone-Optimized Websites – Webmasters — Google Developers

この記事では、リダイレクトとユーザーエージェント判定を説明します。
(訳者注、Googleがサポートするスマートフォンに最適なサイトの構成についてはこちらの翻訳記事で触れています)

(訳者 2014/7/1追記:Googleのスマートフォンサイトの移行ガイドラインを元にしたスマホサイトの移行のポイントも合わせてご参考ください。)

自動化されたリダイレクト

デスクトップ用とモバイル用で異なるURLを使用するようにサイトが構成されている場合は、ブラウズしているデバイスに合ったURLに自動的にリダイレクトさせることができます。このような場合には、GooglebotやGooglebot-Mobileを他のユーザーエージェントと同様に扱い、適切にリダイレクトしてください。

一対一に対応しないリダイレクト

リダイレクトにおける共通の問題は、ユーザーを本来見るべきページと関係ないページにリダイレクトしてしまうことです。
例えばユーザーがexample.com/article29というURLを訪問した際には、m.example.com/article29のようなモバイルに最適化された、同等のページにリダイレクトされるべきであり、m.example.comのトップページなどにリダイレクトすべきではありません。
リダイレクトを一対一に対応させることにより、インバウンドリンクとユーザーのブックマークが異なるデバイス間でもきちんと動作するようになります。

Googlebotとキャッシュ:Vary HTTPヘッダーと自動化されたリダイレクト

もしサイトでユーザーエージェントによって異なるコンテンツを返したり、リダイレクトしたりする場合には、コンテンツを返す時だけでなくリダイレクトする時も、Vary HTTPヘッダーを送信することをお勧めします。
これによりISPにおけるキャッシュが正しく動作し、GooglebotやGoogleのアルゴリズムが各デバイス用のコンテンツを発見し、ウェブサイトの構成を理解しやすくなります。

Vary HTTPヘッダーは以下のようなものです:

GET /page-1 HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19
(...残りのHTTPリクエストヘッダー...)

HTTP/1.1 200 OK
Content-Type: text/html
Vary: User-Agent
Content-Length: 5710
(...残りのHTTPレスポンスヘッダー...)

サポートされているリダイレクト方法

Googlebotは以下の二種類のリダイレクト実装をサポートします。

サーバーリダイレクト

サーバーリダイレクトは、デバイスごとに用意されたURLにリダイレクトするための、一般的な方法です。通常、リダイレクトはHTTPリクエストヘッダー内のユーザーエージェントに基づいて実行されます。
リダイレクト先は、ページ内のlink rel="alternate"タグやサイトマップでの指定と一貫性を持たせてください。

この目的に限っては、サーバーリダイレクトのレスポンスコードはHTTP 301でも302でも構いません。

JavaScriptリダイレクト

サーバーリダイレクトの実装が難しい場合には、JavaScriptを使ってlink rel="alternate"タグで示されるURLにリダイレクトすることもできます(訳者注、デスクトップ→モバイルの場合はlink alternate、モバイル→デスクトップの場合はcanonicalであると思われます)。
JavaScriptリダイレクトを行う場合、クライアント側でリダイレクトを行うため、画面表示に時間がかかります。まずページをダウンロードして、JavaScriptを読んで理解し、実行して初めてリダイレクトすることができるからです。

JavaScriptを使ったリダイレクトの方法はたくさんあります。
例えば、link alternateタグで指定したmediaクエリをmatchMedia()関数で実行して、結果に基づいてリダイレクトするなどです(訳者注、matchMediaはIE9まででは標準サポートに入っていません)。

双方向のリダイレクト、または片方向のリダイレクト

ウェブサイトによって、リダイレクトのポリシーは異なります。
モバイルユーザーがデスクトップのページに来たときだけモバイルのページにリダイレクトする場合を「片方向リダイレクト」と呼びます。モバイルのユーザーがデスクトップのページに来たときもデスクトップのユーザーがモバイルのページに来たときも、それぞれ適切なページにリダイレクトする場合を、「双方向リダイレクト」と呼びます。

Googlebotにとって、リダイレクトのポリシーにおいて、特に推奨する方法はありません。もっとも重要なポイントは、リダイレクトを正しく、一対一に行い、デスクトップにリダイレクトしてもモバイルにリダイレクトしても、同一のコンテンツを返すということです。
もしサイトの構成が間違っていると、ユーザーによってはコンテンツを一切見ることができなくなるかも知れません。

Googleはまた、ユーザーがリダイレクトポリシーを必要に応じて無視できるようにすることをお勧めします。すなわち、ユーザーが望んだ場合には、モバイルユーザーにデスクトップページを見せたり、デスクトップユーザーにモバイルページを見せたり、です。

ユーザーエージェント判定の落とし穴

ユーザーエージェントの判定はエラーの発生しやすい技術です。
理由は様々ですが、主要な落とし穴は以下の二種類です。

  • ユーザーエージェント判定は、ユーザーエージェント文字列のサブストリング(訳者注、部分一致させるための文字列の一部)のリストに依存しています。このリストは継続的に更新しておく必要があるだけでなく、新しいブラウザなどの、新しいユーザーエージェントには対応できないことがほとんどです。
    現実問題として、多くのユーザーエージェント判定用のリストは正しく保守されておらず、その結果として(訳者注、正しくリダイレクトが行われないなどの)ユーザーエクスペリエンスの悪化を招くことがあります。
  • ユーザーエージェントを判定する際に、デスクトップのユーザーエージェントをモバイルのものと間違えたり、モバイルのユーザーエージェントをデスクトップのものと間違えたりすることがあります。
    同様に、タブレットをスマートフォンに間違えて判定する(訳者注、翻訳機能が右側にあります)こともよくあります。

クローキングについての注意

ユーザーエージェントの判定を行う場合には、クローキングにならないよう細心の注意を払ってください。ユーザーエージェント判定の際は、実際のユーザーエージェント文字列からデバイス名を見つけることによって、デバイスの種類や型を判別してください。
Googlebotを見つけて処理してはいけません。Googlebot-Mobileユーザーエージェントには現在三つの種類がありますが、どれも実際のデバイスとして認識できるようになっています。
スマートフォン用のGooglebot-Mobileの現時点でのユーザーエージェントは、以下の通りです。

Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7 (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)

この文字列から、サイトではデバイスをiPhoneとして認識し、一般のiPhoneユーザーと同じように扱う必要があります。