SWELLのブロックエディタで「関連記事」ブロックに自サイトのURLを貼り付けたとたん、429エラー(Too Many Requests)が表示されて困っていませんか?
このエラー、実は多くのSWELLユーザーが遭遇するトラブルです。
しかも「10回貼り付けると8回は出る、たまに出ない」という不安定な挙動が特徴で、
原因の特定が難しいと感じる方も多いでしょう。
結論から言うと、SWELLが自サイトのURLに対してHTTPリクエスト(wp_remote_get)を送ってしまい、サーバーのレート制限に引っかかることが原因です。
本記事では、技術的な背景を丁寧に解説した上で、
Get.phpを1か所修正するだけで完全に解決できる方法をご紹介します。
目次
429エラーとは何か?SWELLで発生するケースを確認する
429エラー(Too Many Requests)とは、短時間に過剰なリクエストがサーバーに届いた際にサーバー側が「リクエストが多すぎます」と拒否するHTTPステータスコードです。
通常は外部からの過剰アクセスに対して発生しますが、SWELLの関連記事ブロックでは少し特殊な状況で発生します。
SWELLで429エラーが出る具体的な状況
- ブロックエディタで「関連記事(post-link)」ブロックを使用している
- 自サイト(自分のWordPressサイト)のURLをブロックに貼り付ける
- URLを貼り付けた直後にリアルタイムで429エラーが表示される
- 外部サイトのURLでは発生しない
- 毎回ではなく10回に8回程度の頻度で発生する
外部URLでは問題ないのに自サイトURLだけで発生する、という点がこのバグの大きな特徴です。これがヒントになります。
毎回ではなく「たまに出る」理由
10回に8回という不安定な発生頻度の理由は、
サーバーの負荷状況によってレート制限の閾値が変動するためです。
サーバーが空いているタイミングでは許容されることもありますが、負荷が高い時間帯や連続してリクエストが届いた場合に制限が発動します。そのため「たまに出る・たまに出ない」という挙動になります。
429エラーの根本原因:SWELLの自己リクエスト問題
このエラーの根本原因は、SWELLが関連記事ブロックで外部サイトと同じ処理を自サイトURLにも適用してしまっている点にあります。
SWELLの関連記事ブロックが行う処理の流れ
SWELLの関連記事ブロックにURLを貼り付けると、ブログカード(OGP情報を使ったリッチなリンク)を表示するために以下の処理が行われます。
- ブロックエディタがREST API経由でPHPを呼び出す
get_external_blog_card()関数が実行されるGet_OGP_InWP::get()が呼ばれる- wp_remote_get() で対象URLにHTTPリクエストを送信する
- 取得したOGP情報(タイトル・サムネイル・説明文)でブログカードを生成する
外部サイトのURLであれば、ステップ4で外部サーバーにリクエストが飛ぶため問題ありません。
しかし自サイトのURLを貼り付けると、自分自身のWordPressが自分自身にHTTPリクエストを送る「ループバックリクエスト」が発生します。これがサーバーのレート制限に引っかかって429エラーとなります。
is_wp_request()では防げない理由
SWELLのソースコードを確認すると、is_wp_request() という自己リクエスト回避処理がすでに実装されています。
しかしこの関数は「受け取るリクエストのUser-Agentを見るだけ」の処理であり、送信先が自サイトかどうかの判定はしていません。そのため、自サイトURLへのリクエスト送信を防ぐことができていません。
WordPressが自分自身のURLに対してHTTPリクエストを送ることを「ループバックリクエスト」と呼びます。cronの処理やプラグインの更新チェックなどで意図的に使われることもありますが、過剰に発生するとサーバー負荷の増大やレート制限の原因となります。
429エラーの修正方法:Get.phpを1か所修正する
修正方法は明快です。自サイトのURLが渡されたときは、外部リクエストを送らずに内部処理(WordPressのデータベース参照)で処理するよう振り分けるコードを1か所追加するだけです。
修正対象ファイルの場所
SWELLテーマフォルダ内の以下のファイルを修正します。
classes/Utility/Get.php
修正内容:追加するコード
get_external_blog_card() 関数の冒頭(変数定義の前)に以下のコードを追加します。
/**
* 外部サイトのブログカード
*/
public static function get_external_blog_card( $url, $card_args = [] ) {
// 自サイトのURLが渡された場合は内部処理に転送(wp_remote_get による自己リクエストを回避)
$home_url = untrailingslashit( home_url() );
if ( 0 === strpos( rtrim( $url, '/' ), $home_url ) ) {
$post_id = url_to_postid( $url );
if ( $post_id ) {
return self::get_internal_blog_card_v2( [
'link_id' => $post_id,
'kind' => 'post-type',
'type' => get_post_type( $post_id ) ?: 'post',
'card_args' => $card_args,
] );
}
}
$card_data = '';
$cache_key = '';
// ...(以下は既存のコードのまま)修正コードの処理内容(解説)
追加したコードは以下の3ステップで動作します。
- URLが自サイトか判定する:
home_url()と比較して、自サイトのURLかどうかを確認する - 投稿IDを取得する:
url_to_postid()でURLから投稿IDを取得する(データベース参照のみ、HTTP通信なし) - 内部処理に転送する:
get_internal_blog_card_v2()で処理することでwp_remote_get()を完全に回避する
- 自サイトURLを貼り付けても429エラーが発生しなくなる
- 外部サイトURLのブログカードはこれまで通り正常に動作する
- 内部URLの処理速度が上がる(HTTP通信が不要になるため)
- サーバーへの無駄なループバックリクエストがなくなりサーバー負荷が下がる
修正後の動作確認:正常に動いているか確認する手順
Get.phpを修正してサーバーにアップロードしたら、以下の手順で動作確認を行ってください。
- WordPressの管理画面から任意の投稿を新規作成または編集画面を開く
- 「関連記事(post-link)」ブロックを挿入する
- 自サイトの記事URLをブロックに貼り付ける
- 429エラーが表示されずにブログカードが正常に表示されれば修正成功
- 外部サイトのURLも貼り付けて、こちらも正常に表示されることを確認する
カテゴリーページやタグページのURL(例:https://example.com/category/wordpress/)は、url_to_postid() が投稿IDとして0を返すため、修正後も従来の外部処理(OGP取得)にフォールバックします。カテゴリー・タグページのURLで429が出る場合は別途対応が必要です。
SWELLアップデート後の注意点と対策
今回の修正はSWELLテーマのコアファイル(classes/Utility/Get.php)を直接編集するため、SWELLがアップデートされると修正が上書きされて元に戻る可能性があります。
アップデート後に修正が消えた場合の対処法
- SWELLをアップデートした後、関連記事ブロックで再度429エラーが発生していないか確認する
- エラーが再発した場合は、本記事の修正内容を再度
Get.phpに適用する - 修正内容をテキストファイルで手元に保存しておくと作業が楽になる
根本的な解決策:子テーマでオーバーライドする方法
アップデートのたびに修正を再適用する手間を省きたい場合は、SWELLの子テーマでフック(フィルター)を使って処理をオーバーライドする方法が理想的です。ただし実装には深いSWELL知識が必要なため、今回はコアファイルの直接修正を推奨します。
SWELLの429エラー よくある質問
外部URLの場合はリクエストが外部サーバーに飛ぶため、自分のサーバーのレート制限には引っかかりません。429エラーが発生するのは、自サイトURLへのループバックリクエストが自分のサーバーのレート制限に達した場合のみです。
SWELLのバージョンによってGet.phpの行番号や周辺コードが若干異なる場合があります。get_external_blog_card() 関数の先頭($card_data = '';の直前)に追加するという位置は共通です。関数名で検索して探してください。
関係あります。WordfenceなどのセキュリティプラグインはWAF(Webアプリケーションファイアウォール)機能でループバックリクエストをより厳しく制限する場合があります。セキュリティプラグインを導入後に429エラーが増えた場合は、本記事の修正を適用することで解決できます。
変わりません。修正後も内部URLのブログカードは正常に表示されます。ただし、表示方法が「OGP取得」から「WordPressの内部データ参照」に変わるため、アイキャッチ画像・記事タイトル・抜粋がWordPressのデータをもとに表示されます。これはより正確な情報が表示されるメリットもあります。
SWELLの429エラー 修正方法まとめ
SWELLの関連記事ブロックで429エラーが発生する原因と修正方法についてまとめました。
- 原因はSWELLが自サイトURLに対して
wp_remote_get()を実行するループバックリクエスト - 外部URLでは発生せず、自サイトURLのみで発生するのが特徴
- 修正は
classes/Utility/Get.phpのget_external_blog_card()関数冒頭に内部URL判定処理を追加するだけ - 修正後は自サイトURLで
wp_remote_get()が発生しなくなり、429エラーが解消される - SWELLアップデート時に修正が上書きされる可能性があるため、修正内容を手元に保存しておくこと
今回の修正はファイル1か所・追加コード15行程度とシンプルですが、効果は確実です。WordPressのテーマカスタマイズに不安がある方や、修正後も別のエラーが出る場合は、お気軽にご相談ください。
WordPressのエラー・トラブルが自分で直せない時は

ワードプレスのWordPressエラートラブル解決をしたいなら
クイックレスキューが解決します。
・WordPressが真っ白画面
・WordPressがログインできない
・ホームページのマルウェアや乗っ取り
・サイトの表示くずれ
・エラーが表示されている
これらでお悩みなら最短30分ですぐに解決します!
いまなら期間限定で
・万一改善されない場合は全額返金保証で安心!
・30日間動作保証で安心!
・初期費・調査料 0円で安心!





