Check my theme free
HomeGuides & How-toArticle
Guides & How-to

How to add a contact form to WordPress (the right way)

Install a form plugin, build the form, drop it on a page with a block, fix email delivery with SMTP, and stop spam — without theme lock-in.

How to add a contact form to WordPress (the right way) — conceptual editorial illustration
Representative demo screenshot, captured by the ThemeBurn Speed Lab.

Editorial opinion based on hands-on experience — not financial, investment, or professional advice. Some links may be affiliate links; see our disclosure.

Bottom line up front
  • Use a dedicated form plugin, not a theme's built-in widget — a plugin form survives a theme switch, a theme widget vanishes with the theme.
  • Building the form takes five minutes. The part people skip is email delivery: WordPress's default mail is unreliable, so connect SMTP or your submissions quietly disappear.
  • Add anti-spam from day one — a honeypot plus a CAPTCHA stops nearly all bot junk without annoying real visitors.
  • If your form collects names and emails, you need a clear consent checkbox and a privacy note. That's basic data hygiene, not optional.

01Why you need a form plugin, not a theme feature

How to add a contact form to WordPress (the right way): quick implementation checklist
CheckGood signFix before moving on
BackupYou can roll back the site or settingNo restore point exists
StagingChange is tested on a copy firstLive site is the first test
MobileThe result works on a narrow viewportLayout only works on desktop
PerformanceNo large new asset or plugin is added casuallyThe change slows every page

WordPress has no built-in contact form. The core software gives you posts, pages, and a comment system — there is no native "contact us" form anywhere in it. So every form you've ever filled in on a WordPress site came from somewhere: a plugin, a page builder, or a feature baked into the theme.

That last option is the trap. Some themes ship their own contact form widget or shortcode, and it's tempting to use it because it's already there. The problem is what happens later, when you change themes.

A form tied to a theme lives and dies with that theme. Switch to a new one and the shortcode stops resolving, the widget disappears, and your contact page goes blank — or worse, shows raw shortcode text to visitors. A form plugin is independent. It keeps working no matter which theme is active, because it isn't part of the theme at all.

That's the whole argument: forms are functionality, and functionality belongs in plugins. Themes control how your site looks; plugins control what it does. Keep them separate and a theme change never touches your contact form.

02Choosing a form plugin

The WordPress plugin directory has several well-known form plugins, and most follow the same freemium pattern: a capable free version that handles a normal contact form, with paid tiers for advanced features like multi-step forms, payments, or deep integrations. For a standard "name, email, message" form, the free tier of any reputable plugin is plenty.

Rather than name a single winner, here's what to actually look for when you pick one:

  • Active and updated — check the plugin's last-updated date and active-install count in the directory. A form plugin touches user input, so you want one that's maintained and patched.
  • Block editor support — the best modern plugins give you a Gutenberg block to drop the form onto a page, not just an old-style shortcode. Both work; a block is friendlier.
  • Built-in spam protection — look for a honeypot option and CAPTCHA support (reCAPTCHA, hCaptcha, or Cloudflare Turnstile) included for free.
  • SMTP-friendly — the plugin should send through whatever mail setup WordPress has, so it plays nicely with an SMTP plugin (more on this below).
  • Reasonable weight — a contact form shouldn't load a megabyte of scripts on every page. Lighter is better, especially for Core Web Vitals.

Pick one, install its free version, and don't overthink it. You can migrate later, but a simple contact form rarely needs more than the basics any well-rated plugin already gives you.

03Step by step: install, build, place, and deliver

The actual setup is short. Four stages — install the plugin, build the form, put it on a page, and confirm email delivery. Work through them in order.

1. Install the form plugin

Go to Plugins → Add New, search for your chosen form plugin, click Install Now, then Activate. Most form plugins add their own top-level menu item to the WordPress sidebar after activation — that's where you'll build and manage forms.

2. Build the form

Open the plugin's menu and create a new form. Nearly every plugin offers a ready-made "Contact Form" template — start there. A standard contact form needs just four fields: Name, Email, Subject (optional), and Message. Mark Name, Email, and Message as required, and leave it at that.

Resist the urge to add ten fields. Every extra field lowers the chance someone finishes the form. Ask for the minimum you need to reply, and gather the rest in the conversation that follows.

3. Add the form to a page with a block

Create or edit your Contact page under Pages. In the block editor, click the + to add a block and search for your plugin's form block (it's usually named after the plugin). Insert it, then pick your form from the block's dropdown. The form now renders on that page. Publish, and view the page to confirm it appears.

Older plugins use a shortcode instead — you paste something like [your_form id="1"] into a Shortcode block. Both approaches are theme-independent; the block is just cleaner to work with.

4. Set email delivery (the notification address)

In the form's settings, find the notification or email section and set the address that should receive submissions. By default most plugins send to the site admin email, which may not be where you want enquiries to land. Set it deliberately, then send yourself a test submission to confirm it arrives — which leads straight to the most common failure point.

