Техническая оптимизация
Установка reCaptcha на сайт: подключение v2 и v3
Боты перегружают формы, отправляют спам и засоряют данные. reCAPTCHA от Google помогает установить защиту на сайт и фильтровать отправку заявок через v2 или v3. По данным Imperva, в 2024 году автоматизированный трафик превысил 40% интернет-активности.
Главная цель установки — закрыть формы от автоматических отправок и сохранить чистую информацию для CRM, аналитики и последующего поиска причин падения конверсии. Например, если на сайте много заявок без реальных контактов, капча становится базовым инструментом первичной фильтрации.
Что такое Google reCaptcha и зачем она нужна сайту
Google reCAPTCHA — сервис защиты веб-форм от автоматических отправок. Алгоритм анализирует поведение пользователей, помогает отличить человека от ботов и снижает поток спама через контактную форму.
Этот инструмент работает в сети как дополнительный слой безопасности: он не заменяет защиту сервера, лимиты запросов и валидацию полей, но помогает уменьшить количество мусорных отправок уже на первом шаге.

Виды reCaptcha: чем отличаются v2 и v3
У reCAPTCHA сейчас используют две основные версии: v2 с видимой валидацией и v3 с балльной системой. Первая показывает капчу, вторая оценивает действия без лишнего шага для пользователя.
| Параметр | reCaptcha v2 | reCaptcha v3 |
|---|---|---|
| Взаимодействие | Пользователь ставит галочку или выбирает изображения | Валидация идет незаметно на фоне |
| Результат проверки | Сервис подтверждает, что действие выполнил человек | Система возвращает оценку от 0.0 до 1.0 |
| Влияние на UX | Добавляет шаг перед отправкой формы | Не мешает заполнению формы |
| Сложность настройки | Проще для базового подключения | Требует настройки сценариев и пороговой оценки |
| Подходит для | Формы связи, регистрации, комментариев | Лендинги, интернет-магазины, личные кабинеты, сложные цепочки действий |
В примере с лендингом лучше начать с v3, если критична скорость заявки. Для формы регистрации, где необходимо явно подтвердить действие пользователя, v2 часто остается более понятным вариантом.
Как reCaptcha защищает формы от ботов и спама
Пользователь отправляет форму, система создает токен, сервер передает его в Google API, получает ответ и разрешает отправку либо блокирует роботный запрос.

