Mixed Content

What mixed content is, why active mixed content gets blocked while passive gets warned about, and how to detect and fix insecure sub-resources at scale — the browser console, CSP reporting, upgrade-insecure-requests, block-all-mixed-content, and how CMSes and ad tech reintroduce it.

First published: Jul 3, 2026 · Last updated: Jul 17, 2026 · Advanced

Mixed content is an HTTPS page loading a sub-resource over HTTP. Browsers' current taxonomy is upgradable versus blockable; the older active/passive split still tracks that for most types, with exceptions (CORS-enabled images, srcset/picture, and IP-host requests are blockable, not upgradable). Active mixed content — scripts, stylesheets, iframes, XMLHttpRequest/fetch — is blocked outright because a tampered script can rewrite the whole page, so it's what actually breaks a site after an HTTP→HTTPS migration; fix it first. Passive mixed content — images, audio, video — historically loaded with a downgraded padlock and is now increasingly auto-upgraded or blocked too. Anchor links and other top-level HTTP navigation are not mixed content, and neither are insecure downloads (a related, separate boundary). Find it across fetched source, rendered/runtime state, and real-user sessions: crawl the HTTPS site, watch the Chrome DevTools console (exact wording is browser/version specific), or collect Content-Security-Policy-Report-Only violations; fix it by first confirming the HTTPS equivalent actually works, then pointing every sub-resource at https:// (relative/protocol-relative paths only after verifying ownership and base-URL behavior). The Content-Security-Policy: upgrade-insecure-requests header rewrites in-scope http:// sub-resource requests — including cross-origin ones — to https:// before they're sent and before mixed-content/CSP checks run; it has no HTTP fallback if the upgrade fails, it's a safety net rather than a substitute for cleaning the source, it does NOT upgrade top-level navigation to third-party origins (so it isn't a replacement for HSTS), and setting the directive itself in report-only mode is a no-op — monitor with a separate report-only policy instead. CMS databases (back up and dry-run replacements — naive string-replace can corrupt serialized data), plugins/themes, service workers/caches, and ad/analytics tags are the usual re-offenders; audit at scale with a crawler and CSP reporting rather than page by page.

TL;DR — Mixed contentMixed content is when a page served over HTTPS loads a sub-resource — a script, stylesheet, image, iframe, or similar — over insecure HTTP. Browsers' current taxonomy is upgradable versus blockable; active mixed content (scripts, styles, iframes) is blocked, and passive mixed content (images, audio, video) is warned about or increasingly auto-upgraded, with exceptions like CORS-enabled images and srcset/picture candidates that are blockable, not upgradable. is an HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.' page loading a sub-resource over HTTP. The current browser/W3C taxonomy sorts this into upgradable and blockable content; the older active/passive split (used below as a blast-radius framing) still tracks that divide for most resource types, with exceptions — CORS-enabled images, srcset/picture candidates, and IP-host requests are blockable even though a plain img src is upgradable. Active (scripts, stylesheets, iframesHTML element that displays one webpage inside another — how embeds work., XMLHttpRequest/fetch, and anything the browser executes) is blocked — a tampered script can rewrite the page — so it’s the launch-day regression to fix first. Passive (images, audio, video) historically loaded with a downgraded indicator and is now increasingly auto-upgraded or blocked. Anchor links and other top-level HTTP navigation aren’t mixed content; neither are insecure downloads, which are a related but separate boundary. Detect it across three layers — fetched source, rendered/runtime state, and real user sessions — by crawlingCrawling is how search engines use automated bots (like Googlebot and Bingbot) to discover URLs and download pages. A page has to be crawlable to be indexed, but crawling on its own isn't a ranking factor. the HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.' site, reading the Chrome DevTools console (exact wording is browser/version specific), or collecting Content-Security-Policy-Report-Only violations; fix it by confirming an HTTPS equivalent actually works, then pointing every sub-resource at https:// (relative/protocol-relative paths are fine once you’ve verified ownership and base-URL behavior, not a universal default). Content-Security-Policy: upgrade-insecure-requests rewrites in-scope http:// sub-resource requests (including cross-origin ones) to https:// before they’re sent and before mixed-content/CSP checks run — a net, not a substitute for fixing the source, with no HTTP fallback if the upgrade fails, and it does not upgrade top-level navigation to third-party origins, so it doesn’t replace HSTSHSTS (HTTP Strict Transport Security) is a response header that tells browsers to always connect to your site over HTTPS — even when a user types or clicks an http:// link — closing the insecure-first-request gap that a plain 301 redirect leaves open.. Putting the directive itself in report-only mode is a no-op — monitor with a separate report-only policy instead. CMSA content management system (CMS) is software that lets users create, manage, and publish digital content — like blog posts and pages — without writing raw code. WordPress, Drupal, and Joomla are the most common open-source CMS platforms. databases (back up and dry-run any replacement — naive string-replace can corrupt serialized data), plugins, themes, service workers/caches, and ad/analytics tags are the recurring re-offenders — audit at scale, not page by page.