04The email-deliverability gotcha (use SMTP)

Here is the issue that swallows more contact-form submissions than anything else: by default, WordPress sends email using PHP's mail() function. It's unreliable. Messages sent this way frequently land in spam folders or get rejected outright, and the sender — your visitor — never knows their message vanished.

The reason is authentication. Mail from mail() typically isn't properly signed for your domain, so it fails the SPF, DKIM, and DMARC checks that modern inboxes use to decide what's legitimate. Gmail, Outlook, and the rest treat unauthenticated mail as suspicious by default.

The fix is to send through a real mail service over SMTP instead of PHP mail. You install an SMTP plugin, then connect it to a transactional email provider — there are several well-known ones with free tiers that cover a small site's volume. The provider authenticates your domain properly, so your form notifications actually reach the inbox.

  • Install a reputable SMTP plugin from the directory.
  • Create an account with a transactional email service and verify your sending domain (the provider walks you through the SPF/DKIM DNS records).
  • Paste the provider's SMTP credentials or API key into the SMTP plugin.
  • Use the plugin's built-in test-email tool, and confirm the test lands in the inbox — not spam.

Do this even on a small site. A contact form that silently eats messages is worse than no form at all, because you look unresponsive to people who genuinely reached out. As a backup, most form plugins also store every submission in the WordPress database, so you can review entries in the dashboard even if an email goes missing.

05Spam protection: honeypot and CAPTCHA

A public form is a magnet for spam bots within days of going live. Two layers handle nearly all of it, and you should turn both on before — not after — the junk starts arriving.

The honeypot (invisible, frictionless)

A honeypot is a hidden field that real people never see and never fill in, but automated bots fill in everything. If that field comes back with a value, the submission is a bot and gets silently dropped. Most form plugins include a honeypot you enable with one checkbox, and it adds zero friction for real visitors. Turn it on first.

CAPTCHA (for the smarter bots)

When a honeypot isn't enough, add a CAPTCHA. The modern options — reCAPTCHA v3, hCaptcha, and Cloudflare Turnstile — mostly run invisibly in the background and score how human a visitor looks, so genuine users rarely see a challenge at all. You sign up for free keys with the provider and paste them into your form plugin's settings.

Start with the honeypot alone. If spam still leaks through, add an invisible CAPTCHA on top. Avoid the old "click every traffic light" puzzles unless you're under heavy attack — they cost you real submissions from impatient visitors.

07Keeping it theme-independent

The reason a plugin-based form survives a theme switch is worth making concrete, because it's the whole point of doing it this way. Your form, its fields, its notification settings, and its stored entries all live inside the plugin's own data — not in the theme. Swap the theme and none of that moves.

The one thing that can break across a theme change is placement. If you embedded the form with a block on a page, that page content stays put and the form keeps rendering. If you'd instead dropped it into a theme-specific widget area or a theme's custom footer slot, the new theme may not have that same slot — so the form falls off that spot (though the form itself still exists).

The durable pattern: put your form on a normal page with the plugin's block or shortcode, and link to that page from your menu. Page content is theme-agnostic. After any theme switch, just confirm the Contact page still shows the form and send one test submission — that's the entire post-migration check.

08FAQ

Does WordPress have a built-in contact form?

No. WordPress core has no native contact form — only a comment system, which is a different thing. Every contact form comes from a plugin, a page builder, or a theme feature. A dedicated plugin is the recommended route because it's independent of your theme.

Why aren't my form emails arriving?

Almost always the default PHP mail() delivery failing authentication, so messages land in spam or get rejected. Install an SMTP plugin, connect a transactional email provider, verify your domain, and send a test. This single fix resolves the large majority of missing-email complaints.

Do I need a paid form plugin?

For a standard contact form, no. The free tier of any well-rated form plugin handles fields, email notifications, and spam protection. You'd only reach for a paid tier if you need conditional logic, payments, multi-step forms, or specific marketing integrations.

Will my form survive switching themes?

Yes, if you built it with a plugin and placed it on a page with a block or shortcode. The form data lives in the plugin, not the theme. After a theme change, just check the Contact page still renders the form and run one test submission.

How do I stop contact-form spam?

Enable your plugin's honeypot first — it's invisible and stops most bots. If spam still gets through, add an invisible CAPTCHA like reCAPTCHA v3, hCaptcha, or Cloudflare Turnstile using free keys from the provider.

One last note: this is an honest how-to, not legal or business advice. Privacy rules and your site's needs vary, so verify anything compliance-related against your own situation before you rely on it.

Alex Tarlescu
Operator — websites, domains & web platforms

I build, buy, and run theme-based websites and online stores — including on platforms whose themes were later abandoned. The migration and recovery advice here is the advice I follow on my own sites.