
http://www.abc.ne.jp/ // 日本語サイトルート
http://www.abc.ne.jp/en/ // 英語サイトルート
という構成のサイトを海外から検索・閲覧する時にhttp://www.abc.ne.jp/en/の方を表示するように修正したいと考えています。
(1)ページランクは下げたくない
http://www.abc.ne.jp/に下記のようなソースのindex.phpを置き、http://www.abc.ne.jp/jp/または http://www.abc.ne.jp/index_jp.phpを作成し日本語サイトトップページとする場合、index.phpがコンテンツのないリダイレクトするだけのファイルになってしまうため、SEO上好ましくないのではないかと考えています。
【ソース】
$languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
$languages = array_reverse($languages);
foreach ($languages as $language) {
if (preg_match('/^ja/i', $language)) {
header("Location: http://www.abc.ne.jp/jp/");
} else {
header("Location: http://www.abc.ne.jp/en/");
}
}
(2)閲覧者の表示言語の選択肢は残したい
現状通りの構成でhttp://www.abc.ne.jp/index.phpに下記のようなソースを記述し、英語環境からアクセスされたらhttp://www.abc.ne.jp/en/へリダイレクトする場合、日本語のページを見たい場合でも強制的にhttp://www.abc.ne.jp/en/へリダイレクトされてしまいます。
【ソース】
$languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
$languages = array_reverse($languages);
foreach ($languages as $language) {
if (preg_match('/^en/i', $language)) { // http://www.abc.ne.jp/en/にはpreg_match('/^ja/i', $language)
header("Location: http://www.abc.ne.jp/en/");
}
}
(1)、(2)の要件を満たしつつ、閲覧環境に合わせて表示するページを制御することは可能でしょうか。
良い方法があればご教示ください。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
>(1)ページランクは下げたくない
トップページからのリダイレクトは止めたほうがいいと思います。
以前リダイレクトさせた時に、一気に圏外まで落とされました・・・。
Smarty等のテンプレートエンジンを使用する方法は手遅れでしょうか?
もしガッチリ作り込みされているシステムでしたら、今更?って感じですが、
テンプレートエンジンの選択肢がOKであれば、HTTP_ACCEPT_LANGUAGEで識別して
日本語と英語それぞれの、該当のテンプレートファイルを呼び出せば良いと思います。
>(2)閲覧者の表示言語の選択肢は残したい
Smarty等のテンプレートエンジンを使用する選択肢がOKであれば、
http://www.abc.ne.jp/index.php
で、(1)は解決しますので、
ご提示されているように、
http://www.abc.ne.jp/en/
とディレクトリを用意し、http://www.abc.ne.jp/index.phpの
英語のコンテンツと全く同じものを「 en 」ディレクトリに設置します。
但し、HTTP_ACCEPT_LANGUAGEの制御はこのディレクト内では行わないようにします。
では、お役に立てれば幸いです。
nazal2010様
ありがとうございます。
Smartyを使用すれば実現可能なのですね。
あいにく私が勉強不足なため、ご提案の手法は導入できませんが、次回以降のため勉強しておきたいと思います。
No.1
- 回答日時:
自動で振り分けるのではなく、閲覧者に選ばせるのが一番いい選択ではないでしょうか。
多言語で作成しているサイトではよくある導線だと思います。
どうしても選ばせるのがダメだと言うことであれば、全てのページに言語切り替えのリンクを表示するようにして、cookieに選択された言語を入れるようにして判定に使い、cookieが無いときだけHTTP_ACCEPT_LANGUAGEの値を見て振り分けるというのも手ではないでしょうか。
これも多言語で作成しているサイトでよくある機能だと思います。
ブラウザの言語設定は、普通の人はいじらないので結構いい加減だったりします。
一般的にはOSの言語設定を元に初期設定されている場合が多いですが、OSの言語と利用者の言語が一致しているとは限りませんので、利用者が選択する方法がいいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Googgy Launcher
-
C言語、C+、C++、C#の違い
-
COBOLでのNOT = の AND条件
-
ビット演算を理解するための参...
-
今のプログラミング言語
-
数学、プログラミング、物理、...
-
著作権法について
-
プログラム言語について c言語...
-
Pythonについて 会社の在庫管理...
-
アセンブリ名とは??
-
HOLONついて教えてください。
-
VBA フォルダ アクセス権限付与
-
VC++でCtrl+Vを操作させたい
-
括弧のネストが多くて深いと・・・
-
今ってプログラミング言語は何...
-
リピート再生が出来ません
-
VBScriptで引数を省略したい場合
-
フリーゲームを解析したい
-
VC++ と C++Builder
-
乱数について(Rnd関数)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Laravelなど、フレームワークを...
-
どのプログラミング言語で作ら...
-
フレームワークは開発環境だけ...
-
CGIとPHPの違い
-
PHPでLinux用のCライブラリを呼...
-
サルでもわかる 代入演算子 PHP
-
Googgy Launcher
-
このようなサイトを作ってみた...
-
プログラミングについて こちら...
-
著作権法について
-
C言語、C+、C++、C#の違い
-
今のプログラミング言語
-
COBOLでのNOT = の AND条件
-
数学、プログラミング、物理、...
-
HOLONついて教えてください。
-
アセンブリ名とは??
-
COBOLで文字タイプを数字...
-
ウェブサイトから特定の文字列...
-
プログラムに書かれる"%"記号の...
-
リピート再生が出来ません
おすすめ情報