Skip to content

Security config

HSTS without locking yourself out of HTTP forever

· Configuration notes, not a newsroom.

Strict-Transport-Security is a high finding on SiteRune when it is missing. Preload is optional. includeSubDomains is not something to copy from a blog if you still have an HTTP tool on a subdomain.

What the header actually does

HSTS tells browsers: for max-age seconds, never speak HTTP to this host. The first visit can still be HTTP unless the site is on the preload list. After that, SSL-stripping on cafe Wi-Fi gets much harder. SiteRune scores presence of Strict-Transport-Security on the final URL. We do not invent preload.

A safe rollout

Start with max-age=86400 (a day) on production HTTPS. Confirm nothing still needs HTTP: old APIs, staging on a subdomain, email links. Then raise to 31536000 and add includeSubDomains only if every subdomain is on TLS. Preload last, and only if you understand you are asking Chrome to hard-code HTTPS for your domain.

  • WordPress: set it in nginx / the host, not a random plugin that also blocks GPTBot.
  • Next.js: headers() in next.config or the Vercel Security Headers UI.
  • Shopify / Webflow / Wix: you probably need Cloudflare in front. The admin will not send HSTS.

How SiteRune scores it

Finding id: sec-hsts. High if the page is already HTTPS, medium if it is still HTTP (fix TLS first). Loopback hosts are not failed for HTTP — we are not going to punish localhost. Production SiteRune sends max-age=31536000; includeSubDomains; preload because this origin has no HTTP subdomains we still need.

Run it on a live URL

The brief will name your CMS and attach the files. Three guest scans, no card.

https://