WordPressのお問い合わせフォームプラグイン「MW WP Form」を使っていると、スパムメールや営業メールに悩まされることがあります。実際に弊社でも、長文の営業メールが大量に送信される事案が発生しました。

本記事では、reCAPTCHA v3の導入NGワード設定を組み合わせた効果的なスパム対策の実装方法をご紹介します。

スパムメールの実態と課題

よくあるスパム手法

  1. HTMLの制限回避: maxlength="150"などの制限をJavaScriptで削除
  2. 自動化ツールの使用: HeadlessChrome等を使った一括送信
  3. フォーム送信の直接操作: ブラウザを経由せずHTTPリクエストを直接送信

対策1: reCAPTCHA v3の導入

reCAPTCHA v3の特徴

メリット

  • ユーザーに負担をかけない(完全に非表示)
  • 高精度なbot判定(Googleの機械学習活用)
  • リアルタイムスコア判定(0.0〜1.0)

v2との違い

  • v2: 「私はロボットではありません」チェックボックス
  • v3: バックグラウンドで自動判定

実装手順

Step 1: Google reCAPTCHA設定

  1. Google reCAPTCHA管理画面にアクセス
  2. 新しいサイトを登録
    • ラベル: 任意の名前
    • reCAPTCHAタイプ: reCAPTCHA v3を選択
    • ドメイン: あなたのサイトドメイン
  3. サイトキーとシークレットキーを取得

Step 2: プラグインのインストール

MW WP FormはreCAPTCHA v3に標準対応していないため、専用プラグインを使用します。

プラグイン名: 「reCAPTCHA for MW WP Form」

インストール手順

  1. WordPress管理画面 → プラグイン → 新規追加
  2. 「reCAPTCHA for MW WP Form」を検索
  3. インストール・有効化

Step 3: reCAPTCHA設定

  1. 設定画面への移動

    • MW WP Form → reCAPTCHA v3
  2. キーの設定

    サイトキー: [取得したサイトキー]
    シークレットキー: [取得したシークレットキー]
    Threshold score: 0.3(推奨)
    
  3. しきい値の考え方

    • 0.3: バランス良好(推奨)
    • 0.5: Googleデフォルト(やや厳しめ)
    • 0.1: 緩い設定

Step 4: フォームへの実装

各フォームの編集画面で以下を追加:

[mwform_hidden name="recaptcha-v3"]
[mwform_error keys="recaptcha-v3"]

バリデーションルール

  • バリデーションを適用する項目: recaptcha-v3
  • reCAPTCHA v3にチェック

Step 5: バッジのスタイル調整

テーマのCSS(style.css)に追加:

/* reCAPTCHAバッジのスタイル調整 */
.grecaptcha-badge {
    transform: scale(0.8);
    transform-origin: 28% 50%;
}

/* PC用 */
@media print, screen and (min-width: 744px) {
    .grecaptcha-badge {
        transform: scale(0.9);
    }
}

対策2: NGワード設定

reCAPTCHA v3と組み合わせることで、より効果的なスパム対策が可能です。

NGワード機能の実装

functions.phpに追加するコード

//『MW WP Form』スパム対策:特定のキーワードを含む投稿をブロック
function custom_validation_nospam($validation_rules) {
  if (!class_exists('Custom_Validation_NoSPAM')) {
    class Custom_Validation_NoSPAM extends MW_WP_Form_Abstract_Validation_Rule {
      protected $name = 'custom_nospam';

      public function rule($name, $options = []) {
        $ng_keywords = [
          'AI研修',
          'コンサルティング',
          'マーケティング',
          'アライアンス'
        ];

        $value = $this->Data->get($name);

        if (!MWF_Functions::is_empty($value)) {
          foreach ($ng_keywords as $ng_word) {
            if (preg_match("/{$ng_word}/i", $value)) {
              $defaults = array(
                'message' => __('投稿内容をご確認ください。', 'mw-wp-form'),
              );

              $options = array_merge($defaults, $options);
              return $options['message'];
            }
          }
        }
      }

      public function admin($key, $value) {
?>
        <table>
          <tr>
            <td><?php esc_html_e('スパムチェック', 'mw-wp-form'); ?></td>
            <td><input type="checkbox" <?php checked($value[$this->getName()], 1); ?> name="<?php echo MWF_Config::NAME; ?>[validation][<?php echo $key; ?>][<?php echo esc_attr($this->getName()); ?>]" value="1" /></td>
          </tr>
        </table>
<?php
      }
    }
  }

  $obj = new Custom_Validation_NoSPAM();
  $validation_rules[$obj->getName()] = $obj;

  return $validation_rules;
}
add_filter('mwform_validation_rules', 'custom_validation_nospam');

効果測定

確認すべき指標

  1. スパムメール減少率: 導入前後の比較
  2. 正常なお問い合わせの通過率: 誤判定の確認
  3. reCAPTCHAスコア分布: Google reCAPTCHA管理画面で確認

しきい値の調整

1週間ごとの見直し

  • スパムが多い → しきい値を上げる(0.4→0.5)
  • 正常なメールが拒否される → しきい値を下げる(0.3→0.2)

適切に設定されたreCAPTCHA v3とNGワード機能により、スパムメールを大幅に削減しつつ、ユーザーフレンドリーなお問い合わせフォームを維持できます。