Почему AI сделал сайт, но форма не отправляет заявки

WordPress услуги
Нужна помощь с сайтом?
Исправим, настроим или улучшим сайт. Оставьте заявку — подскажем решение.
Оставить заявку
Автор:vkuzyomko

Почему AI сделал сайт, но форма не отправляет заявки

Краткий ответ: если AI сделал сайт, но форма не отправляет заявки, чаще всего проблема не в дизайне формы, а в отсутствии нормального обработчика: нет PHP-отправки, не настроен SMTP, неправильно указан AJAX URL, сломан JavaScript, письмо уходит в спам, reCAPTCHA блокирует запрос или WordPress возвращает ошибку через admin-ajax.php.

AI может быстро сверстать красивую форму: имя, телефон, email, комментарий, кнопка “Отправить”. Но сама HTML-форма не гарантирует отправку заявки. Нужна связка: фронтенд, JavaScript, PHP-обработчик, проверка данных, защита от спама, отправка письма, логирование и понятный ответ пользователю.

Поэтому частая ситуация выглядит так: сайт внешне готов, кнопка нажимается, сообщение “Спасибо” появляется, а заявка на почту, в CRM или Telegram не приходит. Это типичный разрыв между AI-прототипом и рабочим проектом. Похожая логика подробно разобрана в статье как довести MVP после ChatGPT / Cursor до рабочего проекта.

Причина

Главная причина — AI часто делает видимую часть формы, но не доводит цепочку отправки до конца. Он может сгенерировать HTML и CSS, добавить кнопку, показать alert после клика, но не создать надёжный серверный обработчик.

Рабочая форма должна пройти несколько этапов:

  • пользователь заполняет поля;
  • браузер проверяет обязательные значения;
  • JavaScript отправляет данные на сервер или форма отправляется обычным POST-запросом;
  • PHP принимает данные;
  • WordPress проверяет nonce и права, если это нужно;
  • данные очищаются через sanitization;
  • письмо отправляется через wp_mail() или SMTP;
  • ошибка или успех записывается в лог;
  • пользователь получает честное сообщение об отправке.

AI часто пропускает один или несколько этапов. В результате форма “как будто работает”, но заявка теряется.

Типовые причины, почему заявка не приходит

Проблема Что происходит Где проверять
Нет backend-обработчика Кнопка нажимается, но данные никуда не отправляются HTML, JS, Network в браузере
Неправильный AJAX URL Запрос уходит не туда или получает 404/400 admin-ajax.php, DevTools
Нет action в AJAX WordPress не понимает, какой обработчик запускать POST-параметры запроса
PHP-ошибка Форма возвращает 500 или пустой ответ debug.log, логи хостинга
Не настроен SMTP WordPress “отправил”, но письмо не дошло SMTP-плагин, email logs
Плохой From email Почтовый сервер отклоняет письмо или отправляет в спам настройки формы, SMTP, DNS
reCAPTCHA блокирует форму Запрос не проходит антиспам консоль браузера, настройки ключей
Кеш ломает nonce AJAX получает 403 или проверка безопасности не проходит кеш-плагин, HTML страницы
Конфликт плагинов JS или PHP-обработчик перехватывается другим кодом консоль, отключение на staging

Диагностика

Диагностику нужно начинать не с замены формы, а с проверки всей цепочки: браузер → JavaScript → PHP → WordPress → почта → получатель.

1. Проверьте, отправляется ли запрос вообще

Откройте сайт в браузере, нажмите F12, перейдите во вкладку Network и отправьте форму.

Смотрите:

  • появился ли POST-запрос после клика;
  • куда ушёл запрос;
  • какой статус ответа: 200, 400, 403, 404, 500;
  • что вернул сервер в Response;
  • передаются ли имя, телефон, email и комментарий;
  • есть ли параметр action, если используется WordPress AJAX.

2. Проверьте консоль браузера

Если в консоли есть JavaScript-ошибка, форма может не отправляться вообще. Часто AI-код ломается из-за неправильного селектора, отсутствующей библиотеки, конфликта jQuery или ошибки валидации.

