10月に保守先のサイトを外から点検して、「古いまま止まっている部品」が出てきました(前回の記事)。そのうち数が多かった2つ、お問い合わせフォームのプラグイン Contact Form 7 と、SEO設定のプラグイン All in One SEO を、11月2日までに6サイトで更新しました。
結論から書きます。更新そのものは数分で終わります。時間がかかったのは、その前後です。「管理画面に更新の通知が出ないので、古いことに気づけないサイト」「更新したら設定が勝手に変わったサイト」「バックアップを取っているつもりで5年間取れていなかったサイト」が1つずつありました。
きっかけ
点検で見つかった古い部品は、11月2日時点でこうでした。
| サイト | Contact Form 7 | All in One SEO | WordPress本体 |
|---|---|---|---|
| 整体院 | 6.1.3 | 使っていない | 6.9.10 |
| 事務代行の会社 | 6.1.4 | 使っていない | 6.9.11 |
| 塗装会社 | 使っていない | 4.9.6.2 | 6.8.12 |
| 人材サービスの会社 | 5.2.2 | 3.7.1 | 5.5.24 |
| 通信工事の会社 | 使っていない | 4.9.10 | 7.0.7 |
| 教育団体(2サイト) | 6.1.2 | 4.9.1 | 6.8.12 ほか |
急いだ理由は2つです。Contact Form 7 は2026年2月8日の 6.1.5 で、メールの宛先欄を細工して別の宛先に送らせる攻撃(メールヘッダーインジェクション)の修正が入り、開発元が「すべての利用者に速やかな更新を推奨」と告知していました。さらに10月29日の 6.2.4 では、ログインしていない人がファイルを置けてしまう問題(6.2〜6.2.3 が対象)が直されています。All in One SEO も 5.0.2.1 で、検索ページ経由でショートコードを動かされる問題への防御が入っています。
どちらも「問い合わせを受ける部品」と「全ページの頭に出力される部品」です。壊れると、気づくのは先方のお客さんです。
最初に:作業する場所を整理
この記事で触る場所は3つです。
- WordPressの管理画面(/wp-admin/)。プラグインの更新はここ。「ダッシュボード→更新」か「プラグイン」の画面
- サーバーの管理パネル(Xserver・ロリポップなど)。PHPのバージョンと、サーバー側の自動バックアップはここ
- 公開中のサイト。更新のあと、問い合わせフォームを実際に送って確かめる場所
管理画面に入れるのは、保守契約のあるサイトだけです。契約のないサイトは、先方の了承と作業の依頼が要ります(後述)。
用語は3つだけ
- プラグイン:WordPressに後から足す部品。フォームもSEO設定もプラグインです
- 本体:WordPress そのもの。プラグインは「本体のこの版以上」という条件を持っています
- PHP:サーバーでWordPressを動かしている言語。これにも版があり、サーバーの管理パネルで切り替えます
この3つの版の組み合わせが、今回いちばん効いてきます。
手順0:なぜ「古いまま」になっていたかを調べる【WordPressの管理画面】

