John Conde descreve muitas coisas boas abordadas. O problema com a escolha de uma técnica anti-bot / anti-spam é equilibrar eficácia e conveniência. Seria realmente inconveniente ter que preencher um CAPTCHA toda vez que você quiser postar um comentário ou mensagem, mas se você precisar apenas de um CAPTCHA na inscrição, às vezes isso não impede os spammers.
Algumas das técnicas passivas são uma boa alternativa, pois não requerem ação humana. O problema é que os bots estão ficando cada vez mais sofisticados e, se os bots puderem resolver os CAPTCHAs, certamente poderão processar JS e CSS. Portanto, você precisará exercitar um pouco de criatividade, como usar CSS menos óbvio para ocultar seus campos de interceptação de bot.
Mas com base na sua pergunta, acho que você provavelmente percebe que o objetivo não é criar um site à prova de bot, mas apenas criar um impedimento suficiente para que os usuários do bot simplesmente escolham outros alvos mais fáceis. Portanto, o que é necessário aqui varia de site para site e provavelmente exigirá alguns testes de tentativa e erro. Eu tentaria primeiro as técnicas menos invasivas.
Por fim, outra maneira de remover o spam de seu site é usar a moderação de colegas para remover qualquer comentário enviado por bot ou spam enviado manualmente que passa rapidamente.