Как скрыть значок reCAPTCHA v3, не сломав его

hide recaptcha badge - How to Hide the reCAPTCHA v3 Badge Without Breaking It

Значок reCAPTCHA можно скрыть. Google это разрешает. Но есть нюанс, который большинство руководств пропускает: его нужно заменить видимым текстом-атрибуцией, иначе вы нарушите Условия использования reCAPTCHA. В этом руководстве разобраны рабочий CSS, точная формулировка, которую требует Google, и как после этого убедиться, что v3 по-прежнему оценивает ваш трафик.

Почему бейдж вообще появляется

У reCAPTCHA v3 нет ни флажка, ни головоломки с картинками. Она незаметно оценивает посетителей в фоне. Плавающий значок в правом нижнем углу — единственный признак того, что он работает на вашем сайте, и в этом весь смысл. Через этот значок Google сообщает вашим пользователям о сборе данных.

Изучите его — и вы найдёте обёртку с встроенными стилями вроде этих:

<div class="grecaptcha-badge" data-style="bottomright" style="
  width: 256px;
  height: 60px;
  position: fixed;
  visibility: visible;
  right: -186px;      /* collapsed, only the 70px logo sticks out */
  bottom: 14px;
  box-shadow: gray 0px 0px 5px;
  transition: right 0.3s ease 0s;
"></div>

Тот right: -186px сбивает людей с толку больше всего остального в значке, и это не баг. Значок имеет ширину 256px, и Google прячет 186px из них за пределами экрана, так что видна только плитка с логотипом. Наведите на него курсор, и переход выдвинет его обратно right: 0 чтобы открыть полную панель.

Важная деталь в том, что это встроенный стилями. Обычный right: -256px правило в вашей таблице стилей проигрывает в борьбе за специфичность, и именно поэтому так много попыток незаметно сдвинуть значок ни к чему не приводят.

Что на самом деле говорят условия Google

FAQ по reCAPTCHA от Google разрешает скрывать значок при одном условии:

Вам разрешено скрывать значок при условии, что вы включите брендинг reCAPTCHA на видном месте в пользовательском процессе.

На практике: если значок скрыт, упоминание об использовании reCAPTCHA должно быть видно на каждой странице или в каждой форме, где работает reCAPTCHA. Не спрятано в политике конфиденциальности. Не внутри свёрнутого аккордеона в футере. Видимое, в потоке, там, где действительно находится пользователь.

Сайты, которые скрывают значок без указания авторства, рискуют тем, что их site key будет отключён. Это реальный механизм принуждения, а не теоретический, поэтому он стоит тридцати секунд вашего времени.

Шаг 1: скройте значок с помощью CSS

Использовать visibility: hidden, а не display: none. Установка display: none полностью убирает элемент из дерева компоновки, и из-за этого скрипт reCAPTCHA вёл себя некорректно в определённых сочетаниях браузера и загрузки скрипта. Свойство visibility сохраняет блок измеримым, но при этом делает его невидимым.

/* Hide the reCAPTCHA v3 badge.
   Google's inline styles set visibility: visible, so !important
   is genuinely required here. */
.grecaptcha-badge {
    visibility: hidden !important;
}

Если вы хотите убрать его только на определённых страницах, ограничьте его область вместо глобального применения:

/* Only hide the badge on checkout and contact. */
body.page-checkout .grecaptcha-badge,
body.page-contact .grecaptcha-badge {
    visibility: hidden !important;
}

Шаг 2: добавьте атрибуцию

Вставьте это прямо под кнопкой отправки на каждой форме, где используется reCAPTCHA. Обе ссылки обязательны. Обычный текст без них не удовлетворяет условию.

<p class="recaptcha-terms">
  This site is protected by reCAPTCHA and the Google
  <a href="https://policies.google.com/privacy">Privacy Policy</a> and
  <a href="https://policies.google.com/terms">Terms of Service</a> apply.
</p>

