Movable Typeでkeywordsを設定する
Movable Typeでkeywordsを指定する場合、通常はブログ記事の「キーワード」もしくは「タグ」のデータをそのまま使うということになると思います。当ブログでは、タグ欄に記事に関するキーワードを埋め込んでいるため、
「ブログ記事のタグに列挙されている言葉をカンマ区切りで表示」
という処理になります。このMTタグの書き方は以下のとおりになります。
<meta name="keywords" content="<mt:entryiftagged><mt:entrytags glue=","><$mt:tagname$></mt:entrytags><mtelse>Movable Type,MT,MODx,WordPress,CMS,ジョギング,英語,育児,ウェブ,インターネット,音楽,ダンス</mt:entryiftagged>" />
もしタグ欄にキーワードが入力されている場合、それらを表示。もしタグ欄に入力忘れがあった場合、あらかじめ指定しておいたキーワードを表示させます。
これはブログ記事のkeywordsですが、問題はカテゴリアーカイブ(カテゴリ別ブログ記事リスト)と月別アーカイブ(月別ブログ記事リスト)です。こちらは、リストのhtmlに複数のブログ記事が収録されているため、上記のような方法では適切なkeywordsを取得できません。
そこで、別途ルーチンを作成します。
ブログ記事のリストからkeywordsをピックアップして、頻出単語を抜き出す
以下は、Movable Typeのブログとして著名な「Open Magic Vox」さんからの引用になります。
<MTIgnore>変数tagsを連想配列変数として実体化しておく</MTIgnore>
<MTIgnore>これをやっておかないと一発目のタグがカウントされない</MTIgnore>
<MTSetVar name="all_tags" key="(dummy)" value="0">
<MTIgnore>連想配列変数が実体化されたので,ダミーのキーはすぐに削除してしまっても問題なし</MTIgnore>
<MTSetVar name="all_tags" key="(dummy)" function="delete">
<MTIgnore>全てのエントリについて…</MTIgnore>
<MTEntries lastn="0">
<MTIgnore>指定されているタグを…</MTIgnore>
<MTEntryTags>
<MTIgnore>連想配列を使ってカウントする</MTIgnore>
<$MTTagName setvar="tag_name"$><$MTSetVar name="all_tags" key="$tag_name" value="1" op="+"$>
</MTEntryTags>
</MTEntries>
<MTIgnore>集計されたタグの使用頻度に応じて降順に…</MTIgnore>
<MTLoop name="all_tags" sort_by="value numeric reverse">
<MTIgnore>上位10個の頻出タグをkeywordsに保存する</MTIgnore>
<MTIf name="__counter__" le="10">
<$MTSetVar name="keywords" value="$__key__" function="push"$>
</MTIf>
</MTLoop>
<meta name="keywords" content="<$MTGetVar name="keywords" glue=","$>" />
ハッシュ変数を使って最近のタグ一覧表示 - Movable Type 備忘録が元ネタになっているそうですが、いずれにせよ、ハッシュを利用してkeywordsを取得してしまう発想はすごいです。元記事では「<$MTTag$>」というタグを利用しているのですが、このブログ記事を書いている時点(2008/12/1)では、このタグはなくなっています。このため、同機能と思われる「<$MTTagName$>」を利用しています。
やっていることは以下のとおりです。
- ハッシュ変数 all_tags を定義
- MTEntriesで、当該リストのブログ記事を全てピックアップ
- ブログ記事に格納されているタグを読み込み、一つずつ変数「tag_name」に代入
- ハッシュ変数「all_tags」の中に「tag_name」をハッシュのキーとして定義
- キーとして代入されたtag_nameの値を1とする
- 同一のタグが代入されたときは、値を1ずつ増やす
- ブログ記事がなくなるまでループ処理
次に、タグの使用頻度順に並び替えます
- <MTLoop>を利用して、ハッシュ「all_tags」に格納されたキーを、値の大きい順に並び替え。
- 全てのタグを並び替えるまで繰り返し
- 使用頻度の多いキー=タグの順番に変数「keywords」へ代入していく
- 10回繰り返したら終了
- 最後に、変数「keywords」の中身をメタタグに代入、一つずつ「,(カンマ)」で区切っていく
こんな手順で、リストの頻出キーワード(タグ)をピックアップしています。
後は、上記手順を「カテゴリ別ブログ記事リスト」「月別ブログ記事リスト」に反映させれば終了です。
僕は上記のリストを元に、テンプレートモジュールの「HTMLヘッダー」に変数代入する形でテンプレートを書きました。
これで、後は自動的にmeta keywordsを定義してくれます。非常に楽ちんです。
皆様もMTでメタタグを自動的に付与する必要が出た場合に、ぜひ一度お試しください。

コメントする