How to fix hsts disabled on Headless / Custom (I build in code)
Set a valid HTTP Strict-Transport-Security (HSTS) header with a max-age of at least 31536000 (one year) and includeSubDomains to force browsers to always use HTTPS for your store.
Steps for Headless / Custom (I build in code)
- For Node.js/Express, use the helmet middleware: npm install helmet, then app.use(helmet.hsts({ maxAge: 31536000, includeSubDomains: true }));
- For Next.js, add the header in next.config.js inside the headers() async function (see code snippet below).
- For Nginx, add to your server {} block: add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; — then nginx -t && nginx -s reload.
- For Apache, add to VirtualHost or .htaccess: Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
- For Cloudflare (as CDN in front of any stack): Dashboard → your domain → Security → Settings → HTTP Strict Transport Security → Enable, Max Age = 12 months, includeSubDomains = ON.
- Verify with: curl -I https://yourdomain.com | grep -i strict-transport-security
What is hsts disabled?
HTTP Strict-Transport-Security (HSTS) is a security header your web server sends to browsers. It tells the browser: "Never load this site over plain HTTP — always use HTTPS, no matter what." Once a browser sees this instruction, it enforces HTTPS automatically for the duration you specify (the max-age, measured in seconds). A max-age=0 effectively disables HSTS, meaning the browser forgets the rule immediately and offers no protection. The correct setting is max-age=31536000 (one year) with includeSubDomains so all parts of your site are covered.
Without a valid HSTS header, shoppers who type your domain into a browser or click a plain HTTP link are briefly exposed to a "downgrade attack" — a hacker on the same network (e.g., public Wi-Fi) can intercept that first unencrypted request and silently redirect them to a fake version of your store, stealing passwords, credit card numbers, or session cookies. This is classified under OWASP's A02:2021 Cryptographic Failures, one of the most exploited vulnerability categories in real-world breaches. Beyond security, Google has used HTTPS as a ranking signal since 2014, and browsers display "Not Secure" warnings that destroy shopper trust and conversion rates. Fixing HSTS is a free, low-effort change with immediate security and trust benefits.
See the complete Hsts disabled guide for every platform and the full background.
Not sure if your Headless / Custom (I build in code) store has this?
Run a free SEOLZ scan — we’ll find hsts disabled and every other issue across your whole site.
Scan my site free