The HTTPS hubHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.' introduces mixed content as one of the two launch-day failure modes of a migration (the other being redirectsA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't.). This is the deep dive it points to — the exact resource tiers, the detection stack, the CSP directives, and the operational reasons it keeps coming back.

What counts as mixed content — and what doesn’t

Mixed content is scoped precisely: it’s about sub-resources the page loads, not about links the page contains. Google’s definition: “A page has mixed content when its initial HTML is loaded over a secure HTTPS connection, but other resources (such as images, videos, stylesheets, and scripts) are loaded over an insecure HTTP connection.” Evidence for this claim Mixed content occurs when a secure page loads resources over insecure HTTP, and browsers upgrade or block mixed-content requests by resource type. Scope: MDN documents current browser categories and behavior; individual browser versions may differ at the margins. Confidence: high · Verified: MDN: Mixed content

The trap that reassures people falsely is the anchor tag. A <a href="http://…"> link to an HTTP page is not mixed content — it navigates to a new document; it doesn’t load an insecure resource into the current secure one. That’s true of any top-level navigation to an HTTP page, not just anchor clicks.

It’s still worth sending outbound links to HTTPS destinations. Under the modern browser-default Referrer-Policy (strict-origin-when-cross-origin), a click from an HTTPS page to an HTTP destination does drop the Referer header, which can mangle referral analytics — but that behavior is policy- and browser-dependent, not a universal rule: a page (or an upstream proxy/CDN) that sets a looser Referrer-Policy can still send a referrer on that downgrade. Check the actual Referrer-Policy in effect before asserting how much referral data a given site loses — but in any case, that’s a separate problem from mixed content, not mixed content itself.

Active vs. passive: the distinction that sets your priorities

Modern browser and W3C documentation classifies mixed content primarily as upgradable versus blockable content — resource types the browser will silently retry over HTTPS versus ones it refuses outright — rather than the older active/passive split. Active/passive is still useful shorthand for why browsers draw that line (how much of the page the resource could compromise), and it’s how Google’s own explainer frames it, so it’s kept below as the primary triage framing — just don’t treat it as the current official taxonomy when you need to reason about a specific resource type; see the exceptions after the two lists.

Browsers classify mixed content by how much of the page the insecure resource could compromise. Google: “Active mixed content poses a greater threat than passive mixed content.” That single sentence should drive your triage order.

Active mixed content interacts with — and can take over — the whole page. Google describes it as “scripts, stylesheets, iframes, and any other code the browser can download and execute.” In practice the active list is:

  • <script src="http://…"> — the worst case; an intercepted script can rewrite the entire DOM, exfiltrate form data, or inject content.
  • <link rel="stylesheet" href="http://…"> — CSS can hide, reposition, or overlay anything, so it’s treated as active.
  • <iframe src="http://…"> — an embedded insecure document inside your secure one.
  • XMLHttpRequest / fetch() to http:// — insecure data the page then acts on.
  • Web fonts, <object>/<embed> resources, and the <link> variants that pull in executable or layout-controlling content.

Because a tampered active resource can rewrite the page, “Most browsers already block this type of content by default to protect users.” That’s why active mixed content is what visibly breaks things after a migration — a blocked stylesheet strips your CSS, a blocked script kills interactivity, a blocked iframe leaves a hole. Fix active first. It’s a functional bug, not just a security nag.

