Contact Form 7 スパムメールの3つの対策(Akismet不要)とメリットデメリットまとめ。

WordPressプラグイン「コンタクトフォーム」は便利だが、海外からのSPAMメール対策は必須。

サイト/ブログを運営する場合、問い合わせフォームが必要な場合は多いです(Google AdSenseの申請など)。WordPressの場合は「Contact Form 7」という非常に便利なプラグインがあり、インストールして使っている人も多いでしょう。

しかし、何も対策をせずに問い合わせフォームを公開していると、海外からたくさんの迷惑メール/スパムメールが届くことになります

「Akismet(アキスメット)」を連携させて対策している人も多いかと思いますが、「Sign upしたくない」「対策ロジックが不明瞭」等の理由で使用したくない人もいるかと思います。

 

本記事ではAkismetを使わずに、「Contact Form 7」の問い合わせフォームのスパムメール対策をする3つの方法とそれぞれのメリットデメリットについて解説します

  1. フォームにチェックボックスを入れる(Contact Formに項目追加)
  2. Google「reCAPTCHA」を導入する(reCAPTCHAの登録が必要)
  3. 日本語が1文字も含まれていないコメントを除外する(functions.phpに要コーディング/コピペ可)

 

対策①:フォームにチェックボックスを入れる(Contact Formに項目追加)

メリット・非常に簡単に設置できる
デメリット・スパムメールの回避率は低い
・問い合わせするユーザの利便性は下がる

多くのサイトで解説されている最も簡単・有名な手法になります。初期状態のコンタクトフォームにチェックボックスによる確認項目を追加します。

 

まずは「Contact Form 7」の設定画面を開きます。WordPress管理画面の「お問い合わせ」-「コンタクトフォーム」から設定画面を開くことができます。ブログで使用しているフォームの編集リンクをクリックし、「フォーム」タブを開きます。

メッセージ本文の下の空いたスペースをクリックし、「承諾確認」のボタンをクリックします。

 

「同意条件」にチェックボックスに表示するラベルを入力します。さらにオプションのチェックは外しておきます。設定が完了したら「タグを挿入」ボタンをクリックします。

 

以下のように承諾確認チェックボックスを表示するためのショートコードが挿入されればOKです。この状態で保存すれば設定完了になります。

非常に簡単に設定できる方法ですが、実際にやってみたところ完全にスパムメールを除外することは出来ませんでした。自動化されたロボットに対しては一定の効果はありますが、この程度はちょっとプログラムを書ける人であれば簡単に対応できます。また、手動で送信してくる迷惑メッセージに対しては効果はほとんどないでしょう。
本対策のような簡単な対策のみとしておき、それでも迷惑メッセージが届いた場合は、個別にブラックリストに追加する運用をするというのも選択肢としてはアリだと思います。コンタクトフォームはコメントブラックリストに追加することで個別に対策することが可能です。
投稿者のIPアドレスがわかるように、以下のようにメッセージのテンプレートに「差出人IP:[_remote_ip]」を追加しておきます。

 

対策②:Google「reCAPTCHA」を導入する(reCAPTCHAの登録が必要)

メリット・比較的簡単に設置できる
・スパムメールの回避率は高い
デメリット・Googleアカウントにて「reCAPTCHA」の設定が必要
問い合わせするユーザの利便性は下がる(v2の場合。v3の場合は一般ユーザの利便性は下がらない)

最近流行りの対策方法になります。Google「reCAPTCHA」を表示しチェックさせます(スパム行為が多い利用者がメッセージ送信しようとした場合、パズルなどの認証を求められます)。

設置にはGoogleアカウントでreCAPTCHAの設定が必要になりますが、Googleアカウントはほとんどの方が既に持っていると思いますし、設定自体は簡単なのが魅力です。

 

まず、「Google reCAPTCHA」にアクセスし、「My reCAPTCHA」のボタンをクリックします。Googleアカウントを持っていればすぐ使えますし、英語のサイトですが設定は簡単です。

 

「reCAPTCHA v3」を選択します。Labelは何でも構いません。Domainsには自サイトのドメイン名を入力します。

最後に、規約同意のチェックを入れて、「Register」をクリックすればreCAPTCHA情報を作成できます。

 

「Site Key」「Secret Key」が発行されます。これは次のステップでWordPressの設定画面で入力しますので、メモ帳にコピペしておくか、あるいはブラウザ画面を開いたままにしておきます。

 

ここでWordPress管理画面に戻ります。「お問い合わせ」-「インテグレーション」をクリックし、「インテグレーションのセットアップ」をクリックします。

 

先ほど発行した「Site Key」「Secret Key」の2つをこの画面で入力して保存すればWordPressでreCAPTCHAが利用可能となります。

 

「reCAPTCHA v2」の場合は以下のようにフォームに設置しなければならなかったのですが、「reCAPTCHA v3」はコンタクトフォームの編集は不要となります(コンタクトフォームの編集は、WordPress管理画面の「お問い合わせ」-「コンタクトフォーム」から設定画面を開き、フォームの編集リンクをクリックし、「フォーム」タブを開く)。

古いバージョンのコンタクトフォームの場合、「reCAPTCHA v3」を設定すると、「サイト所有者の確認が必要なエラー:キータイプが無効です」のメッセージが表示される場合があります。この場合はコンタクトフォームのプラグインを最新に更新してください。

 

ここまでの設定でも保護はされますが、サイト全体が保護されている状態になります。設定後にサイトを開くと右下にreCAPTCHAのバッジが表示されるようになります。しかし、これはトップに戻るボタンや他のウィジェットと重なることも多く、非常に邪魔です。

 

このままでもOKな場合はいいですけど、「reCAPTCHA v2」のようにコンタクトフォームだけを保護したい場合は、さらに「Invisible reCaptcha」のWordPressプラグインを新規追加します。先ほど設定した「お問い合わせ」-「インテグレーション」の設定は削除し、替わりに「Invisible reCaptcha」の設定画面で「Site Key」「Secret Key」を入力して保存します

 

さらに「WordPress」「Contact Forms」のタブをクリックし、reCaptchaで保護する画面を選択します。コンタクトフォームだけで表示する場合は、「Enable Protection for Contact Form 7」のチェックのみをONにすればOKです(他にもWordPressのログイン画面などでも保護設定することが可能)。

 

対策③:日本語が1文字も含まれていないコメントを除外する(functions.phpに要コーディング/コピペ可)

メリット・問い合わせするユーザの利便性に影響なし
・スパムメールの回避率は高い
デメリット・「functions.php」の修正が必要
・運営サイトが海外・外国人をターゲットとしている場合は適用できない

コンタクトフォームのタイトルや本文に日本語が1文字が含まれていない場合に、入力チェックでエラーにしてしまう方法です。

スパム・迷惑メッセージは、現状ほとんどが日本語以外の文章で送られてきますので、海外・外国人をターゲットとしているサイトでは使用できないですが、そうでないならば効果は高いです。

 

「functions.php」に以下のソースコードを追加することで、入力チェックを実装できます。以下のサンプルソースコードはタイトルに対してのチェックになります(ダブルクリックでコピペできます)。

※本文に対して実装する場合は、各自修正ください。