Een bezoeker vult uw contactformulier in, klikt op verzenden en ziet een draaiend rondje. Dat rondje blijft draaien. Geen bedankboodschap, geen foutmelding, niets. Als uw formulier blijft laden in WordPress, weet de bezoeker niet of zijn bericht is aangekomen, en in negen van de tien gevallen is dat ook niet zo.

Deze storing is verraderlijk omdat er niets kapot lijkt. De pagina laadt, het formulier ziet er goed uit, en u merkt pas dat er iets mis is als het opvalt dat er al twee weken geen aanvraag meer binnen is gekomen.

Wat er gebeurt tussen klik en bevestiging

Moderne formulieren versturen de gegevens op de achtergrond, zonder de pagina opnieuw te laden. De browser stuurt een verzoek naar uw server, de server verwerkt het, verstuurt een mail en stuurt een antwoord terug. Pas als dat antwoord binnen is, verandert het rondje in een bedanktekst.

Blijft het rondje draaien, dan is er dus geen antwoord gekomen. Dat kan drie redenen hebben: het verzoek is nooit vertrokken, het is onderweg tegengehouden, of de server is er zelf op vastgelopen.

Het onderscheid is belangrijk, want de oplossing verschilt volledig. Gelukkig is het in twee minuten vast te stellen.

De test die u meteen richting geeft

  1. Open het formulier en klik met de rechtermuisknop, kies Inspecteren en ga naar het tabblad Netwerk.
  2. Vul het formulier in en klik op verzenden. Er verschijnt nu een regel in de lijst, meestal met admin-ajax.php of een adres dat begint met /wp-json/.
  3. Kijk naar de statuscode in die regel.

Wat u daar ziet, vertelt u waar u moet zoeken.

  • Er verschijnt geen enkele regel. Het verzoek vertrekt niet. Kijk in het tabblad Console naar een rode foutmelding; er is dan een script stukgelopen.
  • Code 200 maar geen antwoord. De server heeft geantwoord, maar het antwoord is leeg of onleesbaar. Vaak een PHP-waarschuwing die tussen het antwoord is geglipt.
  • Code 500. De server loopt vast tijdens het verwerken. Een fout in een plugin of een geheugenprobleem.
  • Code 403. Het verzoek wordt geweigerd, meestal door een firewall of een beveiligingsregel.
  • De regel blijft op pending staan. De server is bezig en komt niet terug. Bijna altijd een vastgelopen mailverzending.

Oorzaak: de mailverzending loopt vast

Dit is de meest voorkomende reden voor een verzoek dat blijft hangen. Het formulier probeert een mail te versturen via een externe server, die server antwoordt niet, en het script blijft wachten tot de tijdslimiet is bereikt. Dat kan dertig seconden duren, en in die tijd blijft het rondje draaien.

Verdachte instellingen: een SMTP-plugin met een verlopen wachtwoord, een poort die door de hostingpartij is dichtgezet, of een mailaccount waarvan de tweestapsverificatie is aangezet zonder dat er een apart wachtwoord voor toepassingen is aangemaakt.

Test dit door in de instellingen van uw SMTP-plugin een testmail te versturen. Blijft die ook hangen, dan heeft u de oorzaak los van het formulier. Hoe u dat netjes inricht, staat in de handleiding voor het instellen van SMTP.

Oorzaak: een script loopt stuk

Ziet u in de console een rode melding en vertrekt er geen verzoek, dan is er een conflict. De klassiekers: twee plugins die verschillende versies van dezelfde bibliotheek laden, een optimalisatieplugin die scripts samenvoegt en daarbij de volgorde verstoort, of een paginabouwer die het formulier op een manier inlaadt die de formulierplugin niet verwacht.

Test dit door tijdelijk het samenvoegen en uitstellen van JavaScript uit te zetten in uw optimalisatieplugin. Werkt het formulier daarna, dan weet u genoeg en kunt u dat ene bestand uitsluiten van de optimalisatie in plaats van alles uit te zetten.

Draait er een advertentieblokkeerder in de browser van de bezoeker, dan kan die ook onderdelen wegfilteren. Test daarom altijd één keer in een schone browser voordat u concludeert dat het aan uw site ligt.

Oorzaak: een beveiligingsregel houdt het tegen

Bij code 403 wordt het verzoek geweigerd voordat WordPress het ziet. Twee verdachten: een firewallplugin met een regel tegen bepaalde tekens in formuliervelden, of een ModSecurity-regel op de server.

Een aanwijzing dat het hierom gaat: het formulier werkt wel met een korte tekst en niet met een langere, of het werkt niet zodra iemand een adres met http erin plakt. Zulke patronen zijn typisch voor filterregels.

Uw hostingpartij kan in het logboek zien welke regel afging en die voor uw formulieradres uitzetten. Dat is een normaal verzoek en meestal binnen een uur geregeld.

Wat u intussen doet voor uw bezoekers

Zolang het niet is opgelost, verliest u aanvragen zonder dat u het weet. Zet daarom tijdelijk uw telefoonnummer en een gewoon e-mailadres duidelijk bij het formulier. Dat is geen fraaie oplossing, maar wel een die aanvragen redt.

Zet ook, als uw formulierplugin dat kan, het bewaren van inzendingen in de database aan. Dan staan de berichten er nog, ook als de mail niet vertrekt. Dat heeft al vaker een hele week aan gemiste offertes teruggehaald.

Verwar dit probleem overigens niet met een formulier dat wél netjes bedankt maar waarvan de mail nooit aankomt. Dat is een ander verhaal met een andere oplossing; dat staat in het artikel over formulieren die niets versturen.

Een praktijkgeval

Een installatiebedrijf uit de regio Eindhoven merkte dat het aantal offerteaanvragen in een maand tijd was gehalveerd. Het formulier werkte in hun eigen test gewoon, want zij vulden hem in vanaf kantoor en op een computer waar ze waren ingelogd in WordPress.

Bij een test vanaf een telefoon buiten het kantoornetwerk bleef het rondje draaien. De oorzaak was een firewallregel die verzoeken met een telefoonnummer in een bepaald formaat blokkeerde. Ingelogde beheerders werden overgeslagen, waardoor de eigen test altijd slaagde. Na het aanpassen van die ene regel liep het weer.

De les uit dat geval: test uw formulier altijd uitgelogd, in een privévenster, en het liefst ook een keer vanaf mobiel internet in plaats van vanaf uw eigen wifi.

Maak er een vaste controle van

Zet elke maand een testaanvraag door uw eigen formulier en kijk of de bevestiging aankomt, zowel bij uzelf als bij de bezoeker. Dat kost twee minuten. Voor bedrijven waar aanvragen via de site binnenkomen, is dit de goedkoopste verzekering die er is.

Blijft het onduidelijk waar het verzoek strandt, dan is het naspeuren van formulieren die stilvallen typisch iets waarbij meekijken in de logbestanden het verschil maakt. Bij WebMaintor is dit een van de meldingen waar we standaard een maandelijkse test op zetten, juist omdat de eigenaar het zelf zelden merkt.

Doe nu deze test: open uw contactpagina in een privévenster op uw telefoon en verstuur een bericht met de tekst test. Komt er binnen een minuut een bevestiging, dan weet u dat het werkt.