PCサイトに携帯でアクセスした際にモバイルサイトに自動で転送する

携帯電話から、PCサイトにアクセスした際にモバイル用のサイトに振り分けるといった対策を行うことは多いと思います。

最初は、.htaccessを使ってみましたが、知識不足で上手くいきませんでした。ページ単位での転送はできるんだけど、転送した後に携帯サイト内でページ移動するとページが表示されないという現象になってしまって解決できなかったんです。

いろいろ悩んだ結果、PHPが使えるサーバーなら、header関数で転送したほうが安全という結論に至りました。

非常に参考になったのがこのサイト
携帯サイト振り分け (SEO対策考慮)

このページを参考に作成した振り分け用のスクリプトが以下です。

<?php
	$page_m='モバイルサイトのURL';
	$agent=$_SERVER['HTTP_USER_AGENT'];
	if (preg_match("/UP.Browser/[3-5]/",$agent) || 
		preg_match("/J-PHONE//",$agent) || 
		preg_match("/DoCoMo//",$agent) 
		 && !(preg_match("/(Win|Mac|Linux|FreeBSD|OS/2|Solaris)/i",$agent)) ||
		preg_match("/UP.Browser/",$agent) ||
		preg_match("/^Vodafone/",$agent) ||
		preg_match("/^SoftBank/",$agent) ||
		preg_match("/^MOT-/",$agent) ||
		preg_match("/DDIPOCKET;/",$agent) ||
		preg_match("/WILLCOM;/",$agent) ||
		preg_match("/L-mode///",$agent)) 
	{

		header("Location: $page_m");

	}else{

	}//end if
?>

このコードをHTMLコードの一番上に記述します。
(ファイル名が.htmlの拡張子でPHPを認識させたい場合は、.htaccessを使いPHPを認識できるようにして下さい。)

ちなみに上記コード中のモバイルサイトURLは、実際のサイトのURLに置き換えて下さい。URLは、httpから記述しましょう。

自分の場合はキャリアごとのページの振り分けは行っておりません。ちなみに携帯サイトにPCサイトでアクセスした場合の振り分けは以下のような感じです。

<?php
	$page_m='PCサイトのURL';
	$agent=$_SERVER['HTTP_USER_AGENT'];
	if (preg_match("/UP.Browser/[3-5]/",$agent) || 
		preg_match("/J-PHONE//",$agent) || 
		preg_match("/DoCoMo//",$agent) ||
		preg_match("/Opera[s/]/",$agent)
		 && !(preg_match("/(Win|Mac|Linux|FreeBSD|OS/2|Solaris)/i",$agent)) ||
		preg_match("/UP.Browser/",$agent) ||
		preg_match("/^Vodafone/",$agent) ||
		preg_match("/^SoftBank/",$agent) ||
		preg_match("/^MOT-/",$agent) ||
		preg_match("/DDIPOCKET;/",$agent) ||
		preg_match("/WILLCOM;/",$agent) ||
		preg_match("/L-mode///",$agent)) 
	{

	}else{
		header("Location: $page_m");
	}//end if
?>

ただ、自分の場合は携帯→PCの振り分けは、ほとんど行っていません。携帯サイトへPCサイトが直接アクセスすることが、私の経験上ですが、相対的に少ないためです。

あと上記のように振り分けることで、携帯の検索エンジン(google)対策がある程度できる感じです。Googleのクローラーが優秀なのかアルゴリズムによるものか確実なことは分かりませんが、転送することでモバイルの検索エンジンの順位はPCのそれに近いものになることが多いようです。