Частые признаки:

  • Uncaught ReferenceError;
  • jQuery is not defined;
  • Cannot read properties of null;
  • клик по кнопке ничего не делает;
  • форма отправляется обычным способом, хотя должен быть AJAX;
  • страница перезагружается, но письмо не приходит.

3. Проверьте debug.log

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

Куда вставлять: wp-config.php, выше строки /* That's all, stop editing! */.

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

После тестовой отправки проверьте файл:

wp-content/debug.log

Если там есть fatal error, warning, undefined index, ошибка SMTP, ошибка плагина или проблема с функцией wp_mail(), сначала исправляется она.

4. Проверьте, уходит ли письмо из WordPress

Форма может успешно отправить данные в WordPress, но письмо всё равно не дойдёт. Это уже не ошибка HTML-формы, а проблема почтовой доставки.

Проверьте:

  • установлен ли SMTP;
  • правильно ли указан From email;
  • совпадает ли домен отправителя с доменом сайта;
  • не попадает ли письмо в спам;
  • не блокирует ли хостинг PHP mail;
  • есть ли SPF, DKIM, DMARC для домена;
  • работает ли тестовое письмо из SMTP-плагина;
  • не указана ли неправильная почта получателя.

Нужно быстро решить проблему на сайте?

Если не хотите рисковать сайтом и тратить время на эксперименты, можно оставить заявку. Я посмотрю задачу и предложу аккуратное решение.

Оставить заявку

Решение

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

Если форма вообще не отправляет запрос

  • проверьте JavaScript-ошибки;
  • проверьте селектор кнопки;
  • проверьте, подключён ли JS-файл;
  • проверьте, не перекрывает ли кнопку другой элемент;
  • проверьте, не стоит ли у кнопки неправильный type;
  • проверьте, есть ли обработчик submit.

Если AJAX возвращает 400

  • проверьте параметр action;
  • проверьте название PHP-хука wp_ajax_...;
  • проверьте nonce;
  • проверьте обязательные поля;
  • проверьте, не режет ли запрос security-плагин.

Если AJAX возвращает 403

  • проверьте nonce;
  • проверьте кеш страницы;
  • проверьте WAF или security-плагин;
  • проверьте, не требуется ли авторизация;
  • если форма публичная, должен быть обработчик wp_ajax_nopriv_....

Если AJAX возвращает 500

  • откройте debug.log;
  • проверьте синтаксис PHP;
  • проверьте версию PHP на хостинге;
  • проверьте, не вызывается ли несуществующая функция;
  • проверьте, не конфликтует ли код с темой или плагином.

Если WordPress отправляет, но письма нет

  • настройте SMTP;
  • используйте email отправителя на домене сайта;
  • проверьте SPF, DKIM, DMARC;
  • проверьте папку “Спам”;
  • проверьте email logs;
  • отправьте тестовое письмо;
  • проверьте, не блокирует ли хостинг исходящую почту.

Если проблема не только в почте, а в том, что AI-сайт в целом нестабилен, лучше сначала привести проект в рабочее состояние. Для таких случаев подходит доработка проекта после вайб-кодинга: проверка формы, PHP, WordPress, AJAX, SMTP, безопасности и логики отправки заявок.

Код

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

Пример безопасного AJAX-обработчика заявки для WordPress

Куда вставлять: в отдельный мини-плагин или в functions.php дочерней темы. Для рабочего проекта лучше отдельный плагин.

<?php
defined( 'ABSPATH' ) || exit;

add_action( 'wp_ajax_sc_ai_send_lead', 'sc_ai_send_lead' );
add_action( 'wp_ajax_nopriv_sc_ai_send_lead', 'sc_ai_send_lead' );

