Caching & Compatibility
The coming-soon signup form submits over AJAX and is protected by a WordPress security token (nonce) that’s printed into the product page. That token has a limited lifetime — which means full-page caching can break signups if the cached page is served with an expired token. This is the single most common real-world issue, and the fix is quick once you know where to look.
Table of Contents
Symptom
On a product page that’s being served from a page cache, a visitor submits the signup form and it fails — typically:
- the form appears to do nothing, or
- they see a “Security check failed” / generic error, or
- the browser console / Network tab shows the
admin-ajax.phprequest returning-1or a 403.
Meanwhile it works fine for you as a logged-in admin (logged-in users bypass the page cache), which is what makes this confusing.
Why it happens
The signup form uses a nonce generated with wp_create_nonce() and printed into
the page. Nonces are only valid for a limited window (by default up to ~24 hours).
When a full-page cache stores the HTML, it stores that nonce frozen in time.
Once the cached copy is older than the nonce’s lifetime, every visitor served that
stale page submits an expired token, and the server rejects it.
Logged-in users don’t see this because caches normally bypass the cache for them — so the bug only shows up for logged-out shoppers, exactly the people you want to capture.
The fix: exclude coming-soon product pages from full-page cache
Tell your cache not to serve coming-soon product pages from cache (or to refresh them frequently). You only need to exclude the specific products you’ve marked coming soon — the rest of your catalogue can stay cached.
Where to set this depends on your cache:
- WP Rocket — Settings → Advanced Rules → Never Cache URL(s): add each
coming-soon product URL (e.g.
/product/widget-3000/). - LiteSpeed Cache — Cache → Excludes → Do Not Cache URIs: add the product URLs.
- W3 Total Cache — Page Cache → Advanced → Never cache the following pages.
- WP Super Cache — Advanced → Accepted Filenames & Rejected URIs: add the product paths to the rejected list.
- Cloudflare APO / full-page CDN cache — add a cache bypass / page rule for the coming-soon product URLs, or set a short edge TTL for them.
- Host-level cache (Kinsta, WP Engine, SiteGround, Cloudways, etc.) — use the host’s cache-exclusion panel to exclude those URLs, or ask their support to.
Tip: because you remove the coming-soon flag at launch (and the product becomes a normal cacheable page again), remember to remove the cache exclusion then too.
Other compatibility notes
JavaScript optimisation (defer / combine / delay)
The form’s script depends on jQuery. Aggressive JS-optimisation features — “combine JavaScript”, “delay JS execution”, or deferring jQuery — can load the script before jQuery is ready and stop the form (and countdown) from working. If the form does nothing even on an un-cached page:
- Exclude
sscs-ajax-signup.js(and jQuery) from combine/defer/delay, or - turn off “delay JavaScript execution” for coming-soon pages.
(See also the “form submits but nothing happens” section of Troubleshooting.)
Theme / page builders
The plugin replaces the Add to Cart button by detecting your theme’s hook. Heavily customised themes and some page builders render Add to Cart in non-standard ways — see Theme Compatibility Deep-Dive if the block doesn’t appear in the right spot.
Cloudflare Turnstile
If you’ve enabled Turnstile, its widget script loads from Cloudflare. The script itself isn’t affected by your page cache, but the same nonce caveat above still applies to the form submission — so the cache exclusion is still the fix.
Assets are conditional (good news for performance)
The plugin only loads its CSS/JS on product pages that are actually marked coming soon. Every other page is untouched, so excluding a couple of product URLs from cache has a negligible effect on your overall cache hit rate.
Quick checklist
- [ ] Coming-soon product URLs excluded from full-page cache (or short TTL).
- [ ] jQuery /
sscs-ajax-signup.jsexcluded from JS combine/defer/delay. - [ ] Block appears in the right place (theme hook) — see Theme Compatibility.
- [ ] Re-cache the product (remove the exclusion) after you launch it.
- Troubleshooting — “the signup form submits but nothing happens”.
- Theme Compatibility Deep-Dive — when the block doesn’t appear.
- Spam & Abuse Protection — the nonce is one layer; rate-limiting/CAPTCHA are the others.