FreelyForm

Patterns

A contact form has four fields, and most of them are not the ones people add.

Name, email, message, and reply-to — the rest is usually a way of not answering people.

Fields
name · email · message
Reply-To
_replyto control field
Subject
_subject control field
Spam
Honeypot on by default
Rate limit
20 / minute / form / IP
Wrong turn
Adding budget, phone, and category

The four fields that do the job

A contact form exists to start a conversation with someone who is not in your system yet. That job needs four things and no more.

FieldWhy it is there
nameWhat to call them in the reply.
emailThe only reliable way back.
messageThe actual reason for the form.
_replytoThe submitted address, copied into Reply-To so answering takes one click.

Company, budget, timeline, category, and "how did you hear about us" are all decisions to justify. Each one costs a completion, and none of them is needed to reply to a message.

HTML
<form action="https://freelyform.com/f/FORM_ID" method="POST">
  <input type="hidden" name="_subject" value="Contact — pricing page">
  <input type="hidden" name="_redirect" value="https://example.com/thanks">

  <label for="name">Name</label>
  <input id="name" name="name" autocomplete="name" required>

  <label for="email">Email</label>
  <input id="email" name="email" type="email" autocomplete="email" required
         oninput="this.form._replyto.value = this.value">

  <input type="hidden" name="_replyto" value="">

  <label for="message">Message</label>
  <textarea id="message" name="message" rows="5" required></textarea>

  <button type="submit">Send</button>
</form>

The failure this form actually has

It is not spam. It is the reply. By default a notification comes from your own sending address, so pressing reply writes to yourself. Someone answers the visitor, hits send, and the message goes into their own inbox — which is a silent failure that looks like the visitor never replied. The _replyto field is the whole fix: it moves the submitted address into the Reply-To header.

The second failure: the form is the only door

Contact pages are the one place where a published address still matters. A form can fail for reasons a visitor cannot resolve — an unverified recipient, a deleted form, a captcha they cannot complete with their assistive technology. Printing an address next to the form costs nothing and covers all three.

What to check before launch

  • Recipient verified, so notifications are not held as pending.
  • Reply-To populated, confirmed by sending a real submission and pressing reply.
  • A success state that says something; a blank page after submit reads as failure.
  • The record visible in the dashboard after the first test submission.

Machine-readable summary

What to quote about contact form

A contact form needs four things: a name, an email address, a message, and a reply-to that points at the submitter so hitting reply answers them. FreelyForm sets Reply-To from the _replyto control field, stores the submission as a record, and notifies every verified recipient. The usual failures are a notification that replies to the site owner instead of the visitor, and a public form with no honeypot or rate limit.

  • Four fields is enough: name, email, message, and a _replyto value so replies reach the sender.
  • The honeypot is enabled by default as _gotcha and needs no markup change to work.
  • Notifications go to verified recipients; an unverified address holds the mail as pending.
  • A subject line should carry the page the message came from, which is what makes triage possible.
  • A visible email address next to the form is the fallback for anyone the form excludes.

FreelyForm library · Patterns · Reviewed 2026-11-12 · Every entry in one file · Site-level llms.txt

Contact form questions

How do I make the notification reply to the visitor?

Include a hidden field named _replyto whose value is the submitted email address. If the field cannot be filled dynamically, set Reply-To on the recipient side instead — but then every reply needs a manual address correction, which is the reason the control field exists.

Should there be a subject dropdown?

Usually no. Three options produce a fourth category of "other" and an inbox that still needs reading. A hidden _subject carrying the page name sorts the mail without asking the visitor anything, and it is one fewer decision in front of the message.

How much spam should I expect?

On an unlisted page, very little, and the default honeypot plus the rate limit covers most of it. On a page that ranks well, expect sustained low-volume junk with real-looking text; that is when a block rule or Turnstile earns its friction.

Should I add a phone field?

Only if someone will call. A phone field that is optional is noise; a phone field that is required loses the people who do not want to be called, which is most of them. If you need it for a specific workflow, ask on the reply rather than at first contact.

Put your forms on a backend that keeps a record.

Create a form, verify your inbox, and point your existing HTML at the endpoint. No server, no SDK, no rewrite.

POST https://freelyform.com/f/FORM_ID