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 |
タイトルの非表示、モジュールを有効にすることを忘れないようにしましょう。
このモジュールは、このパラメータからもわかるように、URLの文字列の一部を変更することで異なるURLを同じと判断します。
例えば、以下のように設定した場合、1つの記事が複数ページにわたっていても1つのURLで設定されます。
Rule01: Find part of URL start=
Rule01: Set part of URL
また、JoomFishを使っている場合、日本語、英語の記事を同一URLにまとめることもできます。
このようにパターンにはまっている場合は、それを同一のURLへ変換するのは、容易にできます。
ただ、概要でも記述したとおりJoomla!では、いろいろなURLでのアクセスが可能です。
特にSEOを有効にしている場合に、その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版 | ![]() Webサイト制作者のための PHP入門講座 | ![]() よくわかるPHPの教科書 | ![]() ゼロからできる PHP+MySQL Webシステム構築 | ![]() Webアプリケーション構築入門(第2版) - 実践!Webページ制作からマッシュアップまで |






