Android のユーザーエージェントの検出について

2011年5月2日月曜日

今日は、最近多くなっているユーザーエージェント検出時の問題を回避する方法についてご紹介します。Android のユーザーエージェントを検出する時は、是非「android」だけでなく 「mobile」という文字も検出してください。

これまでは、「ユーザーエージェントから文字列『android』を検出したら、そのユーザーをモバイル バージョンのサイトにリダイレクトする。」このようなリダイレクトが当たり前のように行われていましたが、Android タブレットの登場とともに文字列「Android」だけでは不十分となりました。携帯端末のユーザーエージェントと同様に、Android タブレットのユーザーエージェントにも文字列「android」が含まれているためです。しかし、タブレット ユーザーには大きなデスクトップ バージョンのサイトを表示させたいのではないでしょうか。サイトが文字列「android」だけでユーザーを自動的にリダイレクトしている場合は、Android タブレットのユーザーがモバイル サイトにリダイレクトされてしまいます。

そこで、モバイル サイトを提供している場合の解決策として Android エンジニアが推奨するのは、 ユーザーエージェントに「android」だけでなく「mobile」が含まれているかどうかを検出する (英語) 方法です。いくつか例を見てみましょう。

次のようなユーザーエージェントの場合:
Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13
文字列「mobile」は含まれていないので、このユーザーにはデスクトップ バージョン(または Android の大型タッチスクリーン端末向けにカスタマイズされたバージョン)を表示します。このユーザーエージェントを見ると、ユーザーが大画面端末 XOOM タブレットを使用していることがわかります。

一方、次のようなユーザーエージェントの場合:
Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; Nexus One Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
「mobile」と「android」が含まれているので、このユーザーエージェントを見ると通常のスマートフォンであることが分かります。この Nexus One ユーザーにはモバイル サイトを表示すべきしょう。

次の図に示すように、Android のユーザーエージェントにはいくつかの共通点があります:

もちろん、Android 固有の機能(たとえばタッチスクリーンの最適化)を実装するために、引き続きユーザーエージェント内の「android」を検出する必要はあるでしょう。しかし、今回お伝えしたいのは、ユーザーエージェントの内容に応じてモバイル サイトにリダイレクトするかどうかを判断するのであれば、文字列「android」だけではなく、「mobile」と「android」の両方を検出してほしいということです。こうすることで、モバイル ユーザーとタブレット ユーザーの両方に適切なサイトを提供できます。

ご不明な点がある場合は、ぜひ デベロッパー フォーラム の Android コミュニティをご利用ください。

2012/1/12 追記
2011 年 12 月より Google では、Googlebot-Mobile に加えて、スマートフォンのユーザーエージェントを使用した Googlebot-Mobile によるクロールを開始しました。詳しい情報は、ブログ記事「 スマートフォン版 Googlebot-Mobile の導入について 」をご覧下さい。