На этом этапе важно не убирать серверную валидацию. Если оставить только клиентский script, бот сможет обойти форму прямым POST-запросом.
Как спам-боты вредят сайту: репутация, аналитика и SEO
Боты и вредоносные программы создают фальшивые действия на сайте. По отчету Imperva 2025, автоматизированный трафик составил 51% всего веб-трафика, а bad bots — 37%.
Три вида ущерба от спам-ботов
- Репутационный. Боты оставляют спам в комментариях, отзывах, формах связи и заявках.
- Аналитический. Ложные визиты, события и отправки искажают аналитику трафика, конверсию и качество рекламных данных.
- SEO. Роботные сессии могут портить поведенческие сигналы, создавать неактивные аккаунты и мешать оценке реального спроса.
Капча закрывает базовый уровень защиты сайта: фильтрует автоматические обращения до обработки формы и помогает сохранить чистые данные для маркетинга, продаж и SEO.
Если на сайте есть ссылки на формы из рекламы, email-рассылок или внешних каталогов, защита особенно важна: такие страницы чаще попадают в автоматические списки обхода.
Получение ключей Google reCaptcha: регистрация сайта
Для начала подключения нужен ключ защиты: публичный site key и приватный secret key. Google выдает их в Консоли администратора после авторизации через гугл-аккаунт, выбора типа валидации и добавления домена. Без этой пары интеграция на сайте не запускается: первый ключ ставят в клиентскую часть, второй используют только на сервере. В документации указано, что при регистрации нужно выбрать тип капчи, указать разрешенные домены, принять условия использования и получить новую пару API-ключей.
Перед регистрацией необходимо войти в аккаунт Google и заранее подготовить домен сайта. После нажатия кнопки создания проекта скопируйте полученные данные в безопасное место. Готово будет только после того, как ключи добавлены на сайт и протестированы в рабочем режиме.
Пошаговая регистрация домена в консоли Google reCaptcha
- Перейдите в Консоль администратора.
- Выполните авторизацию через гугл-аккаунт.
- Нажмите кнопку создания нового проекта.
- Введите ярлык, то есть название сайта или формы.
- Выберите тип: v2 или v3. Если позже потребуется другая версия защиты, создайте новую пару ключей.
- Укажите домен. Для одного ключа можно добавить основной домен и несколько доменов, включая поддомены. В документации уточняется, что ключ работает для заданного домена и поддоменов первого уровня.
- Примите условия использования и сохраните данные.
- Для локальной разработки добавьте localhost в список доменов. Документация рекомендует использовать отдельные ключи для разработки и продакшена.
Если в консоли есть отдельная вкладке с параметрами проекта, проверьте каждый пункт перед сохранением: домен, тип валидации, название и список разрешенных адресов.
Где найти site key и secret key после регистрации
После регистрации система покажет Ключ сайта и Секретный ключ. Site key можно вставлять в HTML или JavaScript, а secret key нельзя размещать в клиентском коде, публичном репозитории или открытых файлах. Admin Console позволяет смотреть site key и secret key в настройках сервиса. Лучше хранить secret в .env или серверном конфиге.
В формате проекта это обычно выглядит так: публичный ключ находится в шаблоне страницы, а секретный ключ хранится в переменных окружения. Такой подход соответствует базовым требованиями безопасности.
Установка reCaptcha v2 на сайт: пошаговая инструкция
Для установки v2 подготовьте site key, secret key, доступ к HTML-форме и PHP-обработчику. JavaScript подключает виджет, PHP валидирует токен на сервере.
Этот вариант удобен, если нужно добавить recaptcha на простую форму без сложной логики. В старых инструкциях иногда встречается связка captcha recaptcha, но в текущей статье речь идет именно о защите форм через сервис Google.
Добавление скрипта reCaptcha на страницу сайта
Чтобы подключить v2, добавьте скрипт Google на каждую страницу, где есть защищаемая форма. Атрибуты async и defer помогают JavaScript не задерживать отображение страницы. Документация описывает этот способ как стандартный вариант вывода виджета.
<script src="https://www.google.com/recaptcha/api.js" async defer></script>Проверьте загрузки скрипта в консоли браузера. Если на сайте включено агрессивное кэширование или оптимизация JavaScript, убедитесь, что script не объединяется с другими файлами и не переносится в место, где форма уже отрисована.
Вставка виджета капчи в HTML-форму
Вставьте блок g-recaptcha внутрь form перед кнопкой submit. Атрибут data-sitekey указывает публичный ключ сайта, а JavaScript автоматически добавляет скрытое поле g-recaptcha-response.
<form id="contactForm" action="send.php" method="post">
<label for="name">Имя</label>
<input type="text" id="name" name="name" required>
<label for="email">Электронный адрес</label>
<input type="email" id="email" name="email" required>
<label for="message">Текст сообщения</label>
<textarea id="message" name="message" required></textarea>
<div></div>
<button type="submit">Отправить</button>
</form>При необходимости можно добавить class для стилизации контейнера формы, но id формы должен оставаться уникальным на странице. Это упростит обработку нажатия кнопки и подключение JavaScript-логики.

