QUICK ANSWER
Mixed content warnings appear when your HTTPS page loads resources over HTTP, such as images, scripts, or stylesheets. Fix them by finding all HTTP URLs in your source code and updating them to HTTPS, or by using relative URLs. Most browsers block insecure scripts automatically, which can break your site.
Mixed content occurs when an initial HTML page loads over a secure HTTPS connection, but some of the resources referenced within that page load over an insecure HTTP connection. Because the page itself is HTTPS, a visitor sees the padlock icon, but their browser also detects that parts of the page are not encrypted.
There are two categories of mixed content, and they behave very differently:
In both cases, the padlock icon is downgraded or removed, and visitors may see a "Not secure" warning.
Mixed content is not just a cosmetic issue. It creates real security and business problems:
Before you can fix mixed content, you need to find every HTTP resource reference on your site. Here are three approaches:
Open your website in Chrome, then press F12 to open DevTools. Go to the Console tab. Chrome logs every mixed content request with a warning message that tells you exactly which resource URL is insecure and which page loaded it. Look for messages like:
Mixed Content: The page at 'https://example.com/' was loaded over HTTPS, but requested an insecure image 'http://example.com/photo.jpg'. This content should also be served over HTTPS.
A security scanner like PulseShield crawls your page and flags every HTTP resource reference automatically. This is faster and more thorough than checking pages one by one in a browser, especially if your site has dozens of pages.
You can use curl to fetch the HTML source and search for HTTP URLs:
curl -s https://example.com | grep -i 'src="http://'
This catches obvious references in src attributes but may miss references in CSS files, JavaScript, or dynamically generated content.
Once you have identified all the mixed content references, follow these steps:
http:// URLs. Change them to https:// where the target resource supports HTTPS. This is the most reliable fix.<img src="https://example.com/photo.jpg">, use <img src="/photo.jpg">. Relative URLs inherit the protocol of the page, so they will always use HTTPS on an HTTPS page.http://example.com/script.js to //example.com/script.js. The browser will use whichever protocol the page was loaded with. Note: this approach is discouraged in modern best practice in favour of explicit HTTPS URLs.Content-Security-Policy: upgrade-insecure-requests. This tells the browser to rewrite every HTTP request to HTTPS before making it. It is a safety net, not a replacement for fixing the source.WordPress sites are particularly prone to mixed content because themes, plugins, and the media library often store hard-coded HTTP URLs in the database. To fix WordPress mixed content:
https://wp-config.php includes define('FORCE_SSL_ADMIN', true); to force HTTPS on the admin areaBe cautious with database search-and-replace on serialised data (such as widget configurations). Use a tool designed for WordPress serialised data rather than a raw SQL update.
After making changes, test thoroughly:
If your site uses HTTP security headers, make sure your Content-Security-Policy header is correctly configured alongside HSTS. And if you are new to HTTPS in general, our guide to SSL certificates covers the fundamentals.
Free scan covering mixed content, SSL, security headers, and 20+ checks.
Free Security Scan View Plans