FeedBurnerの「0 Subscribers」表示を確実に回避する方法

問題の概要
FeedBurnerの購読者カウントをテキストで表示する方法を使うと、毎日ほぼ同じ時間帯にカウントが「0」と表示されることがあります。これは見た目に非常にまずく、特にキャッシュプラグインを使っているとその「0」が長時間公開ページに残ってしまいます。
上のスクリーンショットでは、実際は数千の購読者がいるにもかかわらず「0 Subscribers」と出ています。
原因(短く定義)
FeedBurnerのフィードAPIは更新処理のタイミングで一時的にカウントを0として返すことがあります。これはAPI側の仕様/実装タイミングによるもので、必ずしもユーザー側で直せるものではありません。ただし表示側で対処することは可能です。
すぐできる簡単な修正手順
- テーマの header.php や sidebar.php、または購読者数を表示しているテンプレートを開きます。
- FeedBurnerのXMLをパースしている行を探します。例:
$fb = $xml->feed->entry['circulation'];
- その直後にフォールバック値を入れる変数を定義します。現実的な購読者数に近い値を入れてください。
$fc = "XXX"; // 例: "1200" のように実際の値に近い数字を入れる
- 表示箇所を次のように置き換えます。
if ($fb == "0") {
echo $fc;
} else {
echo $fb;
}
- 保存してテストします。
これだけで、FeedBurnerが一時的に0を返した場合に、指定したフォールバック値が表示されます。PHPタグ内で実行してください。
重要: フォールバック値は偽の増減を意図した操作ではありません。読者に誤解を与えない範囲で現実的な値を設定してください。
改良案と安全性の考慮
- $fb が未定義あるいは空文字の場合をカバーする: isset() や empty() を使う。
if (empty($fb) || $fb == "0") {
echo $fc;
} else {
echo $fb;
}
- 数値として扱う: intval() を使うと型の不整合による誤動作を防げます。
$fb_num = intval($xml->feed->entry['circulation']);
$fc_num = intval($fc);
if ($fb_num <= 0) echo $fc_num; else echo $fb_num;
- フォールバックを動的にする: 管理画面や定数でフォールバック値を管理すると、更新・運用が楽になります。
代替アプローチ
- サーバー側キャッシュを短く設定し、FeedBurnerを定期的に取得しておく。キャッシュが短ければ0が長時間表示されにくくなります。
- JavaScriptでクライアント側からFeedBurner APIを非同期に取得して差し替える。初期表示は前回値を出し、取得後に書き換える方式が可能です。
- Google Analyticsや別の購読トラッキングを併用し、表示はそちらを優先する。
いつこの対処が使えないか(反例)
- 実際に購読者が0人の場合。この方法だと虚偽表示になります。明確に購読者がいないケースではフォールバックを避けるべきです。
- 法的・運営上の理由で正確な数値のみを表示する契約がある場合は使えません。
キャッシュプラグインを使っている場合の注意
キャッシュが有効だと「0」が長時間残る危険があります。以下を検討してください。
- 購読者表示部分のみをキャッシュ除外にする。
- フォールバック値をキャッシュしておかない設定にする。
- キャッシュの有効期限を短くする(例: 5分〜1時間)。
テスト項目と受け入れ基準
- テスト1: APIが0を返した時、フォールバック値が表示される
- テスト2: APIが正しい値を返した時、その値が表示される
- テスト3: $fb が未定義のときにエラーにならない
- 受け入れ基準: 表示が「0」とならず、実際の購読者数が表示されるか、あるいは現実的なフォールバック値が表示されること
ロール別チェックリスト
開発者:
- テンプレートファイルで正しい場所にコードを追加した
- 入力値のバリデーションを行った
- キャッシュ除外を設定した
サイト運営者:
- フォールバック値を現実的に設定した
- 表示が自然かどうか確認した
- ユーザーに誤解を与えないか検討した
ロールバック手順
- 変更を行ったファイルをバックアップから復元する
- キャッシュをクリアする
- 表示が元に戻ったことを確認する
まとめ
FeedBurnerの「0 Subscribers」問題は多くのブログで見られますが、表示側に簡単なフォールバック処理を加えるだけで見栄えの問題を解消できます。より堅牢にしたい場合は、入力検証、数値化、動的フォールバック、キャッシュ設定の改善を組み合わせてください。
ご意見をください: もっとシンプルな修正や別のベストプラクティスがあれば教えてください。
著者
編集