Капча это полумера. Не знаю как, но боты ее обходят. Подойдет только reCAPTCHA v1 (распознавание картинок). Версии 2 и 3 пропускают ботов.
Более радикальный вариант это асинхронная загрузка форм. То есть подгружать форму через AJAX по кнопке или после загрузки страницы. Боты не дружат с JavaSript насколько я помню. Использую такой метод, более года спама нет. Этот вариант не мучает глаза юзера и прекрасно работает.
Дополнительно можете "шифровать" контакты, которые опубликованы на сайте. Например, так:
<!-- Наши ссылки на контакты -->
<a id="phone" href="tel:бот">берет</a>
<a id="email" href="mailto:за">щёку</a>
<script>
// Ожидаем когда страница загрузится
document.body.onload = function() {
// Делаем подмену номера телефона
$("#phone").text("89009009090");
$("#phone").attr("href", "tel:89009009090");
// Делаем подмену email
$("#email").text("info@site.ru");
$("#email").attr("href", "mailto:info@site.ru");
}
</script>
Если сделаете асинхронные формы и подобным макаром спрячете контакты, то автоматический спам вряд ли будет возможен. Однако бойтесь упёртых манагеров, которые посылают спам ручками.
И не пишите ничего про щёки) есть вероятность, что пользователь может увидеть контент в ссылках до подмены, если интернет слабоват.