WordPress サイトのサイドバーに最近人気の急上昇中の記事をリストしたい場合は、WP Popular Posts(WPP)などのプラグインを使用できます。このプラグインは、訪問者が最も閲覧したりコメントした投稿を抽出し、ウィジェット、ブロック、またはショートコードとして表示するプラグインです。単純な視聴回数だけでなく、特定の期間(最近24時間、7日、30日など)に基づいてデータを並べ替えることができ、サイトの最新トレンドを読者に表示するように最適化されています。
ただし、強力な機能を提供するWPPプラグインをサイト規模に収まらないように設定すると、訪問者のルックアップデータをリアルタイムで記録する過程でデータベース(DB)に大きな書き込みが発生し、サイトのパフォーマンスに悪影響を及ぼす可能性があります。初期設定のまま使用すると、トラフィックが増加するにつれて重いクエリが原因でサイトの初期応答速度(TTFB)が急激に遅くなる原因にもなります。この記事では、私のウェブサイトの毎日の訪問者数(トラフィック)規模に合わせてサーバーのパフォーマンスの低下を最小限に抑え、プラグインを100%快適に活用できる最適化設定方法について説明します。
WP Popular Posts (WPP) プラグイン
WP Popular Postsは、ヒット数やコメント数に基づいて人気のある投稿を一覧表示する無料です WordPress プラグインです。このプラグインは現在10万を超えるサイトにインストールされ、使用されており、活発に更新されています。

利点
- 強力なカスタマイズ機能: ポストだけでなく、ページやカスタムポストタイプ(Custom Post Type)もサポートしており、サムネイルの表示可否、文字数の制限など、視覚的なカスタムが非常に自由です。 (カスタムHTMLマークアップもサポートしています。)
- キャッシュプラグイン互換: AJAXを介したロード機能をサポートし、ページキャッシュ(Breeze、WP Rocketなど)が適用された環境でもリストが過去の時点で停止せずリアルタイムで更新されます。
- さまざまな挿入方法: 最新 WordPressのブロックエディタウィジェットはもちろん、古いテーマのための[wpp]ショートコードとPHPテンプレートタグの両方をサポートします。
- きめ細かいパフォーマンス制御オプション: データベースの負荷を軽減するために、データサンプリング(Data Sampling)およびデータキャッシュ(Data Caching)機能を独自に組み込んでいます。
欠点
- 初期設定の進入障壁: パフォーマンスを最適化するためのツール設定は、初心者にとってはやや複雑に感じることがあり、キャッシュプラグインのJS Minify設定と競合することがよくあります(キャッシュプラグインで例外処理が必要です)。
- データベースの非対話性: デフォルト設定のまま使用すると、訪問者のすべてのルックアップ履歴がDBに蓄積され、テーブル容量が過度に増え、クエリ速度(TTFB)が遅くなる可能性があります。
WP Popular Postsプラグインのインストールと使用方法
WPPプラグインは、インストールして有効にした後、サイドバーウィジェットやページなどにブロックとして追加したり、ショートコードで表示したりできます。
1 WordPress 管理者ページの プラグイン » プラグインの追加に移動し、 wp popular postsで検索してプラグインをインストールして有効にします。

2 人気のある投稿をサイドバーに表示したい場合は、シェイプ»ウィジェットをクリックして、目的のウィジェット領域(右サイドバーなど)にブロックとして追加できます。ブロックを追加(+記号)アイコンをタップして 人気のありますで検索して WP Popular Posts ブロックを選択します。

3 WPPブロックが追加されたら、オプションを設定します。タイトル、表示する投稿数の制限、ポストソート方法、時間範囲、サムネイルの表示、サムネイルのサイズ、視聴回数の表示など、さまざまなオプションがあります。

ソート方法は、総視聴回数(Total views)、1日平均視聴回数(Avg. daily views)、コメント数(Comments)から選択できます。

Posts settings와 Stat Tag settingsで表示する項目を指定できます。

サムネイルの場合は、サイズを手動で設定するか、事前定義されたサムネイルサイズから選択できます。手動で設定する場合は、サムネイルをシャープに表示するために2倍のサイズで指定し、CSSに調整することも検討できます。これにより、より鮮明なサムネイルが表示されますが、それだけ画像サイズが増加します。
カスタムHTMLマークアップを有効にしてHTMLマークアップを入力することもできます。日付を表示すると、「投稿された」フレーズが表示されることがあります。この機能を使用すると、「posted on」などのテキストを削除したり、別のフレーズで表示したりできます。

