Как сказал
FanatPHP , можно сделать поля-ловушки. У меня немного другой метод, но тоже довольно эффективный:
- создать НЕСКОЛЬКО полей, таких как "phone", "homepage", "skype" и др (на что фантазии хватит). Они должны быть полноценными полями, не `type=hidden`!
- сделать их на уровне CSS скрытыми (сделать класс, который их будет скрывать, либо скрывать их по каждому ID-тэгу). По коду эти поля должны выглядеть максимально естественно и не отличаться от остальных. (чтобы человек их не видел, но чтобы их видел бот и думал, что это естественные поля на форме).
- под капотом, следить за тем, чтобы эти поля были пустыми.
- если это был бот, он обязательно заполнит эти поля. И если они заполнены, то сделать вид, что всё было успешно, НО, при этом под капотом ничего не делать. Пусть бот тратит время на пустые надежды!