Mixed content is a secure page that loads something insecure: an image, script or font fetched over http:// while the page itself uses https://. Browsers either block the insecure part, so your page looks broken, or show a warning instead of the padlock. You fix it by changing every http:// address on the page to https://, which takes a search-and-replace on most sites.
Last reviewed: 10 November 2026, against current browser behaviour as documented by MDN.
Before you start
| Type | Examples | What the browser does |
|---|---|---|
| Upgradable | Images, video, audio | Tries them over HTTPS automatically |
| Blockable | Scripts, stylesheets, iframes, fonts, data requests | Blocks them, so features and layout break |
Scripts are the riskiest: an attacker who changes one can change the whole page. That is why browsers block them.
http://. Each hit that is not a plain outbound link is a candidate.An online mixed content checker or a crawler can scan the whole site, if it is large.
https://.http://yourdomain.com and replace it with https://yourdomain.com, using a tool that handles serialised data. WordPress search and replace: change URLs and text safely shows the steps, including the dry run.http:// addresses. Update them, and replace any that cannot be fixed. How to bulk find and replace content in WordPress covers the editor route.http:// to https:// in every address you control: images, scripts, stylesheets, fonts, forms and links./images/logo.png, so the page always uses its own protocol.Yes, as a stopgap. The upgrade-insecure-requests directive tells the browser to request every http:// item over HTTPS. On a site served by Apache, add this line to the .htaccess file in the website's folder:
Header always set Content-Security-Policy "upgrade-insecure-requests"
It only works for items that also exist over HTTPS, so it hides a problem rather than removing it. Fix the addresses, then remove the line if you like. If you are not sure how your site is served, open a ticket and we will check.
| Symptom | Fix |
|---|---|
| The console shows nothing but the padlock warns | Clear the cache and test in a private window |
| An image is missing | Its HTTPS address does not exist. Replace the image |
| Only the checkout warns | A payment or tracking script uses http://. Update the plugin |
| It returns after every edit | A theme option or layout plugin keeps the old address. Update its setting |
| A font or icon is missing | The stylesheet loads it from http://. Fix the stylesheet |
Open a ticket in the console with the page address and the console messages, and we will point you to the fix.