HSTS preload: the checklist, and the ways it locks you out.

Strict-Transport-Security tells a browser that has seen your site to never try plain HTTP again. Preloading puts that instruction into the browser before anyone visits. Both are good. Both are also one of the few web configuration changes that cannot be quickly undone, so they deserve a rollout plan rather than a copied header.

Published 2026-09-16 · 6 min read · Kirk Diamond

What the header does

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

When a browser receives this over HTTPS, it remembers for max-age seconds that the host is HTTPS-only. For that period it rewrites any http:// link, bookmark or typed address for the host to https:// before making the request, so the first insecure request that a redirect would normally fix never happens, and it turns certificate errors into hard failures with no click-through. The header is ignored when received over HTTP, and ignored if the certificate was not valid, so an attacker cannot set it for you.

includeSubDomains extends the rule to every subdomain. preload is a signal that you consent to being added to the browsers' built-in list; on its own it does nothing.

What preloading adds

HSTS has a first-visit gap: a browser that has never seen the header will still make one plain HTTP request, and that one request is where a network attacker can intervene. The preload list, maintained by Chrome and consumed by Firefox, Safari and Edge, closes the gap by shipping your domain inside the browser as HTTPS-only from the start. You submit at hstspreload.org; inclusion takes weeks to reach stable releases, and removal takes longer.

The list has requirements, and they are the source of most of the pain:

The ways it locks you out

Every one of these is something I have seen or been asked to help unpick.

The checklist, in order

  1. Inventory every hostname under the domain, including ones that only exist internally and ones delegated to third parties. Check each one answers on HTTPS with a valid certificate. The SSL/TLS certificate checker does one host at a time; a list and a loop over the text output does the rest.
  2. Fix the HTTP to HTTPS redirect on the apex and on www. It should be a 301 (or 308), one hop, to the same hostname over HTTPS, and the HTTPS response must carry the HSTS header. The redirect checker shows the chain and the security headers scorecard shows the header and parses its directives.
  3. Start small. max-age=300, no includeSubDomains. Five minutes is long enough to see it work and short enough that a mistake costs nothing. Live with it for a day.
  4. Add includeSubDomains at the short max-age, and wait a week. This is when the forgotten HTTP-only subdomain surfaces, and at five minutes you can back it out.
  5. Raise max-age in steps: a day, a week, a month, then a year. Each step is a commitment for that long.
  6. Add preload and submit, only once you have been at a year with subdomains for a while without incident, and only if you accept that the domain is HTTPS-only for the foreseeable future. For most public sites that is the right call. For a domain that hosts anything you do not fully control, think twice.

Things worth knowing

All guides · All tools