2008年09月23日

Movable Type で FeedBurner を導入する、わりと正しい(?)手順

RSS feed を FeedBurner に切り替えた際の手順メモの詳細編。
※以下、MT 3.33 でのお話

  1. FeedBurner にアカウントを設定
    Google AdSense ユーザは「AdSense 設定」の「フィード向け AdSense」からアカウント登録するのがオススメ
  2. 対象の feed ファイルの名前を変える(ここ重要
  3. FeedBurner に改名した feed を登録
    この作業も AdSense の「フィード向け AdSense」から設定するほうがオススメ
    この際に出てくる FeedBurner 経由の feed の URL をメモっておくと後が楽
  4. FeedBurner 経由の feed を購読してもらえるように設定(オプション)
  5. 既に購読されている feed が FeedBurner 経由のものにリダイレクトされるように設定
  6. FeedBurner への ping を設定
    ping 設定に「http://ping.feedburner.com」を追加

2、4、5を詳細に紹介。

対象の feed ファイルの名前を変える
Movable Type で「テンプレート」の「インデックス」から自サイトの feed テンプレートを編集する。
「出力ファイル名」を変えて(例:atom.xml → atom_fb.xml)、「テンプレートの内容」にある「self」記述を旧名から新名に変える。

旧:

新:

FeedBurner 経由の feed を購読してもらえるように設定(オプション)
新しい feed が登録してもらえるように、サイトの構成を変更。
各種テンプレートを編集し「Syndicate this site (XML)」などの部分を新 feed の URL で置き換える。
さらにブラウザのアドレスバーに出てくるアイコン(下図)でも選べるようにする。

feed_icon.PNG

各種テンプレート内にある

を以下のような感じに書き換える。(追加でも可)

実はこの手順は、次の「既に購読されている feed のリダイレクト」を実施すれば、やらなくてもOK。
面倒な人は省いてください。

既に購読されている feed のリダイレクト
ここまでの手順では新規に購読される分にしか対応できておらず、既に購読されている旧 feed の分は FeedBurner の恩恵を受けられない。

旧 feed を購読している人も FeedBurner 経由にするには、「.htaccess」によるリダイレクトを設定すればOK。
「.htaccess」に以下のような感じで、旧 feed(左)と新 feed(右)を記述する。
※表示の関係で二行になってますが、実際には一行で書いてください。念のため

ここで重要なのは「旧 feed のところには改名前のファイル名を書く」ということ。
改名後のファイル名を書いてしまうと、リダイレクトがループになってしまって各方面に怒られる。

また、リダイレクトを実施すると新旧切り替わり時に大半の RSS reader が旧記事(おそらく既読)を再表示してしまうので、購読者に前もって断っておくのがマナーかも。
#今回やってなくてスミマセン…

投稿者 iiroty : 08:37 | トラックバック

2008年09月22日

FeedBurner 使ってみる

Google が FeedBurner を買収していたことを今更知ったのを機会に、FeedBurner で RSS を配信してみる。

手順は以下の通り。

  1. 既存の feed を FeedBurner に登録※
  2. 各サイトの link 設定を新 feed にする
  3. 旧 feed のリダイレクト設定

※Google AdSense のアカウント持っていると、FeedBurner のアカウントもそのまま作れる

諸々の設定で力尽きたので、詳細は次回にゆずることにさせてください。
もし「今まで見られていた feed が見られなくなった!」とかあったら、遠慮なくコメントで指摘願います。

投稿者 iiroty : 23:32 | トラックバック

2008年09月21日

AdSense 見直し

定期的に訪れる「広告配置見直し欲求」におそわれて、色々やってみた。

Google AdSense の「広告の管理」機能を使うようにした
既に設置していた分もインポートした
よく見るサイトを参考に広告配置を再検討
エントリーの先頭に広告を載せているところが多かったので、こちらでも採用
エントリーの最後に大き目の広告を載せているところが多かったので、こちらでも採用
一方、エントリーの中間に広告を載せているサイトは少なかったので、こちらは廃止

「その前に更新頻度と内容だろ!」という指摘はごもっともで、耳が痛い。
でもページレイアウトって楽しいから、ついつい見直したくなっちゃうんだよね…。

投稿者 iiroty : 10:54 | トラックバック

2008年03月17日

「MT-Keystrokes プラグインを入れるとコメントが保留になってしまう」問題を乗り越える!

Movable Type のプラグイン、SpamLookup をうまく使うことによって、ブログ閲覧者にスパムを見られてしまう事態は避けられるようになった。
しかし、日に500件近いコメントスパムが来るため、結局 DB は圧迫されっぱなし。
こうなってくると、悪い人にはコメント/トラックバックさせないという強硬手段が必要になってくる。

そこで色々探すうちに、非常に有効なプラグインである「MT-Keystrokes」に(ようやく)出会った。

仕組みは簡単。
コメントのテキストエリアに文字を入力する or 「投稿」ボタンを押す、といった操作を経由していないコメントの投稿自体を失敗させるというもの。
投稿者側の閲覧設定で JavaScript が ON になっている必要があるが、うちのサイトは他の理由で既に ON の方しか歓迎していないので、問題ない。

以下あたりを見ると導入できる。

「導入できる」のだが…。
実はこの「MT-Keystrokes」、「導入したら全てのコメントが保留だって言われるようになった」との悲鳴が一部であがっている。

「保留だ」と言われるものの実際には保留状態にはならず、コメントが失われるという症状を示す。
私も同じ状態にハマったのだが、なんとか解決できたので、解決方法を以下にまとめておく。
#かなり今更だが…

原因の可能性は以下の四つ。

  1. 「keystrokes.pl」を正しい位置に配置できていない
  2. テンプレートを正しく修正できていない
  3. 正しいタイミングで「サイトを再構築」していない
    1・2を正しく実施してから再構築しないといけない。実施前ではダメ
  4. MT-Keystrokes のバージョンと MT のバージョンの相性が悪い

1〜3はいいとして、問題は4。
実は keystrokes-0.1.5.zip と keystrokes-0.1.4.zip、MT3.33 と MT3.2 では、組み合わせによって動作が異なる。

MT3.2 MT3.33
keystrokes-0.1.4 動作する(エラーログだけ出る) 動作する(正常ログだけ出る)
keystrokes-0.1.5 動作する(正常時に余計なエラーログが出る) 動作しない(ログには何もでない)
※ログの有無の原因は良く分からない

この動作の違いは keystrokes-0.1.5 の「keystrokes.pl」に含まれる以下の行にある。

$keystrokes = $q->param($FIELD_NAME) if $q->param($FIELD_NAME);
$eh->error("keystroke failed: " . $obj->email) if $LOG && $keystrokes < 1;
$eh->error("keystroke id: " . $obj->blog_id);
return $keystrokes > 0

この行は MT の仕様的に不必要というかマズイ記述。
MT3.2 では実装者の意図(≠MTの仕様)通りに動作してしまうが、MT.pm の run_callbacks あたりが変わった(と思われる)MT3.3 以降では、動作しないように(=仕様通りに)なったっぽい。
そこでその行をコメントアウトしてみると以下のようになった。

MT3.2 MT3.33
keystrokes-0.1.5 改 動作する(エラーログだけ出る) 動作する(正常ログだけ出る)

現在「MT-Keystrokes」のホームページのリンクからダウンロードできるのは keystrokes-0.1.4.zip になっている。
上のような結果による影響かも知れない。
keystrokes-0.1.5.zip は直接 URL を打てば入手できるので、入手後に上述の修正を入れれば、十分使える。
0.1.4 と 0.1.5 の違いは些細なので、気にならない方は 0.1.4 を使われると良いだろう。

ちなみにこのサイトは MT3.33。
エラー時のログが出ない(=引っかかったコメントスパムが確認できない)のが寂しいので、上述の部分を以下のように変更して使っている。

$keystrokes = $q->param($FIELD_NAME) if $q->param($FIELD_NAME);
$app->log({message => $app->translate("Comment save failed with [_1]",
		"keystroke failed"),
	blog_id => $obj->blog_id,
	class => 'comment',
	level => MT::Log::ERROR()
	}) if $LOG && $keystrokes < 1;
return $keystrokes > 0

「MT-Keystrokes」プラグインによって、ここ数日のコメントスパムは完全にシャットアウトされている。
フィルタリングの対象にさえならないという爽快感。
これで当サイトのコメントスパム対策は終了と言っていいだろう。

ちなみにこの「MT-Keystrokes」、MT4 系では動かないという説があるのだが…(つづく?)

2008年03月15日

SpamLookup プラグインでコメント/トラックバックスパムに対処する

.htaccess による IP アドレスフィルタリングでスパムを防ごうとしていたのだが、これにはいくつかの問題点があった。

  1. 「コメント/トラックバックスパムの IP アドレスを確認して .htaccess に登録」という作業が大変
    一日に数十〜数百もスパムが来ると、もうコストに効果が見合わなくなってしまう
  2. proxy を介した場合を区別できないので、無害な(?) IP アドレスも出禁にしてしまう可能性がある

そもそも自分一人の力で何とかしようというのが少々傲慢だった、ということかと。
で、今回(ようやく)目をつけたのが Movable Type(ver.3.33)が元々持っているプラグイン、SpamLookup

今までは大して活躍していなかったので無視していた。
実はコレ、デフォルトだと設定がゆるめなので、厳しくするにはカスタマイズが必要だった。

↑の設定をそのままに採用してみたが、まだ少しすり抜けてくる輩が居るので、「アドレスのチェック」の「ブラックリスト」に「all.rbl.jp」を追加した。
これにより、大半のスパムが迷惑コメント/トラックバックとしてフィルタリングされるようになった♪

ところで、SpamLookup の「ブラックリスト」に何でもかんでも登録すればいいかというとそうでもない。
特に…

で言及されている「zen.spamhaus.org」などは…

で解説されているように、かなり乱暴に IP アドレスが登録されているようなので、DNSBL は自己責任で注意して取り扱ったほうがよさそうだ。
#ちなみに「zen.spamhaus.org」には、私が今使っている IP アドレスも登録されてます。ウフ

ともあれ、SpamLookup をうまく使うことによって、ブログ閲覧者にスパムを見られてしまう事態は避けられるようになった。

しかし、まだそれなりの数のスパムが保留状態となって登録されてしまう。
また迷惑コメント/トラックバックとして判定されるものの投稿は受け付けてしまうので、結局 DB を圧迫する事態はあまり改善していない。
こうなってくると、悪い人にはコメント/トラックバックさせないという強硬手段が必要になってくるわけだが…(つづく

投稿者 iiroty : 23:04 | トラックバック