Мелкий шрифт допустим, но он должен оставаться читаемым. Требование в том, чтобы упоминание было видимым, и серый текст 8px на сером фоне не выдержит проверки, если кто-то присмотрится:

.recaptcha-terms {
    font-size: 0.8rem;
    line-height: 1.4;
    color: #6b7280;
    margin-top: 0.75rem;
}

Шаг 3: убедитесь, что v3 по-прежнему работает

Скрытие значка не должно влиять на генерацию токена, но лучше это подтвердить, а не надеяться. Откройте консоль на своей странице и запросите токен вручную:

// Paste into the browser console on your own page.
// A healthy v3 setup returns a long token starting with "03A".
grecaptcha.ready(function () {
    grecaptcha
        .execute("YOUR_SITEKEY", { action: "verify" })
        .then(function (token) {
            console.log("token length:", token.length);
            console.log(token.slice(0, 24) + "...");
        });
});

Получаете токен обратно — значит, ваш CSS ничего не сломал. Если возникает ошибка grecaptcha is not defined, скрипт reCAPTCHA изначально вообще не загрузился, и значок здесь ни при чём. Вы можете сравнить с заведомо рабочей настройкой на нашей живая демо-страница reCAPTCHA v3.

Есть одна оговорка, о которой стоит знать: токен доказывает, что скрипт отработал, а не то, что ваша оценка в порядке. Скрытие значка никак не влияет на оценку, а вот многое другое влияет. Низкие оценки — это отдельная проблема с отдельным решением.

Чего не следует делать

ПодходПочему это не работает
display: noneУдаляет элемент из разметки. Вызывало нестабильное поведение при разных сочетаниях браузера и загрузки скриптов.
opacity: 0 без указания авторстваЭто всё равно нарушение условий. Invisible остаётся невидимой, с какого бы ресурса вы сюда ни попали.
Удаление узла с помощью JavaScriptСкрипт может внедрить его заново, и вы зря создали состояние гонки.
Упоминание только в политике конфиденциальностиGoogle запрашивает это явно в пользовательском сценарии, а не прячет на отдельной странице.
z-index: -1Непредсказуемо задвигает значок за другие элементы. На страницах без фона он всё равно может отображаться.

Часто задаваемые вопросы

Снижает ли скрытие значка мою оценку reCAPTCHA v3?

Нет. Оценка формируется из поведения пользователя и сигналов браузера, а не из того, виден ли значок на экране. Его скрытие никак не меняет то, как оценивается запрос.

Можно ли переместить бейдж вместо того, чтобы скрывать его?

Да, и это более безопасный вариант, если вас не устраивает только расположение. Установите data-badge="bottomleft" или data-badge="inline" на вашем элементе reCAPTCHA. С inline вы сами располагаете контейнер, и, поскольку значок остаётся видимым, текст атрибуции вам не нужен.

Применимо ли это к reCAPTCHA v2?

Только к invisible v2. Виджет-чекбокс v2 сам является уведомлением, поэтому отдельного значка, с которым нужно разбираться, нет. Invisible v2 показывает тот же плавающий значок, что и v3, и подчиняется тем же правилам. Наше руководство по что такое reCAPTCHA и как она работает охватывает различия между версиями.

Действительно ли Google будет это применять?

Site key могут быть отключены за нарушение условий. Для сайтов с низким трафиком это редкость, но добавление сниппета атрибуции занимает полминуты, поэтому нет реальной причины идти на риск.

Сводка

Скройте значок с помощью visibility: hidden !important, добавьте абзац с указанием авторства и обеими ссылками Google под кнопкой отправки, затем убедитесь в консоли, что генерация токена по-прежнему работает. Это весь путь к соответствию требованиям, и он занимает около пяти минут.

Если вы работаете с reCAPTCHA v3 в коде, а не просто оформляете её, CapSkip — это локальный сервис распознавания капчи который работает на вашей собственной машине и возвращает токены через API, который вы уже используете. Наш решение для reCAPTCHA v3 странице есть детали интеграции.