cakePHP でURLにSEOを効かせよう

セグメントベースURLの場合どうしても
天下の google には正しくキャッシュされなくなるパターンがあって、
それはいわゆる「SEO的によくない」状態なので、
それを直しましょうというお話です。

といっても結局力ワザなんですが。

どんなとき使うか

パターンとしてはこーいう場合があります。

大カテゴリのコントローラがあります。
小カテゴリのコントローラがあります。
その下にデータのコントローラがあります。

というときに普通にやると

ドメイン名/大カテゴリ
ドメイン名/小カテゴリ
ドメイン名/データ

となってしまうわけです。
(1個のコントローラで全部書いてしまえば問題ないですが 普通わけるとおもいます。)

で google 的には
ドメイン名/大カテゴリ名/小カテゴリ名/データ

となるのが理想的なキャッシュです。

なので 上記のURLでたたけるようにするやり方です。

dispatcher.php

とか cake本体には手をいれません。
というかくじけましたorz

なので力ワザします

自前でURLディスパッチャを書いちゃいましょう。

まずディスパッチャ用のコントローラを作ります。
名前は適当で。

それで、

ドメイン名/大カテゴリ名/小カテゴリ名/データ

このURLを叩いたときに $_SERVER に入ってくるデータを取得します。

$_SERVER[‘REQUEST_URI’]

これでとっちゃいます。

でこれをバラして組みなおす

$requestUrl = explode(‘小カテゴリ名’, $_SERVER[‘REQUEST_URI’]);

で最後 好きなコントローラにぶち込む

$this->set(‘result’,$this->requestAction($requestUrl[0],array(‘return’)));

こんなコントローラを書いて
Viewは

{$result}

とだけ書いておく。

最後に

route.php でこの処理をしたいURLだけこのコントローラに飛ばせばOKです。

まとめっぽく

用は route.php(cakePHP のディスパッチャ) -> 自前ディスパッチャ -> アクション

と冗長だけど1個かましてあげればいいですねというお話です。
処理的にもコントローラ上で requestAction してるので気になるほど重くはなりません。