All blogs

How to speed up an Elementor site without rebuilding it

Elementor gets blamed for slow WordPress sites, but most of the weight is optional. A practical order of operations for cutting load time before you rebuild.

Most "Elementor is slow" complaints are really "this install ships every widget on every page" complaints. That distinction matters, because one is a configuration problem you can fix in an afternoon and the other is an argument for a rebuild nobody budgeted for.

Here's the order I work in.

Measure before you touch anything

Open the site in a private window and record where it actually stands. Lighthouse is fine for a score, but the network panel tells you more. Sort by transfer size and look at what's at the top.

Two rules for measuring honestly:

  • Don't test the homepage. It's usually the page someone already optimised. Test a typical interior page — a service page, a blog post, a product page.
  • Test logged out. Logged in, WordPress skips page caching and loads the admin bar and editor assets, so your numbers will be worse than a visitor's and you'll chase the wrong things.

Write the numbers down. Largest Contentful Paint, total transfer, request count. You want to be able to prove the work did something.

Find out what's actually loading

On a typical inherited build, the top of that size-sorted list looks roughly the same every time:

  • An icon font library loaded in full for two or three icons.
  • Google Fonts, often several families and every weight of each, including weights the design never uses.
  • Widget CSS and JS for widgets that aren't on the page — sliders, lightboxes, carousels, counters.
  • Unoptimised images, frequently the original camera or stock upload, scaled down in the browser rather than on disk.

None of that is inherent to Elementor. It's accumulated default.

Turn off what the page doesn't use

Elementor ships several settings that meaningfully change what gets sent. They live under Elementor → Settings → Features and Performance, and the exact names shift between versions, so read what's in front of you rather than trusting a screenshot from a blog post.

The ones that reliably matter:

  • Improved CSS Loading — only loads a widget's stylesheet when that widget is on the page, instead of shipping the whole bundle.
  • Optimized DOM Output — removes a layer of wrapper divs. Lighter markup, and less for the browser to lay out.
  • Inline Font Icons — loads icons as SVG rather than pulling an entire icon font.
  • Element Caching, where available, for pages whose content rarely changes.

Change one at a time and reload the page. These settings alter rendering, and on a heavily customised build one of them will occasionally break a layout that depended on the old markup. Finding out which one did it is much easier if you only moved one lever.

Fonts

If the design uses two weights, load two weights. Self-hosting the font files removes a third-party connection and lets you serve them from your own cache. Whatever you do, make sure font-display: swap is set so text paints before the font arrives instead of after.

Images

This is usually the single biggest win and the least glamorous work. Convert to WebP, generate real sizes rather than scaling in CSS, and let everything below the fold lazy-load. If the theme is outputting a 3000px hero image into a 1200px container, no amount of caching fixes that.

Add caching last, not first

Caching is the step people reach for first, and it's the step that hides the actual problem. A page cache in front of a bloated page gives you a fast repeat view and does nothing for a first-time visitor on mobile.

Fix the payload, then cache it. In that order you get a fast site; in the other order you get a fast-looking site and a mystery every time the cache clears.

For most builds: a page cache, sensible browser cache headers on static assets, and a CDN in front. That's enough. Stacking three optimisation plugins that each minify and combine assets is a reliable way to produce bugs that only appear on some pages for some visitors.

When a rebuild is the honest answer

Not everything is worth saving, and it's better to say so early than to shave kilobytes for a fortnight and end up rebuilding anyway.

Signs the structure is the problem:

  • Layouts that depend on sections nested five levels deep to achieve something two CSS grid rules would handle.
  • Global styles overridden per-widget, everywhere, so no change is ever safe.
  • A dozen plugins each contributing one small thing that a few lines of code would do.
  • Dozens of near-identical templates, kept because nobody can tell which are still in use.

At that point the honest recommendation is to rebuild the templates that matter and leave the rest. That's a different conversation, with a different budget, and it goes better when you can point at measurements rather than taste.

The short version

  1. Measure a real page, logged out, and write it down.
  2. Sort the network panel by size and look at the top five entries.
  3. Turn on Elementor's asset-loading options one at a time.
  4. Load only the fonts and icons you use.
  5. Fix the images properly.
  6. Cache and CDN last.
  7. Re-measure, and compare against what you wrote down.

Most sites I see get meaningfully faster somewhere between steps three and five, without touching a single template.

If the slowness came on suddenly rather than creeping up, speed may not be your problem — injected code can also drag a site down. That is a different hunt: see how to clean a hacked WordPress site.