Thursday, May 06, 2010

バイリンガル・ホームページが日本語社名でGoogle検索できない件の対策

株式会社好試力研究所のホームページは、日本語・英語の
バイリンガルであり、ブラウザから送信されてくる
ACCEPT LANGUAGE 情報で自動的に、表示言語を切り替えている。

この場合、うまくホームページを調整しないと
日本語社名「株式会社好試力研究所」でGoogle検索できなくなってしまう。

実際、会社スタートから一月近くたつが、
英語社名「KOUSHIRYOKU Laboratory Ltd.」は、検索されるが、
日本語社名「株式会社好試力研究所」では、検索されない状態が続いた。

なぜこのようなことになるのか、原因は、
Googleのクローラー・ロボット(自動html収集をするブラウザロボット)が、
ACCEPT LANGUAGE 情報をWEBサーバへ渡さないため、
好試力研究所のホームページ用WEBサーバが、英語のページを
回答する、そこで、日本語社名がGoogleに認識されない。

これは、Yahoo や MSN でも同様の現象である。

対策をしたら、一日後に、Googleは、改善された。
Yahoo や MSN は、まだクローラー・ロボットが巡回してこない模様。

で、今回の対策方法について、簡単にまとめる。

(1)クローラー・ロボットには、日本語ページを返す

クローラー・ロボットは、ACCEPT LANGUAGEを送信してこないので
この場合、 USER AGENTを確認して、クローラー・ロボットであるか判断して
この場合は、日本語として、ページを作成して返す。

また、URLの末尾につけるGETパラメータで言語指定があれば、
それを優先する。これは、(3)とも通じる。

phpの判定部分は、こんな感じ、(以下の例は、携帯電話も日本語としている。)

//----------------------------------------------------------------------
if(isset($_GET['LANG'])){
$GLOBALS['LANG'] = $_GET['LANG'];
}else{
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
$GLOBALS['LANG'] = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
}else{
$agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : "";
if(stripos($agent, "DoCoMo") !== false){
$GLOBALS['LANG'] = "ja";
}else if(stripos($agent, "J-PHONE") !== false || stripos($agent, "Vodafone") !== false || stripos($agent, "SoftBank") !== false){
$GLOBALS['LANG'] = "ja";
}else if(stripos($agent, "UP.Browser") !== false || stripos($agent, "KDDI") !== false){
$GLOBALS['LANG'] = "ja";
}else if(stripos($agent, "googlebot") !== false || stripos($agent, "mediapartners-google") !== false){
$GLOBALS['LANG'] = "ja";
}else if(stripos($agent, "Yahoo") !== false){
$GLOBALS['LANG'] = "ja";
}else if(stripos($agent, "msnbot") !== false){
$GLOBALS['LANG'] = "ja";
}else{
$GLOBALS['LANG'] = "en";
}
}
}
//----------------------------------------------------------------------

(2) 言語リソース自動切換え機構

 同じ内容で言語を変えてページを作成することは、
 開発労力の無駄なので、phpで言語リソースを自動切換えできるようにする。

 phpの判定部分は、こんな感じ

//----------------------------------------------------------------------
if($GLOBALS['LANG'] == "ja"){
require "lang_jp.php";
}else{
require "lang_en.php";
}
//----------------------------------------------------------------------

(3)画面の日本語/英語切り替えは、<a>タグで表現

 「(1)クローラー・ロボットには、日本語ページを返す」の
 対策だけでは、こんどは、英語の社名が検索でひっかからなくなる。
 クローラー・ロボットは、リンク(<a>タグ)をたどって調査をする特性が
 あるので、画面の言語切り替えは、<a>タグで実現する。

 また言語の指定は、URL末尾のGETパラメータのLANGで行う。
 こうすることで、クローラー・ロボットは、
 ?LANG=ja ?LANG=en 付きの URLをだどることができて、
 日本語以外の英語等の言語ページをだとることができるはずである。

  phpの部分は、こんな感じ

//----------------------------------------------------------------------
<p align=right style="font-size:67%">
<a href="?LANG=ja">
<img src=flag_japan.PNG width=28px height=19px border=0
 alt="<?php echo htmlspecialchars(T_JAPANESE_EDITION); ?>"
 title="<?php echo htmlspecialchars(T_JAPANESE_EDITION); ?>" >(Japanese)
</a>
&nbsp;
<a href="?LANG=en">
<img src=flag_usa.PNG width=28px height=19px border=0
 alt="<?php echo htmlspecialchars(T_ENGLISH_EDITION); ?>"
 title="<?php echo htmlspecialchars(T_ENGLISH_EDITION); ?>" >(English)
</a>
</p>
//----------------------------------------------------------------------

No comments:

Post a Comment