Skip to content
Rescue 404

Website Forms

Contact Form 7 Not Submitting

Intermediate Risk: medium

Last reviewed

Hosting access may not be needed Database access usually not needed

Direct answer

Contact Form 7 usually fails to submit because the AJAX request never reaches the server (a caching, security, or JavaScript conflict), a CAPTCHA/spam check silently rejects it, or a validation rule is blocking submission without a clear message. Open the browser console first to see whether the submit request fires at all, then work through caching, security plugins, and the form’s own validation/CAPTCHA setup before touching plugin files.

This guide is about the submit button itself failing — spinning forever, showing “Sending …” and never resolving, throwing a validation error with nothing wrong, or doing nothing at all when clicked. It does not cover forms that submit successfully but whose notification email never arrives; that is a mail-delivery problem covered in a separate guide. Work through this one when the visitor cannot get the form to complete in the first place.

Intermediate

Key facts

Verifiable numbers and definitions — each claim links to its source.

What the error means

Contact Form 7 submits over AJAX: clicking Submit fires a JavaScript request to `wp-admin/admin-ajax.php` (or the REST API on newer setups), the server validates the fields and any CAPTCHA, and the browser then swaps in a success or error message without reloading the page. A “not submitting” report can mean several different failures wearing the same disguise — the JavaScript never fires because a script conflict or aggressive caching broke it, the AJAX request fires but the server returns an error, a spam filter or CAPTCHA silently rejects a legitimate submission, or Contact Form 7’s own validation flags a field the visitor filled in correctly. Each cause needs a different fix, and the browser’s developer console is what tells you which one you are actually dealing with.

Common symptoms

  • Clicking Submit does nothing at all — no spinner, no message, no visible reaction
  • Button shows “Sending …” indefinitely and never resolves to success or failure
  • A red validation message appears on a field that was filled in correctly
  • Submission fails only for some visitors, browsers, or on mobile but works for others
  • Browser console shows a JavaScript error mentioning `wpcf7`, jQuery, or a failed AJAX request
  • Form works on a staging/test copy of the site but not on the live/cached version
  • Submissions succeed intermittently, with no obvious pattern in what changed between attempts

Most likely causes

  1. 01 Caching plugin or CDN serving a stale page that carries an outdated or missing CF7 security nonce
  2. 02 JavaScript conflict between CF7’s own script and another plugin, theme script, or third-party embed on the same page
  3. 03 CAPTCHA (reCAPTCHA/hCaptcha) misconfigured — wrong site/secret key, key tied to the wrong domain, or the CAPTCHA script blocked
  4. 04 Security plugin or firewall blocking `admin-ajax.php` or REST requests, so the submit call never reaches WordPress
  5. 05 Contact Form 7 validation rejecting input due to a mismatched field name/type or an overly strict pattern (e.g. email, tel)
  6. 06 Plugin or theme update changed markup, script loading order, or removed a hook CF7 depends on
  7. 07 Minification/combination of JS/CSS breaking CF7’s script by concatenating it incorrectly with another file

What changed before the problem started

  • Caching plugin, CDN, or “optimize JavaScript” setting enabled or its rules changed
  • reCAPTCHA/hCaptcha keys added, rotated, or regenerated in the CF7 integration settings
  • Security plugin installed, or its firewall/bot-protection rules tightened
  • Contact Form 7 or WordPress core updated, or a page builder embedding the form was updated
  • A new plugin adding its own JavaScript to the same pages the form lives on

Troubleshooting steps

  1. 01

    Open the browser console and Network tab, then submit the form

    Reload the page in a private window, open DevTools, and click Submit. Watch for a red error in the Console (a script conflict) and check the Network tab for the `admin-ajax.php` or REST request — note whether it fires at all and what status code it returns. This single test tells you whether the problem is client-side JavaScript or server-side rejection.

  2. 02

    Reload the page with caching bypassed

    Test in an incognito window with any CDN/page cache purged, or add a cache-busting query string. If the form works after a full cache clear, the nonce or script CF7 needs was simply stale — exclude the form’s page from full-page caching or shorten the cache lifetime for it.

  3. 03

    Verify CAPTCHA keys and domain match

    In Contact Form 7 → Integration, confirm the reCAPTCHA/hCaptcha site key and secret key are current and were generated for the exact domain (including www vs non-www, and http vs https) the form is running on. A key issued for the wrong domain fails silently for visitors.

  4. 04

    Temporarily disable security/firewall rules for the form endpoint

    If the AJAX/REST request in the Network tab returns a 403, 406, or timeout, disable the security plugin’s firewall or bot-protection module and retest. If submission succeeds, re-enable protection with the form’s endpoint explicitly allowlisted instead of leaving protection off.

  5. 05

    Conflict-test with JavaScript optimization disabled

    Turn off any JS minification, combination, or deferred-loading setting in your caching/performance plugin, then retest. Incorrectly combined or deferred scripts are a common, easy-to-miss cause of a submit button that silently does nothing.

  6. 06

    Re-check field validation against real input

    If a specific field flags as invalid, confirm its type (email, tel, required) matches what visitors are actually expected to enter, and that the field’s name attribute in the form template matches the mail tag. A mismatched name is a frequent cause of “valid input rejected as invalid.”

