MT3.3にアップグレードしてから二週間あまり。MT3.3の新機能として追加された"タグ"という概念。せっかく苦労してアップグレードしたので、とりあえず実装してみました。まぁ前からやりたかった事もあったので、それもついでに。
タグとは、エントリーにつけるジャンル分けのための語句(ラベル)です。Movable Type では記事をカテゴリごとに分けることができますが、さらにタグを使うことで、エントリーごとに細かくジャンル分けしたり、ウェブログ全体の記事から関連のあるエントリーを簡単に見つけることができるようになります。(※すべてのページで使用可)
エントリー・タグを活用すると以下のような表示が可能です。
その他詳しい詳細については、Movable Type 3.3 エントリー・タグ詳説がとても参考になるので、そちらをご覧になられた方がよいと思います。
「タグ」って言われても、いまいちピンとこないでしょうけど、基本的にはサイト内検索をしているのと同じ感覚。運用者側が任意で各エントリーに付与したタグに基づく、エントリーが表示されるような仕組みで、どちらかと言えばカテゴリと似た感じでしょうか。
事実、タグ名称を表示させてタグ用のリンクを追加すると、「mt-search.cgi」の生成するページが表示されます。
という事で勘の良い方はもうお気づきでしょうが、パラメータを含んだ動的なURLを吐いて、エントリーの一覧ページが表示されるという仕組みです。実装面でもちょっと調べれば、ここまでは特に難しくないです。
どうせ「mt-search.cgi」で動的ながらURLが新規に生成出来るのなら、せっかくだしSEO対策をやってみるかと考えて、「mod_rewrite」も実装してみました。
「mod_rewrite」とは、ルールベースの 書き換えエンジンを使い、要求された URL を適宜書き換えます。 サポートするルールの数、および各ルールを適用する際のルール条件 の数に制限はなく、本当にフレキシブルでかつパワフルな URL 操作 メカニズムを提供します。この URL 操作に先立ち、次のようにいろいろな 評価を行なうことができます。たとえばサーバ変数、環境変数、HTTP ヘッダ、 タイムスタンプ、さらに外部データベースの検索結果までを評価の対象として、 各種のフォーマットを使った粒度の高い URL マッチングを実現できます。
この「mod_rewrite」を使って、パラメータを含んだURLを静的なURLに置換し、検索エンジンに認識させてやろうという目論みです。
という訳で、結構苦労しましたがタグ機能と「mod_rewrite」を組み合わせた実装方法は以下の通りです。
mt-search.cgiを使ったタグ別ページの標準URLは、
<mt-search.cgi?tag=KEYWORD&blog_id=BLOGID>
となるので、このURLを以下のように置換しました。
<http://rakish.org/typer/tag/KEYWORD>
以下の内容を「.htaccess」ファイルに記述してブログのルートディレクトリに置きます。
RewriteEngine On RewriteRule ^tag/(.*)$ cgi/mt/mt-search.cgi?tag=$1&blog_id=IDナンバー
こうすれば、例えば
<置換後URL>にアクセスすれば、<置換前URL>と同じ結果を得る事が出来ます。
ここまではいいとして、ではどのようにこの置換後のURLを動的に生成してテンプレートにリンクとして出力するかですが、これは以下の通り。
エントリー・タグの名称を生成する<$MTTagName$>を記述しアンカータグで囲み、"href="の部分に<$MTBlogURL$>tag/KEYWORD としてみました。これで、KEYWORDの前までは固定の文字列で、KEYWORD部分だけが可変になり、動的に置換後のURLを生成する事が出来ました。
これでエントリー・タグ別のページを検索エンジンにインデックスさせる事が出来るかな。しばらく様子を見てみましょう。
難しそうなことやってますね。
私もバージョンアップしたいのですが、時期を失してしまい、未だ3.01です。
あー、3.3にしたいなぁ。
sbtさんどうもです。
先日はコメント頂いたにも関わらず、エラーを吐いてしまったみたいで申し訳なかったです。
懲りずにコメント頂いてありがとうございます。
3.01でもバージョンアップは可能だと思いますよ。
僕も相当調べ尽くしたんでよければやりますよ?
ちなみにmotoさんはバージョンアップに失敗したみたいですね。。。
てへ。
マジすか?
でもせっかくなので、自分でもトライしてみたいな。
バージョンアップの失敗って、何が原因なんですかね。
って、motoさんとこ、えらい変わりましたね。
初期化は怖いなぁ。
DBのコンバートがうまくいかなかった。
文字コードの設定なのかな?コンバート後に文字化け炸裂、で、めんどくさくなったので初期化しました。
でもね、以外とスッキリしますよ(笑)
>motoさん
sqliteへのコンバート失敗したんですか?
文字化け炸裂とは奇怪な現象ですね。。
何がダメだったのかなぁ。。
>sbtさん
さすがですね。そうとくればトライあるのみですね!
「mtフォルダ」の中身をやる前にバックアップを取っておけば大丈夫ですよ!
もし失敗しても原因突き止めるまで散々弄くり倒して、諦めたらバックアップしていたものを再アップロードすれば一瞬で直りますから。
>以外とスッキリしますよ
そこまであっさりと過去を捨てられないですね。。
このエントリーのトラックバックURL : http://rakish.org/cgi/mt/mt-tb.cgi/251