Every blog needs a contact form. The default WordPress install doesn’t include one, so a plugin is the answer. The popular choices range from heavy and bloated to lightweight and capable. This post is how to pick and set up a form that works without slowing your site.

Short answer: Install Fluent Forms or WPForms Lite (both free). Build a simple 3-field form (name, email, message). Add spam protection (honeypot or Cloudflare Turnstile). Set email notifications. Test by submitting it. Add to a dedicated contact page in your menu.
A clean WordPress contact form with name, email, and message fields

The plugin options

Fluent Forms (free + paid)

The lightest of the major form plugins. Fast, modern, well-built. Free version is generous.

Pros: lightweight, good UX, no bloat.

Cons: less famous than the others, so fewer tutorials online.

WPForms Lite (free; Pro paid)

The most popular form plugin. Drag-and-drop builder.

Pros: easy to use, lots of features, good documentation.

Cons: Lite version is restricted; the Pro upsell is constant.

Contact Form 7 (free)

The longest-running WordPress form plugin. Free, no paid version.

Pros: free forever, simple, no upsells.

Cons: dated interface, code-like shortcode configuration, looks rough out of the box.

Gravity Forms (paid)

Premium-only. Most powerful form plugin in the WordPress ecosystem.

Pros: best-in-class features, deep integrations, used by enterprise sites.

Cons: $59+ per year. Overkill for a basic contact form.

Ninja Forms (free + paid)

Solid middle-tier option. Free version is functional.

Pros: drag-and-drop, decent free tier.

Cons: heavier than Fluent Forms.

For most bloggers: Fluent Forms or WPForms Lite. Both free, both modern, both fast.

Setting up a basic form

Step 1: Install the plugin

Plugins → Add New → search “Fluent Forms” or “WPForms” → Install → Activate.

Step 2: Create a form

Both plugins have a “create form” wizard. Pick “Contact Form” as the starting template — most have one.

Step 3: Configure fields

The contact form template usually includes:

  • Name (required).
  • Email (required).
  • Message (required, multi-line).

Optional additions worth considering:

  • Subject field — helps you triage inbound messages.
  • Reason for contacting dropdown — “General question,” “Partnership,” “Bug report,” “Other.”

Don’t overload. Fewer fields = more submissions.

Step 4: Configure email notifications

When someone submits the form, you should get an email. Configure:

  • Recipient: your email.
  • Subject: something like “New contact form submission from [name].”
  • Reply-to: set to the submitter’s email so you can reply directly.
  • Body: include all form field values.

Step 5: Add spam protection

Critical. Without spam protection, contact forms attract automated submissions almost immediately.

Options, in order of preference:

  • Honeypot. An invisible field that bots fill but humans don’t. Most form plugins include this built in. Enable it.
  • Cloudflare Turnstile. Free, privacy-friendly CAPTCHA alternative. Less friction than reCAPTCHA.
  • reCAPTCHA v3. Google’s invisible CAPTCHA. Effective but Google-dependent.
  • Math question. “What’s 2 + 3?” Simple, low-friction, but bots can solve it.

Honeypot + Cloudflare Turnstile is the modern recommendation.

Step 6: Configure the “thank you” message or redirect

After submission, the user needs feedback. Options:

  • Inline thank-you message (“Thanks! I’ll reply within 48 hours.”).
  • Redirect to a dedicated thank-you page.

Either works. Don’t leave the user staring at an empty form.

Step 7: Add the form to a page

Create a “Contact” page. Add the form via the form plugin’s block or shortcode.

Most plugins add a block to the editor. Insert the block, select your form.

Step 8: Add the contact page to your menu

Appearance → Menus → add Contact page to your primary menu.

A contact page showing the form embedded in a clean layout with surrounding text

Testing the form

Always test before announcing.

  1. Visit your contact page in incognito.
  2. Submit the form with real data.
  3. Verify the email arrives.
  4. Verify the thank-you message or redirect works.
  5. Reply to the submission to verify the reply-to is set correctly.

If the email doesn’t arrive, you have an email delivery problem (see below).

Email delivery issues

WordPress’s default email sends via PHP’s mail() function. Many hosts have it disabled, or emails go to spam.

The fix: configure SMTP. Plugins:

  • WP Mail SMTP. Free version handles SendGrid, Mailgun, SES, others.
  • FluentSMTP. Free, from the Fluent Forms team.

Pick one. Connect to a free SMTP service (Brevo formerly Sendinblue gives 300/day free; SendGrid free tier; SES is cheap). Form submissions then arrive reliably.

What to put on the contact page beyond the form

A bare form looks cold. Add context:

  • A short intro paragraph. “I read every message. Reply within 48 hours.”
  • Alternative contact methods. Email address, Twitter/X handle, etc.
  • What you’d love to hear about. Questions, corrections, partnership requests.
  • What you can’t help with. “I don’t take guest post pitches” if applicable.

This filters inbound messages and sets expectations.

Common contact form mistakes

Too many fields

“Please provide your company, role, budget, timeline, and how you heard about us.” Each field reduces submissions. Three fields converts better than ten.

Required phone numbers

Most blog contact forms don’t need phone numbers. Removing makes the form less friction.

Visible CAPTCHA that requires solving

“Pick all images with traffic lights.” Frustrating. Use invisible CAPTCHA (Turnstile, reCAPTCHA v3) or honeypot instead.

No success feedback

Submit → blank screen. The user doesn’t know if it worked. Always show a confirmation.

Form on a homepage modal

Avoid. Modal contact forms on the homepage feel pushy. Use a dedicated page.

Connecting to email tools

If you want form submissions to also create email subscribers, both Fluent Forms and WPForms support this (often free in the basic versions):

  • Add a checkbox: “Add me to your newsletter.”
  • If checked, the submission goes to your email tool (MailerLite, ConvertKit, Beehiiv) as a new subscriber.

This works but should be opt-in (checkbox unchecked by default). Auto-subscribing form submitters violates GDPR.

For multi-purpose contact pages

Some bloggers use separate forms for different purposes:

  • General inquiries.
  • Sponsorship requests.
  • Press / media.
  • Bug reports.

Either: one form with a “reason” dropdown, or separate forms on separate pages. Either works. Pick one approach and don’t overthink it.

The honest summary

Install Fluent Forms or WPForms Lite. Build a 3-field form: name, email, message. Add honeypot or Cloudflare Turnstile for spam protection. Configure email notifications and reply-to. Add to a Contact page in your menu. Configure SMTP via WP Mail SMTP for reliable delivery. Test before announcing. Don’t add unnecessary fields. The form is the simplest part; the spam protection and email delivery are where it usually breaks.