4 設定 » WP Popular Postsに移動してプラグインを設定できます。上の Tools(ツール) タブでサムネイルとデータを詳細に設定できます。

設定が完了したら、閲覧回数が記録され、視聴回数に応じて人気の投稿リストがサイドバーなどに表示されます。人気の投稿デザインはCSSでカスタマイズできます。

トラフィック規模による最適な設定戦略
WPP を使用する場合は、サーバーの負荷を防ぐためにデータベースを管理することが重要です。サイトの毎日のページビュー数(Pageviews)に基づいて 設定 » WP Popular Posts » Tools タブで以下の設定戦略を適用してみてください。
1. 小規模ブログ(1日閲覧数1,000~5,000回未満)
訪問者数があまりなく、トラフィックが少ない初期段階では、DB負荷より 正確な統計収集に焦点を当てることができます。

- データサンプリング: Disabled (無効化)
- 視聴回数が少ないときにサンプリングをオンにすると、統計が欠落して人気の高いランキングが数日間変わらないか歪むことがあります。すべての訪問を記録するように設定します。
- データキャッシュ: Enable caching (キャッシュサイクル 60分 推奨)
- サーバー操作を減らすために、プラグイン自体のキャッシュをオンにし、更新サイクルを十分にキャッチします。
- Log Limit: 30日間で稼働開始できました
- データが1ヶ月以上無限に積み重ねられないように、30日保存後に自動削除されるようにします。
キャッシングサイクルを長くすると、人気のある投稿のランキングが設定された時間に変わりません。リアルタイムでランキングを表示する必要がない場合は、長く設定することがサイトの速度の面で有利です。
ちなみに上記の図では Display views column for these post typesについて 役職와 ページをチェックすると、その投稿とページのヒット数が投稿/ページリストページに表示されます。