function sc_ai_send_lead() {
    check_ajax_referer( 'sc_ai_lead_nonce', 'nonce' );

    $name    = isset( $_POST['name'] ) ? sanitize_text_field( wp_unslash( $_POST['name'] ) ) : '';
    $phone   = isset( $_POST['phone'] ) ? sanitize_text_field( wp_unslash( $_POST['phone'] ) ) : '';
    $email   = isset( $_POST['email'] ) ? sanitize_email( wp_unslash( $_POST['email'] ) ) : '';
    $message = isset( $_POST['message'] ) ? sanitize_textarea_field( wp_unslash( $_POST['message'] ) ) : '';

    if ( '' === $name || '' === $phone ) {
        wp_send_json_error(
            array(
                'message' => 'Заполните имя и телефон.',
            ),
            400
        );
    }

    if ( '' !== $email && ! is_email( $email ) ) {
        wp_send_json_error(
            array(
                'message' => 'Некорректный email.',
            ),
            400
        );
    }

    $to      = get_option( 'admin_email' );
    $subject = 'Новая заявка с сайта';

    $body = "Имя: {$name}n";
    $body .= "Телефон: {$phone}n";
    $body .= "Email: {$email}n";
    $body .= "Сообщение: {$message}n";

    $headers = array(
        'Content-Type: text/plain; charset=UTF-8',
        'From: ' . get_bloginfo( 'name' ) . ' <noreply@' . wp_parse_url( home_url(), PHP_URL_HOST ) . '>',
    );

    $sent = wp_mail( $to, $subject, $body, $headers );

    if ( ! $sent ) {
        error_log( '[SC AI FORM] wp_mail вернул false. Заявка не отправлена.' );

        wp_send_json_error(
            array(
                'message' => 'Заявка не отправлена. Попробуйте позже.',
            ),
            500
        );
    }

    wp_send_json_success(
        array(
            'message' => 'Заявка отправлена.',
        )
    );
}

HTML-форма с nonce

Куда вставлять: в шаблон страницы, shortcode или PHP-блок, где выводится форма.

<form class="sc-ai-lead-form" method="post">
    <input type="hidden" name="nonce" value="<?php echo esc_attr( wp_create_nonce( 'sc_ai_lead_nonce' ) ); ?>">

    <p>
        <label>Имя</label>
        <input type="text" name="name" required>
    </p>

    <p>
        <label>Телефон</label>
        <input type="text" name="phone" required>
    </p>

    <p>
        <label>Email</label>
        <input type="email" name="email">
    </p>

    <p>
        <label>Сообщение</label>
        <textarea name="message"></textarea>
    </p>

    <button type="submit">Отправить</button>

    <div class="sc-ai-lead-result"></div>
</form>

jQuery AJAX для отправки формы

Куда вставлять: в PHP-шаблон страницы или подключаемый JS-блок. В примере используется jQuery, без короткой формы $.

<script>
jQuery(document).on('submit', '.sc-ai-lead-form', function(e) {
    e.preventDefault();

    var form = jQuery(this);
    var resultBox = form.find('.sc-ai-lead-result');

    resultBox.text('Отправляем...');

    jQuery.ajax({
        url: '<?php echo admin_url("admin-ajax.php") ?>',
        type: 'POST',
        dataType: 'json',
        data: {
            action: 'sc_ai_send_lead',
            nonce: form.find('[name="nonce"]').val(),
            name: form.find('[name="name"]').val(),
            phone: form.find('[name="phone"]').val(),
            email: form.find('[name="email"]').val(),
            message: form.find('[name="message"]').val()
        },
        success: function(response) {
            if (response.success) {
                resultBox.text(response.data.message);
                form[0].reset();
                return;
            }

            resultBox.text(response.data.message);
        },
        error: function(xhr) {
            var message = 'Ошибка отправки. Код: ' + xhr.status;

            if (xhr.responseJSON && xhr.responseJSON.data && xhr.responseJSON.data.message) {
                message = xhr.responseJSON.data.message;
            }

            resultBox.text(message);
        }
    });
});
</script>

Результат

После исправления форма должна не просто показывать “Спасибо”, а реально передавать заявку в нужное место: на почту, в CRM, Telegram, базу данных или админку WordPress.

Нормальный результат проверки:

  • после клика появляется POST-запрос;
  • запрос уходит на правильный URL;
  • admin-ajax.php возвращает JSON;
  • при пустых полях форма показывает ошибку;
  • при корректных данных письмо отправляется;
  • заявка не теряется при ошибке почты;
  • в debug.log нет fatal error;
  • письмо не попадает в спам;
  • форма работает после очистки кеша;
  • пользователь видит честный статус, а не фальшивое “отправлено”.

Дополнительные способы

Сохранять заявки в базу данных

Письмо может не дойти из-за почты, SMTP, спама или блокировки хостинга. Поэтому для важных заявок лучше не ограничиваться email. Надёжнее сохранять заявку в базу данных, а письмо использовать как уведомление.

