web-dev-qa-db-ja.com

デスクトップ↔モバイルサイトリダイレクトロジック

デスクトップからモバイルへの正しいリダイレクトロジックを知りたい。サイトのモバイルバージョンまたはデスクトップバージョンに訪問者をどのように送信する必要がありますか?

モバイルサイト:m.example.comおよびデスクトップサイト:www.example.com現在使用しているもの:

  1. 最初の訪問が検出され、モバイルまたはデスクトップバージョンにリダイレクトされます
  2. 2回目以降、同じセッション(URL)(モバイルまたはデスクトップ)へのアクセスはリダイレクトされません。つまり、最初にm.example.comが提供され、次にユーザーがwww.example.comと入力すると、モバイルデバイスからデスクトップバージョンが提供されます

訪問者をモバイル版またはデスクトップ版に転送する正しい方法は何ですか?

2
AgA

ブラウザヘッダーを介して訪問者がユーザーであるかどうかを確認する場合、 MobileDetect というスクリプトがあります。時々更新する必要がありますが、それ以外は非常に簡単に機能します:

$detect = new Mobile_Detect();
define(IS_MOBILE_USER,  $detect->isMobile() && !$detect->isTablet() );

if( $onDesktopSite && IS_MOBILE_USER && !isset($_SESSION['ignore_mobileView']) ){
    // Request_uri to keep the user on the actual page, no redirect to home needed
    header('Location: http://m.example.com/'.$_SERVER['REQUEST_URI']);
}

そのサイトに「デスクトップとして表示」を追加して、$_SESSION['ignore_mobileView']を設定して、ユーザーが大きなサイトに留まることができるようにします(元に戻すことを忘れないでください)。

セッションがある限り、サイトはユーザーがデスクトップ/モバイルバージョンを望んでいるかどうかを記憶します。
長期間保存する場合は、Cookieに切り替えることができます。

3
Martijn

モバイルサイトに関するGoogleの推奨事項を使用できます。最初のステップはこれらの推奨事項に準拠していますが、2番目のステップには準拠していません。セッションではなく、ユーザーエージェントの検出に基づいて常にリダイレクトする必要がありますが、ユーザーが選択できるオプションを許可します(通常はフッターの一部として)。

また、標準タグ(モバイルページ上)と代替タグ(​​デスクトップページ上)を実装する必要があります。

Googleの推奨事項の詳細:

https://developers.google.com/webmasters/smartphone-sites/redirectshttps://developers.google.com/webmasters/smartphone-sites/details

1
Roie Speiser

私も実際にこれをやった。 modrewriteルールを使用して、着信デバイスのユーザーエージェントをチェックし、モバイルデバイスかどうかを確認できます。次のスクリプトからのデータを使用します。

http://detectmobilebrowsers.com/

検出が行われると、Cookieを長い有効期間に設定する必要があります(この場合、10年を使用します)。そのCookieを使用すると、検出が再び発生するのを防ぎます。

以下は、ドキュメントルートの.htaccessファイルで使用できるコードです。あなたのサイトに当てはまるように、三角括弧内の何かを正しい値に置き換えてください。大文字と小文字の区別を有効にしたい場合は、気軽にNCを削除してください。

    RewriteCond %{HTTP_COOKIE} !DETECTED=1;?
    RewriteCond %{HTTP_USER_AGENT} ^<insert mobile UA's here>$ [NC]
    RewriteCond %{HTTP_Host} ^(www\.|)<insert main domain here>$ [NC]
    RewriteRule ^<desktop links to redirect>$ http://<insert mobile domain here>/ [NC,R=301,L,CO=DETECTED:1:.<insert main domain here>:<# seconds to keep redirection remembered>:/]
1
Mike