正しくないURLでアクセスされた場合にCanonicalを出力する

WordPressでCanonicalを出力するための関数を作ってみました。
WordPressでは、カテゴリURLを間違えたり、カテゴリベースの付与の有無を間違えても正しくページが表示されてしまいます。
通常の使い方では間違ったURLがリンクされてしまうことはないと思いますが、意図しない外部リンク等で重複ページにアクセスされてしまう可能性もゼロではありません。
そこで、ヘッダ部分のmetaにcanonicalを設定し、正しいURLではない重複ページにアクセスした際に、本来はココですよということを検索エンジンに教えてあげましょう。

WordPress 2.9.2からは、wp_head()関数でcanonicalが自動的に出力されるようになっていますが、対象は記事ページのみのようです。
さらに、大きな問題にはなりませんが、正しいページにもcanonicalが出力されてしまい気持ち悪いので、正しいページには出力しないようにします。

まずは、WordPress 2.9.2以上のバージョンの場合は、wp_head()関数の出力内容から、canonicalを除外します。

remove_action('wp_head', 'rel_canonical');
wp_head();

続いて、canonicalを出力するための関数のメイン部分です。
これはfunction.php内にでも書いておいてください。
対応しているのは、記事ページとカテゴリページです。

function getCanonicalUrl(){
	$accessUrl =  "http://".$_SERVER["HTTP_HOST"] . $_SERVER['REQUEST_URI'];
	global $page;
	global $paged;
	
	if(is_single()){
		$compUrl = get_permalink();
		if(!empty($page) && $page != 1){ $compUrl .= $page . '/'; }
	}elseif(is_category()){
		global $cat;
		$compUrl = get_category_link($cat);
		if(!empty($paged) && $paged != 1){ $compUrl .= 'page/' . $paged . '/'; }
	}
	
	if(!empty($compUrl) && $compUrl != $accessUrl){
		return($compUrl);
	}else{
		return(null);
	}
}

この関数は、呼び出されるとアクセスされているURLを取得し、呼び出されたのが記事ページまたはカテゴリページの場合に本来あるべきURLを組み立てて比較します。
比較された結果、異なるURLでアクセスされている場合はcanonicalに設定するべきURLを、正しいURLの場合はnullを返します。
本来あるべきURLは、WordPressの設定や導入しているプラグインによりページ区切りの部分が異なる可能性がありますので、適宜修正してください。

呼び出し方法ですが、htmlヘッダ部分のテンプレートに以下のように記述します。

$canonicalUrl = getCanonicalUrl();
if($canonicalUrl != null){ echo "t<link rel="canonical" href="" . $canonicalUrl . "" />n"; }

正しくないURLでアクセスされた場合にCanonicalを出力するへのコメント

[…] friendlyなWordPressサイトには絶対必要です。 – Web Shufu ・正しくないURLでアクセスされた場合にCanonicalを出力する – APPOFIT […]

正しくないURLでアクセスされた場合にCanonicalを出力するにコメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です