MovableTypeはとても優れたCMSパッケージなのですが、昔、手探りで勉強しながらサイトを作っていたとき、どうしてもできなくて諦めたことのひとつが、MovableTypeが自動的に生成するリンクを相対パスにする、というものです。
例えば、あるページから同じ階層に属するページへのリンクの場合、
<a href="contents.html">コンテンツ</a>
のように、ファイル名だけを指定したリンクにすることを「相対パス」といいます。
また、上の階層であれば、
<a href="../contents.html">コンテンツ</a>
というように、「../」を付与する、といった具合ですね。
これが、MovableTypeでリンクURLを吐き出そうとすると、
<a href="http://www.sitelogic.jp/system/movabletype/contents.html">コンテンツ</a>
と、「http://」から始まる絶対パスになってしまうのです。
もちろん、どちらでもリンクとしては同じ結果を産みますので、「どちらでも別に・・・」と、言ってしまうのは簡単なのですが、絶対パスは「外部へのリンク」が前提であり、相対パスは「サイト内へのリンク」という扱いですから、どちらが好ましいかは別として、SEO対策への要件から必ず、使い分ける必要に迫られるはずなのです。
なにかテクニックやプラグインなどが出ているのではないか?と、ずいぶん探しまわったのですが、見つからず、結果として諦めた、という苦い思い出があります。
この相対パスでのリンクの生成を、MovableTypeで実現しました。
とはいっても、ちょっとばかり変則的で煩雑な処理になりますが・・・。
流れとしては、MovableTypeのテンプレートの中に、PHPのプログラムを書き込み、不要な部分を削除、あるいは置き換えるという処理になります。
下記の例は、「カテゴリ別記事一覧」での使用を前提としたもの、すなわち同階層ページ以下へのリンクであるという条件でのソースになります。
<?
$dom = "http://www.sitelogic.jp";
$url = $dom . $_SERVER['PHP_SELF'];
$url = str_replace("index.html","",$url);
?>
<$MTInclude module="ヘッダー"$>
<ul>
<MTEntries>
<li><a href="<? echo str_replace($url,"","<$MTEntryPermaLink$>"); ?>"><$MTEntryTitle$></a></li>
</MTEntries>
</ul>
<$MTInclude module="フッター"$>
1行目から5行目までは、自ページのURLをはじき出すためのPHPプログラムです。
2行目はドメイン名ということで固定の値を入れていますが、2行目は自分のページのパスをプログラムで取得しています。
最初、思うような結果が出ないので不思議に思っていたのですが、「index.html」の記述が邪魔をしていたことに気づき、それを削除する処理を追加しました。
なので、このプログラムを使う場合、カテゴリページは「/category/sub-category/index.html」で吐き出す必要があります。
9行目のリンクを吐き出すための<$MTEntryPermaLink$>タグを囲って、<?~?>のPHPプログラムがありますが、これがリンクURLから余計な部分(ドメイン~パス)を空白に置き換えるための処理です。
記事ページからカテゴリ一覧へ、など、上階層ページへのリンクについては、また別のプログラムにしてやる必要がありますが、この方法であれば、結果として相対パスでのリンク生成を実現できるわけですね。
最後になりましたが、PHPプログラムを使っていることが前提なのに、「.html」の拡張子を使っているので念のため補足。
この例の場合、.htaccessで「.html」でもPHPプログラムを処理できるようにサーバー設定していることが前提になります。
AddHandler x-httpd-php5 .php .phps .html
この一文を入れたファイルを、「.htaccess」というファイル名で、ルートディレクトリに置いておくことで可能になります。
次の記事はありません
サイトロジックでは、コンテンツ制作に関わるさまざまなノウハウを、惜しみなく公開しています。
コンテンツ制作のご参考に、ぜひお役立てください。
全21件の記事中最新の10件を表示 >> 続きを見る