Choosing a WordPress Contact Form Plugin
Every form plugin can send an email. The differences that matter are entry storage, spam handling, conditional logic and how much JavaScript they put on every page.
The feature that matters most is the one people ignore: entry storage. Site email fails regularly — misconfigured SMTP, a spam filter, a changed address — and a form that only sends a notification loses the enquiry silently. Storage means a failed email is an inconvenience rather than a lost customer.
Decide what the form actually has to do
| Requirement | What it implies |
|---|---|
| A simple contact form | Almost any plugin, including the lightest |
| Multi-step or conditional questions | Conditional logic support |
| File uploads | Upload handling plus storage and virus considerations |
| Payments or bookings | A form plugin with payment integrations, or a dedicated tool |
| CRM or mailing list integration | Check the specific integration exists, not just "integrations" |
| Many forms with reporting | Entry management, export and filtering |
Most sites need the first row and buy for the fourth. Start from what you will use this quarter.
What separates the plugins
Entry storage. Some store entries by default; Contact Form 7 needs a companion plugin. Check that entries are searchable, exportable and can be deleted in bulk — the last point matters for data-protection requests.
Spam handling. Look for a honeypot field, a time check, and integration with a captcha or a spam-scoring service. A honeypot alone catches a large share of automated spam with no visitor friction — the trade-offs are in how to add reCAPTCHA to a form.
Conditional logic. Showing fields based on earlier answers. Often a paid feature, and genuinely useful for anything longer than five fields.
Asset loading. Does the plugin load its CSS and JavaScript on every page, or only where a form appears? Site-wide loading for a form on one page is pure waste, and one of the easiest wins in render-blocking resources.
Accessibility. Proper labels, error messages associated with fields, keyboard navigation and focus management. Test with the keyboard alone before committing.
Data handling. Where entries are stored, whether anything is sent to a third party, and how easily you can delete a person's data on request.
Matching a plugin to a site
- A small business site with one contact form. Choose the lightest option that stores entries. Anything more is unused surface area.
- A site with lead-generation forms. Prioritise conditional logic, entry management and CRM integration.
- A site collecting sensitive information. Prioritise storage control, encryption where offered, and clear data-deletion tooling.
- A high-traffic site. Prioritise conditional asset loading and check the plugin's own performance on a page with a form.
- A site already using a page builder. The builder may include forms. One system is better than two if the built-in one is sufficient.
Configure it properly whichever you pick
- Turn on entry storage before going live.
- Set the From address to your own domain and the Reply-To to the visitor's address. Getting this backwards is the most common reason notifications never arrive.
- Configure authenticated SMTP for the site — see WordPress not sending emails.
- Add spam protection, starting with a honeypot.
- Send notifications to a monitored mailbox, ideally a shared one rather than a personal address.
- Set a clear confirmation message or redirect, so visitors know the message was sent.
- Exclude form pages from full-page caching, since a cached nonce breaks submissions.
Test as a visitor, not as an administrator
Testing while logged in, in the browser you built the site in, proves nothing about the real path. Submit from a private window on mobile data, then check:
- the entry is stored;
- the notification arrives at an external address, in the inbox rather than spam;
- replying goes to the visitor;
- the confirmation to the visitor arrives, if you send one;
- required-field validation behaves sensibly;
- the form works on a phone, including any captcha.
Re-test after any major update and after a host migration. Forms break quietly, and the first sign is usually a customer asking why nobody replied — the diagnosis path is in contact form not sending email.
A note on data protection
A contact form collects personal data. That means a privacy notice explaining what happens to it, a retention policy rather than keeping every entry forever, and a route to delete an individual's data on request. If the form sends data to a third party — a captcha service, a CRM, an analytics tool — that belongs in the notice too, and possibly in your consent banner, per cookie consent plugins.
Frequently asked
- For anything beyond a mailto link, yes. A plugin gives you validation, spam protection and stored entries, which a hand-coded HTML form on WordPress does not.
- Entry storage. Email delivery fails often enough that a form which only emails will eventually lose an enquiry with no trace.
- They can, when their CSS and JavaScript load on every page rather than only where a form appears. Check that, or dequeue the assets elsewhere.