これは「エックスサーバーXServer Advent Calendar 2025」の15日目の記事です。
はじめに
筆者は個人開発で主に Netlify や Vercel など海外ホスティングサービスを利用していますが、所属企業では9割近くがエックスサーバーにホスティングしていて本年も大変お世話になりました。
エックスサーバーは、サーバーパネルの使いやすさやサポート対応の速さ・的確な理解力、丁寧さをはじめ、Q&Aページの充実、適切なメール通知などユーザーに優しいサービスだと感謝しております。
ゴマすりはここら辺にしておき、 本記事では筆者がNext.js(v16) × WordPress(ヘッドレスCMS)という開発において海外からの閲覧時でのみREST APIからデータが取得できないというケースに遭遇し、時間をかけて大規模リファクタリングまでしたくせに実はすごくシンプルな解決方法だった、という恥ずべき事案を書いていきたいと思います。
先に結論
WordPressサイトをホスティングしている、エックスサーバーの設定で「国外IPからのREST APIへのアクセス制限設定」していたため。
以下手順で制限をOFFにすることで無事にデータフェッチできるようになりました。
- WordPressセキュリティ設定項目 に移動
- 国外アクセス制限設定 -> REST API アクセス制限 ->
OFFにするを選択 - 下部にある
設定するを押下で変更完了
海外ユーザーからの「サイト閲覧できないよ、海外アクセスブロックされてるんじゃ?」という連絡
今回の一件、開発時には何の問題もなく(※理由は先述通り)、本番環境でも日本国内では何の問題もなかったのです。
そのため、事前に発見するのは困難でした。ある日、広報担当から「海外ユーザーの人たちが『サイト閲覧できないよ、海外アクセスブロックされてるんじゃ?』とか何とかリプしあってる」という報告を受けました。
海外からの閲覧状況ってどうやって確認するん?と思ったのですが、さすがインターネット。便利なツールがあるものです。
上記サイトに調べたいURLを入力するとサイトのパフォーマンスチェックを行ってくれます。
このチェックの中に各種ファイルをはじめ、エンドポイントのステータスチェックも含まれています。
「特に.htaccessとかも触ってないし、ブロックされてるとかは無いと思うけどなぁ」と見たところデータフェッチ用のエンドポイントが403と表示されて真っ赤になってました。
エンドポイントが403の原因を究明する旅
はじめに.htaccessを確認しに行きましたが特に変わったところはありませんでした。
当時「エックスサーバーでの設定が原因」なんて露にも思わず、functions.phpやデータフェッチ方法の記述または設定ミス?と踏んだ筆者は時間と精神を浪費。
次に、プロジェクト全体の設計やコード記述を怪しみ出して、自問自答の結果、自分の設計・コードが間違っているに違いないと判断しました。
そうしてfunctions.phpでの記述調整をはじめ、データフェッチ方法も専用ライブラリ(useSWR)を導入してリファクタリング。
もちろん各種コンポーネントやロジックも適宜変更・改修するなど、結果として大規模なリファクタリングへと発展しました。
そうして1ヶ月ほどかけたリファクタリング後に先ほどのページで確認。
──すると、データフェッチ用のエンドポイントが403と表示されて真っ赤になっているではないですか。
ここで初めて「もしかして、無いとは思うけど、データフェッチもとのサーバーに原因が?」と真相に近づきます。
そしてこの後、エックスサーバーのサーバーパネルから「国外アクセス制限設定、REST API アクセス制限」の設定ページを見た時は、安堵と悔しさ、切なさが入り混じった複雑な心境になりました。
設定をオフにして、エンドポイントが200の緑色になったことを確認して(無駄に長くなった)旅を終えました。
さいごに
WordPressのみならず昨今のフロントエンド開発ではヘッドレスCMSを利用するケースは少なくないと思います。
国内向けのサイトやサービスの場合はそこまで意識する必要がないかもしれませんが、筆者のケースのように海外ユーザーからアクセスが考慮される場合は(エックスサーバーのみならず利用しているホスティングサービスの)サーバー設定でAPIへの国外アクセス制限がかかっていないかを確認された方が無難かと思います。
本記事が、かつての筆者のように長い旅に出た(または出ようとしている)方のマイルストーンに少しでもなれましたら幸甚です。
ここまで読んでいただき、ありがとうございました。
