アーカイブページごとに SEO を考えた最適なキーワードを自動設定する方法

Posted by
ぴろり
Posted at
2008/03/29 09:55
Trackbacks
関連記事 (0)
Post Comment
コメントできます
Category
MovableType カテゴリ

 SEO を考えた場合、ページの meta ヘッダには、そのページ内容を表す概要文(description)やキーワード(keywords)を設定することが重要とされています。MovableType によって生成される各アーカイブページの概要文については、MTBlogDescriptionMTCategoryDescriptionMTEntryExcerptを適宜使いわけることで問題ありません。一方、昨年の記事でも書いたのですが、特に日別(週別・月別・年別)アーカイブやカテゴリアーカイブでのキーワードについては、これという解決方法が見えていませんでした。しかし、MovableType 4 から強化された変数タグを利用して、これらアーカイブのキーワードをもう少し賢く設定できるようにしてみました。

この記事を Delicious に追加する   このエントリーをはてなブックマークに追加  

各アーカイブの概要文とキーワード

 MovableType で生成できる各種アーカイブごとに、meta ヘッダの概要文(description)とキーワード(keywords)に設定されると最適と思われる MovableType のテンプレートタグをまとめると以下のようになります。

各アーカイブの概要文とキーワード
アーカイブの種類概要文
(description)
キーワード
(keywords)
インデックス(トップページ) <$MTBlogDescription$> 手作業で
インデックス(その他) <$MTBlogDescription$>
【B】無理に設定する必要なし
【B】無理に設定する必要なし
個別記事 <$MTEntryExcerpt$>
<$MTEntryBody trim_to="N"$>
<$MTEntryKeywords$>
<MTEntryTags>
ウェブページ <$MTPageExcerpt$>
<$MTPageBody trim_to="N"$>
<$MTPageKeywords$>
<MTPageTags>
カテゴリ別 <$MTCategoryDescription$> <MTCategoryCustomFields>を利用
【A】自動的に設定
日/週/月/年別 【B】無理に設定する必要なし 【A】自動的に設定
ユーザ別 <MTAuthorCustomFields>を利用
【B】無理に設定する必要なし
<MTAuthorCustomFields>を利用
【A】自動的に設定

 一部のアーカイブページではカスタムフィールドを利用することで適切な値を個々に用意して利用することができます。しかし MTOS ではカスタムフィールドを利用できませんから、何かしら他の方法を考える必要があります。

最適なキーワードを自動的に設定する

 先の表で"【A】自動的に設定"となっている部分がこの記事の本題(笑) カテゴリアーカイブや日/週/月/年別アーカイブの meta ヘッダのキーワード(keywords)には、そのアーカイブページに集約されている記事で利用されているタグを利用頻度が高いものから順に設定するのが最適と考えられます。例えば MovableType カテゴリのアーカイブページに集約されている記事を例に挙げると、それぞれの記事で MovableType に関係したタグ(MovableType カテゴリアーカイブだと MovableType,プラグイン,スパム,コード,JavaScript,hack,ブログ,CGI,Perl,tips)が必然的に多く使われるわけですから、これらの記事で頻出するタグはそのアーカイブページを代表するキーワードと考えるのが自然です。
 幸い MovableType 4 からは、変数関係のテンプレートタグが強化されており、特にハッシュや配列が扱えるようになりました。これらのテンプレートタグと変数を利用して、アーカイブページ内の頻出タグを抽出することが簡単に行えます。

<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>
    <$MTTag 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 備忘録からです。最頻出タグを抽出するのにハッシュを用いるアイディアは素晴らしい。
 やっていることは(多分)同じハズですが、(全てのエントリでループ)×(エントリ内のタグでループ)の二重ループ構造で大量のテンプレートタグの構築処理が発生するので、ループ内のタグは極力少なくする方向で書き換えさせて頂きました。元のソースコードでは、一回目の変数への代入処理を MTIf で分岐されていましたが、ここでは最初にハッシュの実体化を済ませておいて、ループ内では単純にタグをカウントだけするようにしてみました。MTIgnore は解説のためのコードなので本番では削除してください。

 MTEntries の使える状況であれば、インデックスやカテゴリアーカイブ、日別アーカイブ、ユーザ別アーカイブなどの様々なページにおいて、そのアーカイブページを代表するタグを抽出して meta タグのキーワードとすることが可能です。全てのアーカイブページに仕方無しに同じキーワードを設定するよりも、SEO 上の効果は期待できるものと考えられます。

このサイトでは MT標準のタグ機能を使っていないのですが、アイディア的には同じ仕組みでキーワードを自動設定しています。例えばカテゴリアーカイブページのHTMLソースを見ると、ページ毎に異なるキーワードが設定されているのがご覧になれます。

概要文(description)はどうしようか?

 最後に"【B】無理に設定する必要なし"とされた meta ヘッダの概要文(description) についてですが、これはまだ明快な答えが見えていません。しかし description については、特に文章である必要はないようなので、そのアーカイブのエントリのタイトルを並べておくだけでも十分に思えます。なぜなら、検索エンジンによる結果表示ページにおいて、description の内容が snippet として表示されることになるわけですが、もしかするとそこにユーザが求める内容に近い記事タイトルが表示される可能性は否定できないからです。
 インデックスアーカイブページについては、どのページにおいても MTBlogDescription が無難に使えそうですが、やはり個々のインデックスページ毎に概要文のようなものが設定できると嬉しいですねぇ… あ、これってもしかしてプラグインネタ?

この記事を Delicious に追加する   このエントリーをはてなブックマークに追加  



関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事にトラックバックを送るには?

コメントを投稿する

 
 (必須, 匿名可, 公開, トリップが使えます)
 (必須, 匿名可, 非公開, Gravatar に対応しています)
 (必須)
スパム コメント防止のため「投稿確認」欄に ランダムな数字 CAPTCHAについて を入力してから送信してください。お手数ですがご協力のほど宜しくお願いいたします。