セグメントベース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 してるので気になるほど重くはなりません。