Fix “The preview could not be loaded” in Elementor (Step-by-Step)

When Elementor shows “The preview could not be loaded.” it usually means something is blocking the editor iframe or breaking requests it needs (REST API, admin-ajax, CSS/JS). Below is a prioritized checklist with quick wins first, then deeper server/CDN fixes. Copy, paste, and test in order—stop as soon as the preview loads.

Elementor says “The preview could not be loaded.” How do I fix it?

Quick Wins (do these first)

  1. Try Safe Mode: In WP Admin, go to Elementor → Tools → Safe Mode and enable it. If the preview loads, you have a theme/plugin conflict—keep reading for how to isolate it.
  2. Regenerate CSS & Sync Library: Elementor → Tools → General → Regenerate CSS and Sync Library. Then hard-refresh the editor (Ctrl/Cmd + Shift + R).
  3. Disable cache/minify for a minute: Turn off any page cache, server cache, CDN features, and CSS/JS minification/combine. Purge/bypass your CDN and try again.
  4. Switch Editor Loader Method: Elementor → Settings → Advanced → toggle Switch Editor Loader Method ON → Save.
  5. Update permalinks: Go to Settings → Permalinks and click Save (no changes needed). This refreshes rewrite rules used by the preview iframe.

Guided Diagnostics (find the actual blocker)

  1. Open DevTools → Console & Network: Reload the editor. Look for 403/404/500 on wp-json/, admin-ajax.php, or CSS/JS files. Note the first failing request—fix that cause first.
  2. Check Site Health: Tools → Site Health. If you see “REST API is blocked” or “Loopback request failed,” focus on security/headers and server issues below.
  3. Safe Mode A/B test: If Safe Mode works, disable plugins in batches (especially optimization, security, caching, CDN helper, and redirect plugins) until the failure returns; that plugin (or its settings) is the culprit.

Fixes by Root Cause

1) REST API or admin-ajax blocked (403/404)

Elementor’s preview is an iframe that calls the REST API (/wp-json/) and admin-ajax.php. Security modules (WAF/ModSecurity), rate limiters, or “harden” options often block these.

  • Whitelist endpoints in your WAF/host panel: /wp-json/*, /wp-admin/admin-ajax.php.
  • Temporarily disable security plugins or turn off “bot fight,” “JS challenge,” or strict firewall rules while testing.
  • Confirm REST works:
# From the server shell:
curl -I https://example.com/wp-json/
curl -I https://example.com/wp-admin/admin-ajax.php

2) Caching/CDN or JS optimization breaking the editor

Disable and purge any page cache, server cache (e.g., NGINX microcache, Varnish), and CDN features for the editor route. Turn off JS/CSS minify/combine and “defer” until the preview loads.

  • Exclude these from cache/minify: /wp-admin/*, /wp-login.php, admin-ajax.php, /wp-json/*, ?elementor_library previews.
  • Cloudflare: disable Rocket Loader and create a cache bypass rule for /wp-admin/*, preview_id=, and elementor_library preview URLs.

3) Security headers blocking iframes

If the server sets X-Frame-Options: DENY or a restrictive Content-Security-Policy: frame-ancestors, the editor iframe is blocked.

Fix (Apache):

# .htaccess
# Allow your own domain to embed iframes (Elementor preview)
Header always set X-Frame-Options "SAMEORIGIN"
# OR with CSP (recommended):
Header always set Content-Security-Policy "frame-ancestors 'self';"

Fix (NGINX):

# nginx.conf / server block
add_header X-Frame-Options "SAMEORIGIN";
# OR
add_header Content-Security-Policy "frame-ancestors 'self'";

4) Mixed content / HTTPS mismatch

If your site is on HTTPS but the preview tries to load HTTP assets, the browser blocks them. Make sure WordPress and Site Address use HTTPS and force SSL if needed.

/* wp-config.php */
define('WP_HOME',    'https://example.com');
define('WP_SITEURL', 'https://example.com');

5) Broken permalinks or rewrite rules

Regenerating permalinks refreshes WordPress rewrites used by previews. If you’re on Apache, ensure the standard WP rules exist:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

On NGINX, verify your try_files line:

location / {
  try_files $uri $uri/ /index.php?$args;
}

6) Memory limits or server resources

Low PHP memory kills previews during asset generation. Set at least 256M for smooth editing.

/* wp-config.php */
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '256M');

7) Theme or plugin conflict

If Safe Mode works, you have a conflict. Narrow it down:

  1. Disable all plugins except Elementor/Elementor Pro → test.
  2. Re-enable plugins in batches (optimization, security, SEO, redirect, membership, multilingual first) → test after each batch.
  3. Switch to a stock block theme temporarily → test. If fixed, the original theme needs an update.

8) Elementor settings & tools to try

  • Regenerate CSS & Data: Elementor → Tools.
  • Sync Library: Elementor → Tools → General → Sync.
  • Load Method: Elementor → Settings → Advanced → toggle Switch Editor Loader Method.

9) Still stuck? Checklist to capture for support

  • First failing request in Network (URL + status + response).
  • Console errors (copy exact messages).
  • Site Health status for REST API & Loopback.
  • Hosting/WAF/CDN in use + any “JS optimization” features enabled.

Verification

  1. Open the editor → hard-refresh with DevTools open.
  2. Confirm no 4xx/5xx on /wp-json/, admin-ajax.php, CSS, or JS.
  3. Close Safe Mode, re-enable cache/CDN gradually and retest.

Prevention tips

  • Exclude editor/preview routes from cache and minify combine rules.
  • Keep security headers to SAMEORIGIN (or CSP frame-ancestors 'self').
  • Update Elementor, theme, and plugins together after staging tests.

Need human WordPress help?

WP Assistant is a free tool created by Atiba Software, a WordPress design and development company located in Nashville, TN. If you need more personalized WordPress assistance let us know, and we’ll get back to you ASAP!