Images may be missing after migration when the website files, database references, domain settings, or permissions do not fully match the new hosting environment.
This usually does not mean the whole migration failed. In most cases, the website is loading, but the browser cannot find or access some image files. This article explains the most common causes and what to check.
Table of Contents
Common causes
1. Image files were not copied during migration
Website images are stored as files on the server. In WordPress, they are usually located in the wp-content/uploads directory.
If this directory was not copied completely, the website may load its pages correctly, but some or all images will be missing.
Check whether the missing images exist in the website files on the new hosting account. If you use FTP, make sure the upload directory and its subfolders are present.
Related article: How to create a new FTP account
2. The database still points to the old image URLs
Many websites store image paths in the database. After migration, the files may exist on the new server, but the website may still reference the old domain, temporary address, or previous hosting path.
This is common in WordPress migrations, especially when the domain changed during the move.
For example, the website may try to load an image from:
instead of:
In this case, the database needs to be checked and updated carefully.
Related articles:
How to migrate a website to mybox
How to connect WordPress to another domain
How to restore/upload a database from a SQL or SQL.GZ file via phpMyAdmin
3. The domain still points partly to the old hosting
After migration, the domain must point to the correct hosting environment. If DNS records are incomplete or still point to the previous server, some resources may load from one place while others are requested from another.
This can make the website appear inconsistent during or shortly after migration.
If the domain was recently changed, DNS propagation may still be in progress. During this time, some networks may load the old version of the website while others load the new one.
Related articles:
What is the difference between a domain and a website and a web server?
4. File or folder permissions block image access
Images may exist on the server but still not be visible if the website cannot read them.
This can happen when files or directories have incorrect permissions after being copied from another server. In that case, the browser may show broken images, or the server may return a 403 Forbidden error for image files.
Related article: Error 403 - no permissions
5. Mixed content after enabling SSL
If the website uses HTTPS but some images are still loaded through HTTP, the browser may block or mark those resources as insecure.
This is called mixed content. It often appears after moving a website and activating an SSL certificate, especially if old HTTP links are still saved in the website database.
Related articles:
How long does it take to generate a free Let’s Encrypt certificate?
Why hasn’t a Let’s Encrypt certificate been generated for my domain?
6. Cache still contains the old version of the website
The website, browser, CDN, or plugin cache may still contain references to the previous hosting environment.
This is common after WordPress migrations. The new website may be working correctly, but cached pages may still contain old image paths.
Clear the website cache, browser cache, and any cache plugin used by the website. If you use WordPress optimization plugins, check their cache settings as well.
Related articles:
How to set up a Redis cache plugin for WordPress CMS
How to check what is slowing down a WordPress website
7. Image optimization or WebP settings changed after migration
Some websites use image optimization plugins that replace standard images with WebP or AVIF versions. After migration, these generated files may be missing, or the plugin may still reference paths from the old server.
If only optimized images are missing, regenerate the optimized versions or check the plugin configuration.
Related articles:
How to serve WebP images in WordPress
Modern image formats: optimizing with WebP and AVIF in 2026
What to check first
Start with the simplest checks:
- Open one missing image in a new browser tab.
- Check whether the image URL points to the correct domain.
- Check whether the image file exists on the new server.
- Check whether the image file returns a
403,404, or SSL-related browser warning. - Clear website and browser cache.
- Check whether the website database still contains old domain references.
These checks usually show whether the problem is caused by missing files, wrong URLs, permissions, SSL, or cache.
What is normal after migration
It is normal for a website to behave inconsistently for a short time after DNS changes. Some visitors may still see the old server while others see the new one until DNS propagation finishes.
It is also normal for cache to keep old image paths until it is cleared or expires.
However, if the same images are still missing after DNS propagation is complete and cache has been cleared, the issue should be checked directly in the website files, database, and website configuration.
When to contact support
Contact support if:
- the image files exist, but the browser cannot access them;
- many images return
403or404errors; - the website still loads images from the old domain after database updates;
- images disappeared after SSL activation;
- you are not sure whether the migration copied all website files.
When contacting support, include one example page URL and one direct URL of a missing image. This helps identify whether the issue is related to files, DNS, SSL, permissions, or database references.
Summary
Missing images after migration are usually caused by incomplete file transfer, old image URLs in the database, DNS propagation, incorrect permissions, mixed content, or cache.
The most useful first step is to open a missing image directly and check its URL. That usually shows whether the website is looking in the wrong place, whether the file is missing, or whether access to the file is blocked.