Website Forms
WordPress Form Not Submitting
Last reviewed
Direct answer
A WordPress form that will not submit usually fails because the browser never completes the AJAX or REST request (script conflict, caching, or a blocked endpoint), a CAPTCHA or spam rule rejects the attempt silently, or field validation stops the send — open the console and Network tab first, then clear cache and check security rules before rebuilding the form.
This guide covers generic WordPress front-end forms — WPForms, Gravity Forms, Formidable, theme/builder forms, and similar — when the submit control does nothing, spins forever, or errors before a successful completion. It is distinct from the Contact Form 7–specific guide and from “form submitted but email never arrives,” which is a mail-delivery problem. Confirm whether the request leaves the browser before you change SMTP or notification settings.
Key facts
Verifiable numbers and definitions — each claim links to its source.
- WordPress AJAX form handlers must POST to wp-admin/admin-ajax.php with an action parameter; hard-coded URLs break when the site URL or install path differs. (WordPress AJAX in plugins)
- WordPress documents sending a nonce with AJAX requests that can change data so the server can reject forged or cross-site form submissions. (WordPress AJAX in plugins)
- Pretty permalinks rely on server rewrite rules; broken permalinks can 404 REST or form endpoints that plugins use after submit. (Using Permalinks)
What the error means
Most modern WordPress forms do not do a classic full-page POST. Clicking Submit runs JavaScript that sends the payload to admin-ajax.php, a REST route under /wp-json/, or a plugin-specific endpoint, then paints a success or error message in place. “Not submitting” can mean the click handler never runs (theme/plugin script conflict, deferred/minified JS broken, or a caching layer serving a page with a stale nonce), the request fires but returns 403/406/500 from a firewall or security plugin, CAPTCHA/honeypot logic rejects a real visitor without a clear message, or client-side validation blocks send on a field the visitor believes is valid. Email delivery is a later stage: if the Network tab never shows a successful response, fixing SMTP will not help. The browser console and the failed request’s status and body are what separate a front-end break from a server rejection.
Common symptoms
- Submit button does nothing — no spinner, no message, no page change
- Button shows a loading or “Please wait” state indefinitely
- Inline validation error appears on fields that look correctly filled
- Works for admins or on staging but fails for logged-out visitors on the live site
- Console shows JavaScript errors around jQuery, fetch, axios, or the form plugin’s script handle
- Network tab shows the submit request missing, canceled, or returning 403/429/500
- Fails only on mobile, only behind certain networks, or only when a CAPTCHA widget is present
Most likely causes
- 01 JavaScript conflict or broken minification/defer settings preventing the form’s submit handler from binding
- 02 Page cache or CDN serving a stale nonce or outdated form markup to logged-out visitors
- 03 Security plugin, WAF, or bot fight blocking admin-ajax.php or /wp-json/ form routes
- 04 reCAPTCHA/hCaptcha/Turnstile misconfigured (wrong keys, wrong domain, script blocked)
- 05 Required-field or format validation stricter than the visible UI suggests (hidden required fields, mask mismatch)
- 06 REST API or permalinks broken so plugin REST submit routes 404
- 07 Theme or page-builder update changed the form embed wrapper and broke expected markup hooks
- 08 Two form scripts or duplicate jQuery copies on the same page fighting for the submit event
What changed before the problem started
- Caching, optimization, or “delay JavaScript” settings enabled or tightened
- Security / firewall / CAPTCHA plugin installed or rules updated
- Form plugin, WordPress core, theme, or page builder updated
- CDN or WAF (including Cloudflare) challenge or bot settings changed
- New third-party script (chat, analytics, A/B test) added to form pages
Troubleshooting steps
- 01
Reproduce with console and Network tab open
Private window, DevTools open, submit once. Note any red console errors and whether a request to admin-ajax.php or /wp-json/ appears. Record status code and a short response snippet. This single test splits “JS never ran” from “server said no.”
- 02
Bypass cache and retest as a logged-out visitor
Purge page cache and CDN for the form URL, then test logged out. If it only works when you are logged in, stale cache or a cached nonce is a prime suspect — exclude the form page from full-page cache or shorten its TTL.
- 03
Turn off JS minify/combine/delay on form pages temporarily
Disable those optimizations in the performance plugin (or exclude the form page) and retest. Broken deferred scripts commonly produce a dead submit button with a console error.
- 04
Verify CAPTCHA keys and that the widget script loads
Confirm site/secret keys match the live domain (www vs apex, https). In Network, confirm the CAPTCHA provider script returns 200. A blocked or wrong-domain CAPTCHA often fails submission without a useful message.
- 05
Check security/WAF blocks on the submit endpoint
If the request returns 403, 406, or a challenge page, briefly disable the firewall module or add an allowlist for the form’s AJAX/REST path, then retest. Re-enable protection with the allowlist kept — do not leave the firewall off.
- 06
Confirm required fields and hidden fields in the form builder
Look for required fields hidden by conditional logic, honeypot fields filled by autofill, or phone/email masks that reject valid input. Adjust validation to match what visitors actually enter.
When to stop troubleshooting
Stop DIY changes if the submit request never appears no matter which scripts you exclude, you cannot access WAF/host logs for 403s, the form is the primary lead channel and you lack staging to conflict-test safely, or plugin/theme isolation has not found a culprit. Escalate with console errors, the Network request/response, form plugin name/version, and recent cache or security changes. For Contact Form 7–specific behavior, use that dedicated guide instead.
Information to collect before requesting help
- 01 Form plugin or builder name and version (WPForms, Gravity Forms, Elementor, theme form, etc.)
- 02 Exact UI behavior: no reaction, endless spinner, or validation message text
- 03 Console errors and Network status/response for the submit attempt
- 04 Whether logged-in vs logged-out, or staging vs live, behaves differently
- 05 Caching/CDN and security plugins in use, plus recent rule changes
- 06 CAPTCHA provider and whether its script loads on the page
- 07 Recent form plugin, theme, builder, or WordPress updates
- 08 Whether email arrives when a test submission somehow succeeds (to separate mail issues)
How a professional repairs the problem
We reproduce the failure with DevTools to pin the break to client script, blocked endpoint, CAPTCHA, or validation. Then we purge or exclude cache correctly, isolate conflicting scripts, correct CAPTCHA domain/keys, and allowlist the real submit route in security/WAF rules without leaving the site unprotected. We confirm a full successful submission end-to-end — including any confirmation message — and only then touch mail/SMTP if notifications are a separate problem.
Frequently asked questions
Is this the same as Contact Form 7 not submitting? +
The form “submits” but I never get email — wrong guide? +
Why does it work when I am logged in but not for visitors? +
Should I rebuild the form from scratch? +
Can a security plugin cause this even if the rest of the site is fine? +
Does fixing submission also fix missing notification emails? +
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.