Opens in a new tab
Grey spheres gather against a circular black mesh filter on a metallic track between glass panels, with turquoise spheres at the mesh and beyond it. The official BuzzBoost lockup is printed in the lower-left corner.
Web design

Contact form spam: reduce bots without losing real enquiries

Reduce contact form spam with server-side checks, sensible submission limits and reliable verification. Test genuine enquiries through to your inbox or CRM before accepting the fix.

Contact form spam creates work long before anyone replies. Someone has to check the message, remove the CRM record and decide whether the next enquiry is genuine. Tighten the protection too far, though, and a customer asking for a quote can be stopped at the same point.

The useful goal is to reduce unwanted submissions while keeping a dependable route to your team. That means checking what happens on the server, how the form recovers when verification fails, and whether a genuine test enquiry reaches its destination.

For a UK service business, start with the form that brings in valuable work. Give its owner and developer a clear acceptance test before adding another security plugin.

First, establish where the unwanted messages enter

Map the routes that create enquiries: the contact page, quote forms, campaign landing pages, pop-ups and embedded third-party forms. For each, identify what happens after submission. Does it send an email, save a website entry, create a CRM contact or trigger an acknowledgement?

Use a small, redacted sample of unwanted messages to investigate. Record the form involved, approximate time, repeated patterns and destination. Ask the developer whether the corresponding request reached that form’s submission endpoint: the server address that receives the data.

Keep these three problems separate:

  • Form abuse: unwanted submissions enter through the website and trigger its normal processing.
  • Mailbox spam: unsolicited email arrives directly, without a matching website submission.
  • Delivery failure: a genuine form entry exists, but its notification fails to reach the right person.

A website challenge addresses the first route. If a controlled enquiry is accepted but disappears afterwards, investigate delivery and CRM routing before increasing the challenge difficulty.

Also establish a baseline for genuine enquiries and time spent clearing spam. A quieter inbox alone cannot tell you whether a change worked.

Protect the submission endpoint, not just the visible form

The browser can help someone complete a form, but it cannot be the final security check. OWASP’s input validation guidance explains that client-side checks can be bypassed and validation belongs on the server too.

Ask your developer to confirm that protection runs before the request sends notifications, creates CRM records or triggers automated replies. A blocked submission should not still produce the effects you were trying to prevent.

For WordPress, check the integration for your actual form builder. Installing a general security plugin or seeing a verification widget does not demonstrate that every quote form, pop-up and landing-page form uses it correctly.

Check the field rules

Required fields, sensible length limits and checks on fixed-choice values are useful foundations. They should match what the business needs, rather than reject ordinary customer language.

The same OWASP guidance warns against blocking characters such as apostrophes and recommends preserving legitimate punctuation and supported Unicode. Test names, international telephone formats and detailed messages your customers might reasonably use. A personal email address or a short enquiry should not automatically be treated as proof of spam.

Limit bursts without imposing arbitrary customer restrictions

A developer can assess limits on repeated submissions to the relevant endpoint. OWASP describes rate limiting at both infrastructure and application level, while distinguishing CAPTCHA protection against form abuse from protection against denial-of-service attacks.

Choose limits from observed traffic and test their effect. Include legitimate corrections and repeat requests in the test plan. Ask how the rule treats customers sharing an office or public network; a blanket address-based limit deserves particular care.

Introduce one change at a time where practical. That gives you a better chance of identifying which rule stops unwanted activity and which causes trouble.

If you use Turnstile, verify the complete integration

Cloudflare Turnstile is one option for protecting enquiry forms. Its implementation illustrates an important distinction: the widget produces a token in the visitor’s browser, and the server must validate that token before accepting the protected request.

Cloudflare’s current server-side validation documentation explicitly says that the client-side widget alone does not protect forms. It requires a call to Siteverify. Tokens are valid for 300 seconds and can only be validated once.

Ask for evidence that missing, invalid, expired and reused tokens are rejected before enquiry processing. Where configured, the developer should also check the returned hostname and action against the expected website and form purpose.

