Kennisbank · Webdesign
Hoe maak je een goed contactformulier?

Een goed contactformulier vraagt zo min mogelijk, werkt met een toetsenbord en op een telefoon, en de inzending komt daadwerkelijk in je mailbox aan. Die laatste eis wordt het vaakst vergeten en veroorzaakt de meeste schade.
Voor de meeste bedrijven is dit het enige punt op de website waar een bezoeker klant kan worden. Toch krijgt het de minste aandacht van de hele site, en merk je pas dat er iets stuk is als het al weken stil is.
Welke velden je vraagt
Elk extra veld kost je inzendingen. Dat is de belangrijkste regel op deze pagina en hij wordt overal genegeerd.
Voor het overgrote deel van de bedrijven volstaat: naam, e-mailadres of telefoonnummer, en een berichtveld. Drie velden. De rest hoor je in het gesprek dat erop volgt.
Bedrijfsgrootte, budget, branche en hoe iemand bij je terechtkwam zijn nuttige gegevens en ze horen niet in het eerste contact. De uitzondering is wat je nodig hebt om überhaupt te kunnen antwoorden: een postcode bij werk aan huis, een kenteken bij een garage, een datum bij een reservering.
Vraag ook niets wat je toch niet gebruikt. Een aanhef, een tussenvoegsel en een geboortedatum staan op ontelbaar veel formulieren zonder dat iemand er ooit iets mee doet. De AVG noemt dat dataminimalisatie. Het is hier ook gewoon goed ontwerp, want wat je niet vraagt hoef je niet te beveiligen en niet te bewaren.
Bestanden laten meesturen
Een uploadveld is handig bij een offerteaanvraag met een tekening. Beperk dan de toegestane bestandstypen, sta nooit uitvoerbare bestanden toe en zet een maximum op de grootte dat past bij wat je hosting aankan.
Kijk ook waar de bestanden belanden. Sommige plugins parkeren ze in je openbare uploadmap, waar ze met het juiste adres gewoon te downloaden zijn.
Verplichte velden
Verplicht is alleen wat je nodig hebt om te kunnen antwoorden. In de praktijk zijn dat het bericht en één manier om iemand te bereiken.
Een sterretje bij het telefoonnummer kost je alle mensen die liever mailen, en dat zijn er meer dan je denkt. Zet je toch beide velden erin, maak dan duidelijk dat één van de twee genoeg is.
Markeer verplichte velden met een teken en met tekst, dus niet met kleur alleen. Wie kleuren slecht onderscheidt ziet het verschil anders niet.
De omgekeerde fout kom ik ook tegen: alles optioneel maken en hopen dat mensen zelf invullen wat handig is. Dan krijg je een voornaam en een vraag, zonder enige manier om terug te schrijven.
De volgorde en de knop
Zet labels boven de velden en gebruik geen tekst in het veld als vervanging. Die verdwijnt zodra iemand begint te typen, en dan weet niemand meer wat er stond.
Eén kolom werkt beter dan twee. Bij velden naast elkaar wordt er regelmatig eentje overgeslagen, omdat het oog van boven naar beneden leest en niet in een zigzag.
De volgorde die logisch aanvoelt: eerst wie je bent, dan hoe je bereikbaar bent, dan waar het over gaat. Vinkjes komen onderaan, vlak boven de knop. Zet op de knop wat er gebeurt. "Verstuur je vraag" doet het beter dan "Versturen". Zorg ook dat de knop na een klik zichtbaar verandert en niet nog een keer werkt, anders krijg je dezelfde aanvraag drie keer binnen van iemand die dacht dat er niets gebeurde.
Naast het formulier
- Vertel wat er daarna gebeurt. Eén zin: je krijgt binnen een werkdag antwoord. Dat verlaagt de drempel meer dan welk ontwerp dan ook.
- Zet er een alternatief naast. Een telefoonnummer, een appnummer of een aanklikbaar e-mailadres. Een deel van je bezoekers vult nooit een formulier in.
- Noem je bedrijfsgegevens. Voor wie online diensten of producten aanbiedt schrijft artikel 3:15d van het Burgerlijk Wetboek voor dat naam, adres, e-mailadres, KvK-nummer en btw-nummer makkelijk te vinden zijn.
- Verwijs naar je privacyverklaring. Eén regel onder het formulier met een link erin. Dat is wat de AVG van je vraagt.
Wat je beter weglaat is een lange lap tekst boven het formulier. Wie op je contactpagina staat, wil contact. Voor pagina's die eerst iets moeten verkopen gelden andere regels, en die staan bij landingspagina's.
Toegankelijkheid: labels en foutmeldingen
Een formulier is het onderdeel van een website waar toegankelijkheid het hardst telt, want hier moet iemand iets doen in plaats van lezen.
Elk veld heeft een echt label dat aan het invoerveld gekoppeld is, met een for-attribuut dat verwijst naar het id van dat veld. Dan leest een schermlezer het label voor, en dan kun je bovendien op de tekst klikken om in het veld te belanden.
Zet op elk veld het juiste autocomplete-attribuut, zoals name, email en tel. De browser vult dan in wat iemand eerder heeft ingevuld. Dat scheelt iedereen tijd en voor mensen met een motorische beperking scheelt het echt moeite. Sinds WCAG 2.1 is dit ook een eis op niveau AA.
Foutmeldingen zijn het stuk dat bijna altijd misgaat. Een rood randje om een veld is geen foutmelding. Schrijf in tekst wat er mis is en wat er moet gebeuren, zet die tekst bij het veld zelf en koppel hem aan het veld zodat een schermlezer hem meeneemt.
Gooi bij een fout nooit het hele formulier leeg. Dat is de snelste manier om iemand te laten afhaken die net vijf regels heeft getypt. Meld daarnaast het succes: na verzending hoort er een duidelijke tekst te verschijnen en hoort de focus daarheen te springen.
Voor overheidssites is dit verplicht via het Tijdelijk besluit digitale toegankelijkheid overheid, dat sinds 1 juli 2018 geldt. Voor bedrijven komt daar de Europese toegankelijkheidsrichtlijn bij, die in Nederland sinds 28 juni 2025 van toepassing is op onder meer webwinkels en online diensten. Kleine bedrijven met minder dan tien medewerkers en een beperkte omzet vallen bij dienstverlening buiten die verplichting, maar de eisen zelf zijn ook zonder verplichting goed vakwerk.
Op een telefoon
Hier gaat het het vaakst mis, en hier komt het meeste verkeer binnen.
Velden moeten minstens 16 pixels tekst hebben, anders zoomt iOS bij het aantikken automatisch in en staat je pagina scheef. Daar valt niet mee te onderhandelen, want het is vast gedrag van de browser.
Zet daarnaast het juiste type op elk veld. Een telefoonnummerveld roept dan een numeriek toetsenbord op en een e-mailveld het toetsenbord met de apenstaart. Vermijd datumkiezers en keuzelijsten met veertig opties. De rest van het mobiele werk staat bij je website optimaliseren voor mobiel.
Spam weren zonder captcha
Een puzzel waarin je verkeersborden moet aanwijzen is de slechtste oplossing die er is, want hij kost je ook echte inzendingen. Drie maatregelen vangen samen bijna alles weg en kosten je bezoeker niets.
De eerste is een honeypot: een verborgen veld dat mensen niet zien en robots wel invullen. Wordt het ingevuld, dan gooi je de inzending stil weg. Verberg het wel zo dat schermlezers er ook niet bij komen, en zet automatisch invullen uit, want een wachtwoordbeheerder vult zo'n veld anders vrolijk voor je in.
De tweede is een tijdcontrole. Meet hoeveel seconden er tussen het laden en het verzenden zitten, want onder de twee tikt geen mens een formulier vol. Zet er ook een bovengrens op, want een pagina die drie uur openstaat levert vaak een verlopen beveiligingssleutel op.
De derde is een rem op herhaling. Meer dan een paar inzendingen per minuut vanaf hetzelfde adres is geen normaal gedrag, en de meeste formulierplugins hebben daar een instelling voor. Helpt dat niet, dan filtert Akismet op inhoud, net als bij comment spam.
Als het toch niet lukt zonder
Blijf je overspoeld worden, gebruik dan een onzichtbare variant die alleen bij twijfel iets vraagt. reCAPTCHA v3 uit 2018 geeft een score in plaats van een puzzel, en Turnstile van Cloudflare bestaat sinds 2022 en werkt zonder plaatjes.
Weeg de privacykant mee. reCAPTCHA laat het gedrag van je bezoeker beoordelen door Google, dus je stuurt gegevens naar een partij buiten je eigen site en dat hoort in je privacyverklaring te staan. Voor veel Europese sites is dat de reden om over te stappen op iets dat minder verstuurt. De soorten staan bij CAPTCHA.
Waarom een inzending niet aankomt
Een kapot formulier geeft geen foutmelding. Het wordt gewoon rustig, en daarom blijft dit maandenlang onopgemerkt.
De meest voorkomende oorzaak is de mail zelf: je site denkt dat hij verstuurd heeft en onderweg besluit de ontvangende partij dat het bericht niet te vertrouwen is. Daarover gaan de volgende twee secties. Daarnaast zie ik deze vier geregeld:
- Een caching-plugin die het formulier uit het geheugen meelevert. De beveiligingssleutel erin is dan verlopen en de verzending wordt geweigerd. Sluit formulierpagina's uit van de cache.
- Een beveiligingsplugin die de REST-API dichtzet. Veel moderne formulieren versturen daarlangs. Je ziet dan een draaiend rondje dat nooit stopt.
- Een JavaScript-fout van iets anders op de pagina. Eén script dat struikelt legt de rest stil, inclusief je formulier.
- Een volle mailbox of een doorstuurregel. Doorsturen breekt de afzenderscontrole, waardoor de mail alsnog in de spammap belandt.
Kijk bij Microsoft 365 en Google Workspace ook in de quarantaine van de beheerder. Daar staan berichten die de gebruiker zelf nooit ziet.
SPF, DKIM en DMARC
Dit zijn drie regels in je DNS die samen vertellen wie er namens jouw domein mag mailen. Zonder die regels heeft de ontvanger geen enkele reden om te geloven dat een bericht echt van jou komt. Hoe DNS werkt staat bij het Domain Name System.
SPF
SPF is een lijst met servers die namens jouw domein mogen versturen. Het staat als TXT-record bij je domein en begint met v=spf1. Staat de server die jouw formuliermail verstuurt er niet in, dan valt de controle negatief uit.
Twee valkuilen. Je mag per domein maar één SPF-record hebben, dus een tweede maildienst voeg je toe aan het bestaande record. En er zit een limiet van tien DNS-opzoekingen in, waar je tegenaan loopt zodra je vier of vijf diensten stapelt.
DKIM
DKIM zet een digitale handtekening in de kop van elke uitgaande mail. De sleutel publiceer je in DNS op een adres met de naam van de selector erin. De ontvanger controleert de handtekening en weet daarmee dat het bericht onderweg niet is aangepast.
Je maildienst levert de waarden aan. Dit is tien minuten werk en het is het belangrijkste van de drie, omdat DKIM ook blijft kloppen als een bericht wordt doorgestuurd.
DMARC
DMARC vertelt de ontvanger wat hij moet doen als SPF en DKIM allebei niet aansluiten op het afzenderdomein. Het staat als TXT-record op _dmarc bij je domein, met een beleid: p=none om alleen te kijken, p=quarantine om verdachte post naar de spammap te sturen en p=reject om hem te weigeren.
Begin met p=none en een rapportageadres erin, kijk een paar weken wat er binnenkomt en scherp daarna aan. Wie meteen op reject gaat gooit soms zijn eigen nieuwsbrief of boekhoudpakket eruit.
Sinds februari 2024 zijn deze drie geen luxe meer: Google en Yahoo stellen ze als eis aan afzenders die naar hun gebruikers mailen, en Microsoft volgde in 2025 met vergelijkbare regels voor Outlook.com en Hotmail.
Versturen via SMTP in plaats van de mailfunctie van PHP
WordPress verstuurt standaard met de mailfunctie van PHP, die de post rechtstreeks aan de webserver overhandigt. Die server is meestal niet ingericht als mailserver, staat niet in je SPF-record en zet geen DKIM-handtekening. Het resultaat is post die eruitziet alsof iemand hem in jouw naam verstuurt.
De oplossing is versturen via SMTP: je site logt in bij een echte mailserver en levert het bericht daar af, net zoals je mailprogramma dat doet. Dan geldt alles wat je voor je domein hebt ingesteld ook voor je formuliermail.
Daarvoor heb je drie mogelijkheden. De mailserver van je hostingpartij, met een postbus die je voor de site aanmaakt. Je zakelijke mailomgeving, zoals Microsoft 365 of Google Workspace. Of een aparte dienst voor transactiemail, die per bericht laat zien of het is afgeleverd, geweigerd of blijven hangen.
In WordPress regel je de koppeling met een SMTP-plugin: host, poort en inloggegevens invullen en klaar. Gebruik poort 587 met versleuteling, want poort 25 wordt door veel providers geblokkeerd.
Eén instelling staat vaker fout dan goed. Laat je formulier nooit versturen namens het e-mailadres van de bezoeker, want dan verstuurt jouw server post uit naam van bijvoorbeeld een gmail-adres, en dat is precies wat SPF en DMARC horen tegen te houden. Zet je eigen domein als afzender en het adres van de bezoeker in het antwoordadres.
Bewaar inzendingen daarnaast in de database van je site, dan heb je ze nog als er met de post iets misgaat. Een kopie naar een tweede postvak bij een andere aanbieder vangt bovendien het geval op dat je hele mailomgeving iets weigert.
De AVG-kant van een contactformulier
Een contactformulier verzamelt persoonsgegevens, dus de AVG geldt. Dat is minder ingewikkeld dan het klinkt, zolang je vier dingen op orde hebt.
Je grondslag
Voor het beantwoorden van een vraag heb je geen toestemming nodig. Je grondslag is dat de verwerking nodig is om op verzoek van de bezoeker stappen te zetten richting een overeenkomst, of je gerechtvaardigde belang om op een binnenkomend bericht te reageren.
Een verplicht vinkje waarmee iemand akkoord gaat met je privacyverklaring levert dus geen geldige toestemming op, want toestemming moet vrij te weigeren zijn. Wil je het adres later voor je nieuwsbrief gebruiken, dan is dat een apart doel met een los vinkje dat niet vooraf is aangevinkt. Dat volgt uit artikel 11.7 van de Telecommunicatiewet, waar de ACM op handhaaft. Meer daarover staat bij e-mailmarketing.
Wat je moet vertellen en hoe lang je bewaart
Artikel 13 van de AVG vraagt dat je duidelijk maakt wie je bent, waarvoor je de gegevens gebruikt, hoe lang je ze bewaart en welke rechten iemand heeft. Eén regel met een link naar je privacyverklaring is genoeg, mits die verklaring het echt uitlegt.
Voor de bewaartermijn noemt de AVG geen getal. Je bepaalt zelf wat redelijk is en je schrijft het op. Let op de denkfout dat alles zeven jaar bewaard moet blijven: die termijn komt uit de belastingwetgeving en gaat over je administratie, niet over een mailtje van iemand die vroeg of je op zaterdag open bent.
Met wie je een overeenkomst nodig hebt
Iedereen die namens jou persoonsgegevens verwerkt is verwerker, en daar hoort een verwerkersovereenkomst bij zoals artikel 28 van de AVG voorschrijft. Dat gaat om je hostingpartij, je maildienst, en je formulierdienst als die de inzendingen op eigen servers bewaart.
Kijk bij een externe dienst waar de servers staan. Voor Amerikaanse aanbieders bestaat sinds 10 juli 2023 het EU-US Data Privacy Framework; controleer dan wel of jouw leverancier daar echt in staat. Een formulier dat in je eigen WordPress-installatie draait scheelt je die discussie.
Geen bijzondere gegevens
Vraag via een gewoon contactformulier nooit naar gezondheid, geloof, politieke voorkeur, seksuele geaardheid, vakbondslidmaatschap of strafrechtelijke gegevens. Artikel 9 van de AVG verbiedt het verwerken daarvan, met een korte lijst uitzonderingen waar de meeste bedrijven niet onder vallen.
Dit gaat vaker mis dan je denkt. Een fysiotherapeut die vraagt waar iemand last van heeft, een advocaat met een veld voor de aard van de zaak: dat zijn bijzondere gegevens die onversleuteld door een mailbox reizen. Vraag dan alleen om contactgegevens. Voor het burgerservicenummer geldt hetzelfde: dat mag alleen als de wet het voorschrijft.
Een bevestiging naar de afzender
Stuur een korte bevestiging terug naar degene die het formulier invulde, met daarin wat hij verstuurde en wanneer hij antwoord krijgt. Dat voorkomt dat iemand het formulier nog een keer invult of ondertussen bij de volgende aanbieder gaat kijken.
Houd hem kort en persoonlijk. Een bevestiging die eruitziet als een reclamemailing met drie knoppen en een banner doet het omgekeerde van wat je wilt. Verstuur hem via dezelfde SMTP-koppeling als de rest, anders is dit het eerste bericht dat in de spammap belandt.
Reageer daarna dezelfde dag, al is het alleen om te zeggen dat je er morgen op terugkomt. Wie een formulier invult kijkt op datzelfde moment ook bij twee anderen. Hoe je dat verder inricht staat bij conversie-optimalisatie.
Testen, want een kapot formulier meldt zich niet
Stuur elke maand een testbericht via je eigen formulier en kijk of het aankomt. Dat kost een minuut en het is de waardevolste minuut van je websiteonderhoud.
Test vanaf een adres bij een andere aanbieder dan je eigen, want mail binnen hetzelfde bedrijf komt vrijwel altijd door. Kijk ook in je spammap voordat je concludeert dat het goed ging.
Doe die test opnieuw na een verhuizing naar andere hosting, na een wisseling van maildienst, na een grote WordPress-update en nadat er een beveiligingsplugin bij is gekomen. Dat zijn de vier momenten waarop het stukgaat.
Kijk daarnaast eens per kwartaal naar de aantallen. Een formulier dat vorige maand veertig inzendingen gaf en deze maand vier is stuk, ook als je testbericht wel aankwam.
De keuze van je formulierplugin
Er is niet één beste plugin. Er zijn er vier of vijf die het goed doen, en het verschil zit in wat je erna wilt.
Contact Form 7 is gratis, licht en al jaren stabiel, en je stelt het formulier in met een stukje eigen opmaaktaal. Dat schrikt mensen af die liever slepen. De betaalde pakketten zoals Gravity Forms, WPForms en Fluent Forms bouw je met de muis, slaan inzendingen standaard op en kunnen voorwaardelijke velden en koppelingen met andere systemen.
Wij bouwen met Beaver Builder, en de vuistregel is dat de ingebouwde formuliermodule genoeg is voor contact en dat je voor alles daarboven een echte formulierplugin pakt. Kies iets dat nog actief wordt onderhouden, want een formulier zit dicht op de gegevens van je bezoekers. Dat geldt ook voor aanmeldformulieren, en de bredere aanpak staat bij het beveiligen van een WordPress-website.
Veelgestelde vragen over contactformulieren
Welke velden moet een contactformulier hebben?
Naam, een manier om te reageren en een berichtveld. Meer heeft een gewoon bedrijf niet nodig. Boven de vijf velden zie je het bijna altijd terug in het aantal inzendingen.
Is een captcha verplicht op een contactformulier?
Nee, geen enkele wet schrijft dit voor. Een honeypot, een tijdcontrole en een limiet op het aantal inzendingen per adres vangen samen het grootste deel van de spam af zonder dat je bezoeker iets merkt. Zet een captcha er pas bij als die drie het niet redden.
Waarom komen de berichten van mijn contactformulier niet aan?
Meestal omdat je site verstuurt met de mailfunctie van de server en de ontvangende partij het bericht niet vertrouwt, omdat er geen geldige afzenderscontrole op zit.
De oplossing is versturen via SMTP en SPF, DKIM en DMARC instellen voor je domein. Controleer daarnaast of je formulier niet namens het adres van de bezoeker verstuurt, want dat is de tweede veelvoorkomende oorzaak.
Wat doen SPF, DKIM en DMARC precies?
SPF zegt welke servers namens jouw domein mogen mailen. DKIM zet een handtekening op elk bericht zodat de ontvanger weet dat het onderweg niet is aangepast. DMARC vertelt de ontvanger wat hij moet doen als die twee controles niet kloppen. Ze staan alle drie in je DNS en je hostingpartij levert de waarden aan.
Mag ik iemand die het contactformulier invult toevoegen aan mijn nieuwsbrief?
Nee, niet zonder aparte toestemming. Een vraag stellen is geen aanmelding. Zet er een los vinkje bij dat niet vooraf is aangevinkt en leg vast wanneer iemand het aanzette. De ACM handhaaft op deze regel.
Hoe lang mag ik inzendingen van mijn contactformulier bewaren?
Zo lang als je ze nodig hebt, en dat bepaal je zelf. De AVG noemt geen vaste termijn voor contactverzoeken. Kies een termijn, schrijf hem op in je privacyverklaring en ruim inzendingen die nergens toe leidden periodiek op.
Heb ik een verwerkersovereenkomst nodig voor mijn formulierplugin?
Voor een plugin die alleen in je eigen WordPress-installatie draait niet, want dan verwerkt niemand anders de gegevens dan jijzelf. Wel voor je hostingpartij, en ook voor een externe formulierdienst waarbij de inzendingen op hun servers belanden.
Moet er een vinkje bij dat iemand akkoord gaat met de privacyverklaring?
Nee. Voor het beantwoorden van een vraag heb je geen toestemming nodig, dus zo'n vinkje voegt juridisch niets toe. Wat wel moet is informeren: één regel onder je formulier met een link naar je privacyverklaring.
Mag ik via een contactformulier naar medische of andere gevoelige informatie vragen?
Nee. Gegevens over gezondheid, geloof, politieke voorkeur, vakbondslidmaatschap, seksuele geaardheid en strafrechtelijke zaken vallen onder artikel 9 van de AVG en mag je niet zomaar verwerken. Vraag alleen om contactgegevens en bespreek de inhoud telefonisch.
Waarom belandt mijn bevestigingsmail in de spammap?
Meestal omdat de bevestiging via een andere route wordt verstuurd dan je gewone post, of omdat het domein waar hij vandaan komt niet is ingesteld voor mail. Verstuur bevestigingen via dezelfde SMTP-koppeling als de rest, met een afzenderadres op je eigen domein.
Hoe test ik of mijn contactformulier het nog doet?
Vul het zelf in vanaf een adres bij een andere aanbieder dan die van jou en kijk of de mail in je gewone postvak aankomt. Controleer daarna je spammap en, bij zakelijke mail, de quarantaine van de beheerder.
Doe dit elke maand en zeker na elke verandering aan je site of je mail. Zet er een terugkerende afspraak voor in je agenda, want dit is precies het soort werk dat je vergeet.
Is een contactformulier veiliger dan je e-mailadres op de site zetten?
Tegen geautomatiseerd verzamelen wel. Een adres dat gewoon op de pagina staat wordt door robots opgepikt en belandt op spamlijsten.
Toch zou ik altijd allebei doen. Een deel van je bezoekers wil liever mailen vanuit zijn eigen programma, met een bijlage erbij. Voor wie online iets verkoopt is een bereikbaar e-mailadres bovendien wettelijk verplicht.
Dit artikel hoort bij Webdesign. Daar vind je meer uitleg over hetzelfde onderwerp.
