Free: Check whether your WordPress website loads images from other servers.Free check: Does your site load external images?Run the check →

How to find external images in WordPress: 9 places where they hide

External images hide not only in posts but in widgets, the theme, menus, CSS and page builders. Here is how to find every place at a glance.

You went through your posts, imported every image, and your website still loads images from other servers? That is no accident. External images in WordPress hide in far more places than the post content: in the logo, in widgets, in the menu, in additional CSS, in page builder layouts or in category descriptions. Here are the nine most common hiding places, how to recognise them and how to find all of them at once.

Why hidden external images are a problem

An external image is an image your website does not load from its own Media Library but from another server: your old domain, Wix, Blogger, an image service or a CDN you switched off long ago. As long as that server responds, you notice nothing. Once it goes away, you see empty frames. On top of that, the other server learns your visitors’ IP addresses on every page view, and your loading time depends on a server you don’t control. More on this in Hotlinking: Why externally hosted images hurt your WordPress site.

The tricky part: most tools, including search and replace, only look at posts and pages. Everything else slips through.

Free check

Does your website load images from other servers?

Enter your domain. In under a minute you’ll see whether images, fonts or services come from other servers. If you like, we then check every page and email you the full report with every location found.

✓ Instant result in your browser✓ Full report by email✓ Free

The 9 places where external images hide

1. In the content of posts and pages

The classic case and usually the largest share: images that were only linked when you imported from Wix, Blogger or an old domain. Also check the srcset: even when the main image is already local, the smaller sizes can still come from the old server.

2. In lazy loading attributes

Lazy loading plugins often put the real image address into data-src or data-lazy-src. Everything looks normal in the editor, and a search for src= won’t find the address. Only when the visitor scrolls does the browser load the image from the other server.

3. In reusable blocks and templates

Synced patterns (formerly “reusable blocks”) and the templates of a block theme are separate entries in the database. An image in them shows up on every page that uses the block, but it isn’t part of any single post.

4. In page builder layouts

Elementor, Divi and others don’t store layouts as normal post content but in their own data fields. Section background images are especially easy to miss. How to bring them back is explained in Import external images in Elementor pages.

5. In ACF and other custom fields

Pages built with Advanced Custom Fields store images in their own fields, often as a plain address instead of an image from the Media Library. Team pages, references and galleries are typical candidates.

6. In WooCommerce products and custom post types

Products, projects, recipes or properties are post types of their own. After moving a shop, external images sit here in the product description, the gallery or the short description.

7. In widgets, the logo and theme settings

An image widget in the sidebar, a logo in the Customizer, a header image or a site icon: all of these apply to the whole website and live in the theme settings, not in a post. If one of these images is missing, it shows on every page.

8. In additional CSS

Under Appearance › Customize › Additional CSS you often find lines like background-image: url(https://old-domain.com/…). No editor shows these images, and no import plugin touches them automatically.

9. In menus and category descriptions

Menu items with small icons and descriptions of categories or tags can contain images too. They live in separate tables, so they never appear in a post list.

Step 1: Check from the outside whether your site is affected

Before you install anything, take a look from the outside. Our free online check above opens your website like a visitor would and shows you in under a minute which images come from which other servers, no matter which of the nine places they hide in. If you like, it checks all pages and emails you the complete report.

Step 2: See every place in WordPress at a glance

Since version 2.1, the free plugin Replace External Images has an overview that searches exactly these places. After installing it, go to External Images › Overview and click Scan website now. The scan only reads and changes nothing. It runs in short steps, so it also works on slow hosting and big websites.

Afterwards you see:

  • how many external images your website has and in how many places,
  • where they are: posts, pages, templates, products, layouts, fields, widgets, theme and menus,
  • which servers they come from, for example your old domain or a former image service,
  • what you can do in each case, with a “Go to place” button that takes you straight there.

Every place is marked: ✓ means the free version imports the images right away. 🔒 marks Elementor, ACF, products and custom post types, which the “Elementor & ACF” add-on or Pro takes care of. ✋ marks widgets, the logo, menus and theme CSS, which you should change by hand because an automatic change isn’t safe there.

Step 3: Import, then do the rest by hand

Make a backup first. Then click Import all now in the overview. The plugin downloads every image marked ✓, adds it to your Media Library and replaces the addresses, including the external sizes in the srcset. Images that can no longer be reached are marked as unreachable and skipped during the import.

For the places marked ✋, upload the image to the Media Library once and enter the new address in the widget, the Customizer or the additional CSS. The overview stays up to date while you do this. As soon as a place is clean, it disappears from the list.

Finally: check again

Run the online check once more. If no other server shows up any more, your website loads every image from its own Media Library, and you can safely switch off the old domain or the old provider. If a move is still ahead of you, our Checklist: Migrating your images correctly after a WordPress move will help.

Frequently asked questions

Doesn’t search and replace find all external images too?

Only if you already know the old address and the file still exists on your server. Images from other services such as Wix or Blogger were never on your server. They have to be downloaded first, and for that you need an import.

Does the scan change anything on my website?

No. The scan in the overview only reads. The plugin changes content only when you click “Import” or “Import all now”, and even then only the image addresses.

Why doesn’t the plugin import widget and theme images automatically?

These images live in settings that every theme and plugin stores differently. An automatic change there could break your layout. So the overview shows you the place, and you swap the image yourself in two clicks.

Is the plugin free?

Yes. The overview and the import from posts, pages and reusable blocks are free. For Elementor and ACF there is the “Elementor & ACF” add-on, and Pro also handles WooCommerce products and custom post types.

All external images into your Media Library at once

Replace External Images does it in one run, with a progress bar and a log. Free for posts and pages.