SEO上、カノニカルタグは重要だと言われているが、
ページを作る度に<link rel="canonical" href="***">を<head>内に追加していくのはだるいし、URLを間違えて登録するといった負の温床を作り出してしまう。
というわけで、
パーツモジュールでカノニカルタグを作ってみた。
(プラグインで作れよというツッコミはなしね)

モジュールの画面でカノニカルタグを作成した。
SOY CMSでどのページでも使えるブログのサイドバーを作ってみた
このページはルート設定の上、ブログページがトップページになるので、それをベースに
$url = "";
switch(get_class($htmlObj)){
case "CMSBlogPage":
$url .= $htmlObj->pageUrl;
//記事毎ページ
if($htmlObj->mode == "_entry_"){
$url .= $htmlObj->page->getEntryPageUri() . "/" . rawurlencode($htmlObj->entry->getAlias());
//カテゴリーページ
}elseif($htmlObj->mode == "_category_"){
$url .= $htmlObj->page->getCategoryPageUri() . "/" . rawurlencode($htmlObj->label->getCaption());
//月別アーカイブページ
}elseif($htmlObj->mode == "_month_"){
$url .= $htmlObj->page->getMonthPageUri() . "/" . $htmlObj->year . "/" . sprintf("%02d",$htmlObj->month);
}
//ブログのトップページの処理はなし
break;
//ブログページ以外の処理は、ページ毎に決めたURIを末尾に付けるだけ
case "CMSApplicationPage":
default:
$url .= "/" . $htmlObj->page->getUri();
}
echo "<link rel=\"canonical\" href=\"" . $url . "\">";
ブログページとそれ以外のページに分けた上、ブログページでは、ページで設定したURIを気にせず、ページのモード毎に$htmlObjから値を取り出し追加していった。
このモジュールを全ページに設置し、どこか適当なページのカノニカルタグを確認してみたら、
<link rel="canonical" href="/category/GnuCash">
希望通りの出力になった。
これでこれから楽できる。





