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?
wp-json/, admin-ajax.php, or CSS/JS files. Note the first failing request—fix that cause first.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.
/wp-json/*, /wp-admin/admin-ajax.php.# From the server shell:
curl -I https://example.com/wp-json/
curl -I https://example.com/wp-admin/admin-ajax.php
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.
/wp-admin/*, /wp-login.php, admin-ajax.php, /wp-json/*, ?elementor_library previews./wp-admin/*, preview_id=, and elementor_library preview URLs.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'";
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');
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;
}
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');
If Safe Mode works, you have a conflict. Narrow it down:
/wp-json/, admin-ajax.php, CSS, or JS.SAMEORIGIN (or CSP frame-ancestors 'self').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!