Spam protection
Math CAPTCHA: How It Works and When You Should Avoid It
A math CAPTCHA asks a visitor to solve an arithmetic question. See examples, what it stops, and the accessibility limits that make it a poor default.
Some links here are affiliate links. If you buy through one, I earn a commission at no cost to you. Core Forms is mine, so weigh my bias there too.
A math CAPTCHA, also called a mathematical CAPTCHA, asks a visitor to solve a small arithmetic problem before submitting a form. It can stop crude scripts that fill every visible field, but it is weak against modern bots and can block people with cognitive disabilities.
That tradeoff matters. A spam control that rejects legitimate customers has failed, even if the spam count looks better.
How a math CAPTCHA works
A math CAPTCHA such as 7 + 4 expects the answer 11. The server verifies the submitted answer and rejects a wrong one. You should keep that verification on the server; a required text field alone only checks that something was entered.
A basic math CAPTCHA example looks like this:
<label for="math_check">What is 7 + 4?</label>
<input id="math_check" name="math_check" inputmode="numeric" required>
The HTML is only the visible half. The server must generate and verify the challenge. If the correct answer sits in a hidden field or JavaScript variable, a bot can read it as easily as a browser can.
Core Forms includes a Math CAPTCHA option inside its spam-protection settings. It runs server-side, so the submitted answer is checked during normal form processing rather than trusted in the browser.
What math CAPTCHA stops
Math CAPTCHA can stop scripts that submit a fixed payload without reading the page. Those bots are cheap, noisy, and still common on small WordPress sites.
It does not reliably stop:
- browsers controlled through Playwright, Puppeteer, or Selenium;
- bots that parse the question and calculate the answer;
- human-assisted spam farms;
- repeated manual submissions;
- targeted abuse against a specific form.
So treat math CAPTCHA as a speed bump. Do not treat it as proof that the visitor is trustworthy.
The accessibility problem
An arithmetic CAPTCHA creates a cognitive task. WCAG’s accessible-authentication guidance addresses authentication flows, so it isn’t a blanket rule for every contact form. It does explain why requiring a calculation can exclude people. I would provide an alternative route and review the form’s actual accessibility requirements.
The problem is wider than difficult math. A visitor may have dyscalculia, a cognitive disability, limited language proficiency, or a screen-reader workflow disrupted by a changing question. Even “2 + 3” can become the field that prevents a legitimate support request.
If you use Math CAPTCHA, keep the wording literal, connect the label to the input, preserve keyboard operation, and provide another way to submit. Core Forms’ field types reference and accessibility audit help with markup, but they cannot remove the cognitive test itself.
Better spam protection for most forms
Layered controls work better because each catches a different failure.
Start with a honeypot
A honeypot is an input hidden from people but attractive to simple bots. If it is filled, the submission is treated as spam. It adds no task for the visitor.
Core Forms adds a honeypot to rendered forms and explains the broader setup in Spam Protection. The separate honeypot field guide shows why field naming and timing matter.
Add rate limiting
Rate limiting caps submissions from the same IP address during a time window. It will not stop a distributed botnet, but it stops one machine from sending 500 entries in a minute.
The form settings documentation covers per-IP submission limits alongside referrer checking and nonce behavior.
Use Cloudflare Turnstile when abuse persists
Turnstile verifies browser behavior without asking most visitors to solve a puzzle. Core Forms supports it alongside reCAPTCHA, Akismet, Math CAPTCHA, the honeypot, and rate limiting.
Turnstile is usually my next step after the honeypot because it adds less visible friction than a puzzle. Read the spam protection documentation for provider setup.
Keep Akismet for message content
Akismet examines names, emails, URLs, and message text. It solves a different problem than CAPTCHA. CAPTCHA asks whether the interaction looks human; Akismet asks whether the content looks like spam.
That distinction is why Akismet alone is not enough, but it is still useful inside a layered setup.
A practical Core Forms setup
Use this order:
- Keep the built-in honeypot enabled.
- Set a reasonable per-IP rate limit.
- Add Akismet when the form accepts free-text messages.
- Add Turnstile if abuse continues.
- Use Math CAPTCHA only when its accessibility cost is acceptable and an alternative submission route exists.
You should review blocked attempts and genuine messages before tightening the rules. Honeypot refusals may never become normal submission entries, so the inbox alone doesn’t tell you whether every rejection was justified.
FAQ
Is a math CAPTCHA secure?
It stops simple automated scripts, but modern bots can read and solve basic arithmetic. Use it as one layer, not the only spam control.
Is math CAPTCHA accessible?
Not for everyone. It requires a cognitive task, so sites using it should provide an alternative method that does not require solving the question.
Can bots solve math CAPTCHA?
Yes. A bot can parse visible text, evaluate simple arithmetic, or use a browser automation tool to interact with the form.
Which Core Forms spam controls can be combined?
Core Forms can combine a honeypot, rate limiting, Akismet, Cloudflare Turnstile, Google reCAPTCHA, and Math CAPTCHA. Start with the controls that create the least work for legitimate visitors.
Should every WordPress form use CAPTCHA?
No. Many low-risk forms work well with a honeypot, nonce, and rate limit. Add a visible or browser-verification challenge only after actual spam shows the lighter controls are not enough.