Passive (display) mixed content — Google: “including images, video, and audio”“doesn’t interact with the rest of the page.” An intercepted image can be swapped but can’t seize the document. So historically browsers loaded it and just downgraded the indicator: “Until recently, passive mixed content was loaded in all browsers, because blocking it would have broken many websites. This is now beginning to change.” The direction of travel across browsers is toward auto-upgrading passive resources to HTTPS where possible and blocking what can’t be upgraded, so “passive = harmless” is no longer a safe assumption to build on.

Exceptions the active/passive split doesn’t capture

The upgradable/blockable line has several exceptions that don’t follow the general “images upgrade, scripts block” pattern above — these are the cases that actually trip people up in practice:

  • CORS-enabled image requests are force-failed, not upgraded. An ordinary <img src="http://…"> is upgradable, but an image request made with crossorigin set is treated differently by the mixed-content algorithm and fails instead of silently upgrading.
  • srcset and <picture> candidates are blockable, not upgradable. The same image, requested through a responsive-image mechanism instead of a plain src, falls into the blockable category — don’t assume every image reference behaves the same way.
  • IP-address hosts are blocked, not upgraded, even for an otherwise-upgradable resource type. A reference like http://203.0.113.5/logo.png doesn’t get the automatic-upgrade treatment a domain-hosted equivalent would.
  • Nested contexts and workers are in scope. Mixed-content checks apply inside iframes and inside service/shared workers too, not just the top document — a worker fetching an insecure script is still mixed content.
  • Local and loopback origins have their own nuance. localhost, loopback addresses, and file:// contexts are “potentially trustworthy origins” under the spec even without TLS, so a simple HTTP-vs-HTTPS heuristic doesn’t map cleanly onto local development environments.
  • Insecure downloads are a related but separate boundary. A download initiated from a secure page over http:// is a real risk, but it’s governed by its own download-security handling, not the sub-resource mixed-content rules in this section.
  • Top-level HTTP navigation still isn’t mixed content, including the anchor-link case above — that’s a property of navigation, not of a loaded sub-resource, however many of these other exceptions apply.

Detecting mixed content — the whole stack

TIP Confirm the insecure resource before choosing the remediation

This finding reports an HTTP subresource in fetched source. Browser-only, conditional, and tag-manager resources still require DevTools, crawling, or CSP reports.

Run a suspect URL through my Website Safety Checker for a quick source-level confirmation, then expand the audit across templates. Website Safety Checker Free

  1. Start with broken templates and pages that lost the secure indicator.
  2. Identify whether the HTTP resource is active or passive and whether an HTTPS equivalent exists.
  3. Fix the source reference, rerun the page, then crawl and collect CSP reports for the long tail.
One source-level finding is the start of an inventory, not the end.

There is no single button, and each layer below answers a different question — a clean result at one layer doesn’t clear the others. Diagnose fetched source (what the raw HTML actually references), rendered/runtime state (what the browser requests once it’s parsed the page and run its scripts), and real user sessions (what happens for a visitor behind a consent banner, a geoGenerative Engine Optimization (GEO) is the practice of optimizing content and brand presence so AI-powered search engines and assistants — Google AI Overviews, ChatGPT, Perplexity — cite, recommend, or mention you when generating answers. Google's position is that it's still SEO.-redirect, a login wall, or a third-party tag that only fires under specific conditions) separately. Layer these from “one page” to “whole site”:

  1. The Chrome DevTools console (rendered/runtime state). Load the HTTPS page and open the console. Blocked active mixed content logs a message along the lines of “Mixed Content: The page … was loaded over HTTPS, but requested an insecure … This request has been blocked; the content must be served over HTTPS.” Passive that gets loaded logs a warning rather than a block. The Security panel (or the Issues tab) groups it up per page. Fast for spot-checks and for confirming a specific fix — but treat the exact message wording, panel layout, and even which resource types get blocked as browser- and version-specific; this was confirmed against Chrome as of 2026-07 and you should verify current wording on the actual browser/version you’re diagnosing rather than quoting it as a fixed UI string, and expect Firefox, Safari, and Edge to differ.

  2. A site crawlerA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. (fetched source, at scale). DevTools is per-page; a crawl is site-wide. Ahrefs Site Audit and Screaming Frog both flag pages that reference http:// sub-resources on an HTTPS site — the only realistic way to find mixed content across thousands of URLs. This is the primary tool for an audit, but it’s still reading source: a crawl passing clean doesn’t prove the rendered page or a real session is clean too — record which browser/tool/version produced a given result rather than reporting one unqualified pass/fail.

  3. CSP violation reporting (real user sessions). You can make the browsers of real visitors report mixed content back to you, which catches resources that only load on certain pages, for certain users, under certain consent states, or from third-party tags you don’t control — the layer neither a crawl nor a single DevTools check can reach. web.dev: “You can use content security policy to collect reports of mixed content on your site. To enable this feature, set the Content-Security-Policy-Report-Only directive by adding it as a response header for your site.” Report-Only mode reports violations without enforcing the policy, so you can measure the problem in production before you turn on blocking. (The mechanism is the modern report-to / Reporting-Endpoints header, or the older report-uri. Note this is a different, general-purpose report-only policy than upgrade-insecure-requests itself — putting that specific directive in report-only mode doesn’t work, as covered below.)

