CakePHPで国際化対応するときは検索エンジンのクローラに気を付ける

  • 2008年12月18日 01:10
  • php

Cakeではgettextを利用して多言語化(国際化対応)が簡単にできる仕掛けが用意されています。

  1. __()関数を利用して文字列生成
  2. cakeコンソールでpotファイルを作成
  3. poエディタなどで各言語別に翻訳

実際は、こんな流れになります。詳しくは次のサイトなどが非常に詳しい情報が掲載されています。

さて、この国際化対応のときに盲点となるのが「検索エンジン対応」です。

そもそものこの言語の切り替えというのは、HTTP RequestのAccept Languageを調べてそこで切り替えが行われています。(ブラウザでの優先する言語で設定できるやつですね。)ところが、検索エンジンのクローラのように、Accept Languageが設定されていないようなHTTP Requestが投げられると、意図しないページを収集されてしまうことがあります。

たとえば国際化対応しつつも、メインのターゲットを日本人に絞ったようなサイトを用意したとき、クローラはAccept Languageが設定されてない(ケースが多い)ので、上記サイトのような構造にした場合、標準言語である英語サイトの情報がクローラに収集されてしまいます。その場合、当然「海外サイト」と見なされ、いくらmeta要素でキーワード設定をしていても検索結果になかなか引っかからずにSEO的に残念な結果になってしまう、なんてことになりがちです。

クローラ固有の対策をする

じゃぁどうすればいいか、となると話は単純でクローラのUAを見て利用する言語情報を切り替えればOKです。CakeだとAppControllerにこんなコードを入れておくとよさげ。

$user_agent = strtoupper($_SERVER["HTTP_USER_AGENT"]);
if(strpos($user_agent, 'GOOGLEBOT')){
	Configure::write('Config.language',"ja");
}

GOOGLEBOTは当然GoogleのクローラのUAです。他のエンジンにも対応したい場合は、同じようにUAを調べて条件分岐に追加すればOKです。また、言語切り替えの方法はConfig.languageを設定することになります。

よく問題になるのが、検索エンジンがクロールした内容と大きく変わる内容を、サイトアクセス時に返して検索結果を汚す、なんて話がありますが、今回のように表示言語を切り替えるくらいだと問題にはならないはずです。(また、実際に同じようなコードを入れ込んでいますが、問題にはなっていないです)

それにしてもクローラもAccept Languageをリクエスト時に投げてくれてもいいのに、、と思うのですが、リクエストヘッダはできるだけ軽く、というものがあるんでしょうかね?

関連広告

Trackbacks:2

TrackBack URL for this entry
http://blog.katsuma.tv/mt-tb.cgi/187
Listed below are links to weblogs that reference
CakePHPで国際化対応するときは検索エンジンのクローラに気を付ける from blog.katsuma.tv
[CakePHP] CakePHPの組み込みライブラリ「Inflector」を試すサイト inflector.kaburk.comを作成しました。 from [ま]技術雑記 2010-02-08 (月) 12:28
CakePHPを使って、CakePHPの組み込みライブラリ「Inflector」を試すサイトinflector.kaburk.comを作成しました。 やっ...
[CakePHP] CakePHPの組み込みライブラリ「Inflector」を試すサイト inflector.kaburk.comを作成しました。 from [ま]技術雑記 2010-02-08 (月) 12:28
CakePHPを使って、CakePHPの組み込みライブラリ「Inflector」を試すサイトinflector.kaburk.comを作成しました。 やっ...

Home > php > CakePHPで国際化対応するときは検索エンジンのクローラに気を付ける

Search
Feeds

Return to page top