Request a plain explanation of failure handling. If verification cannot be completed, the website should explain the problem and provide a recovery route. Silently accepting an unverified request defeats the protection; silently displaying success leaves the customer with a false impression.

This is an integration check, not a reason to replace a working system automatically. Whichever provider you use, assess its current documentation, compatibility with your forms and effect on real customers.

Let customers pause, correct mistakes and try again

A customer may spend several minutes describing a repair, consult a colleague or leave a tab open while finding a reference. Verification needs to accommodate that behaviour.

Turnstile’s widget configuration documentation provides callbacks for errors, expired tokens and interactive timeouts, together with refresh settings. Automatic refresh is available; if it is disabled, the application needs to handle refresh itself.

Ask the developer to test what happens after a pause, after correcting an invalid field and after a failed attempt. The customer should be able to continue without repeatedly retyping a detailed enquiry. Preserving entered information during a recoverable error is a useful acceptance requirement.

Offer a visible alternative contact route if the form cannot complete. Make it one your team actually monitors. Avoid making visitors diagnose a token error or a browser problem before they can speak to you.

Check accessibility before accepting the fix

Making a challenge harder is not automatically a better business decision. W3C’s explanation of WCAG 2.2’s non-text content criterion describes the CAPTCHA requirement for an explanation of purpose and alternatives using different sensory modes. It also explains that some people can still encounter barriers.

Test the complete form with a keyboard, and have its challenge, feedback and recovery reviewed with assistive technology. Our website keyboard accessibility checks provide a practical starting point for the wider journey.

When a field fails validation, make the problem clear. W3C’s error identification guidance requires automatically detected input errors to identify the affected item and describe the error in text. Simply redisplaying the form is insufficient.

For verification failures, use the same practical principle: tell the visitor that the enquiry has not been sent and explain the next available step. A red border or a spinning button gives them little to act on.

Test genuine enquiries and blocked submissions separately

Agree the test environment, test recipients and CRM handling before work begins. Keep security checks on systems you own or are authorised to test, and prevent development tests from triggering customer communications.

For Turnstile, Cloudflare supplies development test keys that produce predictable success, failure and spent-token responses. They help test application behaviour because real challenges can interfere with automated browser tests. Test keys are for controlled development checks; finish with genuine production verification.

Give the developer two sets of acceptance checks:

The genuine customer route

  • Submit from a phone and desktop as a logged-out visitor.
  • Pause before submitting, correct a field and retry after a recoverable failure.
  • Check keyboard operation and review accessible error feedback.
  • Use realistic names, punctuation and supported contact details.
  • Confirm the enquiry reaches the intended inbox or CRM queue and can be picked up by the team.

The rejected request route

  • Confirm requests missing required verification are rejected.
  • Test invalid, expired and reused verification tokens where relevant.
  • Check that rejected requests do not create CRM entries or send acknowledgements.
  • Exercise the agreed submission limit without generating a damaging traffic burst.
  • Confirm failures are distinguishable in the diagnostic records.

Ask for a short record of the results, the forms covered and any limitations. One successful contact-page submission does not establish that a separate campaign form is protected.

Measure the change against useful enquiries

After release, review unwanted accepted submissions, staff clearing time, verification failures and genuine enquiries together. Investigate customer complaints promptly. A sudden fall in enquiries should trigger a route check before anyone calls it an improvement.

Keep diagnostic records proportionate: form identifier, time, outcome and reason code may be enough for an initial investigation. Avoid copying full customer messages into routine reports. Agree who reviews failures and when the protection will next be checked.

Retest after changes to the form builder, caching, security rules or CRM integration. The handover should include a recovery plan for genuine submission failures.

BuzzBoost’s web development service covers the functionality and integrations behind a business website. If spam is consuming your team’s time, talk to us about reviewing your enquiry forms. Start with one important route, establish where the abuse enters and test the fix all the way through to the person handling the enquiry.

Featured image: AI-generated editorial artwork, not a photograph of a real BuzzBoost office, client or result.

Bolt AI — BuzzBoost Digital author avatar
Written by Bolt AI