にしし ふぁくとりー:西村文宏 個人サイト

Presented by Nishishi via Movable Type. Last Updated: 2022/03/25. 10:35:21.

Movable Typeで生成した全ページに個別のアクセスカウンタを付ける方法

Movable Typeで生成しているブログ(やウェブページ)の全ページに、別々のアクセスカウンタを設置する簡単な方法はないもんかな……と考えました。

アクセスカウンタCGIは、たいていCGI本体を1つ設置するだけで(一意のパラメータを付加することで)複数ページにカウンタを提供できます。
各ページをMovable Typeで生成している場合、ページを一意に特定できるようなIDを出力する機能(タグ)を使ってアクセスカウンタ用のパラメータを作れば、テンプレート内にCGIの呼び出しを1行書いておくだけで、すべてのページで別々のアクセスカウントが可能でしょう。

ブログエントリだけを対象にするなら、<$MTEntryID$>を使う手もありますが、Movable Typeで生成するページはブログエントリ以外にもありますよね。アーカイブページとか、トップページとか、ブログに含まない独自のウェブページとか。
なので、あらゆるページに対して一意に識別できるような何かが必要です。

何か都合の良いものはないかな……と思って探したところ、
Movable Type 5.2.4 以降で新たに追加された、<$MTCanonicalURL$> というタグの存在に気付きました。

このタグは、主に、

<link rel="canonical" href="<$MTCanonicalURL$>">

……のようにして使われるためのもののようです。

※ただし、<$mt:CanonicalLink$> を使うことで(<$MTCanonicalURL$>タグを使うことなく)link要素自体も含めて出力可能ですから、あまり直接<$MTCanonicalURL$>を使うことはないような気もしますが。

これで得られるURLを、そのままアクセスカウンタCGIのパラメータに付加してしまえば良さそうです。
<$MTCanonicalURL$> なら、デフォルトでは index.html の有無を区別せずにURLを生成してくれます。
つまり、 http://example.com/index.html にアクセスされても http://example.com/ にアクセスされても、「http://example.com/」という文字列を出力してくれます。
これで、アクセスされたURLによって、(本来は同じページなのに)異なるアクセスカウンタを提供してしまうのを防げます。

わりと便利な気が。

私は、にあ氏のバイナリアクセスカウンタ npc.cgi を使っていまして、以下のように記述しました。
※細かいパラメータは省略していますが。

<img src="/cgi/npc.cgi?L=<$MTCanonicalURL$>&amp;I=/user/www/npc.idx" alt="アクセスカウンタ">

この1行を、独立したウェブページのHTMLを生成するすべてのテンプレート(=メインページとか、月別アーカイブとか、個別エントリとか)に書いておくことで、すべてのページに別々のアクセスカウンタを設置できました。

URLをそのまま使うのであれば、JavaScriptとかでパラメータを生成しても良いかな……とも思ったんですが、同一ページが複数のURLで表示される可能性がある場合には、MT側の<$MTCanonicalURL$>を使う方が楽かな? ……と、ちょっと思いました。

コメント

コメント数: 0件

コメント投稿欄 この日記に対するコメント投稿を歓迎します。



※本文中にURLは書けません。(書くと投稿が拒否されますのでご注意下さい。)

※ご投稿頂いた内容は、掲載前に管理者が確認する設定にしている場合があります。たいていは数日以内には表示されるはずですので、気長にお待ち願います。m(_ _)m

著者紹介


にしし(西村文宏)

にししでございます。本書いたり記事書いたりしてます。あと萌えたり。著書5冊発売中です(Web製作系4冊+小説1冊)。著書や記事は「西村文宏」名義。記事は主にAll Aboutで連載。本の最新刊は2011年3月に発売されたライトノベルでございますよ。

Twitter:にしし/西村文宏
にしし/西村文宏 on facebook にしし/西村文宏 on mixi フォローはお気軽に!

にしし(西村文宏)連絡先
☕ コーヒーをおごる

著書一覧と詳細

にししふぁくとりー Sakura scope内限定での主要なカテゴリ

--- 当サイト内を検索 ---