Clew

ГлавнаяИнструментыМаркетингГенератор формы обратной связи

Генератор формы обратной связи для сайта

Отметьте поля, выберите, куда уходит заявка, укажите оператора и ссылку на политику — и заберите готовый код: разметку с подписями и aria, стили без библиотек и скрипт валидации, который показывает ошибку рядом с полем, а не в системном пузыре. Согласие на обработку персональных данных собрано так, как этого требует 152-ФЗ: отдельный чекбокс, названный оператор, цель и перечень данных.

● Бесплатно, без регистрацииОбновлено:

Поля формы

Поле «Сообщение» есть всегда: без него это не форма обратной связи.

Через запятую. Используются, если включено поле «Тема обращения».
Каждое лишнее обязательное поле — это люди, которые закрыли форму. Телефон обязателен, только если вы правда перезваниваете.
Куда уходит заявка
Путь к скрипту, URL вебхука или адрес формы сервиса.
Согласие на обработку данных
Название по уставу или ФИО индивидуального предпринимателя — то же, что в политике.
Адрес страницы с политикой обработки персональных данных на вашем сайте.

—

 

Полей в форме— 
Обязательных— 
Размер кода— 
Зависимостей— 

Живая форма

Форма в рамке настоящая: нажмите «Отправить» с пустыми полями и посмотрите, как ведут себя ошибки и фокус. Отправка в предпросмотре никуда не уходит.

Правила проверки

Поля формы, их правила валидации и сообщения об ошибках
ПолеПравилоСообщение

