Why WordPress Plugins Load Scripts on Every Page (And How to Stop It)
You installed a contact form plugin. Now its JavaScript loads on every page, including your About page with no form. Here's why plugins do this and what you can do about it.
Key Takeaways
- Most WordPress plugins load their scripts globally because it's simpler for developers
- Each unnecessary script adds HTTP requests and parse time to your pages
- You can selectively disable scripts on pages that don't need them
- Core WordPress scripts like jquery-migrate are often unnecessary on modern sites
The Global Loading Problem
When plugin developers write code, they have two choices for loading JavaScript and CSS:
- Global loading: Load assets on every page (simple, always works)
- Conditional loading: Only load when the feature is used (complex, requires extra code)
Most choose global loading. It's easier to implement, easier to support, and guarantees the plugin works everywhere. The cost? Your visitors pay with slower page loads.
Real Impact on Page Speed
Let's look at typical script sizes from popular plugins:
| Plugin Type | Typical Script Size | Loads On |
|---|---|---|
| Contact Form | 15-50 KB | Every page |
| Slider/Carousel | 50-150 KB | Every page |
| Social Sharing | 20-80 KB | Every page |
| Page Builder | 100-500 KB | Every page |
Add up a few plugins and you're loading 200-400 KB of JavaScript on pages that don't need any of it.
Common Offenders
jquery-migrate
WordPress loads jquery-migrate by default for backward compatibility with old plugins. If your plugins are updated and modern, you don't need it. That's 10 KB you can remove from every page.
WordPress Emoji Script
WordPress loads an emoji script on every page to convert text emoticons to emoji images. Unless you're writing blog posts with :) and expecting graphical emojis, you don't need it.
Embed Scripts
The oEmbed system loads scripts to handle embedded content from YouTube, Twitter, etc. If your page has no embeds, these scripts serve no purpose.
How to Identify What's Loading
Open your browser's developer tools (F12), go to the Network tab, and filter by JS. Reload the page. You'll see every JavaScript file that loads.
For each script, ask:
- Does this page actually use this feature?
- What plugin or theme does this come from?
- What breaks if I disable it?
Solutions
Manual Code Approach
You can dequeue scripts conditionally with PHP:
add_action('wp_enqueue_scripts', function() {
if (!is_page('contact')) {
wp_dequeue_script('contact-form-script');
}
}, 100);
This works but requires coding knowledge and maintenance as plugins update. Every time a plugin changes its script handle, your code breaks.
You can skip the PHP complexity. Asset Debloater gives you a visual interface to toggle scripts ON/OFF per page. No code, no maintenance. $29 one-time, no subscriptions.
Plugin-Based Approach
Asset management plugins let you see all loaded scripts and toggle them off per page. This is the approach most site owners prefer because it requires no coding.
What to Disable Safely
- jquery-migrate: Safe to disable if your plugins are modern
- WordPress emoji: Safe unless you need emoji conversion
- Contact form scripts: Disable on pages without forms
- Slider scripts: Disable on pages without sliders
- Dashboard/admin scripts: Should never load on frontend anyway
What to Keep
- jQuery core: Many plugins depend on it
- Theme scripts: Usually needed for navigation, etc.
- Analytics: You probably want tracking everywhere
The key is testing. Disable something, test the page, and re-enable if something breaks.
Plugin vs Manual Code: Which Should You Choose?
| Approach | Pros | Cons |
|---|---|---|
| Manual PHP code | Free, full control | Breaks when plugins update, requires developer |
| Asset Debloater | Visual UI, no code, shows file sizes | $29 cost |
If you don't fix this: Every visitor loads 200-400 KB of unused JavaScript. Your PageSpeed score stays low. Mobile users bounce because your site feels slow. Google ranks faster competitors higher.
Stop loading scripts you don't need
Asset Debloater shows every script on your page with file sizes. Toggle OFF what you don't need. No PHP, no guessing, no maintenance.
One-time payment. No subscriptions. Lifetime updates.