Skip to content


CakePHP で Amazon 的な SEO 対策を行う

どの様にして、CakePHP で Amazon の様に URL のディレクトリ先頭部に SEO 的なワードを入れられるかを考えてみた。

CakePHP で利用するコントローラーは、アクセスされた URL を元に /cake/cake/dispatcher.php が解析しコントローラーを決めている。しかし、/cake/cake/dispatcher.php は CORE から読み込まれるため APP だけで完結することができない。

/cake/app/config/routers.php で制御しようかとも考えたが、その都度設定するのも手間が掛かるし手を入れるのは運用上よくないことだと思う。

そこで思い付いたのは、/cake/app/webroot/index.php で呼び出されている Dispatcher に URL を渡してやることだ。

$Dispatcher = new Dispatcher();
$Dispatcher->dispatch($url);

元々、$url が渡されているだが、実はこの $url は NULL だ。そのため、$Dispatcher->dispatch() 内で環境変数からリクエストされた URL を参照し、解析して呼び出すコントローラーを決めている。
そこで、次の様に一旦ディレクトリパスを反転し URL を渡してやる。

$paths = explode('/', $_REQUEST["url"]);
$paths = array_reverse($paths);
$url = implode('/', $paths);

$Dispatcher = new Dispatcher();
$Dispatcher->dispatch($url);

こうすれば、簡単にコントローラーやアクション・システムで必要なパラメータはディレクトリパスの後方となるため、SEO 的なワードを前方に入れてやることが可能となる。

ちなみに、リクエストパラメータはまた別の箇所で参照し変数に代入しているため、ここでリクエストパラメータを気にする必要は無い。

example

http://example.com/ほげほげ/index/tests?p1=1&p2

array(7) {
["pass"]=>
array(1) {
[0]=>
string(12) "ほげほげ"
}
["named"]=>
array(0) {
}
["controller"]=>
string(5) "tests"
["action"]=>
&<span>string</span>(5) "index"
["plugin"]=>
NULL
["form"]=>
array(0) {
}
["url"]=>
array(3) {
["url"]=>
string(24) "tests/index/ほげほげ"
["p1"]=>
string(1) "1"
["p2"]=>
string(0) ""
}
}
タグ: ,

関連する投稿

Posted in CakePHP, PHP, プログラミング.

Tagged with , .


0 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.



Some HTML is OK

or, reply to this post via trackback.