Skip to content
Home PricingFree forever, paid adds live intelligence Akismet alternative reCAPTCHA alternative All comparisons IntegrationsAll 33, and how each one is protected WooCommerce protection Contact Form 7 Elementor Documentation Sign in
Guides

How to Stop WordPress Contact Form Spam Without a CAPTCHA

Short answer

Six checks that stop WordPress contact form spam without showing anyone a puzzle, ordered by what to try first and what each one actually costs you.

How to Stop WordPress Contact Form Spam Without a CAPTCHA

Your WordPress contact form worked fine for months. Then one morning there were nine junk submissions, and the next morning there were twenty.

Nothing changed on your side. What changed is that a bot found your form — and once one has, the address gets shared.

This guide covers what actually stops WordPress contact form spam, in the order worth trying, with the real cost of each. The short version: the checks a visitor never sees do most of the work, and the ones a visitor does see should be last.

Why your form gets found in the first place

There is no targeting involved. Bots crawl for form markup the way they crawl for links. A `

` tag with a text input and an email field is enough.

Two things follow, and they explain most of what people find confusing:

Your form is a public endpoint. The page is a convenience for humans. A script can post straight to the URL your form submits to, without ever loading your page — so anything that checks a visitor in the browser can be skipped entirely.

Your form volume has nothing to do with your traffic. Sites with fifty visitors a month get form spam, because the bot is not visiting your site in any meaningful sense. This is why “we’re too small to be a target” is never true.

The six checks, in the order to try them

1. A honeypot field

A hidden field that no human sees. Real visitors leave it empty because they cannot see it; a bot that fills every field in the form fills that one too, and gives itself away.

Cost to your visitors: zero. Nothing to solve, nothing to load, no third party. This is always the first thing to turn on.

The one nuance: a honeypot has to be hidden with CSS, not with `type=”hidden”`. Bots skip hidden inputs; they do not skip a visible field pushed off-screen.

2. Timing

A person reads your labels, thinks about the message and types. That takes at minimum a few seconds. A script posts the form the instant it parses it.

Rejecting submissions that arrive impossibly fast catches a large share of automated traffic and costs a real visitor nothing — nobody fills in a contact form in under two seconds.

3. Rate limits

One address sending twelve enquiries in a minute is not a person having a busy day.

Limit submissions per address, and per network range. The second part matters more than it sounds: spam rarely comes from one address, it comes from a block of them, and a per-address limit alone misses that entirely.

4. Disposable address detection

A large share of form spam uses throwaway mailboxes — the ones that exist for ten minutes.

Checking the domain against a list of disposable providers removes a chunk of junk with no effect on genuine enquiries. Real customers use real addresses.

5. Field integrity

If the fields that arrive do not match the fields you served — extra fields, missing fields, values that never existed in your form — the submission did not come from your form.

This is one of the strongest signals available, and it catches the direct-to-endpoint posts that browser-side checks miss completely.

6. Only now, a challenge

If spam still gets through after the five invisible checks, add a visible challenge — but ideally only for submissions that already look suspicious, rather than for everyone.

Cost to your visitors: real, and mostly invisible to you. Every puzzle costs you some percentage of genuine enquiries who could not be bothered. You will never see those in any report, which is precisely why this belongs last.

Not sure how much of this applies to you? Monitor Mode scores every submission and blocks nothing, so you can see what your forms actually receive before changing a setting. Get it free

What to do about spam that is not automated

Some of it is a person, paid very little, typing into forms by hand. No timing check or honeypot will stop that, because there is a real human doing it.

Two things do help:

Keyword rules. Blocking submissions containing specific phrases works, but use it sparingly. Broad terms block real customers, and you will not find out that you did.

Country rules. If you are a dentist in Manchester, you have no legitimate enquiries from a datacentre on the other side of the world. Excluding places you do not serve removes a lot of manual spam in one setting. Be careful if you have any international customers at all.

How to know whether any of it worked

Here is the part most guides skip, and it is the part that saves you weeks.

If you install four things at once and the spam stops, you do not know which one worked — or whether the fourth one is quietly rejecting real enquiries.

Change one thing. Watch for a week. Then change the next.

Better still, measure before you change anything. GatekeepWP has a Monitor Mode that scores every submission and records the verdict without blocking anything. After a fortnight you know how much spam you actually get, which signal identifies it, and whether your current setup is already handling it.

That turns the whole exercise from guesswork into a decision.

The thing nobody mentions: your email reputation

Form spam is not just inbox clutter.

When a bot submits a scraped address, your site emails that person a notification or an autoresponder. They never asked for it. Some of those addresses bounce; some belong to people who click “report spam”.

Gmail and Outlook watch both. Enough of it and your ordinary email starts landing in spam folders — your quotes, your invoices, your replies to real customers. The form spam costs you nothing directly; the deliverability damage costs you sales you never hear about.

Frequently asked questions

Will a honeypot alone stop WordPress contact form spam? It will stop a meaningful share of it with no cost to visitors, which makes it the right first step. It will not stop a bot built specifically for your form, or a human typing by hand. Combine it with timing and rate limits.

Is a CAPTCHA bad for conversions? Visible challenges cost you some genuine submissions — the person who cannot read the letters, or simply will not bother. Invisible checks cost you nothing, which is why they belong first.

Does Akismet stop contact form spam? Akismet is built primarily for comments. Some form plugins integrate with it, but it does not cover logins, registrations or checkout, and it sends submission content to an external service for scoring.

Can I stop form spam without a plugin? Partly. You can add a honeypot and a timing check by hand if you are comfortable editing your form’s template, and that alone helps. Rate limiting and field integrity are harder to do reliably yourself.

How much spam is normal? There is no normal — it depends entirely on how long your form has been public. The number that matters is your own, which is why measuring first is worth more than any benchmark.

TL;DR — Turn on a honeypot, timing and rate limits before you consider a CAPTCHA. Measure what gets through before and after, so you know which change did the work.

Next: Still getting spam with reCAPTCHA on? explains why a CAPTCHA on its own leaves gaps — and how to measure exactly what yours misses.

Try it: GatekeepWP applies all six checks automatically to every form on your site, free, with no account and no API key. Turn on Monitor Mode first if you would rather watch before you block anything.