
Elementorエディタが開かない時のREST API 403エラー解決法
“`html
Elementorエディタが読み込まれずにフリーズし、REST APIが403禁止エラーを返す場合、根本原因は「プラグインコアファイルの破損」「WordPressのサブディレクトリ構成による認証不整合」「サーバーレベルのアクセス制限」のいずれか、または複合にある。FTPやファイルマネージャーから手動でElementorを再設置し、サイト設定の見直しとパーマリンク構造のリセットを実施すれば、大半のエラーは解消する。
なぜ Elementor エディタが開かず REST API が403エラーになるのか

プラグインコアファイルの破損が引き起こす連鎖不具合
Elementorが途中でアップデートに失敗したり、サーバー上でファイルが欠損したりすると、致命的なクラス読み込みエラーが発生する。代表的なものが「Uncaught Error: Class “Elementor\Controls_Stack” not found」だ。これはElementor本体の動作に必須のファイルが物理的に存在しないか、PHPの要求に対して不完全な状態で読み込まれていることを示す。管理画面からの再インストールではサーバーキャッシュや権限の影響で上書きに失敗するケースがあるため、手動での完全初期化が必要になる。
WordPressのサブディレクトリ構成が生む認証クッキーのズレ
WordPress本体を/wordpressに配置し、サイトアドレスだけをルートドメインに設置する構成は、REST APIの認証において深刻な不具合を引き起こす。ブラウザはWordPressのログインクッキーを物理的なインストールパスに対して発行するため、サイトURLと実際のパスが異なると、APIリクエストに必要なnonceや認証クッキーが正しく送信されず「rest_not_logged_in」が返る。Elementorエディタは内部的に多数のREST API通信を行っているため、この認証エラーが編集画面そのものを動作不能にする。
サーバー設定やセキュリティプラグインがAPIをブロックしている
ModSecurityやWAF(ウェブアプリケーションファイアウォール)、あるいは.htaccessに記述された独自ルールが、/wp-json/パスへのアクセスを機械的にブロックしている場合も403エラーが発生する。また、一部のセキュリティプラグインはREST APIのエンドポイントを厳格に制限する機能を備えており、無効化したと思っていてもキャッシュ層に設定が残って影響していることがある。
エラーが発生している環境では、管理画面からの通常操作がほぼ通じない状態になっている。上のBefore/AfterのようにエディタとAPI認証を同時に復旧させるには、外部からのファイル操作とURL設定の修正が不可欠となる。
実際に環境を修復する4ステップの手順

STEP 1 FTPからElementorを手動で再設置する
管理画面の「プラグイン」から削除するだけでは、不完全なファイルが残る危険がある。FTPソフト、またはサーバーのファイルマネージャーを開き、/wp-content/plugins/elementor/ディレクトリを直接削除する。Pro版を使用している場合は/wp-content/plugins/elementor-pro/も同様に削除する。削除後、Elementorの公式サイトから最新のzipファイルをダウンロードし、同じディレクトリにアップロードして展開することで、完全に健康なコアファイルが書き戻される。これで「Controls_Stack」を含むクラスファイルの欠損は物理的に解消される。
STEP 2 パーマリンクをリセットしキャッシュを削除する
管理画面の「設定」→「パーマリンク」にアクセスし、「変更を保存」を2回クリックするだけでもREST APIのルーティング情報が再生成される。これにより、サイトの内部URL構造が強制的にリセットされる。あわせて、導入しているキャッシュプラグインの全キャッシュ削除、およびサーバー側のVarnishやNginxキャッシュが有効な場合はそれらのパージも実行する。
STEP 3 wp-config.phpでサイト構成の不整合を補正する
WordPress本体がサブディレクトリにある環境では、認証クッキーのパス指定を明示的に定義することで403エラーが劇的に改善する。ルートのwp-config.phpに以下の定数を追記する。これは「COOKIE_DOMAIN」の指定だけでなく、管理画面と公開側で異なるパスにクッキーを適応させるための指示だ。
define('COOKIEPATH', '/');
define('SITECOOKIEPATH', '/');
define('ADMIN_COOKIE_PATH', '/');
define('COOKIE_DOMAIN', '.〇〇.com'); // 自ドメインに合わせる自サイトがSSL化されている場合は、管理画面の「設定」→「一般」内の「WordPressアドレス」と「サイトアドレス」の両方がhttpsで始まっているかも再確認する。片方がhttpで残っているとREST APIのリクエストがクロスオリジン扱いされ、認証が外れる。
STEP 4 .htaccessとサーバー側の認証ブロックを解除する
WAFやModSecurityが/wp-json/へのアクセスを攻撃と誤認してブロックしている場合、サーバー管理パネルから当該ルールを一時無効化するか、ホワイトリストに追加する。レンタルサーバーの場合、管理画面の「セキュリティ」関連項目にWAFの遮断ログが記録されていることが多い。.htaccessに手動でREST APIを遮断する記述を追加した覚えがなくても、セキュリティプラグインが自動追記しているケースがあるため、以下の記述群が存在しないか確認する。
# もし以下のような記述があれば一時的に削除かコメントアウト
# RewriteRule ^wp-json - [F]致命的エラー「Class “Elementor\Controls_Stack” not found」の根本対応

このエラーは単にファイルが見つからないと言っているのではなく、「Elementorの起動シーケンスの中で呼び出されるべき抽象クラスがメモリ上に展開できない」という致命的な状態を指す。管理画面から一度プラグインを「無効化」して「再有効化」してもPHPのオートローダーが不完全なファイル索引を参照し続けるため、FTPから一度完全に削除して、再設置するSTEP 1だけが確実な解決策となる。Pro版を導入している場合、Free版のコアクラスが正しくロードされていないとPro版の処理がすべて失敗するため、必ず両方を手動で入れ直す。
サブディレクトリ環境で403を連発させない設定の定石

WordPressを/wordpressに置き、公開URLはルートにする構成は、管理画面へのアクセスパスと公開APIパスの二重構造を生む。システム内部ではadmin-ajax.phpやREST APIの呼び出し元が物理パスを参照する傾向にあるため、ここでクッキーの不一致が起きる。最も安定させる方法は、ルートにあるindex.phpが正しくサブディレクトリを指しているかを確認し、かつwp-config.phpで前述のクッキー定数を定義することだ。可能ならば、この際にWordPressをサブディレクトリからルートディレクトリへ正式に移動させることも検討する価値がある。
よくある質問
セーフモードを有効にしてもElementorエディタが開かないのはなぜか
セーフモードはテーマとElementor以外のプラグインを外して動作するが、今回の主原因は「Elementor本体ファイルの破損」と「REST APIの認証エラー」である。そのため、セーフモードでも参照するコアファイルが破損していれば画面は起動せず、API認証の障害もそのまま残り続ける。セーフモードはあくまで「他のプラグインとの競合」を疑う場合の手段であり、今回のような根本的なファイル破損には効果がない。
変更を保存したはずのパーマリンク設定が元に戻ることはあるか
サーバーの.htaccessファイルやNginxの設定ファイルが書き込み禁止になっていると、パーマリンクの更新が表層的に成功したように見えても内部的に反映されない。FTPで.htaccessのパーミッションが606や666など適切な値になっているか確認し、WordPressが自動生成するRewriteEngine On以下のブロックが存在するかも検証する必要がある。
PHPのバージョンアップが原因でElementorが動かなくなることはあるか
PHP 8.2や8.3、8.4へのアップデートで、従来は警告で済んでいたコードが致命的エラーに格上げされるケースは確かにある。しかし「Controls_Stack not found」はバージョン互換性よりもファイルの単純な欠落または不完全なアップロードが原因だ。事前にサーバーのPHPエラーログを開き、不足している具体的なファイルパスが出力されていないかを確認すると、欠落しているファイルが明確になる。
REST APIを意図的に無効化するセキュリティプラグインの代表例はあるか
WordfenceやiThemes Securityなどの包括的なセキュリティプラグインは、設定次第で未認証または全ユーザーのREST APIアクセスを制限できる。今回のケースではログイン済みの管理者でも「rest_not_logged_in」になるため、むしろクッキーやURLの不一致が強く疑われるが、検証のためにはそれらのプラグインを本当に全停止し、サーバー側のキャッシュを完全にパージする必要がある。
この記事のポイント
- 403エラーとエディタ停止はコアファイル破損と認証不整合の複合症状である
- 管理画面ではなくFTPから手動でフォルダを削除し再設置する
- サブディレクトリ環境では必ずCookie定数を明示的に定義する
- パーマリンクの再保存と全キャッシュの削除をセットで実行する
- WAFや.htaccessがREST APIをブロックしていないか確認する

・ Reddit、Stack Overflow、WordPress.org フォーラムを日々巡回し、現場の悩みを拾い上げて記事化
・ WordPress、WooCommerce、Next.js などモダンWeb制作領域のトラブルシューティングが専門
・ 「検索しても答えが見つからなかった」を一つでも減らすことが目標
・ エラーメッセージから根本原因にたどり着く粘り強い調査が得意
・ 初心者がつまずきやすい箇所を先回りで解決する記事作りを心がけている

WordPressのキーが長すぎるエラーをMariaDB 11.4で修正する方法
「指定されたキーが長すぎます。最大キー長は 1000 バイトです」というエラーが WordPress サイトのデータベースで発生した場合、対象となるテーブルの複合インデックス定義で長すぎるカラムのプレフィックス長を制限すれば解決する。これはデータベースの照合順序と文字コードの関係で、インデックスが許容バイト数を超過することが直接の原因だ。
「キーが長すぎる」エラーが発生する根本原因

このエラーは特定のデータベーステーブルに複合インデックスを作成しようとした際に、インデックスに含まれるカラムの合計バイト数がデータベースの上限を超えたために発生する。MariaDB や MySQL では、InnoDB ストレージエンジンの行フォーマットとサーバー設定によってキー長の上限が決まる。具体的には ROW_FORMAT が COMPACT または REDUNDANT のテーブルでは最大 767 バイトまでしか許容されず、DYNAMIC や COMPRESSED の場合でも実質的に 3072 バイトが上限となる。
今回のようなエラーが顕在化しやすいのは、データベースを MariaDB の最新バージョン(11.4 系など)に移行したタイミングだ。デフォルトの文字コードが utf8mb4 に設定されている環境で、VARCHAR 型のカラムをインデックスに含めると、1 文字が最大 4 バイトとして計算されるため、たとえば VARCHAR(255) のカラムが含まれているだけで、そのカラムだけで 1020 バイトを消費する計算になる。
プラグインが独自に追加した CHANGE_LOG テーブルでは、object_type、object_id、created_at という 3 つのカラムで複合インデックスを作ろうとしている。object_id は外部キーや参照用に VARCHAR で定義されていることが多く、これが長いままだとバイト数制限に引っかかる。解決の本質は、インデックスで実際に使用する範囲を object_id カラムの先頭部分だけに限定することにある。
エラーを特定するための確認手順

実際のエラーメッセージをログから確認する
データベースエラーの内容を正確に把握するために、まずは WordPress のデバッグログを有効化する。wp-config.php に以下の定数を追加する。
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );エラーを再現させたあと、/wp-content/debug.log を確認すると「Specified key was too long; max key length is 1000 bytes」というエラーが記録されているはずだ。このエラーには対象のテーブル名や、キーを作成しようとした SQL 文も含まれている。
テーブルのインデックス定義を直接調べる
データベース管理ツール(phpMyAdmin など)で CHANGE_LOG テーブルの構造を開き、「インデックス」タブを確認する。object_lookup という名前の複合インデックスが存在し、そこに object_id カラムがフルサイズで含まれていれば、これがエラーの原因だと特定できる。
SQL コマンドに慣れているなら、以下のクエリでインデックス情報を取得してもよい。
SHOW INDEX FROM wp_change_log;文字コードとバイト数の関係を理解する
utf8mb4 は 1 文字を最大 4 バイトで表現するため、VARCHAR(255) として定義されたカラムは、インデックス上で最大 1020 バイトを占める。複合インデックスでは、含まれる全カラムの最大バイト数の合計が制限値となる。VARCHAR(100) なら最大 400 バイト、VARCHAR(50) なら 200 バイトと計算していき、上限(1000 バイトや 767 バイト)を超えていないかを確認する。この計算を怠ると、一見問題ない定義に見えても実行時にエラーとなる。
複合インデックスを修正する具体的な手順

修正の基本方針は object_lookup インデックスから既存の定義を削除し、object_id カラムのプレフィックス長を制限した新しいインデックスを作り直すことにある。これによりバイト数制限を回避しながら、インデックスの機能自体は維持できる。
このデモは object_id にプレフィックス長を設定する前後のインデックス定義の違いを表している。修正後はバイト数制限に収まるため、エラーが解消される。
phpMyAdmin で安全にインデックスを変更する
データベースの直接操作に不慣れな場合、phpMyAdmin を使うとミスが少ない。該当テーブルを開き、「構造」タブから「インデックス」セクションに移動する。object_lookup インデックスを選択して削除し、新たに「インデックスを作成」から複合インデックスを追加する。
カラムを選択する際、object_type と created_at はそのまま指定し、object_id だけ「サイズ」欄に 100 と入力する。これで object_id(100) としてインデックスが作成される。
SQL コマンドで直接修正する場合
コマンドラインや SQL タブから実行するなら、以下の 2 文を順に実行する。DROP で既存のインデックスを削除し、ADD で新しいインデックスを作成する。
ALTER TABLE wp_change_log DROP INDEX object_lookup;
ALTER TABLE wp_change_log ADD INDEX object_lookup (object_type, object_id(100), created_at);実行前に必ずデータベースのバックアップを取得すること。誤った ALTER TABLE はテーブル構造を壊す可能性がある。
プラグインのアップデートで上書きされないようにする
このインデックスはプラグインが管理するスキーマファイル(class-change-log-schema.php)で定義されているため、プラグインがアップデートされると修正が上書きされてしまう可能性が高い。恒久的な対策としては、プラグインのアクティベーションフックやスキーマ更新処理にフックし、独自のインデックス定義を適用するコードを子テーマの functions.php かカスタムプラグインに記述する方法が有効だ。
データベースのバージョンや設定に依存する問題のため、サーバー環境を変更しない限りこの修正は必須となる。プラグイン開発者が将来的に修正を加えるまでは、自前のフックで対応しておくと安全だ。
よくある質問
このエラーは MariaDB 11.4 だけで発生するのか
MariaDB 11.4 に限らず、キー長制限が厳格に適用される環境ならば発生する可能性がある。古い MySQL 5.6 以前の設定や、InnoDB の ROW_FORMAT が COMPACT のテーブルでも同様のエラーが起こる。
object_id(100) のようにプレフィックスを制限しても検索性能は落ちないのか
先頭 100 文字までをインデックス化するため、100 文字を超える部分での検索精度は低下する可能性がある。ただ、object_id のような識別子は冒頭部分で十分に一意性が確保されることが多く、実際のクエリ性能に大きな影響は出ない。
エラーが WordPress 本体のテーブルで出た場合はどうすればよいか
WordPress コアのテーブルでこのエラーが発生することは稀だ。通常はプラグインやテーマが独自に追加したカスタムテーブルで起こる。もしコアテーブルで起こった場合は、データベースの文字コードや ROW_FORMAT の設定自体を見直す必要がある。
SQL の直接実行が不安なときの代替手段はあるか
WP-CLI(WordPress のコマンドライン管理ツール)が利用できるなら、「wp db query」コマンドで安全にクエリを実行できる。また、データベースの移行や最適化を支援するプラグイン(WP Migrate など)にも SQL 実行機能が備わっているものがある。
この記事のポイント
- インデックスに含まれるカラムの合計バイト数がデータベースの上限を超えるとキー長エラーが発生する
- utf8mb4 環境では VARCHAR 型のカラムが 1 文字最大 4 バイトを消費する点に注意が必要
- object_id(100) のようにカラムのプレフィックス長を指定してインデックスを再作成することでエラーを回避できる
- プラグインのアップデートで修正が上書きされるため、恒久的な対処にはフックを用いたコード管理が推奨される

・ Reddit、Stack Overflow、WordPress.org フォーラムを日々巡回し、現場の悩みを拾い上げて記事化
・ WordPress、WooCommerce、Next.js などモダンWeb制作領域のトラブルシューティングが専門
・ 「検索しても答えが見つからなかった」を一つでも減らすことが目標
・ エラーメッセージから根本原因にたどり着く粘り強い調査が得意
・ 初心者がつまずきやすい箇所を先回りで解決する記事作りを心がけている
