Стандартная идея с текстовым доп. полем или обязательной галочкой, которые помечены как require в html разметке. Проверка может игнорировать и пропусткать это поле, но скрипт на сервере должен отслеживать его заполнение, если поле заполнено то это бот. Так же должны
- отсутствовать значения по умолчанию для поля;
- поле может быть hidden или невидимым, например высота = 0
- обязательно с отключеным табиндексом (tabindex=»-1″) для скрытого поля
От простых распространённых ботов помогает.