Why Elementor Slows a Site Down
Elementor generates a large DOM, loads dozens of CSS/JS files and by default pulls in Google Fonts through external requests. All of this increases load time.
Elementor → Performance Settings
| Setting | Recommendation | Impact |
|---|---|---|
| Google Fonts | Disable / System Fonts | -200–500 ms |
| Font Awesome | Load only used icons | -80 KB |
| CSS Print Method | Internal Embedding | -1 HTTP request |
| Improved Asset Loading | Enable | -30–50% |
| Lazy Load Background Images | Enable | +LCP score |
Disabling Google Fonts in Elementor
// functions.php — fully disable Google Fonts
add_filter('elementor/frontend/print_google_fonts', '__return_false');
add_filter('elementor/fonts/print_google_fonts', '__return_false');
Reducing the DOM Size
Elementor adds wrapper divs around every widget. To reduce the DOM:
- Elementor Pro: enable Improved Asset Loading
- Use Container instead of Section/Column (less div nesting)
- Remove unused widgets via Elementor → Tools → Regenerate Files
Diagnosing Elementor errors
Elementor is a heavy visual editor, and some of its failures come specifically from generating CSS and JS on the fly, not from the content itself.
| Error text or symptom | Cause | What to do |
|---|---|---|
| There has been a critical error on this website after an Elementor update | An Elementor Pro version is incompatible with Elementor core or the theme | Roll back the plugin version and check wp-content/debug.log |
| White screen in the editor, while the site works fine on the front end | A JS conflict in the admin panel, usually with another plugin adding its own scripts | Open the editor with ?safe_mode=1 and disable plugins one by one |
| 500 error during Regenerate CSS | No write permission to the wp-content/uploads/elementor directory | Set 755 permissions on the directories and 644 on the cache files |
| Layout "jumps" after Lazy Load Background Images | The background container has no minimum height, so the browser cannot reserve space | Set a min-height on the container before the background image loads |
General page-load speedup principles that also apply to Elementor are covered in the article on WordPress speed.
When optimizing Elementor will not help
- Landing pages with dozens of widgets on one screen — the DOM will still be large; it makes more sense to hand-build static HTML/CSS
- Cheap shared hosting with a single CPU core — rendering the editor itself in the admin is heavy regardless of front-end settings
- Themes deeply tied to the Elementor Theme Builder — disabling part of the Performance features can break the header and footer templates
- Projects with frequent new blocks added — Regenerate Files has to be run again after every significant change; it is a manual operation
- Sites where screen reader accessibility matters — Elementor's wrapper divs around every widget make markup semantics harder than hand-coded layout
It is also worth checking which PHP version is running under the hood: Elementor's own rendering benefits noticeably from PHP 8.2 with OPcache enabled, and as an alternative to heavy page cache plugins you can consider LiteSpeed Cache if the hosting runs on LiteSpeed.
Caching Elementor's generated files
The CSS files Elementor generates on the fly should be served with a long cache lifetime at the web server level:
location ~* ^/wp-content/uploads/elementor/ {
expires 30d;
add_header Cache-Control "public, immutable";
}
How to check that Elementor is no longer slow
- The Coverage tab in DevTools shows the percentage of unused CSS and JS on the page
- PageSpeed Insights: the number of render-blocking resources should drop after Improved Asset Loading
- The size of the wp-content/uploads/elementor directory before and after Regenerate Files — a sharp jump means junk is piling up
- The number of HTTP requests in the Network tab — a basic Elementor page should not exceed 40–50 requests
- Time to Interactive in Lighthouse — Elementor's heavy JS often keeps the page "non-interactive" for more than 3 seconds on a mid-range mobile device
Compare metrics on the same page before and after changes, not across different pages of the site — different Elementor templates can vary in weight several times over even within a single site.
curl -sI https://example.com/wp-content/uploads/elementor/css/post-123.css \
| grep -i cache-control