Структура клиентской части: файл index.php с полной формой
Файл index.php собирает клиентскую интеграцию в одном месте: скрипт, поля формы обратной связи и кнопку отправки. Токен попадет в POST через g-recaptcha-response.
Такой пример помогает быстрее понять функции каждого фрагмента: форма собирает данные, виджет формирует токен, а обработчик передает информацию на сервер.
<?php
// index.php
// Клиентская часть формы с защитой v2.
// Замените YOUR_SITE_KEY на публичный ключ сайта из админ-консоли.
?>
<!doctype html>
<html lang="ru">
<head>
<meta>
<title>Форма обратной связи с защитой v2</title>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</head>
<body>
<form id="contactForm" action="send.php" method="post">
<label for="name">Имя</label>
<input type="text" id="name" name="name" autocomplete="name" required>
<label for="email">Электронный адрес</label>
<input type="email" id="email" name="email" autocomplete="email" required>
<label for="message">Текст сообщения</label>
<textarea id="message" name="message" rows="5" required></textarea>
<!-- Виджет v2 должен находиться внутри формы -->
<div></div>
<button type="submit">Отправить</button>
</form>
<div id="formResult"></div>
<script src="form.js"></script>
</body>
</html>Проверка токена reCaptcha на стороне сервера с помощью PHP
Серверная валидация обязательна: без нее робот может отправить POST-запрос напрямую в send.php и обойти виджет. PHP передает secret и токен в Google API siteverify. В документации указано, что параметр secret обязателен, response содержит пользовательский токен, а валидировать его нужно на backend.
Перед отправкой письма или записи заявки необходимо сверить ответ API. Это главный пункт всей настройки, потому что клиентская часть без серверной валидации не дает надежной защиты.
<?php
// send.php
header('Content-Type: application/json; charset=utf-8');
$secretKey = 'YOUR_SECRET_KEY';
$name = trim($_POST['name'] ?? '');
$email = trim($_POST['email'] ?? '');
$message = trim($_POST['message'] ?? '');
$token = $_POST['g-recaptcha-response'] ?? '';
if ($name === '' || $email === '' || $message === '') {
http_response_code(400);
echo json_encode([
'success' => false,
'message' => 'Заполните все поля формы.'
]);
exit;
}
if ($token === '') {
http_response_code(400);
echo json_encode([
'success' => false,
'message' => 'Подтвердите защиту формы.'
]);
exit;
}
$verifyUrl = 'https://www.google.com/recaptcha/api/siteverify';
$postData = http_build_query([
'secret' => $secretKey,
'response' => $token,
'remoteip' => $_SERVER['REMOTE_ADDR'] ?? null
]);
$ch = curl_init($verifyUrl);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $postData,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10
]);
$googleResponse = curl_exec($ch);
$curlError = curl_error($ch);
curl_close($ch);
if ($googleResponse === false) {
http_response_code(502);
echo json_encode([
'success' => false,
'message' => 'Валидация временно недоступна.',
'error' => $curlError
]);
exit;
}
$result = json_decode($googleResponse, true);
if (empty($result['success'])) {
http_response_code(403);
echo json_encode([
'success' => false,
'message' => 'Валидация не пройдена.',
'error' => $result['error-codes'] ?? []
]);
exit;
}
// Здесь можно отправить письмо, записать заявку в CRM или сохранить данные.
echo json_encode([
'success' => true,
'message' => 'Сообщение отправлено.'
]);Что содержит ответ Google reCaptcha API
- success. Показывает, прошла ли валидация.
- challenge_ts. Время выполнения контрольного действия.
- hostname. Домен, на котором был создан токен.
- error-codes. Список технических кодов, если запрос не прошел.
У токена есть ограничение: документация указывает срок действия две минуты и одноразовую валидацию, поэтому сервер должен обработать его сразу после отправки формы.
JS-обработчик формы и fetch-запрос для отправки токена
JavaScript-обработчик отправляет форму через fetch без перезагрузки страницы. Сервер возвращает JSON с полем success, а скрипт показывает пользователю результат и сбрасывает виджет v2.
В режиме AJAX-передачи пользователь не теряет введенный текст, а сайт может показать понятное сообщение после нажатия кнопки. Это повышает удобство формы и снижает лишние повторные отправки.
// form.js
const form = document.getElementById('contactForm');
const resultBox = document.getElementById('formResult');
form.addEventListener('submit', async function (event) {
event.preventDefault();
const formData = new FormData(form);
try {
const response = await fetch('send.php', {
method: 'POST',
body: formData
});
const result = await response.json();
resultBox.textContent = result.message;
if (result.success) {
form.reset();
if (typeof grecaptcha !== 'undefined') {
grecaptcha.reset();
}
}
} catch (error) {
resultBox.textContent = 'Форма временно не отправлена. Повторите действие позже.';
}
});Преимущества fetch-подхода
- Нет перезагрузки страницы после отправки формы.
- Можно обработать ответ сервера и показать понятное сообщение.
- Алгоритм легко перенести на v3, где защита работает без видимого виджета.
Установка невидимой reCaptcha v3: настройка и интеграция
v3 подходит для проектов, где важен гладкий UX: эта версия работает без видимого задания, а JavaScript получает токен, который PHP валидирует на сервере по оценке Google. Документация описывает v3 как систему, которая возвращает score без прерывания пользователя.
Сценарии использования recaptcha v3 лучше заранее разделить по цели: отправка формы, вход в личный кабинет, регистрация, подписка, заявка на расчет. Так в консоли проще смотреть recaptcha data и понимать, какие действия получают низкую оценку.
Подключение скрипта v3 и настройка параметра action
Подключите скрипт v3 через render с ключом сайта. Параметр action указывает сценарий: contact, login, register, submit. Так в консоли проще смотреть качество трафика по следующим действиям.
<script src="https://www.google.com/recaptcha/api.js?render=YOUR_SITE_KEY"></script>
<form id="contactForm" action="send.php" method="post">
<input type="text" name="name" required>
<input type="email" name="email" required>
<textarea name="message" required></textarea>
<input type="hidden" name="recaptcha_token" id="recaptchaToken">
<button type="submit">Отправить</button>
</form>
<script>
const siteKey = 'YOUR_SITE_KEY';
const form = document.getElementById('contactForm');
const tokenField = document.getElementById('recaptchaToken');
form.addEventListener('submit', function (event) {
event.preventDefault();
grecaptcha.ready(function () {
grecaptcha.execute(siteKey, { action: 'contact' }).then(function (token) {
tokenField.value = token;
form.submit();
});
});
});
</script>Документация рекомендует вызывать execute именно в момент защищаемого действия, так как токены действуют две минуты.
Для отладки можно подробнее посмотреть свойства ответа в серверном логе: success, score, action и hostname. Это помогает понять, правильно ли выбран action и не смешиваются ли разные формы в одной статистике.
Серверная проверка оценки пользователя для reCaptcha v3
На стороне сервера PHP отправляет token и secret в API сервиса. Для обычной формы можно начать с порога 0.5, для оплаты поднять до 0.7, для подписки снизить до 0.3 и затем настроить по данным.
<?php
header('Content-Type: application/json; charset=utf-8');
$secretKey = 'YOUR_SECRET_KEY';
$token = $_POST['recaptcha_token'] ?? '';
$expectedAction = 'contact';
$scoreThreshold = 0.5;
if ($token === '') {
http_response_code(400);
echo json_encode([
'success' => false,
'message' => 'Токен не получен.'
]);
exit;
}
$verifyUrl = 'https://www.google.com/recaptcha/api/siteverify';
$postData = http_build_query([
'secret' => $secretKey,
'response' => $token,
'remoteip' => $_SERVER['REMOTE_ADDR'] ?? null
]);
$ch = curl_init($verifyUrl);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $postData,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10
]);
$googleResponse = curl_exec($ch);
curl_close($ch);
$result = json_decode($googleResponse, true);
if (
empty($result['success']) ||
($result['score'] ?? 0) < $scoreThreshold ||
($result['action'] ?? '') !== $expectedAction
) {
http_response_code(403);
echo json_encode([
'success' => false,
'message' => 'Валидация v3 не пройдена.',
'score' => $result['score'] ?? null,
'action' => $result['action'] ?? null,
'error' => $result['error-codes'] ?? []
]);
exit;
}
echo json_encode([
'success' => true,
'message' => 'Валидация пройдена.',
'score' => $result['score']
]);Отличия серверной валидации v3 от v2
- Числовая оценка score вместо только boolean-ответа success.
- Самостоятельный выбор порогового значения.
- Дополнительная сверка поля action.
- Вывод решения остается на стороне сайта: пропустить, отправить на модерацию или запросить дополнительное подтверждение.
Если количество ложных блокировок растет, не снижайте порог сразу. Сначала сравните action, IP-адреса, user-agent, время отправки и источник перехода. Так настройка будет опираться на факты, а не на догадки.
Подключение reCaptcha к WordPress через плагин
Для WordPress подключение через плагин обычно быстрее, чем ручная PHP-интеграция: CMS берет на себя вывод валидации, привязку к формам и базовую настройку.
Такой вариант подходит, когда нужно быстро установить защиту в панели управления без правки файлов темы. При этом важно использовать плагин, совместимый с текущей версией CMS и требованиями сайта.
Выбор плагина reCaptcha для WordPress: сравнение вариантов
Популярные плагины reCaptcha для WordPress:
- Contact Form 7 Captcha. Вариант для форм Contact Form 7: поддерживает v2, v3, hCaptcha и Cloudflare Turnstile. Подходит, когда нужен отдельный видимый блок валидации в форме.
- CAPTCHA 4WP. Практичный вариант для WordPress-форм, страниц входа, регистрации и комментариев. Плагин поддерживает V2, V2 Invisible и V3 noCAPTCHA, а также настройку passmark score для v3.
- WPForms. Подходит, если сайт уже использует WPForms: настройка защиты находится в WPForms → Settings → CAPTCHA, далее выбирается тип и вводятся ключи.
При выборе оцените не только функции, но и частоту обновлений, совместимость с формами, поддержку нужной версии и наличие опций для отдельных страниц.
Пошаговая настройка плагина: ввод ключей и привязка к формам
- Откройте панель управления WordPress.
- Перейдите в Плагины → Добавить новый.
- Введите название плагина в поисковая строка.
- Нажмите Установить, затем Активировать.
- Откройте раздел Настройки выбранного плагина.
- Добавьте Ключ сайта и Секретный ключ.
- Выберите формы, где должна работать капча.
- Нажмите Сохранить и откройте форму в браузере.
Важный момент: если домен в админ-консоли указан иначе, чем фактический домен сайта, виджет может не появиться или валидация не пройдет. Для WPForms документация отдельно отмечает, что каждый тип защиты требует свой набор ключей.
После включения проверьте страницу в режиме инкогнито. Так можно увидеть форму глазами обычного посетителя, а не администратора, у которого часть контрольных сценариев иногда отключается настройками сайта.
Интеграция reCaptcha с Contact Form 7: шорткод и настройка формы
Contact Form 7 остается одним из самых массовых решений для форм WordPress: на WordPress.org сейчас указано 10+ млн активных установок. Встроенная интеграция Contact Form 7 5.1 и выше использует v3 и работает в фоне без шорткода. Для нее путь такой: Contact → Integration → reCAPTCHA → Setup Integration, затем ввод site key и secret key.
Если используется отдельный плагин Contact Form 7 Captcha, добавьте шорткод перед кнопкой отправки в Шаблон формы:
[text* your-name placeholder "Имя"]
[email* your-email placeholder "Email"]
[textarea your-message placeholder "Сообщение"]
[cf7-simple-recaptcha]
[submit "Отправить"]После сохранения откройте страницу с формой WordPress и убедитесь, что виджет отображается перед кнопкой отправки.
Если блок не появился, вернитесь в настройки интеграции, сверьте ключи и убедитесь, что форма опубликована на странице, где не отключены сторонние скрипты.
Распространённые ошибки при установке reCaptcha и способы их устранения
reCAPTCHA от Google обычно дает понятные сигналы: если капча не отображается или не проходит валидацию, причину можно быстро найти через ключ, домен и JavaScript.
Для быстрой диагностики сохраните список контрольных шагов и проходите его по порядку. Это сокращает время поиска и помогает не менять рабочие настройки случайно.
Ошибка «ERROR for site owner: Invalid domain» — причины и решение
Сообщение invalid domain появляется, когда домен сайта не совпадает с доменами в консоли. Проверьте www и без www, localhost для тестов, хостинг, корректность site key и лишние пробелы в ключе. После правки сохраните изменения и обновите страницу.
Если сайт работает через зеркало или CDN, проверьте, какой домен фактически видит пользователь в адресной строке. Иногда ошибка появляется после переноса на новый хостинг или смены основного домена.
Капча не отображается или не проходит проверку — что делать
Если капча не работает, сначала откройте консоль браузера через F12. JavaScript часто прямо показывает error, конфликт скриптов или неверный src.
Чеклист: что проверить, если reCaptcha не работает
- async и defer стоят в строке подключения скрипта;
- site key вставлен без пробелов и лишних символов;
- secret key скрыт и используется только на сервере;
- домен добавлен в админ-консоли;
- нет конфликта JavaScript-библиотек;
- форма находится внутри тега form;
- в настройках формы заполнено поле Invalid captcha error message.
Также посмотрите, не блокируют ли загрузку скрипта расширения браузера, политика Content Security Policy или оптимизаторы скорости. В некоторых случаях помогает временно отключить минификацию и кэширование JavaScript.
Заключение: reCaptcha как базовая защита любого сайта
Итог: v2 подходит для видимой защиты форм от ботов, v3 — для гладкого UX. В WordPress ставьте плагин. Серверная валидация токена обязательна; завершите настройку в reCAPTCHA Admin Console.
Этот механизм не отменяет остальные меры безопасности сайта, но дает понятный результат: меньше спам-ботов, чище заявки, точнее аналитика и спокойнее обработка форм.
Часто задаваемые вопросы об установке reCaptcha
Что такое reCAPTCHA и от чего она защищает?
reCAPTCHA — сервис Google для защиты сайта от автоматических действий: спама в формах, массовых регистраций, подозрительных отправок и роботного трафика. Документация описывает его как бесплатный инструмент, который использует анализ рисков, чтобы отличать людей от ботов.
Для владельца сайта это инструмент первичной фильтрации. Он помогает защитить формы, комментарии, вход в аккаунт и другие точки, где пользователь отправляет данные.
Как подключить reCaptcha на сайте?
Для подключения нужно получить site key и secret key, добавить клиентский скрипт на страницу с формой и настроить серверную валидацию токена. В документации указано, что site key вызывает защиту на сайте, а secret key используется backend-частью для обработки ответа.
Если нужно добавить recaptcha в CMS, чаще используют плагин. Если сайт написан вручную, подключение делают через HTML, JavaScript и серверный обработчик.
Какой тип reCaptcha выбрать: v2 или v3?
v2 подходит, когда нужна видимая валидация: чекбокс, виджет или дополнительное задание. v3 выбирают для более гладкого UX: она не прерывает пользователя и возвращает score, по которому сайт сам принимает решение.
Для форм с высоким риском спама часто начинают с v2. Для страниц, где важна скорость отправки, используют v3 и анализируют оценку действий.
Где получить ключ сайта и секретный ключ reCaptcha?
Ключи создаются в reCAPTCHA Admin Console после регистрации сайта. В процессе указывают тип защиты и разрешенные домены. После регистрации сервис выдает пару: публичный ключ сайта и секретный ключ для серверной валидации.
После создания проекта скопируйте оба значения и сохраните их в безопасном формате. Публичный ключ можно показывать в коде страницы, секретный ключ должен оставаться только на сервере.
Бесплатна ли reCAPTCHA от Google для использования на сайте?
Да, у сервиса есть бесплатный уровень. По актуальным данным Cloud, reCAPTCHA Essentials предоставляет до 10 000 бесплатных assessments в месяц на организацию. При большем объеме используются платные уровни или расширенные тарифы.
Перед внедрением стоит оценить количество отправок форм и защищаемых действий. Это поможет заранее понять, хватит ли бесплатного уровня использования recaptcha для текущего трафика.
Как исправить ошибку «Invalid captcha» после установки reCAPTCHA?
Сначала проверяют домен в консоли, корректность site key и secret key, наличие серверной валидации и работу JavaScript на странице. Также важно не смешивать ключи разных версий: ключи v2 не подходят для настройки v3 и наоборот.
Если ошибка появилась после обновления сайта, проверьте последние изменения: кэширование, перенос домена, включение нового плагина или изменение шаблона формы.
Как проверить, правильно ли установлена reCAPTCHA на сайте?
Нужно отправить тестовую форму, открыть консоль браузера, сверить появление токена и убедиться, что сервер получает успешный ответ от API. В документации уточняется, что токен нужно валидировать в течение двух минут, и он действует только один раз.
Дополнительно посмотрите статистику в админ-консоли. Если запросы фиксируются, а форма не отправляется, причину следует искать в серверной логике, обработке ответа или настройках полей.