OFF-SOFT.net

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



概要:
 今回は、今話題(もう、昔?)の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について、少し知識が必要です。詳しく知りたい方は、以下の本なども良いと思います。
本から学ぶことは多いと思います。ネットだけでは判らない様々な事に気づかされます。

PHPによるWebアプリケーションスーパーサンプル 第2版
PHPによるWebアプリケーションスーパーサンプル 第2版
PHPでつくるWEBアプリケーション制作講座 (web creators books)
PHPでつくるWEBアプリケーション制作講座 (web creators books)
PHPによるWebアプリケーションスーパーサンプル活用編 第2版
PHPによるWebアプリケーションスーパーサンプル活用編 第2版
ゼロからできる PHP+MySQL Webシステム構築
ゼロからできる PHP+MySQL Webシステム構築
ゼロからわかる PHP超入門
ゼロからわかる PHP超入門



ブックマークへ追加: はてなdel.icio.usLivedoor ClipYahoo!FC2Nifty ClipPOOKMARK. AirlinesBuzzurl(バザール)Choixnewsing

Trackback URL

このコメントは管理人から承認された後、表示されます。


コメント

コメントをどうぞ






コンテンツ






タグクラウド

リンク

このサイトは?

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

ブックマークへ追加

はてなdel.icio.usLivedoor ClipYahoo!FC2Nifty ClipPOOKMARK. AirlinesBuzzurl(バザール)Choixnewsing