When to stop troubleshooting

Stop DIY changes if the AJAX/REST request never appears in the Network tab no matter what you disable (suggesting a deeper script-loading or server routing issue), you cannot access hosting-level firewall or WAF logs needed to confirm a block, the form is critical to live lead flow and you lack a staging environment to test on, or plugin conflict testing has ruled out every installed plugin without finding the culprit. Escalate with the exact console error, the Network tab request/response, and recent plugin or caching changes.

Information to collect before requesting help

  • 01 Exact failure behavior: nothing happens, spinner never resolves, or a validation error on specific fields
  • 02 Browser console error text and a screenshot of the Network tab request for the failed submit
  • 03 HTTP status code and raw response body of the admin-ajax/REST request, if it fires
  • 04 Whether the issue happens for all visitors/browsers or only some
  • 05 Caching plugin/CDN in use and whether the page was tested with cache fully bypassed
  • 06 CAPTCHA provider and whether site/secret keys match the live domain
  • 07 Security/firewall plugin installed and any recent rule changes
  • 08 Recent Contact Form 7, WordPress core, theme, or plugin updates

How a professional repairs the problem

A pro reproduces the failure with the browser console open to see exactly where the submission breaks — client-side script conflict, a blocked or erroring AJAX/REST call, or server-side validation/CAPTCHA rejection. From there we isolate the conflicting plugin or cache rule through controlled testing, correct CAPTCHA key/domain mismatches, adjust firewall rules to allowlist the form endpoint instead of leaving protection disabled, and fix any field name or validation mismatch — then confirm submissions complete and notifications trigger end-to-end across browsers.

Frequently asked questions

The form submits but I never get the email — is that the same problem? +
No. That is a mail-delivery issue, not a submission failure. See the dedicated guide on contact form emails not being received, which covers SMTP, SPF/DKIM, and notification settings.
Why does the form work for me but not for site visitors? +
This usually points to caching serving you a fresh, uncached page while visitors get a stale cached version with an outdated security nonce, or a CAPTCHA key tied to a domain variant (www vs non-www) that only some visitors hit.
Should I just reinstall Contact Form 7 to fix this? +
Rarely helps. Reinstalling resets settings but does not resolve caching, CAPTCHA key, or plugin conflict issues — the same failure typically returns once the form is reconfigured on the same page.
Is disabling my security plugin safe to test this? +
Yes, briefly and deliberately, ideally on staging or during low traffic — then re-enable it immediately with the form’s AJAX/REST endpoint allowlisted rather than leaving the site unprotected.
Could a recent WordPress or plugin update be the cause? +
Yes. Core, Contact Form 7, page builder, or security plugin updates can change script loading order or tighten firewall rules. Check update history against when the failure started before assuming it is unrelated.
Why does the CAPTCHA never even load on the page? +
A blocked third-party script (ad blocker, security plugin, or a Content Security Policy header) can prevent the reCAPTCHA/hCaptcha script from loading at all, which then blocks submission even though the rest of the form looks normal.

Repair dispatch

Still Need Help Fixing Your Website?

If you are not comfortable editing website files, changing server settings, repairing a database, or troubleshooting a live website, professional help may prevent additional damage or downtime. We will review the problem before accepting the repair.

  • You will receive a clear explanation of the likely cause.
  • We will tell you if the issue falls outside our repair scope.
  • No additional work will be performed without approval.
  • A backup should be created whenever access and website condition allow it.

Do not share passwords through an unencrypted contact form — use Password Pusher (self-destructing link). Prefer a dedicated Rescue 404 admin account, not your personal owner login; if you cannot create one yet, we will add ours after repair.

Written by Josh

Last reviewed

Platform note: Full rescue available for WordPress and self-hosted sites. Wix, Squarespace, Webflow, Weebly, and similar closed builders have very limited backend access — fixes may not be possible. I will tell you honestly before we start.