2026年5月20日
2026年5月20日
Contact Form 7のスパム対策を強化する方法
はじめに
Contact Form 7を設置すると、ボットによるスパム送信が増加することがあります。reCAPTCHAに頼らずとも、ハニーポットやFlamingo(メッセージ記録プラグイン)と組み合わせることで効果的にスパムを防止できます。
症状・原因
- フォーム送信後に大量のスパムメールが届く
- 「送信しました」が繰り返し表示されボットが連続送信している
- 送信者メールアドレスが存在しないランダムなアドレスになっている
- CF7のデフォルト設定だけではスパムを防ぎきれない
解決手順
ステップ1:Akismetと連携する
# AkismetプラグインをAPIキー付きで有効化
wp plugin install akismet --activate
wp option update akismet_api_key 'YOUR_API_KEY'
# CF7はAkismet有効時に自動でスパムフィルタリングを行う
CF7はAkismetが有効な場合、送信内容を自動的にスパム判定します。Akismet APIキーはWordPress.comアカウントで無料取得できます。
ステップ2:ハニーポットフィールドを追加する
# CF7 Honeypot プラグインをインストール
wp plugin install contact-form-7-honeypot --activate
インストール後、フォームタグに [honeypot honeypot-field] を追加します。ボットは非表示フィールドにも入力するため、入力があった送信を自動でスパム判定します。
[honeypot honeypot-field]
ステップ3:wpcf7_spam フィルターでカスタムスパム判定する
// functions.php — 特定ドメインからの送信をスパム判定
add_filter('wpcf7_spam', function(bool $spam, array $submission) {
$email = $submission['your-email'] ?? '';
$blocked = ['spam.com', 'fake.net', 'trash.org'];
foreach ($blocked as $domain) {
if (str_ends_with($email, '@' . $domain)) {
return true;
}
}
return $spam;
}, 10, 2);
ステップ4:Flamingo でメッセージを記録・管理する
# Flamingoをインストール(CF7送信履歴の保存)
wp plugin install flamingo --activate
Flamingo を有効にすると送信内容がデータベースに保存され、スパムとしてマークしたメッセージを後から管理できます。Flamingo → 受信メッセージ から一括スパムマークが可能です。
ステップ5:送信回数を制限する
// functions.php — 同一IPからの短時間連続送信を制限
add_filter('wpcf7_spam', function(bool $spam) {
$ip = $_SERVER['REMOTE_ADDR'] ?? '';
$key = 'cf7_limit_' . md5($ip);
$count = (int) get_transient($key);
if ($count >= 5) {
return true;
}
set_transient($key, $count + 1, MINUTE_IN_SECONDS * 10);
return $spam;
});
注意事項
- ハニーポットフィールドはCSSで非表示にするため、スクリーンリーダーへの配慮として
aria-hidden="true"を設定してください - Akismetは商用サイトでは有料プランが必要です(個人サイトは無料)
- reCAPTCHAを使用する場合はGoogleのプライバシーポリシーへの言及が必要です
まとめ
CF7のスパム対策はAkismet連携・ハニーポット・wpcf7_spam フィルターの3段構えが効果的です。Flamingo でメッセージを記録しておくと正規の送信を誤検知した場合にも対応できます。