Разделите форму на четыре этапа

Браузер → backend → почта → CRM. Если проверять всё одновременно, легко потратить время не на тот слой. Откройте DevTools → Network, отправьте тестовую заявку и найдите запрос формы.

Что видно в Network

РезультатГде проблема вероятнее всего
Запроса нетJavaScript, validation, кнопка, frontend
400/422обязательные поля, backend validation, CAPTCHA
403CSRF/WAF/permission
500PHP/backend log
200 + success, письма нетSMTP/delivery
200 + mail есть, CRM нетAPI CRM/webhook/integration

Проверить endpoint формы вручную

BASH
# Замените URL и имена полей на реальные.
curl -i -X POST https://example.com/api/form   -H 'Content-Type: application/x-www-form-urlencoded'   --data-urlencode 'name=Test'   --data-urlencode 'email=test@example.com'   --data-urlencode 'message=Form test'

# Если форма требует CSRF/CAPTCHA/сессию, такой запрос ожидаемо может быть отклонён.

Если запрос вообще не уходит

  • посмотрите Console на JavaScript error;
  • проверьте, не заблокирован ли submit сторонним скриптом;
  • временно отключите только недавно добавленный frontend-код;
  • проверьте обязательные поля и HTML validation;
  • убедитесь, что кнопка не находится вне нужной формы.

Если backend вернул 500

Не показывайте пользователю PHP error. Запишите ошибку в log и найдите её по времени тестовой отправки. Если обработчик делает несколько действий, логируйте этапы: validation → запись заявки → SMTP → CRM.

Если форма пишет «успешно», но заявки нет

Добавьте технический идентификатор заявки и логируйте результат SMTP/API. Это позволяет отличить «форма приняла данные» от «письмо реально передано SMTP» и «CRM вернула 2xx».

Минимальный тест после исправления

ПроверкаОжидаемый результат
Desktop Chromeзаявка создана
Мобильный браузерзаявка создана
Невалидный emailпонятная ошибка
CAPTCHAнормальный success/error
SMTPсообщение принято сервером
CRMлид/сделка появилась один раз
Повторный submitнет дубля

Связанные инструкции