Users accessing your site via HTTP aren't being redirected to HTTPS, leaving them on an insecure connection.
Lighthouse tests what happens when a user visits your site using http://. If the connection stays on HTTP instead of redirecting to HTTPS, the audit fails. This occurs when your server accepts HTTP requests but doesn't issue a redirect response.
Without this redirect, users who type your domain without https://, click old bookmarks, or follow HTTP links are left on an insecure connection. Their traffic is unencrypted and vulnerable to interception.
http:// prefix: http://yoursite.comhttp://, the redirect is missingcurl -I http://yoursite.com
HTTP/1.1 301 Moved Permanently
Location: https://yoursite.com/
If you see 200 OK instead of a redirect, the server serves content over HTTP.
Configure your web server or hosting platform to redirect HTTP to HTTPS.
Nginx:
server {
listen 80;
server_name yoursite.com www.yoursite.com;
return 301 https://$host$request_uri;
}
Apache (.htaccess):
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Caddy: (Automatic—Caddy redirects HTTP to HTTPS by default)
yoursite.com {
# HTTPS redirect happens automatically
}
Most hosting platforms handle this through their dashboard.
Cloudflare:
Vercel: Automatic—all HTTP requests redirect to HTTPS by default.
Netlify:
AWS CloudFront:
HTTP Strict Transport Security tells browsers to always use HTTPS, preventing even the initial HTTP request on subsequent visits.
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Configure on your server:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
// Vercel/Next.js - next.config.js
module.exports = {
headers: async () => [{
source: '/(.*)',
headers: [{
key: 'Strict-Transport-Security',
value: 'max-age=31536000; includeSubDomains; preload'
}]
}]
}
// Nuxt - nuxt.config.ts
export default defineNuxtConfig({
routeRules: {
'/**': {
headers: {
'Strict-Transport-Security': 'max-age=31536000; includeSubDomains; preload'
}
}
}
})
After HSTS is deployed and verified, submit to the HSTS Preload List to have browsers enforce HTTPS before the first visit.
http://yoursite.com (explicit HTTP)https:// after redirectcurl -I http://yoursite.com and verify 301/308 responseCheck redirect chain efficiency:
curl -ILs http://yoursite.com | grep -E "^HTTP|^Location"
You should see exactly one redirect from HTTP to HTTPS, not multiple hops.
X-Forwarded-Proto but the header isn't set, it keeps redirecting. Verify your CDN/proxy forwards the protocol header correctly.http://yoursite.com AND http://www.yoursite.com. Users might access either.yoursite.com doesn't cover api.yoursite.com or blog.yoursite.com.max-age (like 300 seconds) and increase after confirming everything works. A misconfigured HSTS with a year-long max-age locks users out.HTTP redirect issues often appear alongside:
HTTP redirect issues can affect some subdomains or paths but not others—especially with complex hosting setups or multiple servers. Scan your entire domain to ensure every entry point redirects users to a secure connection.