By platform
WordPress contact form not working: find why
The form looks fine when you open it, but a stranger's send goes nowhere. Simulated visitors fill it in and show the exact step where pressing send stops working.
Why is my WordPress contact form not working for visitors?
A WordPress contact form fails for visitors in one of three places: a hidden field that blocks the send with a message the visitor never sees, a script that stops the button from submitting, or a cached copy of the page carrying a security token that has expired. Each one looks like a dead button, but the browser console and the response from the server show which step failed. Plugin and theme updates are a common trigger for the first two. A simulated visitor fills in the form as a stranger would, presses send and records the message or the request that failed, with a screenshot of each step.
What this looks like in a report
“The button went grey and nothing happened. I pressed it twice, then tried again with a shorter note. Maybe they only take work from locals, so I will call a different builder.”
The fix. Find the hidden required field in the form settings and remove the requirement, or make the field visible. Then clear the cache for the contact page and send one message from a private window to confirm the server answers with the thank-you message.
An illustration. Run a test to see your own.See a real sample report
The form still looks there while the send never reaches the server
A contact form is a set of fields plus a request. The visitor types into the fields, presses send, and the browser posts the values to your site, which then answers with a thank-you message or an error. Three things can break that chain without changing how the form looks: a validation rule that marks a hidden or off-screen field as required, a script error that stops the button's click from doing anything, or a stale page whose security token the server now refuses. In each case the form stays on the screen, and the visitor sees nothing that explains why.
- Press send with every field empty, then with a valid message. Does the response change?
- Look for a red message under a field you cannot see, such as a checkbox or a consent option.
- Open the console on the contact page and press send. Note any red error at that moment.
- Open the network list and check whether a request goes out, and what status comes back.
- Load the contact page in a private window, signed out, and send it once, since cached copies can differ.
Where the press to send goes wrong
A visitor opens the contact page on a phone, types a name, an address and a message, and presses send. Three outcomes are common. The button turns grey or spins and then stops, the form jumps back to the top with an error that is out of view, or the page reloads with the same fields still filled in and no thank-you message. Each outcome points at a different break, so the visitor's experience alone does not tell you which one you have.
The most common single cause is a required field the visitor cannot reach. A consent checkbox, a hidden field added by another plugin or a dropdown placed behind a banner can all block the send while showing their message out of view. Scripts that run on the page can also fail. If a script that handles the button errors out, the click does nothing at all, and the request never leaves the browser.
Why your own test passes
When you test the form yourself, you are usually signed in, and your browser may keep the values you typed last time. Caching setups usually skip signed-in users, so you see a fresh copy of the page while a stranger gets a stored one. The form then works for you and fails for them, because the stored copy carries a token the server no longer accepts. A test from a private window, signed out, is the only test that matches what a stranger sees.
Three faults that leave the same empty result
A validation message is visible text near the field, so it points at the field. A script failure leaves no message at all, but the console shows an error on the press and no request appears in the network list. An expired token usually produces a message about a failed or expired security check, and the request does reach the server. Read which of the three you see before you change any setting, because each one is repaired in a different place.
Mimiq is independent and not affiliated with the platforms it names. Names belong to their owners.
What you get with Mimiq
- 01
Run it by hand, or on every pull request
Paste a link and a task in the app and watch the visitors work. Or run them on every preview deploy: the GitHub Action comments on the pull request, any other CI can call the MCP endpoint, and your coding agent can run it too.
- 02
Bugs and usability problems in one report
The browser records errors and failed or slow requests on the step they happened. The visitors say where the wording or the steps confused them, and where they left.
- 03
Visitors that behave like your audience
Each visitor is a different profile with a reason to be there, matched to who the page is for, described by you, or built from your own customers.
- 04
A prompt to fix each problem
Every problem comes with a fix to paste into Cursor, Claude Code, Lovable or any coding agent, and one prompt hands over the top problems at once. Then send the same visitors through again.
- 05
Follow every visitor
See each visitor's whole path, step by step with screenshots, and what it was thinking at every step. Ask any visitor a question.
The browser records relevant JavaScript errors and failed or slow app requests encountered during the run, attached to the step where they occurred. The visitors are simulated: they find problems, they do not predict how many real people will convert.
A cache rule or plugin update can break the form again
Contact forms depend on the page the visitor loads, and both caching and plugin updates change that page between visits. After each update or cache change, send the form with the same simulated visitors and compare the step each one reached. A staging copy behind a site password needs that password in the run, which is part of paid credits. Keep the run saved, so the next break shows up as a difference rather than a surprise.
Starter
Try it on one launch
About 4 tests of 5 visitors
- Visitors on your landing page, signup and checkout
- Where they left and why, with a fix to copy for each problem
- Run it in the app or on every pull request
- Ask any visitor a question, included
- Test accounts and protected previews
Builder
Test every build
About 20 tests of 5 visitors
- Everything in Starter
- Credits refill each month, and what is left rolls over once
- Cancel anytime
Pro
Test every release, as a team
About 60 tests of 5 visitors
- Everything in Starter
- Credits refill each month, and what is left rolls over once
- Cancel anytime
Scale
Test at scale, every day
About 240 tests of 5 visitors
- Everything in Starter
- Credits refill each month, and what is left rolls over once
- Priority support
- Cancel anytime
Questions
Why does my form work when I test it while logged in?
When you are signed in, caching setups usually skip the stored copy, and your browser may refill values you typed before. A stranger gets the stored copy and starts with empty fields. Test in a private window, signed out, with a new name and address each time, so the test starts the way a visitor does.
Should I reinstall the form plugin?
Reinstalling replaces the plugin files, but a cached page, a hidden required field or a conflicting script can stay in place after it. Find the failing step first, because the fix sits in that place. Save a copy of the form's settings before you change anything, so you can compare afterward.
Does the test show whether the email arrives?
No. The test shows whether the send creates a request and what the server answers. It cannot open your mailbox, and a form that submits can still land mail in spam. The test does not tell you how many real visitors will send a message, either.
Why does it fail for real visitors when my test passes?
The device or the address differs. A phone, an older browser, or a visitor who arrives on another address of the same site may load a different copy of the page. Run the same simulated visitors on a phone and a laptop, then compare the first step where they split.
Keep reading
Send visitors and see what breaks first.
Your first test is free: sign in with Google and it starts right away. Last checked 2026-11-02.