Reduce WoodMart JavaScript bloat on WooCommerce storefronts
For WooCommerce stores where poor INP and slow interactivity trace back to theme, plugin and tag-manager JavaScript.
WoodMart ships a lot of JavaScript for features many stores barely use — sliders, quick view, wishlist, compare, swatches — and third-party tags pile on top. That bundle blocks the main thread, hurts INP and delays the first interaction. This page covers how to find what's actually used and how a Next.js storefront ships a much smaller, page-specific JS budget.
Where the JavaScript comes from
On a typical WoodMart store the main-thread cost is a stack: the theme's own modules, WooCommerce cart/fragment scripts, plugin JS (filters, reviews, wishlist), and marketing tags loaded through a tag manager. Much of it loads on every page — including product pages — before the shopper can interact.
Why it shows up as poor INP
INP measures how quickly the page responds to taps and clicks. When too much JavaScript executes or waits in the queue, that response is delayed:
- Long tasks block the main thread during and after load
- Scripts run on pages that don't use their feature
- Tag managers add third-party JS you don't fully control
- Hydration of heavy theme widgets delays interactivity
When trimming WoodMart is enough
Sometimes the win is just disabling unused modules, deferring non-critical scripts and cleaning up the tag manager. If a handful of scripts cause most of the cost, that's an in-place fix — the audit shows the JavaScript breakdown by source before you decide.
A page-specific JavaScript budget
A Next.js storefront only ships the JavaScript a given page actually needs, and renders the HTML up front so content is usable before scripts run. Interactive pieces load on demand instead of a single site-wide bundle — which is what moves INP the most.
The WoodMart features you pay for in JavaScript
WoodMart bundles a long list of interactive features, and each one ships script whether the store uses it or not: the mega menu, product-image hover swaps, quick shop and quick view, 360-degree and video galleries, countdown timers, a sticky add-to-cart bar, back-to-top, a cookie bar, a currency switcher and animation on scroll. Most stores actively use a handful of these and inherit the runtime cost of all of them. The first, cheapest win is simply auditing which are enabled and turning off the ones the store does not use — before touching architecture.
- List which WoodMart interactive modules are actually enabled
- Disable hover swaps, 360 view, timers and animations you do not use
- Keep only the features that support browsing and buying
- Measure the JavaScript saved per template after each toggle
Third-party tags: the other half of the budget
Even a trimmed theme can feel sluggish because the tag stack is the other half of the main-thread cost. A tag manager often loads analytics, ad pixels, a chat widget, a reviews script and remarketing tags — much of it early and some of it synchronously — and this JavaScript competes with the shopper's first interaction. The fix is to load these deliberately: defer what is not needed immediately, gate marketing tags behind consent, and load campaign-specific scripts only where campaigns run. It keeps the data you rely on while taking its cost off the critical path.
A JavaScript budget with numbers
Cutting scripts works best against a target rather than a feeling. Set a per-template JavaScript budget — a ceiling on the kilobytes shipped and the main-thread time spent before a page is interactive — and measure against it. The DevTools Coverage tab shows how much of the loaded JavaScript a template actually uses, which exposes scripts loaded but never executed. The Performance panel shows total blocking time and the long tasks behind poor INP. With a budget written down, every new tag or widget has to earn its place against a number, instead of being added because it was easy.
- Set a per-template JS size and main-thread budget
- Use the Coverage tab to find loaded-but-unused JavaScript
- Watch total blocking time and long tasks for INP
- Make each new tag justify itself against the budget
Migrating the interactive pieces
We identify the interactions that matter — add-to-cart, gallery, filters — and rebuild them as lean components, dropping the rest of the theme runtime. WooCommerce still serves the data; the storefront just stops shipping JavaScript shoppers never use.
Frequently asked questions
Why is my INP still poor after optimizing images?
INP is about JavaScript on the main thread, not images. Theme, plugin and tag-manager scripts are the usual cause, and images don't touch it.
Can I fix it without migrating?
Often partly — disabling unused modules and deferring scripts helps. But a shared theme bundle sets a floor a Next.js per-page budget clears more fully.
Will I lose features like quick view or wishlist?
No. The ones you use are rebuilt as components; only unused scripts are dropped.
Does this affect my tracking and analytics?
We rationalize tags rather than remove analytics — you keep the data, with less main-thread cost.
WoodMart page builder bloat
Cut the nested markup, duplicated CSS and shortcode scripts WoodMart's page builder leaves on commercial pages — rebuild the layout as lean Next.js components.
WoodMart Core Web Vitals
Pass Core Web Vitals on a WoodMart WooCommerce store — diagnose LCP, INP and CLS, fix what's tunable, and rebuild the frontend in Next.js when the theme is the limit.
WoodMart to Next.js migration
How to migrate a WoodMart WooCommerce store to a Next.js storefront: extract theme options, WPBakery/Elementor layouts, HTML Blocks and swatches without losing SEO.
See how many sales your store is losing
Start with a free speed audit. You'll get your store's real numbers and an honest recommendation — even if it's "you don't need us".