Beveiliging 7 min leestijd

Contactformulier spam stoppen, zonder klanten weg te jagen

AI-spam vult je contactformulier met nepberichten. Zo stop je het gelaagd, zonder CAPTCHA-puzzels die echte klanten frustreren of wegjagen.

Illustratie van een contactformulier met spamberichten die worden tegengehouden

Je opent maandagochtend je inbox en daar staan ze weer. Vijftig berichten met "Hallo, ik bekeek uw website en wilde u graag iets voorstellen". Of een bericht van ene "Sarah" die in vloeiend Nederlands uitlegt dat ze samen met je bedrijf wil groeien. Geen typfouten, geen rare zinsbouw, niets dat je oude spamfilter triggert. Toch is het allemaal nep.

Sinds 2024 is dit voor veel mkb-ondernemers een dagelijkse irritatie geworden. Het contactformulier op de website, dat ene kanaal waar echte klanten je kunnen bereiken, is veranderd in een filterklus. En de oplossing is niet om het formulier te slopen of er een CAPTCHA-puzzel voor te zetten die je echte klanten ook al niet leuk vinden.

Dit artikel gaat over hoe het wel kan. Gelaagd, technisch, zonder UX-impact voor mensen die gewoon contact willen.

Waarom AI-spam nu erger is dan vijf jaar geleden

Klassieke spambots werkten met sjablonen. "Cheap viagra", verkeerde leestekens, links naar dubieuze domeinen. Daar zijn spamfilters jarenlang goed in geworden. Akismet blokkeerde het, een eenvoudige woordenlijst hield het tegen, en je had er nauwelijks omkijken naar.

Dat tijdperk is voorbij. Een aanvaller laat tegenwoordig een taalmodel een geloofwaardige Nederlandse e-mail genereren, draait dat in een script over duizenden contactformulieren, en het resultaat is tekst die je spamfilter niet als spam herkent. Geen rare woorden, geen patronen, soms zelfs aangepast aan de inhoud van je website omdat de bot eerst je homepage heeft gelezen.

Drie dingen veranderen daardoor tegelijk:

  1. Inhoudsfilters werken minder goed. Akismet en vergelijkbare diensten leunen voor een groot deel op tekstpatronen. Als de tekst geloofwaardig is, glipt het er doorheen.
  2. Volume is omhoog gegaan. Wat vroeger handwerk was, is nu een API-call. Het kost een spammer bijna niets om duizend formulieren tegelijk in te vullen.
  3. Persoonlijk lijken werkt. Berichten verwijzen naar je branche, naar pagina's op je site, naar je naam. Dat maakt het verleidelijk om ze tóch even te lezen. En dat is precies waar het op gemunt is.

Voor het mkb betekent het concreet: het contactformulier wordt minder bruikbaar. Echte aanvragen verzuipen tussen de ruis. Sommige ondernemers haken af en zetten het formulier helemaal uit. Dat is begrijpelijk, maar het is de slechtste oplossing.

Wat je beter niet doet

Voor we ingaan op wat wel werkt, een korte lijst van reflexen die het probleem verergeren of klanten wegjagen.

Het formulier weghalen en je e-mailadres tonen

Voelt logisch, is contraproductief. Een mailto-link of een uitgeschreven e-mailadres op je site is een spam-magneet. Bots scrapen websites systematisch op e-mailadressen, en in tegenstelling tot een formulier kun je daar geen enkele drempel inbouwen. Je inbox wordt er niet rustiger van.

Een zware CAPTCHA voor de deur zetten

reCAPTCHA met fietspaaltjes en stoplichten herkennen, of de hCaptcha-puzzels met "klik op alle blokjes met een boot", werken weliswaar tegen bots maar frustreren ook echte mensen. Onderzoek laat keer op keer zien dat een meetbaar percentage bezoekers afhaakt op zo'n puzzel. Voor een mkb-bedrijf dat enkele aanvragen per week binnenkrijgt, is elke afhaker er een te veel.

Daarnaast zijn moderne AI-modellen beter geworden in het oplossen van die puzzels dan veel mensen. Je houdt dus vooral je echte klanten tegen.

Het formulier verbergen achter een knop of inloggen

Een aanvraagformulier dat pas verschijnt na het aanklikken van iets, of erger nog na het aanmaken van een account, schroeft de drempel zo hoog op dat je conversie onderuit gaat. Niet doen.

Wat wel werkt, in volgorde van impact

De truc zit in laagjes. Niet één grote barriere, maar meerdere kleine controles waar bots op stuklopen en mensen niets van merken. Hieronder de aanpak die in de praktijk het verschil maakt, gerangschikt naar verhouding tussen effect en moeite.

Honeypot-veld

Verreweg de meeste impact voor de minste moeite. Je voegt aan je formulier een extra veld toe, bijvoorbeeld "website" of "telefoonnummer-bevestiging", en je verbergt het via CSS voor menselijke bezoekers. Bots zien het wel en vullen het keurig in, want ze begrijpen die CSS-context niet. Komt er een bericht binnen waarin het honeypot-veld is ingevuld? Direct weggooien.

Werkt verbluffend goed, kost niets, geen UX-impact. Eigenlijk zou elk formulier dit standaard moeten hebben.

Tijdslot

