本文へ移動
サイト改善

WordPressは作り直さずに守れる?自分のサイトを静的化して検証してみた

WordPressのページをHTMLに書き出す「静的化」を、SOLEIAのサイトで試しました。今回の条件では見た目は変わらず、書き出したサイトからはログイン画面などの入口がなくなりました。ただし、お問い合わせフォームは動かなくなりました。

前回の記事では、公開して2か月ほどのSOLEIAのサイトにも、30日間で約9,500回、ログイン画面や設定ファイルを探すアクセスが来ていたことを紹介しました。

では、どうすれば守れるのか。WordPressをやめて、別の仕組みで作り直すしかないのでしょうか。

作り直さずに守る方法の一つに、「静的化」があります。WordPressで作ったページをHTMLに書き出して、公開するサーバーにはHTMLや画像など、表示に必要なファイルだけを置く、という方法です。実際にSOLEIAのサイトで試してみました。

結果は、今回の条件では見た目はまったく変わらず、書き出したサイトからはWordPressのログイン画面などの入口がなくなりました。ただし、お問い合わせフォームは動かなくなりました。良かったことと困ったこと、その両方をまとめます。

静的化は「見せる家」と「つくる家」を分けること

ふつうのWordPressのサイトは、見に来た人が読むページと、記事を書くための管理画面が、同じサーバーの上にあります。家にたとえると、お客様を迎える玄関と、家の人だけが使う裏口が、同じ建物についている状態です。裏口の場所は外から見えるので、鍵が合うかどうか、毎日のように試されます。

静的化では、この2つを分けます。

静的化の仕組み。記事を書く更新用のWordPress(つくる家)は外から入れない場所に置き、書き出したページだけを公開サーバー(見せる家)に届ける。公開サーバーにはログイン画面もPHPもないので、見に来た人はいつもどおり読めて、入口を探すアクセスにはログイン画面が見つからない。
  • 見せる家(公開サーバー):出来上がったページ(HTMLや画像など)だけを置く。ログイン画面も、サーバーの上で動くプログラム(PHP)もない
  • つくる家(更新用のWordPress):いつもどおり記事を書く場所。外から入れない場所に置く
  • 記事を直したら、つくる家で書き出して、見せる家に届ける

ドアに鍵をかけて守るのではなく、見せる家からドアそのものをなくす、という考え方です。最近は、この「つくる家」を預かって手入れまでしてくれるサービスも出てきています。

試した条件と、わかったこと

試したのは、手元のパソコンに作ってあるSOLEIAのサイトのコピーです。本番のサイトより少し古い状態で、本番では静的化していません。

  • WordPress 7.1、テーマはArkhe、プラグインはセキュリティ用のCloudSecure WP Securityと、お問い合わせフォームのContact Form 7
  • ページの書き出しには、無料のプラグイン「Simply Static」を使いました
  • 書き出したファイルは、WordPressもPHPも動かない簡易的なサーバーで表示して確かめました。インターネットに公開して試したわけではありません

わかったことを先にまとめると、次のとおりです。

確かめたこと 結果
見た目 8ページをPCとスマホで画像で比べて、違いはなかった
WordPressへの入口 ログイン画面・管理画面などが、すべて「見つからない」になった
お問い合わせフォーム 「送信中」のまま止まり、何も届かなかった
更新の手間 直してから書き出しが終わるまで67秒(公開サーバーへ上げる時間は別)。手順は3つに増えた

なお、今回は表示の速さは測っていません。静的化すれば必ず速くなるわけではなく、速さは画像やフォント、計測用のタグなどにも左右されます。以前の速さの検証でも、遅さの主な原因は仕組みより計測用のタグやフォントでした。静的化の目的は、速さよりも安全のほうにあると考えています。

見た目は、1ピクセルも変わらなかった

初めて全ページを書き出したときは、1分12秒で終わりました。

書き出したサイトが元と同じに見えるかは、画像で確かめました。トップ・ブログ一覧・記事・お問い合わせなど8ページを、PC(幅1280px)とスマホ(幅375px)の両方で、元のWordPressと静的化したものをページ全体で撮影し、1ピクセルずつ比べています。撮るときは動きを止め、ページを少しずつスクロールして、スクロールで出てくる部分もすべて表示させてからそろえて撮りました。

16画面すべてで、違うピクセルは0でした。ただし、これはSOLEIAのサイトと今回の撮り方での結果です。

ただ、画像で比べてわかるのは、見た目が同じだということだけです。ボタンを押したときに正しく動くかまでは、わかりません。実際、この「見た目は同じ」の裏で、動かなくなっていたものがありました。

書き出したサイトから、WordPressへの入口がなくなった

その前に、良くなったほうから見ていきます。静的化する前と後で、攻撃によく狙われる場所を開いてみました。

狙われやすい場所 WordPressのまま 静的化した後
ログイン画面(wp-login.php) 開ける 見つからない
管理画面(/wp-admin/) ログイン画面へ案内される 見つからない
WordPressの外部連携用の入口(xmlrpc.php) 反応がある 見つからない
書き出したファイルに含まれるPHPファイル ある(WordPress本体やプラグイン) 0個

公開用のファイルから、WordPressのログイン画面やPHPのプログラムがなくなり、WordPress本体やプラグインの弱点を直接狙う入口を減らせました。前回の記事で数えた9,454回のようなアクセスが来ても、探している入口そのものが見つかりません。

実際に公開サーバーへ置くときは、公開する場所にWordPress本体のファイルを残さないことが前提です。残っていれば、そこが入口になってしまいます。

