カテゴリ: PHP 更新日: 2026/01/31

PHPでGoogle reCAPTCHAをフォームに導入する方法!初心者にもわかるスパム対策ガイド

PHP の Google reCAPTCHA をフォームに導入
PHP の Google reCAPTCHA をフォームに導入

先生と生徒の会話形式で理解しよう

生徒

「先生、最近フォームに変なメッセージが届くことが多いんですけど、どうしたらいいですか?」

先生

「それはスパムボットの仕業かもしれませんね。Googleが提供している『reCAPTCHA(リキャプチャ)』という仕組みを使えば、ロボットによる送信を防ぐことができますよ。」

生徒

「reCAPTCHAって聞いたことあるけど、どうやってPHPのフォームに入れるんですか?」

先生

「では、reCAPTCHAを使うための基本から、導入方法まで順番に解説していきましょう!」

-

1. Google reCAPTCHAとは?初心者向けにやさしく解説

1. Google reCAPTCHAとは?初心者向けにやさしく解説
1. Google reCAPTCHAとは?初心者向けにやさしく解説

Google reCAPTCHA(リキャプチャ)は、インターネットのフォームを守るためのセキュリティ機能です。スパムやボット(自動プログラム)による不正な投稿を防ぎ、人間だけがフォームを送信できるようにします。

例えば「信号機の画像を選んでください」といった質問を見たことがあるかもしれませんね。あれがreCAPTCHAの仕組みの一つです。

2. reCAPTCHAの種類と選び方

2. reCAPTCHAの種類と選び方
2. reCAPTCHAの種類と選び方

現在のreCAPTCHAには以下の2種類があります:

  • v2(チェックボックス型)
    「私はロボットではありません」というチェックボックスをクリックする形式。
  • v3(スコア判定型)
    ユーザーの動きを自動で判断し、裏側でスパムを検出します。画面に何も表示されないのが特徴です。

この記事では、初心者でも使いやすいv2(チェックボックス型)を使います。

3. Google reCAPTCHAの登録方法(無料)

3. Google reCAPTCHAの登録方法(無料)
3. Google reCAPTCHAの登録方法(無料)

まずはGoogleの公式サイトにアクセスして、reCAPTCHAを使う準備をします。

  1. reCAPTCHA 管理ページにアクセスします。
  2. Googleアカウントでログインします。
  3. 「Label」にサイト名を入力(自分だけが分かる名前でOK)。
  4. 「reCAPTCHAタイプ」は「reCAPTCHA v2」を選び、「私はロボットではありません」にチェック。
  5. 「ドメイン」にサイトのURLを入力(例:example.com)。
  6. 「利用条件に同意」にチェックし、「送信」をクリック。

登録が完了すると「サイトキー」と「シークレットキー」が発行されます。これを後ほどPHPコードに使います。

4. HTMLフォームにreCAPTCHAを埋め込む

4. HTMLフォームにreCAPTCHAを埋め込む
4. HTMLフォームにreCAPTCHAを埋め込む

次に、フォームの中にreCAPTCHAを表示するコードを追加します。


<form action="check.php" method="post">
    <input type="text" name="name" placeholder="お名前">
    <input type="email" name="email" placeholder="メールアドレス">
    
    <!-- reCAPTCHAの表示 -->
    <div class="g-recaptcha" data-sitekey="あなたのサイトキー"></div>
    
    <input type="submit" value="送信">
</form>

<!-- reCAPTCHAのスクリプト読み込み -->
<script src="https://www.google.com/recaptcha/api.js" async defer></script>

data-sitekeyの部分には、先ほど取得した「サイトキー」を入れてください。

-

5. PHPでreCAPTCHAのチェックを行う

5. PHPでreCAPTCHAのチェックを行う
5. PHPでreCAPTCHAのチェックを行う

次に、フォームから送信された情報をPHPで受け取り、reCAPTCHAの認証を行います。下記はcheck.phpのサンプルです。


<?php
$secret = "あなたのシークレットキー";
$response = $_POST["g-recaptcha-response"];
$remoteip = $_SERVER["REMOTE_ADDR"];

$verify = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$secret&response=$response&remoteip=$remoteip");
$captcha_success = json_decode($verify);

if ($captcha_success->success) {
    echo "認証に成功しました。送信を受け付けました。";
} else {
    echo "reCAPTCHAの認証に失敗しました。もう一度やり直してください。";
}
?>

シークレットキーの部分も、Googleで取得したものを入れてください。

6. よくあるエラーと原因・対処法

6. よくあるエラーと原因・対処法
6. よくあるエラーと原因・対処法

フォームを送信しても「認証に失敗しました」と表示される場合:

  • サイトキーやシークレットキーが間違っている可能性があります。コピー&ペーストミスがないか確認してください。
  • reCAPTCHAのドメイン設定に自分のURLが入っていない可能性もあります。
  • インターネットが切れていたり、JavaScriptが無効になっている場合も失敗します。

7. スパム対策としてのreCAPTCHA導入の効果

7. スパム対策としてのreCAPTCHA導入の効果
7. スパム対策としてのreCAPTCHA導入の効果

reCAPTCHAを導入することで、自動投稿プログラム(ボット)による迷惑なフォーム送信を大幅に減らすことができます。特に、メールフォームやお問い合わせページなどでは必須ともいえる対策です。

また、reCAPTCHAを入れていると、Google検索の評価にも良い影響を与えることがあるとも言われています。

8. 応用:複数フォームや非公開ページにも使える

8. 応用:複数フォームや非公開ページにも使える
8. 応用:複数フォームや非公開ページにも使える

reCAPTCHAは1つのサイト内で複数のフォームに使うことができます。たとえば「お問い合わせフォーム」「会員登録フォーム」「コメント投稿フォーム」など、どこにでも貼り付けるだけで簡単にスパム対策が可能です。

ログインページやパスワードリセット画面にも導入しておくと、不正ログイン対策にもつながります。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
New1
Python
Pythonの抽象クラスとは?ABCモジュールを使った設計方法を初心者向けに解説
New2
PHP
PHP のデータ型を完全ガイド!初心者でもわかる int, string, float, bool など
New3
PHP
PHPのtry-catchで学ぶ例外処理入門!初心者でも理解できるエラーハンドリング基礎ガイド
New4
PHP
PHPのarray_mapの使い方を完全解説!初心者でもわかる配列の要素を一括変換する方法
-
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
No.2
Java&Spring記事人気No2
PHP
PHP のフォームバリデーション(入力チェック)を完全解説!初心者向けガイド
No.3
Java&Spring記事人気No3
Python
Pythonのクラスとは?初心者向けにわかるオブジェクト指向とインスタンス作成の基本
No.4
Java&Spring記事人気No4
PHP
PHPでREST APIを作る方法を完全ガイド!初心者でもわかるAPI開発入門
No.5
Java&Spring記事人気No5
PHP
初心者向けにPHP でファイルを開く・読み込む・書き込む方法(fopen, fwrite, fread)を解説する記事
No.6
Java&Spring記事人気No6
PHP
PHP のインストール方法(Windows・Mac・Linux)と開発環境
No.7
Java&Spring記事人気No7
Python
Pythonのコンストラクタ(__init__)の使い方を解説!初心者でもわかるオブジェクトの初期化
No.8
Java&Spring記事人気No8
PHP
PHPのバルクインサート完全ガイド!初心者でもわかる複数データの一括処理と高速なデータベース操作
-
-