Een mens heeft minimaal een paar seconden nodig om een formulier in te vullen. Een bot doet het in een fractie van een seconde. Door bij het laden van de pagina een tijdstempel mee te sturen en die bij het verzenden te vergelijken, kun je inzendingen onder de drie seconden weggooien. Onzichtbaar voor mensen, dodelijk voor de meeste bots.

Inhoudpatronen

Hier wordt het iets specifieker. AI-spam heeft een paar terugkerende kenmerken: links in de berichttekst (vooral richting onverwachte domeinen), buitenlandse telefoonnummers, mismatch tussen de taal van je site en de taal van het bericht, of een combinatie van Cyrillisch schrift met een Nederlandse afzendernaam.

Een eenvoudige set regels op de server kan deze patronen oppakken. Bevat het bericht meer dan twee links? Naar buiten zetten. Telefoonnummer met +234? Twijfelachtig. De regels evolueren met de spam mee, en juist daar zit een deel van het werk.

Onzichtbare gedragschecks

Als je tóch iets wilt dat lijkt op een CAPTCHA, kies dan een variant die niets aan de gebruiker vraagt. Cloudflare Turnstile en hCaptcha Invisible analyseren browsergedrag op de achtergrond en grijpen alleen in bij verdachte sessies. De meeste echte bezoekers zien nooit een puzzel. Bots wel, en die haken af.

Dit voegt wel een externe afhankelijkheid toe en heeft enige privacy-impact. Voor sommige sites prima, voor andere overkill.

Rate limiting

Op IP-niveau bijhouden hoeveel inzendingen er per minuut binnenkomen. Drie verzoeken in tien seconden vanaf hetzelfde IP? Tijdelijk blokkeren. Helpt vooral tegen geautomatiseerde campagnes en gaat normale klanten nooit raken.

Pas in laatste instantie: een lichte CAPTCHA

Als al het bovenstaande niet voldoende blijkt, kun je een laagdrempelige check toevoegen, bijvoorbeeld een vinkje "ik ben geen robot" of een eenvoudige rekensom. Maar in negen van de tien gevallen die we tegenkomen, is dit niet eens nodig.

Voor de doe-het-zelvers

Werk je met een veelgebruikt formulierenplugin, dan kun je een groot deel zelf regelen.

  • Contact Form 7: combineer met de gratis Honeypot-plugin van Nocean. Eenvoudig, effectief.
  • WPForms: heeft anti-spam ingebouwd, inclusief honeypot en tijdslot. Aanvinken in de instellingen.
  • Fluent Forms: bevat eveneens een honeypot-optie en integreert met Turnstile.
  • Gravity Forms: ondersteunt honeypot en heeft een goede integratie met externe spamchecks.

Wat geen van deze plugins standaard goed doet, is inhoudpatronen van AI-spam herkennen. Daar moet je zelf regels voor opstellen, of een specifieker filter inschakelen.

Bouw je je formulier in eigen code? Dan zijn alle bovenstaande technieken in een paar honderd regels PHP of Node te implementeren. Het contactformulier op deze site draait op precies die combinatie: honeypot, timestamp, rate limiting, contentfilters en directe SMTP via een PHP-socket. Geen externe dienst, geen CAPTCHA, en ondanks de zichtbaarheid op een dagelijks gescande site is het rustig in de inbox. We eten ons eigen hondenvoer.

Het werkt, totdat het niet meer werkt

Een belangrijke kanttekening: spam is een bewegend doel. Wat vandaag werkt, werkt over zes maanden minder goed. Bots leren bij, honeypot-veldnamen lekken uit, contentpatronen verschuiven. Daarom is "instellen en vergeten" geen reele strategie.

Als je een site beheert voor klanten of voor jezelf, hoort spammonitoring bij goed onderhoud. Plotselinge piek aan inzendingen? Nieuwe taalpatronen? Andere afzenderdomeinen? Daar moet iemand naar kijken voor het uit de hand loopt. Bij Smart Monitoring wordt dit standaard meegenomen, net als andere signalen die op iets nieuws wijzen.

In een performance audit komt formulierhygiene overigens ook terug. Niet omdat het direct met snelheid te maken heeft, maar omdat een formulier dat de helft van de tijd niet wordt ingediend door echte mensen, technisch gezien nog steeds elke keer je server raakt en je conversiecijfers vertekent. Schoon formulier, eerlijke statistieken.

Tot slot

AI-spam in contactformulieren is geen tijdelijk verschijnsel dat overwaait. Het is een nieuwe baseline waar je je verdediging op moet afstemmen. Het goede nieuws is dat de oplossing technisch niet ingewikkeld hoeft te zijn, mits je hem gelaagd opbouwt en niet leunt op een enkele zware drempel die je klanten ook raakt.

De juiste volgorde is bijna altijd: honeypot eerst, dan tijdslot, dan inhoudregels, dan eventueel onzichtbare gedragschecks. CAPTCHA-puzzels zijn een laatste redmiddel, geen startpunt.

Loop je vast, of merk je dat je huidige aanpak niet meer werkt en je weer dagelijks aan het wegklikken bent? Geen verkooppraatje, gewoon een aanbod: stuur een bericht via het formulier hieronder of via /contact en we kijken er even naar. Vaak is het in een uur of twee opgelost en heb je er weer een paar jaar geen omkijken naar.

Verder lezen over hoe het bredere WordPress-beveiligingslandschap er in 2026 uitziet? Daar schreven we eerder over in WordPress beveiliging in 2026.