QAlaunch

WordPress images not showing after migration

When images disappear after a WordPress move, the files are usually fine and the links are wrong: post content, page-builder data and generated CSS still point at the old domain, localhost or a staging address. Changing the site URL does not rewrite those stored links. Run a serialization-safe search and replace from the old URL to the new one, regenerate your builder’s CSS and purge caches; if the files themselves are missing, re-upload the wp-content/uploads folder.

Opens your site in a real browser on desktop and phone. Free, about two minutes, no signup. Full report from $19.

What you'll see

After moving from Local, a staging subdomain or an old domain, some images show as broken icons or empty boxes. Background images set in a page builder are the most common casualties. The same images look fine in the Media Library, and they may even display for you while logged in because your browser still reaches the old address.

Why it happens

1. Links still point at the old address

Every image inserted into a post or layout is saved with its full URL, such as http://mysite.local/wp-content/uploads/… or https://staging.example.com/…. After the move those addresses no longer exist for visitors, so the images break.

2. A find and replace corrupted serialized data

Builders like Elementor, Bricks and Divi store settings as serialized PHP arrays that record each string’s length. Replacing a URL with a longer or shorter one using a plain text tool breaks those lengths, and the builder silently drops the affected settings, including background images.

3. The uploads were not fully copied

Migration plugins can time out on large media folders, and manual FTP transfers skip files. Folder permissions on the new host can also stop the web server reading what did arrive.

4. Generated CSS files still hold the old URLs

Page builders write background images into cached CSS files under wp-content/uploads. Until those files are regenerated, they keep requesting images from the old domain even after the database is fixed.

How to fix it

  1. Right-click a broken image (or find the background image in DevTools > Elements) and open its URL in a new tab. Note the domain and path; that is the string you will replace.
  2. Back up the database, then run Better Search Replace from the old URL to the new one across all tables, dry run first. Repeat for variants such as http vs https or a trailing path like /wordpress. WP-CLI’s wp search-replace does the same job from the command line.
  3. Regenerate the builder’s CSS: in Elementor that is Elementor > Tools > Regenerate CSS & Data; Bricks and Divi have equivalent cache or static CSS options. Purge every page and CDN cache afterwards.
  4. Over SFTP or the host’s file manager, check that wp-content/uploads contains the year and month folders you expect and that a file opens directly in the browser. Folders are typically 755 and files 644.
  5. If originals exist but resized versions 404, run the Regenerate Thumbnails plugin so WordPress recreates the missing image sizes.

How to check it's fixed

  • Open your main templates with DevTools > Network filtered to Img and confirm there are no 404s and no requests to the old domain, localhost or staging host.
  • Test from a phone on mobile data, which cannot resolve your local or staging hostnames, so leftovers show up immediately.

What a QAlaunch scan shows for this

  • Broken images on the scanned pages, with the URL each one tried to load.
  • Failed network requests, which makes leftover localhost or staging addresses easy to spot in the list.
  • Mixed content warnings when the old address was http and the new site is https.
  • Phone and desktop screenshots, so a missing background image shows up as an empty section.

See exactly what a full report contains in the sample report.

Frequently asked questions

Why do the images show for me but not for visitors?

Your browser may still have the old images cached, or your computer may still resolve the old local or staging hostname. Visitors have neither, so test in a private window on another device or on mobile data.

Can I just change the Site Address and be done?

No. Settings > General only controls the base address WordPress uses for new links. Links already saved in content and builder data stay exactly as they were until you replace them.

Which migration plugins avoid this?

Duplicator, All-in-One WP Migration and WP Migrate all offer a URL replacement step during import. Problems usually come from skipping it, migrating by hand, or a second domain change later.

Done for you · not automated

Rather have a QA engineer test it by hand?

If this is a site you're launching or handing to a client, I'll go through it by hand, including the WordPress-specific issues a scan can't reach, like logged-in flows.

$299one-time · 3 business days
  • Up to 10 key pages tested by hand, not a scan
  • Every flow a customer uses: forms, sign-up, checkout, booking
  • Real mobile and desktop browsers
  • A written report in plain language, with screenshots
  • A 15-minute call to walk you through it
  • 10 years of professional QA experience

Tell me about your site and I'll reply personally, usually the same day.

No payment now. I'll confirm scope and price first.

More for WordPress: all WordPress fixes · WordPress testing · why WordPress breaks after updates · why contact forms fail silently

Written by Waqas Ahmad, QA engineer with 10 years of professional testing experience. Last checked October 26, 2026.

Sources: Local community: missing images after migration to live · WP Fix It: broken images after moving to HTTPS