The fastest way to add a contact form to WordPress is a dedicated form plugin, not a theme feature or a hand-coded shortcode. Install Contact Form 7, WPForms, or Gravity Forms from the WordPress plugin directory, build the form in a few minutes with drag-and-drop or shortcode, then drop it on any page. The part people skip, and the part that actually breaks, is what happens after someone clicks submit: by default WordPress sends that email through a function that gets silently filtered by Gmail and Outlook. Fix that first, before you trust the form with real leads.
Picking a plugin
All three major options do the job. The differences are in how much you want to configure:
- Contact Form 7 is free, lightweight, and shortcode-based. You write field tags in a text box (
[text* your-name],[email* your-email]) rather than dragging blocks around. It has no built-in spam protection beyond a CAPTCHA add-on, so pair it with Akismet or a honeypot plugin. - WPForms has a visual drag-and-drop builder, templates for common forms (contact, quote request, newsletter signup), and built-in spam filtering on paid tiers. The free version covers a basic contact form fine.
- Gravity Forms is paid only, but it's the strongest option if you need conditional logic, file uploads, multi-page forms, or integrations with a CRM or email marketing tool.
For a single "get in touch" form with a name, email, and message field, any of the three will do. Install it from Plugins → Add New in wp-admin, activate it, and build the form from its own admin menu.
Adding the form to a page
Each plugin gives you a block or shortcode to drop into a page or post. In the block editor, search for the plugin's block (WPForms and Gravity Forms both ship one) and pick your form from the dropdown. Contact Form 7 instead gives you a shortcode like [contact-form-7 id="123" title="Contact form"] to paste into a Shortcode block. Either way, publish the page and submit a test entry yourself to confirm the fields validate and the confirmation message shows up.
Why the email doesn't show up
This is the step that trips up almost every new contact form. WordPress sends form notification emails through a built-in function called wp_mail(), which hands the message to PHP's local mail queue with no authentication attached. There's no SPF alignment and no DKIM signature on that outgoing message, so Gmail and Outlook increasingly reject it outright or drop it straight into spam. Worse, wp_mail() reports success the moment it queues the message, not when it's actually delivered, so the form shows "message sent" to your visitor while the email quietly disappears downstream.
The fix is to route form email through authenticated SMTP instead of the local queue. Install WP Mail SMTP, connect it to a real mailbox on your domain, and every plugin on the site, including whichever contact form plugin you picked, starts sending through that verified identity instead. The full walkthrough, including which "From" address to use and why a made-up sender address gets flagged, is in Contact form emails not arriving (WordPress SMTP fix). Set this up before you publish the form live, not after the first missed lead.
Spam and validation basics
A public contact form on an indexed page will get scraped by spam bots within days. Turn on whatever spam protection your plugin offers: Akismet integration, a honeypot field, or a simple math CAPTCHA. Mark the fields you actually need as required (name, email, message) and leave everything else optional, since every required field is a chance for a real visitor to abandon the form. If you're running WooCommerce alongside a contact form, the same SMTP fix applies to order emails, and the caching and database considerations are different for a store; see Running a WooCommerce store if that's your setup.
Multilingual and migrated sites
If your site serves visitors in more than one language, the form's field labels and validation messages need translating too, not just your page copy. Most form plugins are compatible with WPML, Polylang, and TranslatePress; see Making WordPress multilingual for how those plugins handle strings inside plugin output. And if you're rebuilding a form that used to live on Wix or Squarespace, note that neither platform's export brings form submissions or configurations with it. You'll rebuild the form itself in WordPress; see Moving from Wix or Squarespace to WordPress for the rest of that migration.
When to contact support
If you've set up WP Mail SMTP correctly and test emails still aren't arriving, or you're getting SMTP authentication errors you can't resolve, open a ticket from Support in the portal. It's a real person on the other end who can help you work through the error.