Detailed guide contents
Engineering-led guidance. This guide draws on Productionise's standards and practical engineering experience. Examples are generalised to protect confidentiality.
1. Why do contact forms attract spam?
A contact form is deliberately public and designed to accept information from people the business does not already know. Automated systems can discover and submit public forms just as genuine visitors can. Some send advertising or irrelevant messages. Others repeat requests, send malformed content or simply test what the form will accept.
The business consequence is not limited to an untidy inbox. Staff may spend time separating useful enquiries from noise. Form delivery can consume email or API allowances, trigger provider controls, or make genuine messages harder to notice. Large volumes can also obscure a real delivery failure because activity is occurring even though the customer journey is no longer dependable.
This does not mean every form needs enterprise-scale protection. It means the controls should match what the form does, the information it collects and the consequences if it is misused.
2. Browser checks are useful — but they are not enough
The visible form can check that a required field is present, an email address looks plausible and a message is not obviously too long. These browser checks help genuine customers correct mistakes before they press Send.
Automated traffic does not have to use the visible form in the same way a person does. Important checks must therefore happen again in a controlled server-side service: the part of the system the business operates rather than code delivered to every visitor.
That service should accept only the fields the business needs, with sensible lengths and expected formats. It should reject fields the form does not use and avoid accepting enormous submissions simply because the technology can receive them. There is no universal limit for every business; choose limits around the real enquiry journey and explain them where they affect customers.
3. Make automated submissions harder
Several modest controls usually work better than one anti-spam feature. A honeypot is a field hidden from ordinary visitors that should remain empty; some automated tools fill it. Timing signals can identify unusually fast submissions, while rate limits constrain repeated use.
Where the risk justifies it, a challenge service such as a CAPTCHA or Cloudflare Turnstile can request additional evidence of a normal interaction. Its result must be verified by the receiving server, not trusted merely because the browser displays a completed challenge.
Each option has limitations. Automation may avoid a honeypot, traffic can come from many sources, and challenges can add friction or accessibility difficulties. CAPTCHA is not automatically required. Choose proportionate layers, test them with real users and retain an accessible contact path.
4. Limits matter even when spam gets through
Protection is also about limiting what happens when unwanted traffic gets through. Bound how frequently submissions can be accepted, how much information one request can carry and how much provider capacity the form can consume.
Email and form providers may have quotas, spending controls or abuse rules. Know which limits apply and what happens when they are reached. The practical aim is containment: one burst of automated traffic should not consume unlimited resources or quietly prevent later customers from making contact.
5. A successful “Message sent” screen does not prove the message arrived
A form can be operationally broken while looking perfectly healthy. The application may accept a submission while email delivery fails. Credentials may be wrong, a quota may be exhausted, the destination mailbox may reject the message, or the application may catch an error and still show success.
The reverse problem also matters: genuine enquiries can be incorrectly rejected as spam. Blocking every unwanted message by preventing real customers from submitting is not a successful outcome.
The complete journey is: the customer submits, the application accepts the valid request, the provider processes it, the business receives it and material failures can be detected. Providers expose different delivery evidence, and email delivery cannot be guaranteed in every circumstance. Verify as much of the complete path as the system supports rather than treating the button response as final proof.
Plan for the provider being unavailable, misconfigured or over its limit. If the application knows a submission failed, it should not show a misleading success message. Give the customer useful guidance without exposing private technical details, and give the business a practical way to investigate.
6. Monitor the form without collecting unnecessary information
The business needs enough evidence to know when submissions or failures occur, volumes change unexpectedly or a provider reports errors or limits. Someone should own those signals and know when to act.
That does not require complete customer messages to be copied into application logs or several systems. Contact details and free text can contain personal or commercially sensitive information. Record the minimum operational information needed, restrict access and avoid retaining it indefinitely merely because storage is available.
Choose one operational record for genuine enquiries where practical. Each extra database, spreadsheet or analytics copy becomes another place to secure and eventually delete. Justify each field, recipient and copy rather than collecting information for possible future use.
7. Test more than the happy path
Before launch, do more than enter perfect information and confirm that one message arrives. Test missing and unusually long information, repeated submissions, an obvious automated submission and challenge failure where one is used. Test what happens when delivery is unavailable or configuration is missing, then confirm a genuine enquiry still reaches the approved destination.
Use the form on a representative phone and desktop. Check labels, instructions, keyboard navigation, focus and error messages. Anti-abuse controls are part of the customer experience, so changes intended to block automation must be retested against the people the form is meant to serve.
8. What should the business owner ask?
You do not need to choose a rate-limiting algorithm or configure a challenge service yourself. You should be able to obtain clear answers about how the form is protected, delivered and operated.
- What prevents the form from accepting any field, format or amount of information?
- Are important checks performed in a controlled server-side service, not only in the browser?
- What happens if somebody submits the form repeatedly?
- Which spam or automation controls are used, and what are their limitations?
- What happens if the email or form provider fails or reaches a limit?
- How would we know that genuine messages had stopped arriving?
- Are customer details or messages copied or retained anywhere we do not need?
- Who owns and can recover the provider and destination-mailbox accounts?
- Has somebody tested failure and abuse cases as well as a successful submission?
9. Contact forms are part of production readiness
A contact form is often a customer's first real interaction with a business. Production readiness means more than making the Send button work. Genuine customers must be able to use it, abusive traffic must be constrained, failures need sensible handling and the business must recognise when the journey stops working.
AI tools make it useful and fast to create a working form, but these questions apply equally to AI-built, no-code, custom and traditionally developed websites. One successful test does not prove that validation, provider limits, delivery evidence and monitoring are ready for public use.
Dependable production use means the visible feature works, its supporting services are owned and recoverable, and someone can respond when reality differs from the demonstration.
Should I care?
This matters if…
- Your public website has a contact, enquiry, booking or waitlist form.
- Form submissions trigger email, an API call or another provider with usage limits.
- You have tested a successful submission but not repeated, invalid or failed submissions.
It may not be urgent if…
- The form is still an offline mock-up and cannot submit information anywhere.
- The website has no public input or enquiry feature, although this should be reassessed before one is added.