2. 中規模のブログ(1日閲覧数10,000~50,000回)
トラフィックが上昇してDB書き込み操作が頻繁になるタイミングです。 性能と精度の妥協が必要です。
- データサンプリング: Enabled / Sample Rate: 10〜50
- 10~50回の照会ごとに1回だけDBに記録し、残りは推定して表示します。サーバーの負荷を大幅に軽減しながら、誤差を最小限に抑えるバランスのとれた設定です。
- データキャッシュ: Enable caching (キャッシュサイクル 10~30分 推奨)
- Log Limit: 14日〜30日
- トレンドの変化率に合わせて保存期間を少し短くするのも良い選択かもしれません。
3. 大型ブログ/コミュニティ(1日視聴数100,000回以上)
視聴回数が爆発的に発生する大規模サイトでは データベースの軽量化とサーバー防御が1ランクです。
- データサンプリング: Enabled/ Sample Rate: 100 以上
- 100に設定すると、100回の照会ごとに1回だけ記録されます。膨大なトラフィックが注がれても、DBテーブルが肥大化したり、クエリ遅延が発生したりするのを防ぎます。全パラメータが大きいため、100単位でサンプリングしても統計の精度はかなり高くなります。
- データキャッシュ: Enable caching (キャッシュサイクル 10分 推奨)。リアルタイムで急速に人気のある記事の傾向を表示する必要がない場合は、キャッシュサイクルを増やすことを検討してください。
- Log Limit: 7日間で稼働開始できました
- 古いダミーデータを大胆に廃棄し、徹底的に最近1週間のホットイシュー中心に、軽くてすばやくリストを生成します。
データサンプリング(データサンプリング、データサンプル抽出)とは何ですか?
データサンプリングは、訪問者がページを開くたびに発生するすべてのヒットをデータベース(DB)に毎日記録するのではなく、設定した割合(サンプル)だけを抽出して記録してから、統計全体を推定する機能です。
たとえば、サンプリング値を「10」に設定すると、10回の訪問のうち9回はスキップされ、1回だけDBにアクセスして記録されます。代わりに、画面にヒット数を出力するときは、記録された値に10を掛けて実際のヒット数とほぼ同様に補正します。その結果、ヒットエラーは最小限に抑えながら、サーバーのデータベース書き込み負荷を10分の1に減らす非常にインテリジェントな最適化技術です。
これは統計学的原理に基づいており、 統計庁で全国民の世論を知るために5千万人をすべて調査(全数調査)する代わりに、一部(例:1千人)だけをランダムに選んで(標本抽出)全体の意見(母集団)を推定するのとまったく同じ原理といえます。
トラフィック規模に応じた最適設定戦略
この機能は、ウェブサイトの1日のトラフィック規模に応じて柔軟に設定することを検討できます。
- 小規模ブログ(1日の視聴数数千件未満): サンプル抽出機能を無効にすることをお勧めします。総訪問者数が少ないときにサンプル抽出を行うと、運によっては視聴回数が欠落したり過大計上されるなど統計の誤差が著しく大きくなります。この区間ではサーバーの負荷が軽減されるため、100%記録して精度を上げることが有利です。ただし、サーバーの負荷を少し減らしたい場合は、有効にして適切な値(2〜10の間など)を設定することも1つの方法です。
- 中規模ブログ(1日の視聴回数1万〜5万件): サンプリング値 10〜50 間に設定してパフォーマンスと精度のバランスを取ることをお勧めします。統計の誤差を減らしながらも、DBにかかる負担を著しく軽減できます。
- 大型ブログ(1日の視聴回数10万件以上): 無条件サンプリング値 100以上で大胆に高くなければなりません。膨大なトラフィックが流れる環境では、視聴回数の微妙な精度よりもサーバーがダウンしないように防御することが最優先事項です。パラメータ自体が大きいため、100単位でサンプリングしても統計的誤差は大きくなく、データベースの肥大化や速度低下をブロックできます。
キャッシュサイクルの設定
リアルタイムで人気のある記事を表示する必要がある場合は、キャッシュサイクルの設定を短くすることをお勧めします。ただし、リアルタイムで表示する必要がない場合は、キャッシュサイクルを増やすことが望ましい場合があります。
1. 重い演算(Query)回数の劇的な減少 大規模なサイトでは、WP Popular Postsがヒットを記録するDBテーブルのサイズがかなり大きくなります。この巨大なデータの中で、「どんな投稿が最も人気があるのか」を選ぶ作業(SELECTとソートクエリ)は、サーバーの立場でかなり難しい労働です。
- 10分周期の場合: この重い仕事を一日に 144回 する必要があります。
- 60分(1時間)周期の場合: 1日あたり 24回実行するだけです。
- 結果: データベースの息吹がしっかりしており、サイト全体のレンダリング速度と安定性が大きく上がります。
2. コンテンツの性質に応じた柔軟な妥協 サイトで扱う主題が「リアルタイム速報」や「今日のユーモア」などの軽いゴシップ街ではなく、専門知識やITチュートリアルなど寿命の長いコンテンツ(Evergreen Content)なら人気投稿ランキングは一日中急変しません。このような場合、訪問者は1時間前の順位と今の順位が同じであっても不満はありません。
推奨されるキャッシュサイクル設定値
大規模なサイトでリアルタイム性がそれほど重要でない場合は、次のようにサイクルを大幅に増やすことをお勧めします。
- ニュース、コミュニティの性格が少し混ざった大きなブログ: 30分~60分
- 一般的な情報性、専門性中心の大型ブログ: 2時間~6時間(120~360分)
- 視聴回数の変動が少ないアーカイブ型サイト: 12時間~24時間
キャッシュプラグインでキャッシュ例外を設定する
私 クラウドウェイズでホストされている WordPressでBreezeプラグインのため、WWPプラグインから出力される人気のグレストが表示されないという問題が現れました。
キャッシュプラグインが原因でWWPプラグイン機能が正しく機能しない場合は、wpp.min.jsファイルに対してキャッシュ例外を設定すると問題が解決します。
次のJSファイルに対してキャッシュ除外設定を行うことができます。
wpp.min.js
パスまで指定する必要がある場合は、以下のように設定してください。
/wp-content/plugins/wordpress-popular-posts/assets/js/wpp.min.js
上記のように設定しても解決できない場合は、サイトのドメインアドレスを含む完全なURLを入力してください。
https//example.com/wp-content/plugins/wordpress-popular-posts/assets/js/wpp.min.js
Breezeキャッシュプラグインを使用している場合は、完全なURLを入力してください。 設定 » Breeze » File Optimization » Exclude JS セクションに上記のURLを入力します。 JSファイルのキャッシュ例外要求方法は、キャッシュプラグインによって少しずつ異なります。

コメントを残す