Website Safety & Security Checker · one finding
Page is not served over HTTPS
Recommended action: Serve the page and all canonical assets over HTTPS, then redirect HTTP requests directly to the HTTPS URL.
Fix principle: Every subresource, form action, and redirect destination a page emits must resolve to a live HTTPS URL served by a valid, unexpired certificate for that exact hostname; fix each insecure reference at the layer that emits it instead of suppressing the browser warning or leaving a redirect chain that dips back to HTTP.
Implementation for your setup
Confirm first: The page (or a required resource, form target, or redirect destination it emits) is reachable over plain HTTP, an HTTPS page loads an HTTP subresource, or a redirect chain lands on an insecure destination. The TLS certificate serving the hostname is expired, mismatched to the hostname, self-signed, or otherwise fails validation.
Do not apply when: Every resource, form action, and redirect destination for the page resolves to a live HTTPS URL, and the certificate serving that hostname is valid, unexpired, and issued for the exact hostname requested. The apparent HTTP reference is to a third-party resource the site does not control and that has no working HTTPS equivalent, not a first-party mixed-content or insecure-redirect defect.
Likely control points: server · edge-cdn · cms-app · managed-vendor
Choose the layer that owns the final response.
Generic HTTP / HTML
Steps
- Enumerate every HTTP reference for the page: subresource URLs (scripts, styles, images, fonts, iframes), form action targets, and every hop of any redirect chain the page participates in — and identify the layer emitting each one.
- Replace each insecure reference with its live HTTPS equivalent (or a relative URL); do not merely rely on a browser or edge rewrite to mask the underlying defect.
- Confirm the TLS certificate serving the hostname is valid, unexpired, and issued for the exact hostname — no hostname mismatch and no self-signed chain a browser will reject.
- If any redirect exists for the page (HTTP-to-HTTPS or otherwise), confirm the destination and every intermediate hop are HTTPS end-to-end; never chain through an intermediate HTTP hop.
Verify on this platform
- Load the page fresh (no cache) and confirm the browser console shows no mixed-content warnings; scripts, stylesheets, and iframes are blocked outright rather than silently upgraded, so check those specifically.
- Trace the full redirect chain for the page and confirm every hop, including the final destination, is HTTPS.
- Inspect the certificate presented for the hostname and confirm it is valid, unexpired, and matches the requested hostname.
Rollback
- If forcing HTTPS on one reference breaks a resource, form, or redirect that has no working HTTPS source yet, revert that single reference to its previous state while the underlying HTTPS gap is fixed, rather than leaving the page in a half-migrated state with an active browser warning.
Caveats
- A `Content-Security-Policy: upgrade-insecure-requests` directive can upgrade legacy first-party subresource references as a stopgap, but it only rewrites non-navigational requests (not `<a href>` links or top-level navigation) and provides no fallback if the HTTPS destination is unavailable — it is not a substitute for fixing the true source.
- Forcing an HTTPS redirect does not resolve mixed content by itself; the browser still evaluates the protocol of each embedded resource independently.
- A resource on a third-party domain you do not control may have no HTTPS equivalent; document that limitation rather than leaving a silent redirect loop or a broken embed.
Official sources
WordPress
Steps
- Set both the WordPress Address and Site Address to the https:// URL once the certificate is installed and TLS works end-to-end for the hostname.
- Search stored content and theme/plugin output for hard-coded http:// references (images, embeds, form actions) and update them to https:// at their source rather than relying on the browser to silently fix them.
- Redirect the plain-HTTP host to HTTPS at the host, web server, or edge layer — not inside a page template — so every URL benefits, not only the ones WordPress itself renders.
Verify on this platform
- View the public HTML source while logged out and confirm no remaining http:// references in scripts, styles, images, or form actions.
- Confirm the WordPress Address and Site Address both read https:// and that a request to the plain-HTTP host redirects cleanly to HTTPS.
Rollback
- Restore the previous WordPress Address/Site Address values and any reverted template edit if switching to HTTPS breaks a login, asset path, or integration that depends on a hard-coded HTTP URL, then fix that specific integration before retrying.
Caveats
- WordPress core does not rewrite historical post content for you; hard-coded http:// URLs saved in the database need a deliberate search-and-update, and a naive database find/replace can corrupt serialized data — use a tool built for that migration rather than raw SQL replace.
- A page builder or headless WordPress frontend is owner-managed; verify that system's own HTTPS workflow rather than assuming Settings → General controls it.
Official sources
- WordPress: HTTPS for WordPress sites verified
- MDN: Mixed content verified
Shopify
Steps
- Confirm the domain shows a Connected status with an active TLS certificate in Shopify admin — Shopify issues and auto-renews this certificate, and a third-party certificate cannot be substituted for it.
- Confirm plain-HTTP requests to the storefront redirect automatically to HTTPS; this is Shopify's default behavior once the certificate is issued, not a merchant-configured setting.
- Search theme.liquid, section/snippet files, and any app embed for a hard-coded http:// reference (an image, script, or form action) and correct it at that source — Shopify does not scan or rewrite theme code for you.
Verify on this platform
- Confirm the domain status reads Connected with an active TLS certificate in Shopify admin.
- Load representative storefront pages and confirm the browser reports no mixed-content warnings.
Rollback
- Revert the specific theme or app-embed edit if correcting a hard-coded reference breaks a storefront feature, then re-source that asset over HTTPS before reapplying.
Caveats
- Standard Online Store (Liquid) themes have no merchant-facing control over the TLS certificate itself — treat certificate provisioning as platform-managed and escalate to Shopify support only if a domain stays stuck in a pending or unavailable TLS state.
- This applies to Online Store Liquid themes; a Hydrogen custom storefront manages its own TLS and hosting outside Shopify's automatic certificate.
Official sources
Cloudflare Workers / Rules
Steps
- Set the SSL/TLS encryption mode to Full (strict) once the origin itself serves valid HTTPS, so the edge-to-origin hop is not silently downgraded to plain HTTP.
- Enable Always Use HTTPS to redirect HTTP requests at the edge; do not also run a duplicate redirect at the origin without confirming they agree — Cloudflare documents that combination as a source of redirect-loop errors.
- Enable Automatic HTTPS Rewrites as a stopgap for legacy first-party HTTP subresource references while the true source is corrected; it only rewrites resources it can confirm are available over HTTPS, and for third-party domains outside Cloudflare's known-HTTPS lists it rewrites active content only, not passive content like images.
Verify on this platform
- Confirm the SSL/TLS encryption mode and Always Use HTTPS status in the Cloudflare dashboard.
- Load the site through Cloudflare and confirm HTTP requests redirect to HTTPS with no redirect loop, then check for any remaining mixed-content console warnings that Automatic HTTPS Rewrites did not catch.
Rollback
- Disable Always Use HTTPS or revert the encryption mode if enabling it produces a redirect loop with an existing origin-level redirect, then remove the duplicate origin redirect before re-enabling.
Caveats
- Automatic HTTPS Rewrites does not resolve every mixed-content case: resources injected by JavaScript or CSS after page load, and passive content from domains outside Cloudflare's known-HTTPS lists, still need a first-party fix.
- Do not run an origin-level HTTP-to-HTTPS redirect at the same time as Always Use HTTPS without confirming they agree on the destination.
Official sources
- Cloudflare: Always Use HTTPS verified
- Cloudflare: Automatic HTTPS Rewrites verified
Platform-managed / ask the vendor
Implementation is controlled by the platform or vendor.
Verify on this platform
- Ask the vendor to confirm every subresource, form action, and redirect destination for the page resolves to HTTPS, and that the TLS certificate for the hostname is valid and renews automatically without manual intervention.
- Independently load the page and confirm no mixed-content warnings and no HTTP hop anywhere in its redirect chain.
Caveats
- Escalate when the vendor cannot confirm certificate renewal is automated, or cannot identify the source of a persistent HTTP reference.
- Do not accept a claim of "HTTPS enabled" without seeing a live response that resolves every reference and redirect hop to HTTPS.
Official sources
How to verify
- Load the production page fresh and confirm zero mixed-content warnings in the browser console.
- Trace the full redirect chain for the page and confirm every hop, including the final destination, is HTTPS.
- Inspect the TLS certificate served for the hostname and confirm it is valid, unexpired, and matches the hostname.
- Rerun Website Safety & Security Checker on the same production URL.
Escalate when
Escalate when certificate issuance or renewal is not automated and no owner is confirmed, a third-party resource has no working HTTPS equivalent, or a redirect must cross a hostname or vendor boundary you do not control.