Что уже сделано за вас

    Как это устроено. Атрибут novalidate выключает системные подсказки браузера, а проверка идёт на отправке: сообщение попадает в абзац, на который ссылается aria-describedby поля, поле получает aria-invalid, фокус уходит на первое неверное. Результат отправки объявляется в блоке с role="status".

    Расчёт идёт в вашем браузере — введённые данные никуда не отправляются.

    Как пользоваться

    1. Оставьте только нужные поляИмя, почта и сообщение закрывают почти все обращения. Телефон, компанию и тему включайте, если с ними действительно работают: каждое лишнее обязательное поле стоит части заявок.
    2. Выберите способ отправкиОбычный POST — если на сайте есть PHP или другой обработчик. fetch — если заявка уходит в вебхук CRM или чат-бота и страницу перезагружать не нужно. Почтовый сервис — когда бэкенда нет вообще.
    3. Заполните блок согласияВпишите оператора так, как он назван в уставе, и дайте ссылку на политику. Текст согласия соберётся сам: оператор, перечень данных, цель и возможность отозвать.
    4. Проверьте форму в рамке и заберите кодНажмите «Отправить» с пустыми полями и посмотрите на ошибки. Дальше — три блока: HTML в страницу, CSS в стили, JS перед закрывающим тегом body.

    Сколько полей ставить

    Форма обратной связи конкурирует не с другой формой, а с желанием закрыть вкладку. Каждое поле — это решение, которое человек принимает на ходу, и обязательное поле, смысл которого непонятен, читается как повод уйти.

    Рабочий минимум — имя, способ связи и сообщение. Всё остальное добавляют, когда на это есть процесс:

    • Телефон — только если вы перезваниваете. Иначе это поле, которое заполняют неохотно и с ошибками.
    • Компания — в B2B, где заявку маршрутизируют по сегменту.
    • Тема обращения — когда обращения правда разъезжаются по разным людям. Список из трёх-четырёх понятных вариантов, без «Другое» первым пунктом.
    • Файл — в поддержке и в работе с документами. Требует обработчика с multipart/form-data: в вебхук через fetch файл не уйдёт.

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

    Валидация: что показывать и когда

    Браузер умеет проверять поля сам, но его подсказки — системный пузырь, который исчезает по клику, не переводится под ваш текст и плохо дружит со скринридером. Поэтому в сгенерированном коде у формы стоит novalidate, а проверку делает скрипт.

    Порядок, который не раздражает:

    1. Во время первого ввода — молчим. Красный текст под полем, которое человек ещё заполняет, — это претензия на пустом месте.
    2. При уходе из поля — проверяем. Поле потеряло фокус, значит, человек считает его заполненным.
    3. На отправке — проверяем всё, показываем все ошибки сразу и переводим фокус на первое неверное поле.
    4. Дальше — на каждый ввод: ошибка исчезает в тот момент, когда её исправили, а не после второй попытки отправить.

    Текст ошибки говорит, что сделать: «Проверьте адрес: он должен быть вида имя@домен.ru» вместо «Некорректное значение». Проверка почты — одно простое правило «есть что-то, собака, домен с точкой»: формально верный адрес всё равно ничего не доказывает, а сложные регулярные выражения регулярно отбрасывают живые адреса.

    novalidate на форме → системные пузыри выключены blur → проверить одно поле submit → проверить все, фокус на первое неверное input (после ошибки) → пересчитать на лету

    Согласие на обработку персональных данных

    Имя, телефон, почта и текст обращения — персональные данные. Их обработка по закону № 152-ФЗ «О персональных данных» требует согласия, и оно должно быть конкретным и осознанным: человек понимает, кому и зачем даёт данные.

    На практике это значит вот что:

    • Отдельный чекбокс, не отмеченный заранее. Галочка по умолчанию — не действие человека, а действие разработчика. Роскомнадзор и суды исходят из того, что согласие выражается активно.
    • Назван оператор. «ООО „Ромашка“», а не «мы». Название должно совпадать с тем, что написано в политике.
    • Названы данные и цель. «Персональных данных, указанных в этой форме, для ответа на обращение» — цель узкая. Согласие на ответ по обращению не даёт права на рассылку; для неё нужна отдельная галочка со своей формулировкой.
    • Ссылка на политику. Политика обработки персональных данных должна быть опубликована и доступна — это отдельное требование статьи 18.1, независимо от формы.
    • Упомянут отзыв. Право отозвать согласие есть по закону; строчка об этом снимает половину вопросов.

    Отправку по-хорошему стоит блокировать до отметки — что и делает сгенерированный скрипт, с отдельным сообщением об ошибке. Кнопку при этом не блокируют: недоступная кнопка без объяснения выглядит как сломанный сайт.

    Текст в генераторе — рабочая заготовка для обычной формы обратной связи, а не юридическое заключение. Если вы передаёте данные в CRM стороннего вендора, собираете данные детей или используете обращения для маркетинга, формулировку нужно править вместе с юристом.

    Доступность формы: шесть вещей, которые решают всё

    1. Настоящий <label for> у каждого поля. Плейсхолдер вместо подписи исчезает при вводе, и человек забывает, что он заполняет; скринридер плейсхолдер может и не прочитать.
    2. Ошибка связана с полем через aria-describedby: при переходе в поле озвучивается и подпись, и текст ошибки.
    3. aria-invalid="true" ставится и снимается. Атрибут, повешенный навсегда, делает форму бесконечно ошибочной для скринридера.
    4. Фокус виден. :focus-visible с отступом; outline: none без замены — самый частый способ сломать клавиатуру.
    5. Результат отправки объявляется. Абзац с role="status" и aria-live="polite": иначе зрячий видит «Спасибо», а незрячий — тишину.
    6. Проставлен autocomplete: name, email, tel, organization. Это и удобство, и критерий WCAG 1.3.5.

    Проверить всё это можно за минуту: пройдите форму Tab'ом от начала до конца, не трогая мышь, и отправьте её пустой. Если фокус виден на каждом шаге, ошибки читаются и после отправки фокус попал в нужное поле — форма в порядке.

    Цвета ошибок и кнопки должны проходить контраст: рамку поля с ошибкой видно только при 3:1 к фону, текст ошибки — при 4,5:1. Подобрать их можно в палитре интерфейса, а проверить отдельную пару — в проверке контраста.

    Куда уходит заявка

    Три варианта закрывают почти все случаи:

    • Обычный POST на обработчик. Форма отправляется браузером, страница перезагружается ответом. Проще всего, работает без JavaScript. Обработчику нужно проверить данные ещё раз: клиентская валидация защищает от опечаток, а не от подделанного запроса.
    • fetch в вебхук. Данные уходят JSON-ом, страница не перезагружается, ответ показывается под кнопкой. Подходит для вебхуков CRM, Telegram-ботов и бессерверных функций. Учтите CORS: принимающая сторона должна разрешить запрос с вашего домена.
    • Почтовый сервис. Formspree и аналоги принимают форму на свой адрес и пересылают письмо. Бэкенд не нужен, но данные проходят через третью сторону — это стоит отразить в политике.

    Что бы вы ни выбрали, спам приезжает. Ловушка для ботов — скрытое поле, которое человек не видит и не заполняет, а простой бот заполняет всегда — отсекает основную массу. Обработчику остаётся правило в одну строку: поле не пустое — молча выбросить. Капча нужна, когда вас начинают долбить прицельно, и до этого момента она только мешает.

    Источники

    1. Федеральный закон от 27.07.2006 № 152-ФЗ «О персональных данных» — статьи 9 (согласие), 18.1 (политика оператора).
    2. W3C. Web Content Accessibility Guidelines (WCAG) 2.2 — критерии 1.3.5 (назначение полей), 3.3.1 (определение ошибки), 3.3.2 (подписи), 2.4.7 (видимый фокус).
    3. W3C. WAI-ARIA Authoring Practices — сообщения об ошибках, aria-describedby, живые области.
    4. HTML Living Standard — атрибуты novalidate, autocomplete, inputmode.

    Частые вопросы

    Нужен ли чекбокс согласия на обработку персональных данных?

    Если форма собирает имя, телефон или почту — да. Закон № 152-ФЗ требует конкретного и осознанного согласия, а «конкретное» означает названного оператора, перечень данных и цель. Отдельный чекбокс, не отмеченный заранее, со ссылкой на опубликованную политику — рабочая форма такого согласия.

    Можно ли отметить галочку согласия по умолчанию?

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

    Форма работает без JavaScript?

    При отправке обычным POST — да: браузер отправит форму на обработчик, и проверить данные должен он. Режим fetch без JavaScript не работает, поэтому серверная проверка нужна в любом случае: клиентская валидация ловит опечатки, а не злой умысел.

    Как защититься от спама без капчи?

    Ловушкой: скрытое поле, которое человек не видит, а простой бот заполняет. Обработчик выбрасывает такие заявки молча. Этого хватает для обычного трафика; капчу добавляют, когда сайт начинают долбить прицельно, — она заметно снижает конверсию.

    Подойдёт ли код для Тильды, WordPress или конструктора?

    Да: это чистый HTML, CSS и JS без зависимостей. В WordPress блок кода вставляют через HTML-блок или в шаблон темы, в Тильде — через блок T123 «HTML-код». Важно, чтобы идентификаторы полей не пересекались с другими формами на странице.

    Как принимать файлы?

    Включите поле «Файл» и отправляйте форму обычным POST: браузер сам переключит кодировку на multipart/form-data. В режиме fetch файл не уедет — там передаётся JSON. Ограничьте размер и типы файлов на стороне обработчика: атрибут accept в разметке это только подсказка.

    Что делать с заявкой после отправки?

    Как минимум — показать понятный ответ на той же странице и продублировать письмом на указанный адрес. Отдельная страница «спасибо» удобна для целей в аналитике, но сообщение в области role="status" получают и те, кто пользуется скринридером.

    Ещё в разделе «Маркетинг»

    Открыть подборку →

    Подсказки, туры и чеклисты, эффект которых видно в цифрах.

    Попробовать Clew бесплатноКак это работаетFree — бесплатно навсегда · Pro и Business — 14 дней без карты

    Туры, попапы и онбординг в эпоху ИИ

    7 паттернов с числом шагов, правилами текста и метриками, что меняет ИИ, чек-лист перед публикацией. PDF, 2 страницы. Что внутри гайда →