概要
SWELL(公式サイト)を利用しているサイトで、投稿PVが急にカウントアップされなくなった場合、REST API 制限系プラグインが影響している可能性がある。
今回の事象では、Disable WP REST API を有効化した後に SWELL のPVが増えなくなり、停止すると再びカウントアップされた。
この切り分け結果から、SWELLのPV計測が未ログインユーザー向けのREST API通信に依存している可能性が高い と判断した。
なお、Disable WP REST API は公式説明でも、未ログインユーザーに対して WordPress REST API を全面的に停止する プラグインとされている。さらに WordPress の REST API ハンドブックでも、REST API を無効化すると管理機能など API 依存の機能を壊す可能性があるため、基本的には無効化を勧めていない。
発生した事象
SWELLの投稿ページを閲覧しても、PVが増えなくなった。
管理画面上では大きなエラーは見えにくいが、実際には閲覧数だけが止まるため、気づくまで少し時間がかかるタイプの不具合である。
原因
原因は、Disable WP REST API により 未ログイン状態の訪問者からの REST API アクセスが遮断されたこと と考えられる。
このプラグインは、設定不要で未ログインユーザーの REST API を止める仕様であり、公式説明でも「未ログインユーザーに REST API が必要なサイトには非推奨」とされている。
今回の環境では、
- プラグイン有効時: SWELLのPVが増えない
- プラグイン停止時: SWELLのPVが再び増える
という再現性があったため、SWELL側のPV計測処理と REST API 制限が衝突した とみてよい。
切り分け方法
同様の症状が出た場合は、以下の順で確認すると早い。
1. REST API 制限系プラグインの有無を確認する
まず、Disable WP REST API など、REST API を止めるプラグインが入っていないか確認する。
2. 該当プラグインを一時停止する
プラグインを停止したうえで、未ログイン状態で記事ページを開き、PVが増えるか確認する。
3. /wp-json/ の挙動を見る
未ログイン状態で /wp-json/ にアクセスし、エラーや制限メッセージが出る場合は、REST API が止められている可能性が高い。
4. シークレットウィンドウで再テストする
ログイン済みブラウザでは正常に見えても、未ログイン訪問者だけ影響を受けることがあるため、シークレットウィンドウで確認する。
結論
SWELLのPV機能を使う場合、REST API を未ログインユーザー向けに全面停止するプラグインは避けた方がよい。
WordPress 公式でも、REST API の無効化は API 依存機能を壊す可能性があると案内している。
今回のケースでは、Disable WP REST API の停止によって PV が再びカウントアップされたため、原因はほぼこれで確定と考えてよい。
対応策
対応策1: Disable WP REST API を使わない
もっとも確実な方法。
SWELLのPVを優先するなら、REST API 全面停止系プラグインは使わない。
対応策2: セキュリティ対策は別レイヤーで行う
REST API を止めるのではなく、ログインや管理画面側の防御を強化する。
今回の環境では、以下の構成が現実的だった。
- Xserverアカウントの2段階認証
- XserverのWAF
- SiteGuard によるログイン保護
- 強いパスワード運用
- 不要ユーザーの整理
- WordPress本体、テーマ、プラグインの更新
こうした対策は、REST API を止めずに守る方法として実務上バランスがよい。
対応策3: 重要サイトだけ2FAを追加する
多数サイトを運用している場合、全サイト一律で2FAを入れると運用負荷が高い。
そのため、会社サイトや更新頻度が高いサイトなど、重要サイトに限定して 2FA を追加するのが現実的。
補足: 見慣れない「購読者ユーザー」がいた件
今回の切り分け中、見慣れない購読者権限のユーザーが見つかったが、これは不正侵入ではなく、WP RSS Aggregator による内部ユーザーだった。
WordPress の標準権限には購読者があり、購読者は最小権限ユーザーとして扱われる。
wpra.source.author.site.1 のような名前のユーザーは、RSS取り込みプラグインが取り込み記事の著者用に自動生成することがあるため、見慣れなくても即削除しない方がよい。
再発防止のための運用ルール
今後、SWELLでPVが止まった場合は、次の順で確認する。
- REST API 制限系プラグインを入れていないか
- 未ログイン状態で PV が増えるか
/wp-json/が遮断されていないか- セキュリティ対策を REST API 停止以外で代替できないか
まとめ
今回のポイントはシンプルである。
SWELLのPVが増えなくなったら、まず REST API 制限を疑う。
特に Disable WP REST API は、未ログインユーザー向け REST API を全面停止する仕様であり、SWELLのPV計測と衝突する可能性が高い。
そのため、SWELLのPV機能を使うサイトでは、REST API の全面停止ではなく、WAF、ログイン保護、2FA、更新管理などで守る方が安全かつ実用的である。
※初動ではキャッシュ設定も疑ったが、プラグイン停止テストにより主因は Disable WP REST API と判断した
