検証環境:WordPress 6.9.4 / Contact Form 7 6.1.5 / Cloudflare Turnstile / Xserver スタンダードプラン / Cloudflare Free プラン / 2026年4月時点の情報
ホームページにメールアドレスを掲載したら、ある日突然スパムメールが激増した…。Web担当者なら一度は経験したことがあるのではないでしょうか。
この記事では、なぜメールアドレスを公開するとスパムが増えるのか、その「原因の正体」を技術的な観点から解き明かしながら、今すぐ実践できる具体的な対策を「レイヤー(層)」の考え方で整理してお伝えします。
公開Webに「生メアド」を置くと拾われる確率が一気に上がる
ホームページに平文のメールアドレスを置くと、メールアドレス収集ボット(ハーベスター)に拾われ、さらにページが転載されると別サイトにもメアドが増殖し、一度スパムリストに載ると消しても長期間スパムが続きます。
ホームページに sample@mail.com のような平文(プレーンテキスト)のメールアドレスを置くと、次のような流れでスパムの標的になります。
- メールアドレス収集ボット(harvester / scraper)に拾われる。インターネット上を自動巡回し、
@やmailto:を目印にメールアドレスを収集する専用プログラムが存在します。 - そのページが転載(コピペ)されると、別サイトにもメアドが増殖する。悪質なスクレイパーは記事ごと丸コピーすることがあり、あなたのメアドも一緒に拡散されます。
- 一度リスト化されると、消しても長期間続く。スパムリストは売買・共有されるため、元を断っても完全停止は難しいのが現実です。
ここで押さえておきたいポイントは、「クローラーは一種類じゃない」ということです。検索エンジンのクローラーだけでなく、目的の異なる複数の巡回者が同時にあなたのサイトを訪れています。
「複数のクローラー」が同時に来ている
同じ「クローラー」「ボット」でも「検索エンジン系(インデックス目的)」「ハーベスター(メアド収集目的)」「スクレイパー(記事丸コピー目的)」の3種類はまったく別物で、robots.txtを守るのは検索エンジン系だけです。
検索エンジン系クローラー(Googlebot等)
Googlebotなどの検索エンジンクローラーは、サイトを検索結果に載せるために巡回しています。これ自体がスパムを送るわけではありません。ただし、インデックスされた情報は検索結果として公開されるため、悪性スクレイパーに発見される確率が上がるという間接的な影響があります。
メールアドレス収集ボット(ハーベスター)
スパムの元凶となるボットです。ページ内のテキストをスキャンし、メールアドレス形式の文字列を片っ端から収集します。
収集の手口はかなり洗練されています。@マークを含む文字列の検出、mailto:リンクの自動抽出、[at]や[dot]といった置き換え表記の復元、さらにJavaScriptで生成された表示の取得まで可能なものも存在します。
GitHubには「email-scraper」というタグで300以上のリポジトリが存在し、PythonやNode.jsで手軽にスクレイピングできるツールが公開されています。ScrapeBoxのような商用ツールは、プロキシ経由で大量巡回が可能で、User-Agentを偽装する機能まで備えています。
スクレイパー(コピペ転載・自動コピー)
コンテンツを自動的にコピーして別サイトに掲載するボットです。厄介なのは、あなたがメアドを消しても転載先に残っていれば拾われ続けるという点です。転載サイトが検索エンジンにインデックスされ、そこからハーベスターがメアドを収集するという二次被害も発生します。
「自分のサイトを直接守る」だけでは不十分で、拡散されることを前提とした設計が必要です。
まずやるべき切り分け:原因が「収集」か「転載」か
スパムが増え始めたタイミング(掲載直後なら収集ボット由来、しばらく経ってからなら転載や漏洩リスト由来)を確認し、メアドの完全一致検索で転載チェック、アクセスログで異常パターンの確認を行うことで、効果的な対策の優先順位が見えてきます。
チェック1:増え始めたタイミングは掲載直後か?
| パターン | 推定される原因 |
|---|---|
| 掲載して数日〜数週間で急増 | 収集ボット由来が濃厚 |
| 掲載からしばらく経って増えた | 転載や別ルート(漏洩リスト・データブローカー等)も疑う |
チェック2:自分のメアドを検索してみる(転載チェック)
検索エンジンで "sample@mail.com" のようにダブルクオート(完全一致検索)で検索してみましょう。身に覚えのないサイトにメアドが載っていたら、転載による拡散が起きている可能性が高いです。ただし、検索に出ない転載もあるため、出なかったから安心とは言い切れません。
チェック3:アクセスログの異常をざっくり確認
サーバーのアクセスログで、1分間に数十〜数百リクエストの連続アクセス、不自然なUser-Agent(空欄や古いブラウザ)、同じIP帯からの連打(特に海外IP)がないか確認してください。
googlebot.comドメインからのアクセスか確認する方法が確実です。対策は「1発」じゃなく「レイヤーで積む」のが勝ち筋
セキュリティの世界で「多層防御(Defense in Depth)」と呼ばれるアプローチで、1つの施策が突破されることを前提に複数の対策を重ねがけするのが鉄則です。ここからはA〜Eの5レイヤーをおすすめ順に紹介します。
レイヤーA:そもそも生メアドを出さない(最強の対策)
最も効果的なのは根本的にメールアドレスを公開しないことで、問い合わせフォームを主導線にし、どうしても載せるなら専用の受信用アドレス(いつでも廃棄可能なもの)を使うのが推奨構成です。
| 従来 | 推奨 |
|---|---|
| ページにメアドを掲載 | 問い合わせフォームを主導線に |
| 「連絡はこちら:info@〜」と記載 | メアドは原則非掲載 |
| mailto: リンクを設置 | どうしても載せるなら専用の受信用アドレス(いつでも廃棄可能)を使用 |
「メールで直接やりとりしたい」というニーズは理解できます。しかし、公開Webは実質的に「世界中に公開された掲示板」です。掲載する=拾われる可能性がある、という前提で設計するのが現実的です。
レイヤーB:どうしても載せる場合の「見せ方」を工夫する
Cloudflare Email Obfuscation、[at][dot]表記、CSSでの@後付け、mailto:リンクを使わないテキスト表記の4つの難読化テクニックがありますが、いずれも単独では突破される可能性があるため「やらないよりマシ」の補助的対策として他のレイヤーと併用してください。
B-1. Cloudflare Email Address Obfuscation
Cloudflareを利用しているサイトであれば、Scrape Shield機能でメールアドレスの自動難読化が可能です。HTMLソース上のメールアドレスを暗号化された文字列に自動変換し、ブラウザ表示時にJavaScriptがデコードして人間には普通に見えます。
設定は、Cloudflareダッシュボード → Scrape Shield → Email Address Obfuscation を「On」にするだけです。
B-2. [at][dot] 表記
|
1 |
お問い合わせ:sample [at] mail [dot] com |
最も古典的な方法ですが、今でも一定の効果があります。実装が簡単でJavaScript無効環境でも表示できる一方、最近のスクレイパーは正規表現で復元できるものが増えており、単独対策にはしないのが無難です。
B-3. CSSで@を後付けする方法
HTMLソースに@マークを直接書かず、CSSの::before擬似要素で後付けする手法です。
|
1 2 3 4 5 6 7 8 9 |
/* HTML */ <span class="email"> <span class="user">sample</span><span class="domain">mail.com</span> </span> /* CSS */ .email .domain::before { content: '@'; } |
ブラウザではsample@mail.comと表示されますが、HTMLソース上ではsampleとmail.comが分離されています。ただしCSS無効環境での表示崩れ、ヘッドレスブラウザによるレンダリング後取得、転載先での再構成といった限界があります。
B-4.「リンクにしない」という選択肢
mailto:リンクは特に収集されやすいため、どうしてもメアドを載せるならクリック不可のテキストにするという割り切りもあります。UXは下がりますが、収集コストを上げる効果はあります。
レイヤーC:問い合わせフォームを「スパム耐性フォーム」にする
メールアドレスを隠すと次に攻撃されるのがフォームそのもので、Honeypot(人間に見えない入力欄でボットを検出)+Cloudflare Turnstile(完全無料・ユーザー負担ゼロの認証)+レート制限(同一IPからの連投防止)の3重防御が推奨構成です。
C-1. Honeypot(ハニーポット)
人間には見えない(CSSで非表示にした)入力欄を用意し、そこに値が入力されていたらボットと判定する手法です。WordPressではHoneypot for Contact Form 7プラグインをインストールし、フォームに[honeypot your-name]タグを追加するだけです。
ユーザーに負担をかけず実装も簡単ですが、高度なボットはHoneypotの存在を検知して回避することがあります。
C-2. Cloudflare Turnstile(おすすめ)
Cloudflareが提供する無料のCAPTCHA代替サービスです。完全無料(回数制限なし)、ユーザーに画像選択やパズル解答を求めない「ゼロフリクション」認証、プライバシー重視(広告リターゲティング用のデータ収集なし)という特徴があります。
Contact Form 7はTurnstileに公式対応しており、公式マニュアルでも「reCAPTCHAを使うべき理由が特にないのであれば、Turnstileを選択してください」と案内されています。
設定手順(WordPress + Contact Form 7):
- Cloudflareでアカウント作成(無料)
- ダッシュボード → Turnstile → ウィジェットを作成
- サイトキーとシークレットキーを取得
- WordPress管理画面 → お問い合わせ → インテグレーション → Turnstile を設定
- フォームに
[turnstile]タグを追加
なお、Google reCAPTCHAは2024年後半から無料枠が月間10,000件に縮小されたため、新規導入ならTurnstileのほうが制限なく使えます。
C-3. レート制限(送信回数制限)
同一IPアドレスからの短時間連投を制限する仕組みです。CloudflareなどのCDN/WAFレベルで「同一IPから5分間に3回以上のフォーム送信があった場合、一時的にブロック」のように設定するのが効果的です。
レイヤーD:コピペ転載(スクレイピング)対策は「割り切り」が大事
コピー対策の完全防止は技術的に非常に困難なので、「取られても被害が小さい構造(生メアド非掲載・フォーム中心)」を作り、WAF/CDNで取るコストを上げ、robots.txtは善良なボット向けのお願いと割り切るのが現実的なアプローチです。
D-1. 取られても被害が小さい構造にする
| 対策 | 効果 |
|---|---|
| 生メアドを出さない | 最重要:転載されてもメアドは漏れない |
| 重要連絡はフォーム/チケット化 | メールに依存しない導線を確保 |
| メアドは専用の受信箱にする | 被害が大きくなったら切り替え可能 |
D-2. 取るコストを上げる(WAF / Bot対策)
異常なアクセスパターン(連続アクセス、深夜帯の大量リクエスト)をWAFでブロック、不審なIP帯をレート制限、リクエストパスの不自然なパターンをフィルタ、といった対策で攻撃者のコストを上げます。
D-3. robots.txtは「善良なボット向けのお願い」と割り切る
|
1 2 3 |
# 連絡先ページをクローラーから除外する設定例 User-agent: * Disallow: /contact/ |
この設定はGooglebotなどの行儀の良いクローラーには有効ですが、メール収集ボットは無視して巡回することがあります。さらに、robots.txtでブロックしても外部サイトからリンクがあるとURLだけがGoogleにインデックスされる可能性があります。
D-4. 必要なら「noindex」を使う
|
1 |
<meta name="robots" content="noindex"> |
検索結果に出したくないページ(連絡先ページ、会員専用ページなど)に設定します。ただし、本当に検索から消したいのかはSEO・導線の観点でしっかり検討してください。
レイヤーE:メールそのものを固める(SPF / DKIM / DMARC)
SPF/DKIM/DMARCは「受信スパムを減らす魔法」ではなく「あなたのドメインを騙るなりすましメール」を防ぐ技術です。2024年2月以降Googleが送信ドメイン認証を義務化しており、未対応だとGmailにメールが届かなくなるリスクがあるため、スパム対策とは別の理由でも設定必須です。
よくある誤解
「SPF/DKIM/DMARCを設定すれば受信スパムが減る」は半分正解・半分間違いです。あなたのドメインを騙るなりすましメールは減らせますが、受信するスパム全体を減らす仕組みではありません。
なぜ重要なのか
HPにメアドを載せた → 収集された → 次に来るのが「なりすまし」という流れがあります。攻撃者があなたのドメイン@example.comを詐称して、取引先や顧客にフィッシングメールを送信するリスクがあるのです。
各技術の役割
| 技術 | 役割 | たとえ話 |
|---|---|---|
| SPF | 送信元IPが正規送信サーバーか確認 | 「正規の郵便局から発送されたか?」 |
| DKIM | 電子署名で改ざんされていないか検証 | 「偽造防止シールが貼られているか?」 |
| DMARC | SPF/DKIMの結果とFromドメインの整合性を検証 | 「シールと差出人が一致しない場合どうするか?」 |
2024年の大きな変化:Gmail送信者ガイドラインの厳格化
| 送信規模 | 要件 |
|---|---|
| すべての送信者 | SPFまたはDKIMの設定が必要 |
| 1日5,000件以上送信 | SPF、DKIM、DMARCの3つすべてが必要 |
未対応の場合、Gmailにメールが届かなくなる可能性があります。Google・Yahoo!・Microsoftともに同様の方向で対応を進めています。
DMARCポリシーの段階的な強化(推奨手順)
いきなり厳格なポリシーにすると正規のメールまで拒否されるリスクがあります。段階を踏むのが安全です。
ステップ1:監視モード(p=none)
|
1 |
v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com |
認証失敗しても何もしない。レポートで現状を把握する段階です。
ステップ2:隔離モード(p=quarantine)
|
1 |
v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@example.com |
認証失敗したメールは迷惑メールフォルダへ。
ステップ3:拒否モード(p=reject)
|
1 |
v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.com |
認証失敗したメールは受信拒否。最も強力な設定です。
rua=でレポート送信先を指定すると、自社ドメインを名乗るメールがどこから送信されているかを把握できます。なりすまし攻撃の早期発見に役立ちます。すぐ使える「運用レシピ」3選
個人サイトなら「フォーム一本化+Honeypot+Turnstile」、事業サイトなら「フォーム主導線+WAFレート制限+SPF/DKIM/DMARC」、WordPressなら「Contact Form 7+Honeypotプラグイン+Turnstile+Cloudflare Email Obfuscation」の組み合わせが現実的です。
レシピ1:個人サイト/ポートフォリオ
☑ 生メアドは載せない(フォーム一本化)
☑ フォーム:Honeypot + Turnstile
☑ どうしても載せるなら:CSS @後付け or [at][dot]表記を補助で
☑ 受信用アドレスは専用化(捨てやすいもの)
レシピ2:事業サイト
☑ フォームを主導線に(自動返信+必須項目の最適化)
☑ WAF/CDNでレート制限(Cloudflare無料プランでも可)
☑ SPF/DKIM/DMARCを整備(なりすまし対策)
☑ フォームにはTurnstile + Honeypotの二重対策
レシピ3:WordPressで現実的に固める
☑ Contact Form 7 または WPForms でフォーム作成
☑ Honeypot for Contact Form 7 をインストール
☑ Cloudflare Turnstile を設定
☑ 可能ならCloudflareの Email Obfuscation を併用(補助輪)
☑ SPF/DKIMはサーバー設定で(多くのレンタルサーバーは対応済み)
よくある質問(FAQ)
「メアドを消したらスパムは止まるか」「robots.txtでDisallowすればOKか」「右クリック禁止で守れるか」「DMARCで迷惑メールが減るか」「Turnstileは本当に無料か」「SPF/DKIM/DMARCは自分で設定できるか」の6問に、根拠を持って回答します。
Q1. メアドをページから消したらスパムは止まりますか?
減ることはありますが、完全停止は難しいです。一度スパムリストに載ると売買・共有されて拡散します。根本対策は「今後増やさない構造(フォーム中心)」を作ることです。
Q2. robots.txtで連絡先ページをDisallowすればOKですか?
善良なクローラーには効きますが、悪性スクレイパーは無視します。本当に検索に出したくないならnoindexメタタグを使いましょう。
Q3. 右クリック禁止やコピー禁止JSで守れますか?
ほぼ意味がありません。スクレイピングはブラウザを使わず直接HTTPリクエストでHTMLを取得します。「取られても困らない設計」と「取るコストを上げる」が現実的な対策です。
Q4. DMARCを入れれば迷惑メールが減りますか?
「あなたのドメインのなりすまし」は減らせます。ただし受信するスパム全体をゼロにする仕組みではありません。
Q5. Cloudflare Turnstileは本当に無料ですか?
はい、完全無料で回数制限もありません。Google reCAPTCHAは月間10,000件を超えると有料になりますが、Turnstileにはその制限がありません。
Q6. SPF/DKIM/DMARCは自分で設定できますか?
多くのレンタルサーバーでは管理画面から簡単に設定できます。Xserver、ConoHa WING、お名前.comなど主要サービスではSPF/DKIMは標準対応済みです。DMARCは1行のTXTレコードを追加するだけです。
まとめ:勝ち筋は「出さない」+「フォーム防御」+「メール認証」
スパム対策の勝ち筋は「A. 生メアドを出さない」「C. フォームをHoneypot+Turnstileで固める」「E. SPF/DKIM/DMARCでなりすましを防ぐ」の3本柱で、B(難読化)とD(転載対策)は補助レイヤーとして併用する多層防御が最も効果的です。
この記事で解説した5つのレイヤーをまとめます。
| レイヤー | 対策 | 重要度 |
|---|---|---|
| A | 生メアドを出さない・フォーム中心に設計 | 最重要 |
| B | 難読化(Cloudflare Obfuscation / CSS / [at][dot]) | 補助 |
| C | フォームをHoneypot+Turnstile+レート制限で固める | 重要 |
| D | 転載されても被害が小さい構造+WAF | 補助 |
| E | SPF/DKIM/DMARCでなりすまし防止 | 重要 |
どれか1つではなく、重ねがけ(レイヤー構造)が効くというのがこの記事の主旨です。スパム対策は「やったら終わり」ではなく、定期的な見直しが必要です。
参考資料(公式ドキュメント中心)
対策の実装時に参照すべき公式ドキュメントをCloudflare・Google・メール認証・WordPressの4カテゴリでまとめています。










コメント