また、静的化すれば弱点がまったくなくなる、というわけではありません。公開サーバーの設定や、ページに入れている外部のサービスなどは、別に気をつける必要があります。

それでも、残るもの

ただし、WordPressがなくなったわけではありません。記事を書くためのWordPress(つくる家)は、別の場所に残っています。そこがインターネットから誰でも入れる場所にあれば、そこが新しく狙われます。静的化で安全になるのは、あくまで公開しているサイトのほうです。つくる家の守り方は、後で説明します。

また、書き出したページの画像やファイルの場所から、WordPressで作ったサイトであることや、使っているプラグインの名前は、わかってしまいます。ただ、入口がないので、それだけで入り込まれるわけではありません。

お問い合わせフォームは「送信中」のまま止まった

一番困ったのは、お問い合わせフォームでした。

静的化したサイトで、フォームに入力して送信ボタンを押してみると、画面は「送信中」のまま止まりました。エラーも出ず、メールも届きません。お客様からすると、送れたのかどうかすらわからない状態です。

Contact Form 7は、送信された内容を、WordPressと同じサーバーの上のプログラム(PHP)で受け取って、メールにしています。静的化したサイトにはそのプログラムがないので、受け取る相手がいなくなってしまうのです。

直す方法は、大きく2つあります。

  • 外部のフォームサービスに替える:Googleフォームや、フォームを作れるサービスを使う。いちばん手軽です。見た目がサイトと合うか、送られた個人情報をどこでどう扱うかは、先に確かめておきたいところです
  • フォームの送信先を別に用意する:フォームの見た目はサイトのまま、送信された内容だけを別の仕組みで受け取ってメールにする。見た目をそろえやすい反面、作る手間がかかります

どちらにしても、そのままでは使えないので、静的化する前に必ず替えておく必要があります。

SOLEIAのサイトでは、ほかに困るものはありませんでした。ただ、サイト内検索や、ブログの更新を知らせるRSSを使っているサイトでは、それも別の方法が必要になります。予約カレンダーや会員ページ、ネットショップのように、見た人ごとに中身が変わる機能も、そのままでは使えません。

更新は「直す・書き出す・上げる」の3手順になった

記事のタイトルを1か所直してから、ページの書き出しが終わるまでにかかったのは67秒でした。公開サーバーへ上げる時間は、ここには含んでいません。今回の方法では、1か所を直しても、全ページを書き出し直します。

時間は短いのですが、手順は増えます。

  1. つくる家のWordPressで、記事を直す
  2. ページを書き出す
  3. 書き出したページを、公開サーバーに上げる

ふだんWordPressで記事を書いている方にとっては、2と3が新しく増える作業です。ここを自動にしておかないと、「更新したのにサイトに出ていない」ということが起きやすくなります。

更新用のWordPressは、どこに置く?

静的化で一番大事なのは、つくる家をどこに置くかです。ここが誰でも入れる場所にあれば、静的化した意味が薄れてしまいます。置き場所は、主に3つです。

置き場所 よいところ 気をつけること 向いている場合
自分のパソコンの中 WordPressをインターネットに公開せずに管理できる パソコン自体の安全管理とバックアップが欠かせない。そのパソコンでしか更新できない 制作会社などが更新を代わりにするとき
公開サーバーの中に、鍵をかけて置く 会社のパソコンから今までどおり更新できる 決まった場所からしか開けないよう制限をかける。設定を間違えると元と同じように狙われる 担当者が自分で更新したいとき
専門のサービスに預ける 置き場所と手入れを任せられる 月々の費用がかかり、その会社に頼ることになる 管理を手放したいとき

どこに置いても、つくる家はWordPressのままなので、本体やプラグインの更新は続ける必要があります。つくる家を外から入れない場所に置いていれば、弱点のニュースが出ても、公開サイトからその弱点を直接突かれる心配が減るので、落ち着いて更新できます。ただし、更新そのものは続ける必要があります。

WordPressのまま・静的化・Astro、どれを選ぶ?

ここまでをふまえて、3つの選び方を並べてみます。

方法 向いているサイト 気をつけること
WordPressのまま続ける 更新が多い/予約・会員・ネットショップなど機能が多い 本体やプラグインの更新を、続けて行う必要がある
WordPressを静的化する 更新が少ない会社案内のサイト/作り直す予算はないが、安全にしたい フォームを替える必要がある。更新の手順が増える。つくる家の置き場所を決める
Astroなどで作り直す 長い目で、作りから見直したい 最初に作り直しの費用がかかる

どれが正解ということはなく、サイトの使い方によって変わります。たとえば、毎日お知らせを更新していて、予約フォームもあるサイトなら、無理に静的化するより、WordPressのまま更新をきちんと続けるほうが合っています。反対に、数か月に一度しか更新しない会社案内のサイトなら、静的化はとても相性のいい方法です。

WordPressとAstroの違いは、WordPressを続ける? Astroへ移す?で詳しく比べています。

WordPressを使わない静的サイトとAstroのしくみは、1分半ほどの動画でも紹介しています。

まとめ

自分のサイトで試してみて、静的化は「作り直さずに、公開サイトからWordPressの入口をなくせる」方法だとわかりました。今回の条件では見た目は1ピクセルも変わらず、書き出したサイトには、ログイン画面や管理画面がありませんでした。

一方で、お問い合わせフォームは、そのままでは止まってしまいます。更新の手順が増えることや、つくる家をどこに置くかも、先に決めておく必要があります。

大切なのは、静的化が自分のサイトに合っているかどうかを、使っている機能や更新の頻度から見極めることです。

SOLEIA / 安田 由美

サイト分析・情報設計・デザイン・WordPress実装← サイト改善ノートに戻る