事務代行の会社のサイトを開いて、最初につまずきました。Contact Form 7 は 6.1.4 なのに、管理画面に更新の通知が出ていません。
理由は、Contact Form 7 の最新版 6.2.4.1 が「WordPress 7.1 以上・PHP 8.3 以上」を条件にしているからです。このサイトの本体は 6.9.11 でした。条件を満たさないプラグインの更新は、管理画面に表示されません。つまり、本体を上げない限り、フォームは永久に 6.1.4 のまま「更新なし」と表示され続けます。
2月の 6.1.5(本体 6.7 以上で入る版)も出ていなかったのは、6.2 が出た10月以降、配布元が最新版しか案内しないためです。管理画面を見て「更新がないから大丈夫」は、本体が古いと成り立ちません。
人材サービスの会社のサイトはもっと古く、本体 5.5.24・PHP 7.4 でした。ここでは Contact Form 7 は 5.4.2 までしか入りません。6.2 系は PHP 8.3 が要るからです。
手順1:本体から上げる【WordPressの管理画面・サーバーパネル】
事務代行の会社のサイトは、本体 6.9.11→7.1.4、Contact Form 7 6.1.4→6.2.4.1 の順で更新しました。直前に、バックアップ用プラグインで全体(データベース・プラグイン・テーマ・画像)を取っています。更新後、サイトマップにある49ページがすべて200で返り、本文テキストに差分がないことを確かめました。
整体院のサイトも同じ順で、本体 7.1.4 のうえで Contact Form 7 を 6.2.4.1 にしました。
塗装会社のサイトは、先に All in One SEO を 4.9.6.2→5.0.4 にし、同日に本体 6.8.12→7.1.4 と残り7つのプラグインも上げました。All in One SEO 5.0.4 は本体 5.7 以上で入るので、本体を上げずに先に済ませられます。
人材サービスの会社のサイトは、サーバーが PHP 7.4 のままなので上限があります。本体 5.5.24→7.1.4、All in One SEO 3.7.1→5.0.4、Contact Form 7 5.2.2→5.4.2 まで。PHP の切り替えはサイトの作り直しのときに回しました。
通信工事の会社のサイトは10月23日に All in One SEO 4.9.10→5.0.4 と本体 7.0.7→7.1.3 を済ませていて、問題は出ませんでした。
手順2:更新したら設定が変わっていた【All in One SEO の「検索の外観」】
人材サービスの会社のサイトで、All in One SEO を 3.7.1 から 5.0.4 に上げたあと、ページのタイトルが変わっていました。
- タイトルの区切り文字が「|」から「-」に
- トップページのタイトルが、旧版で設定していた英字の社名から、WordPress側のサイト名を使った別の文に
- 旧版では出していなかった「説明文(description)」が自動で生成され、大半のページで同じ文に
3.x から 5.x への移行で、旧設定が引き継がれていませんでした(管理画面のデータに「移行済み」の印が付いていない状態)。「検索の外観」の画面で区切り文字とトップのタイトルを手で戻し、全8ページのタイトルが更新前と一致することを確かめました。
説明文のほうは、欄を空にしても本文から自動生成されます。消すにはページごとに説明文を書くしかないので、今回はそのままにし、作り直しのときに設計することにしました。
これに気づけたのは、更新前に全ページのタイトル・説明文・OGタグ・正規URLを保存しておいたからです。更新後に同じものを取って突き合わせると、変わった箇所だけが出ます。塗装会社のサイトでは、差分は「パンくずの構造化データでトップのURLの末尾に / が付いた」の1件だけでした。
手順3:バックアップが取れていなかった【バックアップ用プラグインの設定】
人材サービスの会社のサイトでは、更新前にバックアップ用プラグイン(BackWPup)でデータベース込みの全体バックアップ(32MB)を取りました。そのとき、定期実行のジョブが「保存先が未設定」のエラーで毎回失敗していることに気づきました。履歴を見ると、2020年11月以降、実質的にバックアップが取れていません。エラーの通知先は前の制作会社のメールアドレスのままでした。
塗装会社のサイトにはバックアップ用プラグインがなく、サーバー側の自動バックアップに頼る判断をしました。ただし、その中身が復元できるかは確かめていません。
「バックアップは取っている」と「復元できるバックアップがある」は別物です。更新のついでに、保存先・通知先・最終成功日を見るようにしました。
手順4:フォームを実際に送る【公開中のサイト】
更新後は、問い合わせフォームから自分で送ります。確認画面がある場合は確認画面まで、送信完了ページへ遷移するか、自動返信が自分の受信箱に届くか、先方への通知が届くか。
ここで2つ、小さな引っかかりがありました。
- 整体院のフォームは、電話欄に 000-0000-0000 を入れると弾かれます。090-0000-0000 なら通ります。テスト用の値の選び方で「壊れた」と誤判定しかけました
- 事務代行の会社のフォームは、自動返信が迷惑メールフォルダに入りました。更新前の10月22日も同じだったので更新の影響ではなく、送信元の設定の問題です。これは別の課題として残っています
先方への通知が実際に届いたかは、先方の受信箱でしか確かめられません。テストだと明記して送り、着信の確認をお願いしています。
手順5:触らないと決めたもの
通信工事の会社のもう1つのサイトには、当社が作っていないフォームがありました。移管後に先方の担当者が Contact Form 7 で作った予約フォームで、トップページからのリンクはないものの公開中です。更新の対象にする前に、先方に確認を入れました。「誰が使っているか分からないものは、確認するまで触らない」が原則です。
教育団体の2サイトは保守契約がなく、Contact Form 7 6.1.2 と All in One SEO 4.9.1 のまま残っています。更新の必要性と、1回きりの更新作業(スポット対応)か保守契約かの選択肢を伝えて、了承待ちです。
つまずき早見表
| 起きたこと | 原因 | 対処 |
|---|---|---|
| 管理画面に更新の通知が出ない | 最新版の条件(本体 7.1・PHP 8.3)を満たしていない | 本体を先に上げる。本体を上げられないなら入る上限の版を調べる |
| 更新後にタイトルの区切りが変わった | 旧版(3.x)の設定が移行されなかった | 「検索の外観」で区切りとホームタイトルを手で戻す |
| 説明文が全ページ同じ文になった | 欄が空だと本文から自動生成 | ページごとに書くか、作り直しまで据え置く |
| 更新後の確認で古い表示が出る | サーバーのキャッシュ | 毎回ちがうクエリ(?nc=乱数)を付けて取る |
| 削除したファイルが200で返る | 同上 | 同上。キャッシュを見て「失敗」と判断しない |
| テスト送信が弾かれる | 電話欄の形式チェック | 実在しそうな形式(090-〜)で送る |
| 自動返信が迷惑メールに入る | 送信元ドメインの設定 | 更新の影響かを更新前の記録で切り分け、別課題にする |
確認方法:更新のたびに同じ順で見る

- 更新前に、サイトマップの全URLを取り、各ページのタイトル・説明文・OGタグ・正規URLを保存する
- 更新前に、全体バックアップを取る。取れたファイルのサイズと日時を見る
- 更新後、全URLが200で返るか。PHPのエラー文(Fatal・Warning)が本文に混ざっていないか
- 更新後、1で保存したものと突き合わせ、差分を一つずつ読む
- フォームから送る。完了ページ・自動返信・先方への通知
- 先方への報告は、管理画面で版を見てから書く
6番は、書いた報告が実機の版と食い違っていたことがあったので入れました。
正直に書いておくこと
- 更新で防げるのは「公開されている既知の問題」だけです。管理画面のパスワードや、使っていないユーザーの放置は別の話です
- 本体を上げられないサイト(PHPが古い)では、入る上限の版で止まります。根本は PHP の切り替えかサイトの作り直しで、今回は先送りにしました
- 先方への通知メールの着信は、当社からは確かめられません
- サーバー側の自動バックアップは、復元の実験までしていません
要点3行
- 管理画面に「更新なし」と出ていても、本体が古いと最新版が表示されないだけのことがある
- 更新前にタイトル・説明文・OGタグを全ページ保存し、更新後に突き合わせると、設定の巻き戻りが見つかる
- バックアップは「取っている」でなく「最後に成功した日」で見る