If your chat button only appears after you scroll, move the mouse or tap the screen, a speed feature on your WordPress site is delaying JavaScript until the visitor interacts with the page. The chat itself is fine. Its script simply isn't allowed to run yet. The fix is to exclude the chat script from that delay feature, purge your caches, and test again without touching the page.
This guide names the delay features in the tools WordPress owners use most, and shows where each one keeps its exclusion list.
Defer is fine, delay is the problem
Two features sound alike but behave very differently.
Defer waits until the page's HTML has finished loading, then runs the script. The chat appears a moment after the page does. That's normal, and it's how the SpideyChat plugin loads the widget by default.
Delay waits for a person to do something. LiteSpeed's documentation puts the difference clearly: its Deferred mode runs JavaScript as soon as the HTML finishes loading, while its Delayed mode runs it only after detecting user activity, such as a key press or mouse movement.
For most scripts, delay is a reasonable trade. For a chat button it isn't. The visitors who need help most often sit and read a pricing or returns page without scrolling, and they never see the button that would have answered them.
Confirm it's a delay in under a minute
- Open the page in a private window, so no extensions or stored copies interfere.
- Keep your hands off the mouse and keyboard for ten seconds.
- If no chat button appears, move the mouse once.
- If it appears now, a delay feature is the cause.
If the button never appears at all, even after you scroll, this isn't your problem. Start with our checklist for a chat widget that isn't showing, which covers missing snippets, licenses and security policies.
WP Rocket
WP Rocket's documentation describes a Delay JavaScript execution option that delays all JavaScript files and inline scripts until there is a user interaction, such as moving the mouse, touching the screen, scrolling or pressing a key.
The same documentation describes an Excluded JavaScript Files text area, which accepts file URLs or keywords. Add the chat script there:
- Open WP Rocket's settings and find Delay JavaScript execution.
- In Excluded JavaScript Files, add
spideychat.com/widget.json its own line. - Save, then clear WP Rocket's cache.
WP Rocket also documents a nowprocket attribute you can add to a script tag you've written by hand. If you pasted the SpideyChat snippet into a footer box yourself, adding that attribute to the tag is an alternative to the exclusion list.
LiteSpeed Cache
In LiteSpeed Cache, the setting is Load JS Deferred, with Off, Deferred and Delayed options. If it's set to Delayed, your chat waits for user activity.
You have two choices. Switch the setting to Deferred, which runs scripts once the HTML has loaded. Or keep Delayed and list the chat script in JS Deferred/Delayed Excludes, one entry per line. Add spideychat.com/widget.js there.
LiteSpeed's documentation also mentions a separate JS Excludes list for minify and combine, and a Guest Mode JS Excludes list. For Guest Mode it notes that marking a script with data-no-defer="1" does the same job. The SpideyChat plugin already adds that attribute to its script.
Purge LiteSpeed's cache after any change.
Cloudflare Rocket Loader
Rocket Loader isn't a WordPress plugin, but it sits in front of many WordPress sites. Cloudflare's documentation says it defers the loading of all your JavaScript until after rendering.
To make Rocket Loader skip a script, Cloudflare documents adding data-cfasync="false" to the script tag. It also says the attribute must come before the src attribute. The SpideyChat plugin adds it in the right position. If you pasted the snippet by hand, edit the tag so data-cfasync="false" is the first attribute, then purge the Cloudflare cache.
Autoptimize
Autoptimize's plugin page describes JavaScript options to aggregate script files, or to defer them without aggregating, plus an "Exclude scripts from Autoptimize" setting that takes a comma-separated list. If the chat misbehaves with Autoptimize's JavaScript options on, add spideychat.com/widget.js to that list and clear its cache.
Any other optimisation plugin
Plenty of other tools do the same thing under different names. Look through the JavaScript settings for words like delay, interaction, lazy-load scripts or load on user action. Then find that feature's exclusion list. Nearly every one has a box for file names or keywords. Add spideychat.com/widget.js, save, and purge.
If you run two optimisers, for example a cache plugin plus Cloudflare, check both. Excluding the script in one won't stop the other from delaying it.
What the SpideyChat plugin already does
If you install the SpideyChat WordPress plugin instead of pasting the snippet, it prints the widget script with four extra attributes: data-cfasync="false", data-no-optimize="1", data-no-minify="1" and data-no-defer="1". These are markers that optimisation tools commonly read as "leave this script alone". Cloudflare documents the first for Rocket Loader, and LiteSpeed documents the last for Guest Mode.
Not every tool reads every marker. The SpideyChat plugin also adds WP Rocket's documented nowprocket attribute to its script, so a plugin install is covered there too. If you pasted the snippet yourself instead, add the exclusion above. It takes thirty seconds and removes the guesswork.
The plugin loads the script in the footer with WordPress's own defer setting, which runs it once the page has loaded. It never waits for a visitor to interact. If you're still choosing between the plugin and a pasted snippet, do you need a plugin to add a chatbot? compares the two.
Test it properly after the change
A cached page can keep the old delayed version for hours, so a quick reload proves little. After each change:
- Purge every layer: the cache plugin, your host's cache if it has one, and your CDN.
- Open a private window and load a page you haven't visited since the change.
- Don't touch anything. The chat button should appear within a few seconds.
- Repeat on a phone, since some setups cache mobile pages separately.
If you check page speed afterwards, run the same test you ran before so the numbers are comparable. A single footer script is a small change, but measure it on your own site rather than trusting anyone's general claim.
A note on placement
Delay settings are one of the few install problems that only show up for real visitors. Our guide to adding a chatbot to WordPress covers where the snippet goes in the first place, and the install doc has the steps for other platforms.
Want to see how the chat behaves before you fight with any settings? Paste your website address and test it. It builds a working assistant from your public pages, and you can talk to it straight away.