Blog / Websitekwaliteit
Websiteformulier testen vóór livegang: velden, fouten en bevestiging
Test je contact- of aanvraagformulier veilig vóór lancering. Controleer labels, invoer, validatie, verzendstatus en foutmeldingen zonder echte berichten te sturen.
· De Sitefabriek
Een formulier lijkt klaar wanneer alle velden en een verzendknop op de pagina staan. Toch blijft vaak onduidelijk wat er gebeurt bij een fout, of een tweede klik dubbel verstuurt en of de bezoeker na verzending een begrijpelijke bevestiging ziet. Test daarom niet alleen het uiterlijk, maar de hele route van invoer tot terugkoppeling.
Deze gids helpt je dat doen vóór livegang, zonder echte berichten, betalingen of klantgegevens te versturen. Gebruik waar mogelijk een lokale of stagingomgeving met testgegevens en een veilige bestemming. Een formulier dat naar een echte mailbox of dienst verzendt, hoort niet bij een onschuldige kliktest.

Breng eerst de volledige formulierroute in kaart
Schrijf op wat een bezoeker doet en wat de website daarna hoort te doen. Een eenvoudige contactroute kan bestaan uit: formulier openen, velden invullen, verzenden, validatiefout herstellen en een bevestiging zien. Bij een aanvraagformulier kan er ook een stap volgen waarin iemand een keuze maakt of een bestand toevoegt.
Controleer in de code waar de invoer terechtkomt en welke actie wordt uitgevoerd. Verzin geen bestemming op basis van de knoptekst. Kijk of de gegevens naar een serverroute, serverfunctie of externe dienst gaan en of de lokale omgeving daarvan is gescheiden.
Controleer veldnamen, labels en instructies
Elk veld moet voor de bezoeker begrijpelijk zijn. Test of zichtbare labels vertellen wat je verwacht, en of verplichte velden duidelijk als verplicht herkenbaar zijn. Een placeholder die verdwijnt zodra iemand typt is geen goede vervanging voor een blijvende veldnaam.
W3C adviseert formuliervelden te voorzien van duidelijke labels en instructies; correct gekoppelde labels helpen ook ondersteunende technologieën de relatie tussen tekst en veld te herkennen. Controleer waar nodig ook de toetsenbordvolgorde en of het veld doelgericht te bedienen is. (W3C over formulierlabels)
Kijk of het veldtype past bij de invoer. Een e-mailadres als type="email" kan basiscontrole en een passend mobiel toetsenbord ondersteunen. De browser kan daarmee echter niet vaststellen dat het adres echt bestaat of dat je server de gegevens veilig verwerkt.
Probeer geldige én ongeldige invoer
Test niet uitsluitend het ideale voorbeeld. Gebruik een lege waarde voor een verplicht veld, een onvolledig e-mailadres, een te lang antwoord en invoer met accenten of leestekens. Kijk of een geldig veld ook geldig blijft wanneer een ander veld fout is.
HTML-attributen zoals required en type="email" kunnen basiscontroles in de browser uitvoeren. Dat maakt servercontrole niet overbodig: een verzoek kan buiten de zichtbare formulierinterface worden verstuurd. De actuele Next.js-gids maakt eveneens onderscheid tussen clientvalidatie en servervalidatie. (Next.js 16: formulieren en validatie)
Foutmeldingen moeten de volgende stap uitleggen. “Er ging iets mis” zegt niet welk veld ontbreekt of wat iemand kan doen. Controleer na een fout ook of al ingevulde, niet-gevoelige velden behouden blijven. Laat nooit uitsluitend kleur het verschil tussen fout en succes aanduiden.
Test verzenden, wachten en dubbelklikken veilig
Gebruik synthetische gegevens die niet naar een echte klant of toevallige ontvanger verwijzen. Schakel in staging een testbestemming of gecontroleerde mock in; als dat niet bestaat, test dan validatie zonder het formulier naar productie te versturen. Voer bij deze controle geen echte mailactie uit.
Controleer vervolgens de toestand tijdens en na verzending:
- de knop laat zien dat de verzending bezig is;
- een extra klik maakt niet ongemerkt een tweede aanvraag;
- de bezoeker krijgt een duidelijke fout wanneer de aanvraag mislukt;
- een geslaagde aanvraag toont een begrijpelijke bevestiging;
- het formulier wist gegevens alleen wanneer dat bij de gekozen werkwijze past.
Let op dat een browsermelding niet hetzelfde is als bewijs dat de server de aanvraag heeft opgeslagen of doorgestuurd. Controleer de veilige serverlog of testdienst, zonder privégegevens onnodig vast te leggen. Neem alleen noodzakelijke diagnostiek op en volg de gegevensafspraken van je project.
Loop de route na met toetsenbord en mobiel
Start vóór het eerste veld en gebruik alleen Tab, Shift+Tab, de pijltjestoetsen en Enter of Spatie waar dat logisch is. Je moet elk veld kunnen bereiken, begrijpen welk veld focus heeft en de verzendknop kunnen activeren. Een foutmelding hoort ook vindbaar te zijn wanneer je niet naar een muis kunt grijpen.
Test de formulierroute op een smal scherm. Controleer of het mobiele toetsenbord de verzendknop niet ontoegankelijk maakt en of fouttekst bij het juiste veld blijft staan. W3C noemt toetsenbordbediening, zichtbare focus, labels en vereiste velden als onderdelen van een eerste toegankelijkheidscontrole. Die korte controle is nuttig, maar geen volledige toegankelijkheidsbeoordeling. (W3C: eenvoudige controles en formulieren)
Maak onderscheid tussen browser-, server- en integratiefouten
Een verplicht veld dat niet is ingevuld is een andere fout dan een server die onbereikbaar is of een e-maildienst die een aanvraag weigert. Geef de bezoeker een bruikbare boodschap en bewaar intern genoeg context om de oorzaak te onderzoeken, zonder tokens, wachtwoorden of onnodige persoonsgegevens in foutmeldingen te tonen.
Bij serverfuncties moet de server de binnenkomende velden controleren en bepalen wat toegestaan is; de browserweergave alleen is geen beveiligingsgrens. Next.js waarschuwt dat serveracties rechtstreeks via POST aanroepbaar zijn en dat route handlers als publieke API-eindpunten moeten worden behandeld. Verifieer dus autorisatie en invoer aan de serverkant wanneer je een functie bouwt die gegevens verwerkt. (Next.js: data wijzigen en serverfuncties, Next.js: authenticatie en routebeveiliging)
Checklist vóór lancering
Vink de controles af in de omgeving waarin ze veilig kunnen plaatsvinden:
- ☐ Elk veld heeft een begrijpelijke, zichtbare naam en eventuele instructie.
- ☐ Verplichte velden zijn herkenbaar en de browser meldt ongeldige invoer.
- ☐ Servervalidatie weigert ongeldige invoer ook buiten de normale paginaflow.
- ☐ Fouten noemen de volgende stap en wijzen aan waar actie nodig is.
- ☐ Veilige invoer blijft behouden wanneer een ander veld gecorrigeerd moet worden.
- ☐ De verzendknop toont wachten en voorkomt onbedoeld dubbel verzenden.
- ☐ Succes- en fouttoestanden zijn te begrijpen zonder alleen op kleur te vertrouwen.
- ☐ Tabvolgorde en zichtbare focus maken het formulier met toetsenbord bruikbaar.
- ☐ Het formulier blijft leesbaar wanneer het mobiele toetsenbord openstaat.
- ☐ De test gebruikt synthetische gegevens en een gecontroleerde testbestemming.
- ☐ De productieactie is niet uitgevoerd tijdens de controle.
Leg onopgeloste punten vast voordat je het formulier live zet. Als het formulier e-mail, betaling, authenticatie of een externe koppeling raakt, controleer dan die bestaande werking apart en wijzig die niet als bijproduct van een vormgevingsaanpassing.
Vraag Claude Code om eerst te onderzoeken
Geef Claude Code de route, de zichtbare fout en de grenzen van de test. Vraag om de implementatie te lezen voordat je om een oplossing vraagt. Zo kan het vaststellen of de knop alleen browservalidatie gebruikt, wat op de server gebeurt en welke veilige testmogelijkheid al bestaat.
Onderzoek het formulier op [route] en beschrijf de route van invoer tot bevestiging of foutmelding.
Wijzig nog niets. Benoem welke bestanden en serveracties betrokken zijn, hoe invoer wordt gevalideerd en welke bestaande mail-, betaal- of andere integraties behouden moeten blijven.
Stel een veilige lokale of stagingcontrole voor met synthetische gegevens. Verstuur geen echte e-mail en voer geen productieactie uit. Wacht met wijzigen tot ik de analyse heb gecontroleerd.
Voor een bredere controle kun je ook de SEO-checklist voor een nieuwe website gebruiken. Een technisch goed formulier helpt een route afronden, maar vervangt geen duidelijke pagina-inhoud of een echte controle van de uiteindelijke gebruikerservaring.