Spam protection
Math CAPTCHA: How It Works and When You Should Avoid It
A math CAPTCHA blocks simple bots with an arithmetic question, but it creates accessibility and security limits. See when it works and what to use instead.
A math 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
The form generates a question such as 7 + 4, stores the expected answer on the server, and compares it with the submitted value. A wrong answer rejects the submission.
A basic 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 question is a cognitive test. The W3C’s WCAG 2.2 guidance on accessible authentication says authentication methods that require a cognitive function need an alternative method that does not require that test.
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.
Review caught submissions in the Core Forms submissions inbox before tightening the rules. A filter that marks ten messages as spam and catches two customers is not 80% successful. It is broken.
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.