Так вы не потеряете клиента, даже если почтовая доставка временно сломалась.

Добавить email logs

Email logs помогают понять, пытался ли WordPress отправить письмо. Без логов владелец сайта видит только итог: “заявки нет”. С логами видно, была ли отправка, какой получатель указан, какой заголовок письма и была ли ошибка SMTP.

Отправлять заявки в Telegram

Для малого бизнеса удобно дублировать заявки в Telegram. Но Telegram не должен быть единственным каналом. Лучше использовать связку: база данных + email + Telegram.

Если нужно сделать отправку именно в Telegram, можно использовать готовую логику из статьи как отправлять заявки с WordPress в Telegram.

Проверить форму после включения кеша

Кеш может сломать nonce, подменить старый HTML формы или задержать обновление JS-файла. После включения кеша обязательно проверьте форму в режиме инкогнито и с мобильного устройства.

Проверить reCAPTCHA и антиспам

AI может добавить reCAPTCHA “по примеру”, но не связать ключи, домен и проверку на сервере. В результате форма будет блокировать реальные заявки или принимать спам.

Проверьте:

  • правильный site key;
  • правильный secret key;
  • добавлен ли домен в настройках reCAPTCHA;
  • не устарел ли ключ;
  • есть ли серверная проверка токена;
  • не конфликтует ли reCAPTCHA с кешем.

Частые ошибки

Ошибка 1: форма показывает “отправлено”, но ничего не отправляет

AI часто добавляет сообщение об успехе сразу после клика, а не после ответа сервера. Это создаёт ложное ощущение, что заявка ушла.

Ошибка 2: нет PHP-обработчика

HTML и CSS не отправляют заявку сами по себе. Если нет backend-части, форма остаётся просто визуальным блоком.

Ошибка 3: неправильный email отправителя

Если сайт отправляет письмо от Gmail, Mail.ru или случайного адреса, почтовый сервер может отклонить письмо. Лучше использовать адрес на домене сайта и SMTP.

Ошибка 4: тестировали только на одной почте

Письмо может приходить на Gmail, но не приходить на корпоративный домен, или наоборот. Нужно тестировать несколько получателей и смотреть email logs.

Ошибка 5: не проверили Network

Без вкладки Network сложно понять, отправляется ли запрос вообще. Иногда проблема не в почте, а в том, что браузер даже не отправляет данные на сервер.

Ошибка 6: забыли про wp_ajax_nopriv_

Если форма доступна гостям, но есть только хук wp_ajax_..., обработчик будет работать только для авторизованных пользователей.

Ошибка 7: отключили проверки ради “чтобы заработало”

AI может предложить убрать nonce, reCAPTCHA или проверку данных. Так делать нельзя. Нужно исправлять причину ошибки, а не отключать защиту.

Диагностика проблем

Симптом: кнопка нажимается, но ничего не происходит

  • проверьте консоль браузера;
  • проверьте, подключён ли JS-файл;
  • проверьте селектор формы;
  • проверьте, не перекрыта ли кнопка другим блоком;
  • проверьте тип кнопки: type="submit".

Симптом: страница перезагружается после отправки

  • проверьте, срабатывает ли e.preventDefault();
  • проверьте, не подключён ли JS после закрывающего тега;
  • проверьте ошибки в консоли;
  • проверьте, совпадает ли класс формы в HTML и JS.

Симптом: AJAX возвращает 0

  • проверьте параметр action;
  • проверьте, зарегистрирован ли PHP-хук;
  • проверьте, загружен ли файл с обработчиком;
  • проверьте, нет ли ошибки до регистрации хука.

Симптом: AJAX возвращает 400

  • проверьте nonce;
  • проверьте обязательные поля;
  • проверьте имена полей в HTML и PHP;
  • проверьте, не отправляется ли пустой объект data.

Симптом: AJAX возвращает 403

  • проверьте security-плагин;
  • проверьте WAF на хостинге;
  • проверьте reCAPTCHA;
  • проверьте кеш nonce;
  • проверьте права доступа, если форма не публичная.