Use all three: DevTools to verify a rendered page, a crawlerA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. to inventory fetched source, CSP reports to catch the real-session long tail that only shows up in the wild. One crawl passing is evidence about the source, not a guarantee that every consent state, ad-tech variant, personalization branch, or worker is clean.

Fixing at the source

The real fix starts before you touch a single reference: verify the HTTPS equivalent actually exists, presents a valid certificate, and returns the content you expect — don’t assume swapping the scheme is safe just because the domain resolves. Once that’s confirmed, every sub-resource reference should resolve over HTTPS. Options below are in rough order of preference, but each one still depends on ownership and context, not just the string you type:

  • Absolute HTTPS URLs — change http://cdn.example.com/app.js to https://cdn.example.com/app.js. Explicit and unambiguous; the safest default when you’re not certain about the serving context below.
  • Root-relative or relative paths — for resources you own on the same site, /assets/app.js inherits the page’s scheme automatically. Google’s HTTPS guidance: “Make sure intrasite URLs and external URLs don’t depend on a specific protocol. Use relative paths or leave out the protocol as in //example.com/something.js.” Treat this as conditional, not a universal recommendation: it only holds once you’ve confirmed you actually own the resource (a relative path to a third-party asset doesn’t make sense), that the page’s real base URL resolves the way you expect (a <base> tag, a proxied path, or an embedded/AMPAMP (Accelerated Mobile Pages) is an open-source web framework Google launched in 2015 to make mobile pages load near-instantly via restricted HTML/CSS/JS and CDN caching. It was never a ranking factor and, since June 2021, is no longer required for Top Stories. context can change what “relative” means), and that nothing downstream reconstructs the URL in a way that reintroduces http:// — client-side code building a URL from window.location or a stored absolute value, for example.
  • Protocol-relative URLs (//example.com/something.js) still work, but they’re not the preferred universal fix — gate them on the same ownership/base-URL checks above, not just habit. On an all-HTTPS web, an explicit https:// is usually clearer and avoids surprises if the file is ever opened from a non-HTTP context; reach for protocol-relative only where you have a specific reason not to hard-code the scheme.

At scale you almost never hand-edit templates one by one — but don’t run an unguarded database string-replacement against production either. http://yourdomainhttps://yourdomain looks like a simple find-and-replace, and for plain-text fields it often is safe, but CMS content can be serialized or structured (PHP serialized arrays, JSON blobs, block-editor data) where a naive substring swap corrupts the record instead of fixing it. Use application-aware tooling that understands the serialization format, back up the database first, and dry-run the replacement so you can review the affected rows before committing. Then fix the handful of template/config files that emit the URLs; the crawler and CSP reports mop up the stragglers.

upgrade-insecure-requests: the safety net (and its limits)

The proactive backstop is a Content-Security-Policy directive. web.dev: “The upgrade-insecure-requests CSP directive instructs the browser to upgrade insecure URLs before making network requests.” Set the header:

Content-Security-Policy: upgrade-insecure-requests

Per MDN, it “instructs user agentsA user agent is the HTTP request header a client (browser, crawler, or bot) sends to identify itself. For crawlers, a short user-agent token — a substring of that string — is what robots.txt rules actually target. to treat all of a site’s insecure URLs (those served over HTTP) as though they have been replaced with secure URLs (those served over HTTPS).” Concretely, MDN says it upgrades: “requests to load resources (such as images, scripts, or fonts),” “navigation requests (such as link targets) which are same-origin with the document,” “navigation requests in nested browsing contexts, such as iframes,” and “form submissions.” Evidence for this claim The upgrade-insecure-requests CSP directive rewrites insecure URLs as secure URLs before requests are made. Scope: MDN documents the directive's rewriting behavior and limits; it does not guarantee that an HTTPS version of every resource exists. Confidence: high · Verified: MDN: CSP upgrade-insecure-requests

Two operational details matter beyond that quote. First, the sub-resource upgrade isn’t limited to same-origin requests — it’s the navigation upgrade that’s same-origin-only per the quote above; ordinary sub-resource requests get rewritten across origins too, so a CDN-hosted script or a third-party font gets upgraded, not just same-site assets. Second, the rewrite happens before the browser’s mixed-content and CSP checks evaluate the request, which is why a resource that would otherwise be blocked outright as mixed content can load cleanly once it’s been upgraded — the upgrade pre-empts the block.

Three limits you must not paper over:

  • It does not upgrade third-party top-level navigation. MDN: “However, top-level navigation requests whose target is a different origin will not be upgraded.” Because of that, it is explicitly not a replacement for HSTS: “The upgrade-insecure-requests directive will not ensure that users visiting your site via links on third-party sites will be upgraded to HTTPS for the top-level navigation and thus does not replace the Strict-Transport-Security (HSTS) header.” (More on that split below.)
  • It’s a net, not a fix, and it doesn’t fall back. If the resource genuinely isn’t available over HTTPS, the upgraded request just fails outright — it does not fall back to the original http:// version. Cleaning the source is still the job; the directive covers what you missed, not what’s genuinely broken.
  • Report-only mode doesn’t perform the upgrade — it’s a no-op. Putting upgrade-insecure-requests inside a Content-Security-Policy-Report-Only header is ignored by the browser: nothing gets rewritten, and nothing gets reported for it either. If you want visibility into what the upgrade would affect before you enforce it, run a separate, general-purpose report-only policy that reports disallowed http:// destinations (the same default-src https: report-only approach used for detection above) — you can’t get that visibility by making upgrade-insecure-requests itself report-only.

block-all-mixed-content — mostly historical

There’s a companion directive, block-all-mixed-content, which — per MDN — “prevents loading any assets over HTTP when the page uses HTTPS,” including “both blockable and upgradable mixed content,” and applies to iframes too. In practice it’s been superseded. MDN marks it deprecated and “obsolete in the specification,” noting: “Content that isn’t blocked is now always upgraded to a secure connection, so this directive is not needed.” Reach for upgrade-insecure-requests; treat block-all-mixed-content as legacy you might inherit, not something to deploy new. If you already send upgrade-insecure-requests, block-all-mixed-content has nothing left to do for upgraded requests — the upgrade rewrite happens first, so by the time a block-all check would run, the request has already been upgraded (or has already failed). It’s not just legacy; it’s redundant wherever UIR is already deployed.

Why your CMS keeps reintroducing it

Mixed content isn’t a one-time cleanup — it recurs, because several systems quietly re-inject http:// URLs after you think you’re done:

  • The content database. In WordPress, Drupal, and most CMSes, editors paste images and embeds with absolute http:// URLs straight into post bodies. Those live in the database, not in a template, so a code-level fix never touches them — hence the DB search-and-replace.
  • Themes and plugins. A theme or plugin that hard-codes an http:// asset URL (a font, a script, a background image) reintroduces mixed content on every page it renders, and a plugin update can bring it back after you’ve cleaned it.
  • Ad tech, analytics, and third-party tags. Tag managers, ad networks, chat widgets, and analytics snippets load their own sub-resources — and if a vendor’s tag still calls http://, it’s mixed content you can’t fix in your own codebase. This is exactly the long tail CSP reporting is for; the durable fix is pressing the vendor to serve over HTTPS (or dropping the tag). If a vendor has no working HTTPS endpoint, the durable choices are the same three: get them to fix it, replace the dependency, or drop it — there isn’t a fourth option that keeps the insecure version running safely.
  • Service workers and caches. A service worker can cache a response (or the request itself) that still points at http://, and it’ll keep serving that stale reference on repeat visits even after you fix the source. Reproduce a suspected fix in an incognito/uncached session before concluding it didn’t work, and make sure a deploy that changes resource URLs also bumps the service worker/cache version so stale entries get evicted rather than replayed.
  • Hard-coded http:// in old content and email/print templates that get reused.

The operational takeaway: bake detection into a recurring audit (crawler + CSP reports), not a launch-day checklist you run once.

How mixed content interacts with HSTS

Mixed content and HSTS solve adjacent but different problems, and conflating them is a common mistake:

  • upgrade-insecure-requests fixes sub-resources your own secure page requests — it upgrades the images/scripts/iframes the page pulls in.
  • HSTS (Strict-Transport-Security) forces the top-level navigation to your site onto HTTPS — even the very first request, before any redirect fires — and defends against SSL-stripping. Google frames HSTS as a way to “avoid the cost of the 301 redirectA 301 redirect is the HTTP status code for a permanent move: it tells browsers and search engines a URL has moved for good, and it's the strongest signal for consolidating a page's ranking signals onto the new URL. Google says permanent redirects don't cause a loss in PageRank. and to “defeat attacks like SSL StrippingHSTS (HTTP Strict Transport Security) is a response header that tells browsers to always connect to your site over HTTPS — even when a user types or clicks an http:// link — closing the insecure-first-request gap that a plain 301 redirect leaves open..”

They don’t substitute for each other. As MDN spells out, upgrade-insecure-requests “will not ensure that users visiting your site via links on third-party sites will be upgraded to HTTPS for the top-level navigation and thus does not replace the Strict-Transport-Security (HSTS) header.” A fully hardened setup uses both: upgrade-insecure-requests (or clean source URLs) so the secure page has no insecure cargo, and HSTS so nobody reaches the site over HTTP in the first place. And the usual HSTS caution still applies — Google: “Don’t enable HSTS until you’re certain your site operation is robust enough to avoid ever deploying HTTPS with certificate validation errors,” and preloading is close to a one-way door.

Does mixed content hurt SEO directly?

Lead with the direct effects, because they’re the ones you actually control: mixed content is first a security and functional problem. Blocked active mixed content breaks renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM. and interactivity outright — a missing stylesheet or script is a real regression regardless of what a search engine makes of it. That’s reason enough to fix it before you think about rankings at all.

The SEO consequences are real but conditional, not direct or guaranteed. Current official Google guidance does not establish fixing mixed content as a direct ranking boost — the HTTPS ranking signal itself is scheme-based (whether the URL starts with https://), not a sub-resource cleanliness check, so a stray insecure image doesn’t by itself cost you “the HTTPS signal.” But downstream effects can still show up depending on what’s actually broken: if GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. renders a page whose CSS or JS was blocked as mixed content, it may index a broken or incomplete version; a downgraded security indicator can hurt user trust, engagement, and conversions even with no ranking change at all; and Google’s general preference for HTTPS canonicals is itself conditional — invalid certificates, insecure dependencies, HTTPS-to-HTTP redirects, or conflicting canonical signals elsewhere on the page can all change which URL gets chosen, independent of mixed content specifically. Treat rendering, indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed., canonicalizationHow search engines pick one canonical URL among duplicates and consolidate signals onto it., and analytics effects as things to verify on your own pages, not universal outcomes to promise — and fix mixed content for the security and functional reasons first.

This sits inside the broader HTTPS for SEOHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.' topic, which covers the migration playbook, the ranking-signal weight, and HSTS in full; if you’re also debugging the certificate itself (chain errors, expiry, DV/OV/EV), that’s a sibling deep dive.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.