ホーム

OFF-SOFT.net

OFF-SOFT.net

ウェブやソフトウェアに関するサポート&情報サイトです。サイト構築からソフトウェアの作成、利用まであなたの助けになるかも・・・・しれません。たぶん・・。

Joomla!でCanonical Urlを設定する

公開日| 2009年11月06日 | コメントはまだありません。
概要:
 今回は、今話題(もう、昔?)のCanonical Urlを設定してくれるモジュールの紹介です。

Canonical Urlとは、直訳すれば、"正規のURL"とでもいうべきでしょうか。意訳すれば、"唯一の正しいURL"という感じでしょうか。
つまり、以下のようにHTMLの中に記述することで、"このページの本当のURLは、これですよ"と指定しれあげるものです。
<link rel="canonical" href="http://www.off-soft.net/ja/software/dvd/eac.html" /> 

例えば、上記の場合であれば、Joomla!の場合などでは、特に、いろいろURLでアクセスできます。
http://www.off-soft.net/ja/software/dvd/eac.html
http://www.off-soft.net/index.php?option=com_content&view=article&id=170
上記の例は、いずれも同じ記事を表示できますが、見た目上、URLが異なります。それを、検索エンジンに「同じ記事ですよ」と教えるのが、Canonical Urlの設定です。
(ただし、このモジュールでは、上記のURLを同じURLでCanonical Urlを設定することはできません。以降にその回避策のヒントも記載しています。)

この設定を行うことで、Joomla!のようなCMSで色々なURLの指定ができる場合、1つの記事を同じページであることを認識することで、 検索エンジン側は無駄を削除し、検索される側は、ページランクを上げる効果があるとされています。


今回、記述します"Canonical URL" Module for Joomla 1.5 は、モジュールながら、簡単にすべてのページにCanonical URLを設定してくれます。早速、簡単に説明してみます。


早速、使ってみましょう
先のダウンロードサイトから、gzファイルをダウンロードし、インストールを行います。 (メニューの [エクステンション] - [インストール/アンインストール] から行ってください。)

インストールの後、[モジュール管理] で、[ Canonical URL Module ]が無効状態で、既にありますので、クリックして設定画面を表示しましょう。


[ Canonical URL Module ]の設定画面から、各情報の設定を行います。


パラメータ名 説明
Rule01: Find part of URL 検索するURL
Rule01: Set part of URL 置換するURL
※Rule01 - 10 まであります。

タイトルの非表示、モジュールを有効にすることを忘れないようにしましょう。

このモジュールは、このパラメータからもわかるように、URLの文字列の一部を変更することで異なるURLを同じと判断します。
例えば、以下のように設定した場合、1つの記事が複数ページにわたっていても1つのURLで設定されます。

Rule01: Find part of URL start=
Rule01: Set part of URL

複数ページにおよぶ記事の場合、URLのパラメータに"start="が付いてきます。その情報を削除することで、複数ページの記事が1つのURLで指定されます。

また、JoomFishを使っている場合、日本語、英語の記事を同一URLにまとめることもできます。


このようにパターンにはまっている場合は、それを同一のURLへ変換するのは、容易にできます。
ただ、概要でも記述したとおりJoomla!では、いろいろなURLでのアクセスが可能です。
特にSEOを有効にしている場合に、そのURLは、多くなります。そのような場合、どのようにすれば良いでしょう。

次に、その回避策の一つを簡単に解説したいと思います。

URLを統一する
最も単純なやり方は、すべての内部リンクを統一することです。
どういう形式のURLで統一するかは、管理人次第でしょう。

ここでは、メニューのURLに統一するやり方を記述してみます。

/modules/mod_canonical/helper.php は、Canonical URL ModuleのURLの設定処理を行っているクラスmodCanonicalHelperが、記述されています。
その一部に、メニューで設定しているURLへ変換する処理を追加してあげることで、統一を図ってみましょう。

[helper.php]
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
	$_dom = ($_before!="")?(substr(JURI :: base(), 0, -1)):(JURI :: base());
 
//	add search menu
if(isset($_GET['id']) && substr($_before,0,10)=='/index.php' && strstr($_before,'view=article')!==false){
	$id_article = $_GET['id'];
	$menu = &JSite::getMenu();
	$items = $menu->getMenu();
	$itemId = -1;
	foreach($items as $item) {
		if ( ! is_object($item) )
			continue;
		if (isset($item->query['view']) && isset($item->query['id']) && 
			$item->query['view'] == 'article' && $item->query['id'] == $id_article) {
			$b_1 = "index.php?Itemid=".$item->id;
			$link_item=JRoute::_($b_1);
			if($link_item!=$b_1){
				$_before=$link_item;
			}
			break;
		}
	}
}
 
	//1.1
	$mytrigger=0;


72 - 91 行目が、追加された行です。
ここでは、表示しようとしているURLに、'/index.php' 及び 'view=article' , 'id=xxx' が指定されている場合、メニューから検索しています。
メニューに同じ記事IDが存在すれば、メニューIDを取り出して、メニューのURLへ変換しています。
もし、メニューに存在しなければ、そのままです。


上記のようなやり方でもできますが、少々、毎回検索するのは、重そうですね。

一応、記事の表示時のみに限っていますので、その点は、多少は限定されますが、一つの案としてご提示いたしておきます。

この回避策を行わないにしても、複数ページ、固定ページをまとめることは、簡単に行えますので、試すのも一考だと思います。

今回の記事では、PHPについて、少し知識が必要です。詳しく知りたい方は、以下の本なども良いと思います。
本から学ぶことは多いと思います。ネットだけでは判らない様々な事に気づかされます。


コメント

コメントをどうぞ







  • はてなブックマークへ追加する
  • Facebookでシェアする
  • twitter でつぶやく
  • Google Plusでシェアする
  • Pocketでシェアする
ページトップへ