Description
Easy Optimizer is a free, all-in-one WordPress speed optimization plugin that replaces the 3–5 speed plugins most sites run today. One cache plugin. One dashboard. No premium upsells for core features.
Every toggle maps to a specific Google Lighthouse recommendation — enable it, save, and your Core Web Vitals (LCP, CLS, INP) improve immediately. Features you don’t enable never touch your page load.
Core Features
- Full Page Caching: Achieve sub-millisecond TTFB with static HTML generation and separate mobile/desktop caches. Includes automatic sitemap-based preloading.
- Remove Unused CSS: Automatically strips unnecessary styles, generating a slim, per-page-type stylesheet to eliminate render-blocking resources.
- Delay & Defer JavaScript: Improve INP and reduce total blocking time by delaying script execution until user interaction, or deferring them natively.
- Smart Lazy Loading: Defers offscreen images, iframes, videos, and background images. Automatically adds missing width/height attributes to fix layout shifts.
- Automatic LCP Preload: Detects and preloads your Largest Contentful Paint image dynamically for instant visual loading.
- Prefetch Pages: Pre-fetches links as users hover over them, making your site feel like an instant single-page application.
- Font Optimization: Injects font-display: swap automatically to ensure text remains visible during webfont loads.
- Bloat Removal: 15 one-click toggles to safely remove unused WordPress core scripts and features.
- Database Cleanup & Optimization: Schedule automatic cleanups of revisions, auto-drafts, trashed posts, spam, and transients — each with a pre-cleanup snapshot so you can restore safely. The built-in Autoload Health auditor finds the heaviest options loaded on every page and lets you switch off the ones you don’t need, directly resolving the WordPress Site Health warning “Autoloaded options could affect performance.”
- Heartbeat & Cron Manager: Take control of server resources by limiting WordPress Heartbeat frequency and throttling WP-Cron execution directly from the dashboard (no
wp-config.phpedits required). View, run, or delete scheduled cron events. - Cloudflare Integration: Automatically purge your Cloudflare edge cache (tag-based or full zone) whenever the page cache clears. Test your API connection instantly without saving credentials first.
- Hosting Integrations: Auto-detects your environment to automatically purge server-level cache on managed hosts including Kinsta, WP Engine, SiteGround, Cloudways, GridPane, RunCloud, SpinupWP, Rocket.net, and WordPress.com.
- Accessibility & SEO Fixes: Automatically resolves common Lighthouse accessibility warnings in real-time, such as missing form labels, ARIA tags, and un-crawlable links.
- PageSpeed Speed Test: Run a Google PageSpeed test right from your dashboard and see your score with and without Easy Optimizer, side by side, for both mobile and desktop. Includes Core Web Vitals (LCP, CLS, INP). Works out of the box with no setup, or add your own free Google API key for unlimited tests.
- Backend Analyzer: Find what slows your site down behind the scenes. Profile any page (or your admin area) on demand to see which plugins, themes, and database queries take the most time. Basically, find slow plugins and themes. Nothing runs on your real visitors, so there is no added overhead.
PageSpeed Insights & Lighthouse Recommendations Addressed
- Eliminate render-blocking resources
- Reduce unused CSS
- Reduce unused JavaScript
- Minimize main-thread work
- Defer offscreen images
- Serve images in next-gen formats
- Properly size images
- Image elements do not have explicit width and height
- Preload Largest Contentful Paint image
- Ensure text remains visible during webfont load
- Serve static assets with an efficient cache policy
- Enable text compression
- Form elements do not have associated labels
- Links do not have a discernible name
- Buttons do not have an accessible name
- [user-scalable=”no”] in viewport or [maximum-scale] < 5 .
- Frame or iframe elements do not have a title — accessibility fix
- ARIA progressbar elements do not have accessible names.
- Some elements have a [tabindex] value greater than 0.
- Links are not crawlable.
- Image elements do not have [alt] attributes.
Works With Your Setup
- WordPress & PHP: WP 6.4+ and PHP 7.4+
- Web Servers: Apache, Nginx, LiteSpeed, OpenLiteSpeed
- WooCommerce: Fully compatible. Cart, checkout, and my-account pages are automatically excluded from caching and optimization to protect the purchase flow.
- Page Builders: Elementor, Beaver Builder, Divi, Gutenberg, Bricks, Oxygen, Breakdance.
External Services
Easy Optimizer can connect to the external services below. Each is optional and used only for the feature noted.
- ShortPixel CDN (https://cdn.shortpixel.ai/) — when Image CDN is on, image URLs are rewritten to ShortPixel for WebP/AVIF delivery. Only image URLs are sent. Terms: https://shortpixel.com/tos — Privacy: https://shortpixel.com/privacy
- Google PageSpeed Insights (https://www.googleapis.com/pagespeedonline/) — when you run a speed test with your own Google API key, your site’s public home URL is sent to Google for analysis. Terms: https://developers.google.com/terms — Privacy: https://policies.google.com/privacy
- FluxPress PageSpeed proxy (https://fluxpress.io/) — the default speed-test path. Your site registers once (domain + a one-time verification code), then sends its public home URL to be tested via Google so no API key is needed. Terms & Privacy: https://fluxpress.io/privacy
- FluxPress usage analytics (https://fluxpress.io/) — opt-in only, off by default. When enabled, sends anonymous data weekly: plugin/WordPress/PHP versions, active theme name, locale, hosting provider, multisite/WooCommerce flags, and your site URL. No email, IP address, or site content. Terms & Privacy: https://fluxpress.io/privacy
Privacy
Easy Optimizer’s usage analytics are opt-in and disabled by default. When enabled, it sends the data listed under External Services over an encrypted connection. It never collects your email address, IP address, user data, or site content.
Screenshots














Installation
- Install via Plugins Add New and search “Easy Optimizer”, or upload to
/wp-content/plugins/easy-optimizer/. - Activate the plugin.
- Go to Easy Optimizer in the admin sidebar.
- Enable Page Cache and Remove Unused CSS first — they have the biggest impact.
- Save. The cache preloader starts warming your site automatically.
FAQ
-
Does this replace WP Rocket, LiteSpeed Cache or W3 Total Cache?
-
Yes — page caching, unused CSS, delay JS, lazy loading, LCP preload, font optimization, image CDN, database cleanup, bloat removal, accessibility and SEO fixes all in one free plugin. Disable other caching plugins before enabling the page cache.
-
Does it work with WooCommerce?
-
Fully. Cart, checkout and my-account pages are automatically excluded from all optimization modules. Cart fragments can be disabled separately from the Bloat Removal tab.
-
Will Delay JavaScript break my site?
-
Most sites work without issues. jQuery is excluded by default. If something breaks, add the script name to the exclusion list or switch to the safer Defer method.
-
Can I use this with Cloudflare?
-
Yes. Add your API token and Zone ID in the Cloudflare tab. Cache purges sync automatically.
-
Does it support multisite?
-
Works on individual sites within a multisite network.
-
How do I migrate settings between sites?
-
Export settings as JSON from the Settings tab, then import on the destination site.
-
What’s the best starting configuration?
-
Enable Page Cache, Remove Unused CSS, Delay JavaScript, Lazy Load Images, Preload LCP and Font Display Swap. Then turn on the accessibility and SEO toggles relevant to your site.
Reviews
Contributors & Developers
“Easy Optimizer – Speed, Cache, Unused CSS, Delay JS, Lazy Load, LCP & Core Web Vitals” is open source software. The following people have contributed to this plugin.
ContributorsInterested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
2.4.0
- New: Dashboard speed test — Google PageSpeed score before vs after, mobile and desktop, with Core Web Vitals.
- New: Backend Analyzer — find slow plugins, themes and database queries by profiling any page or admin URL.
- Fix: admin toolbar menu missing in wp-admin (Clear All Cache / Used CSS / LCP) — restored.
- Fix: blank admin panel when another plugin loads React (“Identifier ‘React’ has already been declared”).
- Fix: autoload options disabled on WordPress 6.6+ now show correctly with a working Enable button.
- New: optional Cloudways hosting recommendation when a slow score is detected on non-Cloudways sites.
- Fix: cookie-keyed cache variants (currency/language switchers) could be served the wrong variant in .htaccess mode — rewrite serving now auto-falls back to drop-in/PHP when variant cookies are registered
- Fix: page-builder template and reusable-block saves no longer trigger repeated full cache purges — purges are debounced and coalesced (max one per minute, nothing skipped)
- Fix: settings import now runs through the full save pipeline (drop-in, .htaccess and cache are refreshed immediately)
- Fix: permalinks containing “.xml”/”.txt” in the slug were wrongly excluded from drop-in cache serving
- Fix: HEAD requests are now served from cache in PHP mode (headers only) instead of booting WordPress
- Fix: cached page counter self-seeds and falls back to a real scan on fresh installs
- Fix: theme-switch now also clears remote-CSS fetch transients
- Fix: uninstall cleans up site transients and no longer deletes data by default on installs that never saved settings
- New: per-site drop-in configuration on multisite — every network site is served with its own settings
- New: unused-asset garbage collection — minified/inline/used-CSS files not referenced by any render in 30 days are removed daily
- New: Cloudflare per-URL purges are batched, deduplicated and capped per request (large bursts escalate to one zone purge)
- Improved: database autoload toggle uses the WordPress 6.4+ core API and recognises WP 6.6+ autoload values
- Improved: cache engine split into focused modules with shared serve logic between runtime and drop-in; classmap autoloader added
- Multisite: .htaccess rewrite mode safely disabled (shared root file); full-clear site scan is now cached
2.3.2
Fixed – Astra: .ast-header-break-point styles are now excluded from desktop Used CSS (kept on mobile; skipped when Separate Mobile Cache is off).
Fixed – Queue table bloat on large sites — failed and orphaned rows are now auto-cleaned and disk space reclaimed, preventing unbounded growth.
Improved – Added a daily queue cleanup, a cleanup index, and a one-time table optimization on upgrade.
Improved – Cache invalidation overhaul. Editing a post now clears just the affected URLs (the post, its archives, author, date and taxonomy pages, with pagination) instead of needing a full flush, and a changed slug also clears the old URL.
Improved – Comment actions (new comment, approve, spam, edit) now clear only that post’s page instead of the whole cache.
Improved – Taxonomy term, author profile and media edits now trigger targeted, lightweight cache clears.
Improved – Multisite: clearing the cache now affects only the current site, never the rest of the network.
Improved – WooCommerce: cart, checkout and account pages are reliably kept out of the cache, including custom or translated page slugs.
Improved – WooCommerce: multi-currency stores (CURCY, WPML/WCML, Aelia, WOOCS) now cache a correct copy per selected currency.
Improved – Simplified the admin-bar menu to three focused actions: Clear Page Cache, Clear Used CSS and Clear LCP Images for the current page.
Improved – Minified the link-prefetch and LCP beacon scripts for a smaller front-end footprint.
New – Added a “noojs” body class (removed automatically once JavaScript runs) so themes can style the pre-JS / delayed-JS state. Hardened against themes and plugins with duplicate or malformed output.
Fixed – HEAD requests no longer return the page body on a cache hit.
Fixed – Removed unused/dead code in the WooCommerce and caching layers.
2.3.0
- Added: first-run setup wizard. On a new install, nothing is enabled until you choose one of three presets — Safe (cache, browser caching, gzip, font-display swap, LCP preload, lazy load, cache preload, moderate prefetch), Balanced (adds Remove Unused CSS in Async mode, Delay JS with jQuery excluded, and add-missing-image-dimensions), or Maximum (Used CSS in Delay mode, Delay JS including jQuery, lazy-load fonts). Existing sites keep their settings and are not shown the wizard.
- Added: Minify CSS and Minify JavaScript. Each minifies local files only, caches the result on disk, and processes a given file just once, so the per-request cost stays minimal. Already-minified files are skipped, relative url()/@import paths inside CSS are rewritten so assets keep resolving, and the Delay-JS loader and lazy-load runtime are never touched. Minify reuses the existing Exclude Stylesheets / Exclude Scripts fields and works independently of Remove Unused CSS and Delay JS.
- Added: Safe Mode button (Settings tab) that instantly reverts to the conservative Safe preset and turns off the riskier features — a one-click known-good baseline for troubleshooting.
- Added: query-string debug switches. Append ?nooptimize, ?nocache, ?nodelayjs, or ?norucss to any front-end URL to disable that feature for a single request without changing settings (the switched request is never cached, so you always see fresh output). Instructions are shown on the Settings tab.
- Fixed: Remove Unused CSS now has a fail-safe — original stylesheets are only delayed/async’d/removed after a valid Used CSS file has been generated and passes a confidence check (minimum size, real rule blocks, at least one stylesheet processed). If generation comes up empty or low-confidence, the page is served with its original styling untouched and is not cached, preventing rare unstyled-page output.
- Changed: the diagnostics opt-in is now requested in the setup wizard (and remains toggleable later), so the separate opt-in admin notice has been removed.
2.2.2
- Fixed: cached page count could repeatedly drop back to near-zero while the preload queue stayed at hundreds/thousands of URLs. Recording a page’s LCP element no longer wipes the entire cache and restarts the whole preload crawl — it now refreshes only the affected page. This removes a self-perpetuating clear re-preload loop that prevented the cache from ever filling on some sites.
- Fixed: lazily-expired cached pages now adjust the page counter correctly, so the dashboard count no longer drifts upward after TTL expiry.
- Improved: cached files are written atomically (temporary file + rename) so a concurrent visitor can never receive a half-written page under load.
- Improved: Apache-served cache files always send a single
Vary: Accept-Encoding. - Added: Debug Log now records excessive cache purges, stalled or looping preload queues, the origin of every full cache clear, and cache-write failures — making invalidation loops easy to spot.
- Added: Settings Debug Logging lets you enable/disable error and warning logging independently. Error logging is on by default.
- Fixed: the Debug Log is no longer deleted when you clear the cache. It now lives in wp-content/cache/easyopt-logs/ (outside the cache directory); any existing log is migrated automatically on update.
- Improved: preload and serving warnings are far less noisy — the preload “queue growing” and “stalled” warnings now only fire on a genuine problem (e.g. a real invalidation loop, or an actively-running queue that isn’t progressing), not during a normal preload start or behind a CDN.
- Performance: no feature changes; the loop fix substantially lowers CPU and disk usage on busy and low-resource/shared hosting.
2.2.1
- Fixed: HTTP 500 on some Apache/LiteSpeed servers after writing .htaccess. Removed the obsolete Internet Explorer / Netscape 4
BrowserMatchgzip directives, which are rejected by the LiteSpeed/OpenLiteSpeed config parser. Gzip and Brotli compression are unchanged — the exact same content types are still compressed. - Fixed:
AddOutputFilterByType(Gzip/Brotli) is now wrapped in<IfModule mod_filter.c>, the correct module on Apache 2.4, instead ofmod_deflate.c. - Fixed: Cache-directory responses no longer send
Content-Encoding: gzipon uncompressed files — the gzip headers are now scoped to the.html_gzipcache files only, preventing rare decode errors for clients that don’t accept gzip. - New: Per-server safety probe. Before writing to the live .htaccess, risky rule classes (Gzip directives and
Options -Indexes) are now tested in an isolated throwaway directory. Any rule the server can’t parse is skipped automatically so it can never 500 the site — the page-cache rewrite, Expires headers and everything else still apply. - New:
Options -Indexesis only emitted after passing its sandbox probe (it 500s where AllowOverride forbids it). A blank index.html is written to the cache directory as a universal directory-listing safeguard. - New: OpenLiteSpeed is now detected and the Gzip block is skipped on it (the server compresses natively), matching how other top performance plugins behave.
- Improved: The loopback validation no longer treats a blocked loopback as success. If it can’t confirm the write, an admin notice is shown instead of silently continuing.
- New filters:
easyopt_htaccess_gzipblock output andeasyopt_probe_unverified_default/easyopt_probe_unverified_okfor hosts that block loopback HTTP.
2.2.0
- New: Auto-detect and purge server-level caches across major hosting providers (Cloudways, Kinsta, WP Engine, SiteGround, Pantheon, Flywheel, Pressable, and more).
- New: Dashboard card showing detected server cache layers.
- New: Direct Varnish HTTP PURGE fallback for Cloudways when Breeze is not installed.
- Improved: Server cache purge is rate-limited to once per request and uses non-blocking HTTP.
- Improved: Full server purge only on explicit cache clear — post saves only purge the changed URL.
- Improved: Apache htacess creation.
- Added support for Pantheon, Flywheel, Pressable, Closte, and Convesio hosting environments.
2.1.0
- New: Optimization tab split into 5 sub-tabs — JavaScript, CSS, Lazy Load, Preload LCP and Prefetch Pages
- New: Database tab split into 2 sub-tabs — Database Cleanup and Autoload Health
- New: Heartbeat & Cron tab — consolidates Heartbeat API control, WP-Cron throttle and Cron Event Manager
- New: Settings tab with Import/Export and “Delete all plugin data on uninstall” toggle
- New: Collapsible help sections throughout all panels
- New: Dependency check on Lazyload Fonts when Remove Unused CSS is not enabled
- New: Disable Block Library CSS toggle in Bloat Removal
- New: Rewrite Elementor Background Images toggle in Image CDN panel
- New: Stylesheet Behavior “Remove” option with inline breakage warning
- Improved: “Instant Load” renamed to “Prefetch Pages” for clarity
- Improved: Cache exclusion fields displayed in compact 3-column grid
- Improved: Preload Cache enabled by default with auto-restart on cache clear
- Improved: Admin toolbar “Clear All Cache” triggers preload restart when preload is enabled
- Performance: pre_option shim uses prefix-based early exit
- Performance: Database cleanup counts moved to async REST API call
2.0.3
- New: Heartbeat API control with location and frequency settings
- New: WP-Cron frequency throttle using transient-based lock
- New: Cron Event Manager with manual run and delete
- New: Defer JavaScript method as alternative to delay
- New: Separate mobile/desktop Used CSS generation
- New: Autoload Health auditor
- New: Expanded mobile safelist for Used CSS
- Fixed: Cloudflare test connection no longer requires pre-save
- Improved: Dashboard module rows fully clickable
2.0.2
- Improved: Database snapshot restore
2.0.1
- Improved: Performance optimizations for conditional module loading
2.0.0
Major architecture rewrite with 25+ new features including page cache, cache preload, remove unused CSS, delay JavaScript, LCP preload, prefetch pages, font optimization, database cleanup with snapshots, Cloudflare integration, 9 hosting integrations, 8 accessibility toggles, 2 SEO toggles, 15 bloat removal toggles and a new admin dashboard.
1.1
- Initial release with lazy load and Image CDN.