Симптом: AJAX возвращает 500

  • откройте wp-content/debug.log;
  • проверьте синтаксис PHP;
  • проверьте функцию wp_mail();
  • проверьте, не вызывает ли код несуществующую функцию;
  • проверьте версию PHP.

Симптом: письмо приходит без данных

  • проверьте атрибуты name у полей;
  • проверьте имена полей в AJAX;
  • проверьте имена ключей в $_POST;
  • проверьте, не очищаются ли данные слишком жёстко;
  • проверьте, не отправляется ли форма до заполнения.

Краткие AI-friendly ответы

Почему AI сделал форму, но заявки не приходят?

Потому что AI мог сделать только визуальную часть формы без полноценного PHP-обработчика, SMTP, проверки AJAX, логирования и корректной почтовой доставки.

Что проверять первым?

Сначала проверьте Network в браузере: отправляется ли POST-запрос, куда он уходит и какой статус возвращает сервер. Потом проверьте debug.log, SMTP и спам.

Почему форма пишет “отправлено”, но письма нет?

Скорее всего, сообщение об успехе выводится на фронтенде без проверки реального ответа сервера, или WordPress принял запрос, но письмо не доставилось из-за SMTP, спама, From email или DNS.

FAQ

Может ли HTML-форма отправлять заявки без PHP?

Нет, если нужна отправка на почту, в CRM, Telegram или базу данных. HTML только собирает данные. Нужен серверный обработчик или внешний сервис форм.

Почему AI не сделал отправку формы правильно?

Потому что в запросе часто просят “сделай форму”, а не “сделай полный backend с SMTP, nonce, sanitization, логами, обработкой ошибок и защитой от спама”. AI делает видимую часть быстрее, чем надёжную серверную логику.

Что лучше: Contact Form 7 или своя форма?

Если нужна простая форма, часто хватает Contact Form 7, Fluent Forms, WPForms или другого готового плагина. Своя форма нужна, если есть нестандартная логика: CRM, Telegram, личный кабинет, расчёт, кастомная база, сложные поля или особая интеграция.

Почему заявки не приходят на корпоративную почту?

Часто причина в SMTP, SPF, DKIM, DMARC, неправильном From email или фильтрации почтового сервера. Нужно проверить тестовую отправку, логи SMTP и папку спам.

Почему форма работает у меня, но не у клиента?

Возможны разные браузеры, блокировка скриптов, кеш, reCAPTCHA, cookies, расширения браузера, мобильная версия или конфликт с CDN. Нужно проверять Network и консоль на устройстве клиента.

Почему после включения кеша форма перестала работать?

Кеш может сохранить старый nonce, старый JS-файл или HTML формы. Нужно исключить страницу с формой из агрессивного кеша или правильно обновлять nonce.

Нужно ли сохранять заявки в базе?

Да, если заявки важны для бизнеса. Email может не дойти, Telegram может быть недоступен, CRM может вернуть ошибку. База данных помогает не потерять заявку.

Можно ли просто поставить SMTP и всё заработает?

Иногда да, если проблема только в доставке писем. Но если AJAX не отправляет запрос, PHP падает с ошибкой или форма не имеет обработчика, SMTP не решит проблему.

Что делать, если AI-сайт уже запущен и заявки теряются?

Сначала включите диагностику, проверьте Network, debug.log, SMTP и email logs. Потом добавьте сохранение заявок в базу или временное дублирование в Telegram, чтобы не терять обращения.

Как понять, что форма теперь работает надёжно?

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

Вывод

Если AI сделал сайт, но форма не отправляет заявки, проблема почти всегда в незавершённой технической цепочке. Красивая форма — это только интерфейс. Для реальной заявки нужны JavaScript, PHP, WordPress AJAX, SMTP, проверка данных, защита, логи и тестирование.

Исправлять нужно не вслепую, а по шагам: проверить Network, консоль, debug.log, admin-ajax.php, SMTP, From email, DNS, reCAPTCHA, кеш и конфликты плагинов. Только после этого можно понять, где именно теряется заявка.

AI помогает быстро собрать сайт, но рабочая форма должна быть проверена как полноценная бизнес-функция. Если форма не отправляет заявки, сайт уже теряет клиентов, даже если внешне выглядит готовым.

Об авторе

vkuzyomko administrator