Here is the worst thing about a broken contact form: nothing looks broken.
The page loads. The form submits. A thank-you message appears. From the outside — including from your own testing, if you only ever look at the front end — everything works exactly as designed. The email just goes nowhere, and it has been going nowhere for eight months.
There is no error to notice. That’s the whole problem. A site that’s down gets you three phone calls in an hour. A form that silently swallows leads gets you nothing but a quiet quarter you attribute to the economy.
We found this on our own site
Worth admitting up front, because it’s the most useful example we have.
When we audited this site before rebuilding it, the /quote/ page contained the sentence “Fill out the form below and provide the information about your project.” There was no form below. The page ended and the footer began.
The /contact/ page had no form either — just an email address. Neither did /support/. Three pages whose entire job was capturing enquiries, and between them, one email address and a lot of confident copy.
That was our own site. Nobody had tested it because nobody had a reason to think it needed testing.
The ways it actually breaks
The site moved and mail didn’t follow. Migrations are the single most common cause. The old host allowed the site to send mail; the new one blocks the function outright, or requires authentication that nobody configured. Everything else about the migration went fine, which is why nobody looks here.
Nobody set up mail authentication. Your form sends from [email protected], but nothing in your DNS says that server is allowed to send as your domain. SPF, DKIM, and DMARC are what make that claim credible. Without them, receiving servers make a judgment call, and increasingly the judgment is silent rejection rather than the spam folder.
It’s landing in spam, in a mailbox nobody opens. Especially likely if notifications go to a generic address like info@, or if the form emails come from your own domain to your own domain — which some filters treat as a spoofing signal.
A plugin update changed something. The form plugin updated, the mail plugin didn’t, and the two stopped agreeing. Or a security plugin started blocking submissions it decided were suspicious.
The notification address belongs to somebody who left. Genuinely common. Forms were set up to notify a staff member, that mailbox was closed, and now submissions bounce into nothing.
The anti-spam is too aggressive. A captcha or scoring rule silently rejects real people. You never see these, because a rejected submission produces no record anywhere.
How to actually test it
Not by looking at the page. By submitting it.
- Use an outside email address. Your phone, a personal Gmail — anything not on your own domain. Sending from your own domain to your own domain hides exactly the problems you’re looking for.
- Fill it in like a customer would, not like a developer testing a field.
- Then check your spam folder before concluding it worked.
- Do the same for every form on the site. Contact, quote, support, newsletter. They frequently use different plumbing, and they fail independently.
- Put a recurring reminder in your calendar. Monthly is plenty. This is the cheapest possible insurance for the most expensive possible failure.
If a submission doesn’t arrive, the useful next question is whether it was received and not delivered, or never received at all. Those have completely different fixes, and answering it requires looking at the server rather than the browser.
The architecture that stops it happening
Two principles, and the second one matters more than people expect.
Don’t rely on the server’s built-in mail function. It has no authentication, no delivery reporting, and no retry. Use authenticated SMTP or a proper sending service, so a failure is at least a failure you can see.
Store the submission before you try to send it. This is the important one. If the lead is written to a database or a durable store the moment it arrives, then a mail failure costs you a notification — annoying — rather than the lead itself. If the only copy of that enquiry was inside an email that never got delivered, it is simply gone.
That’s how the forms on this site work now. Every submission is stored first, then delivered. If delivery fails but storage succeeded, the visitor still sees a thank-you page, because their message genuinely was captured. If both fail, they get an error and a phone number — never a thank-you, because telling somebody their message was sent when nothing was saved is the exact failure this whole rebuild existed to eliminate.
The unglamorous conclusion
Go test your contact form. Right now, from your phone, with an email address that isn’t on your domain.
It takes two minutes and there is a meaningful chance you find something. We did, on our own site, in a page that had been confidently telling visitors to fill out a form that wasn’t there.
If it turns out something’s wrong and the cause isn’t obvious, that’s usually a DNS and mail-authentication question rather than a website one — which is why we run the hosting and the DNS alongside the sites we build. And if you’d rather somebody just tested these on a schedule so you never have to think about it, that’s what website maintenance is for.
