PRELOAD, BUT ONLY ON PURPOSE

HSTS preload: the submission requirements, the risks and how to check your header and list status

The HSTS preload list builds your domain into browsers so that even the first visit uses HTTPS, for every subdomain. Joining takes one form; leaving takes months. Here are the exact requirements, the risks that make it a one-way decision, a staged max-age plan and the commands to check your header and your list status.

Concept illustration of a long ivory ceramic cabinet with many drawers: in the open drawer, copper tweezers set a mint-glowing glass tile into an empty slot, linked by a mint beam to a glass archway behind.
Concept illustration

HSTS tells a browser to use only HTTPS for your site, but only after the browser has received the header once. The HSTS preload list closes that gap. It is a list of domains built into Chrome, and the lists in Firefox, Safari and Edge are based on it, so these browsers use HTTPS for a listed domain and all of its subdomains before the first request leaves the device.

Getting on the list is a form at hstspreload.org. Getting off it takes months. This guide explains what the list is, the exact submission requirements, the risks that make preloading a one-way decision for most sites, a staged max-age plan, and how to check both your header and your list status. All examples use example.com.

The short version for 2026: hstspreload.org recommends HSTS for every HTTPS site, but it no longer recommends preloading by default. Read section 2 before you add the preload directive to anything.

Scope of this guide

This guide covers what can be seen from outside: public headers, redirects and the public preload list. The free checker reads one public response, cannot see internal subdomains and is not a pentest.

1. What the HSTS preload list is

HTTP Strict Transport Security is defined in RFC 6797. A server sends Strict-Transport-Security: max-age=… over HTTPS, and the browser remembers for max-age seconds that the host may be reached only over HTTPS. Until a visitor’s browser has received that header once, nothing protects the first plain http:// request, and an attacker on the same network can intercept it. The RFC describes this bootstrap weakness and suggests pre-configured policies as one answer.

The preload list is that answer in practice. The Chromium project maintains it and new entries are hard-coded into Chrome’s source code. According to the Chromium HSTS page and hstspreload.org, Firefox, Safari and Edge keep their own lists based on Chrome’s. In every browser version that includes the entry, a preloaded domain is HTTPS-only from the first start, and because submissions must include includeSubDomains, so is every name below it.

Three details are often misunderstood:

  • The preload directive does nothing in the browser. It is not part of RFC 6797, and browsers ignore directives they do not recognize. It tells the list maintainers that the domain owner agrees to inclusion. Once your header carries it, anyone can submit your domain through the form.
  • Only whole registrable domains go on the list. You submit example.com, not www.example.com or shop.example.com, and the entry covers every subdomain, including internal ones that are not publicly reachable.
  • Some top-level domains are preloaded as a whole. Every domain under .app or .dev, for example, is already HTTPS-only in browsers that use the list, whether or not its owner submitted anything.

2. Do you still need preloading?

For most sites, probably not. The submission site itself now says that HSTS is recommended but HSTS preloading is not. Chrome and Safari automatically try HTTPS for navigations that start as http://, whatever the HSTS policy, so the first-visit gap that preloading was built to close has narrowed. According to hstspreload.org, preloading adds protection only when those automatic upgrades fail because of an active attacker, and its benefit is minimal compared with HSTS itself.

Preloading can still make sense when all of these are true:

  • a downgrade on the very first visit matters to you, for example because people sign in or pay from public networks;
  • every current and future subdomain, including internal and vendor-hosted ones, can serve HTTPS with a valid certificate;
  • you plan to keep the domain, and HTTPS on it, for years.

Skip it, or postpone it, if teams or vendors run subdomains you do not fully control, if internal hosts live under the public domain, if the domain belongs to a short-lived campaign, or if you might sell or hand it over: the entry follows the domain to its next owner until someone requests removal. A well-configured HSTS header without preload already protects every returning visitor.

3. The exact submission requirements

hstspreload.org checks these conditions when you submit, and you have to keep meeting them afterwards: domains that stop meeting them may be removed, and dropping preload from the header makes the domain eligible for removal straight away.

RequirementWhat it means in practiceHow to check it
Valid certificateThe base domain serves a browser-trusted certificate with the complete chainThe site opens with no warning; curl https://example.com/ reports no certificate error
HTTP to HTTPS on the same hostIf port 80 answers, http://example.com/ redirects to https://example.com/ first, not straight to https://www.example.com/curl -sS -D - -o /dev/null http://example.com/ shows 301 or 308 and that Location
All subdomains on HTTPSEvery subdomain, nested and internal ones included, works over HTTPS; www needs HTTPS if it has a DNS recordYour DNS zones and certificate inventory; the form cannot see internal names
HSTS on the base domainSent on HTTPS responses from https://example.com/, including any redirect served therecurl -sS -D - -o /dev/null https://example.com/
max-age of at least 31536000One year in seconds; the example on hstspreload.org uses 63072000, two yearsRead the number after max-age=
includeSubDomainsExtends the policy to every subdomainDirective present in the header
preloadSignals that you agree to inclusionDirective present in the header

The redirect rule catches many sites. If https://example.com/ redirects to https://www.example.com/, that redirect response must carry the full header itself. The header on the www page does not count, because a policy set by www.example.com never applies to the base domain. A header that passes looks like this:

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

4. The risks: why preloading is hard to undo

  • Removal takes months. Removal is a source change that reaches people with browser updates. The removal page says it can take 6 to 12 weeks to reach most Chrome users, and possibly longer in other browsers. A browser that is never updated keeps the old entry.
  • Subdomains that cannot do HTTPS stop working. Typical cases are intranet hosts that resolve only on internal DNS, admin pages of printers, routers and storage devices with self-signed certificates, forgotten staging servers, and vendor services on a CNAME, such as a help desk, a status page or email click-tracking links, that answer only over HTTP. In a browser with your domain preloaded, they fail with no way past the error.
  • Certificate mistakes become hard failures. On an HSTS host, RFC 6797 requires the browser to end the connection on any certificate error without letting the visitor click through. An expired certificate on any subdomain locks everyone out until it is replaced, so automate renewal and monitor expiry dates before you submit.
  • Returning visitors keep their stored policy. Leaving the list does not clear the policy that browsers learned from your header. With a two-year max-age, that copy lasts two years unless the visitor comes back and receives max-age=0 over HTTPS.
  • Accidental submission. A header copied from a template with preload already in it is enough for anyone to submit your domain. Leave the directive out until the plan in the next section is done.

5. A staged max-age plan before you submit

hstspreload.org recommends raising max-age in stages, with includeSubDomains from the first stage. At each stage, look for broken pages and watch your numbers, such as traffic, sign-ins and revenue, fix what comes up, then wait at least the full max-age of that stage before you move on. You can run the stages with a test group first, but then run them for everyone.

StageHeader valueWait at leastWhat to watch
0. InventoryNo change yetUntil the list is completeEvery subdomain from DNS zones, certificate orders and Certificate Transparency logs, each tested over HTTPS
1. Five minutesmax-age=300; includeSubDomains5 minutes; a few days of real traffic tell you moreErrors on forgotten subdomains, mixed content
2. One weekmax-age=604800; includeSubDomains1 weekSupport tickets, sign-in and checkout errors, internal tools
3. One monthmax-age=2592000; includeSubDomains1 monthMonthly jobs, vendor and email links, rarely used hosts
4. Two yearsmax-age=63072000; includeSubDomains; preloadThen submitCertificate renewals and every new subdomain, for as long as you stay listed

On nginx, send the header from the HTTPS server block with the always parameter, so error pages carry it too, and keep the HTTP redirect on the same host. An add_header line inside a location block replaces the server-level headers there (nginx headers module).

server {
    listen 80;
    server_name example.com;
    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com;
    # stage 1: change the value at each stage
    add_header Strict-Transport-Security "max-age=300; includeSubDomains" always;
}

The ramp-up alone takes more than five weeks. After you submit, hstspreload.org says a new entry can take several months to reach stable Chrome, so preloading is never a quick fix for a launch date.

6. How to check your HSTS header

Check the three responses that matter from a terminal:

curl -sS -D - -o /dev/null http://example.com/
curl -sS -D - -o /dev/null https://example.com/
curl -sS -D - -o /dev/null https://www.example.com/

The first should return 301 or 308 with Location: https://example.com/; it needs no HSTS header, because browsers ignore HSTS received over plain HTTP. The second must carry strict-transport-security with all three directives, even when it is itself a redirect to www. The third should send the header as well, because a visitor who only ever opens www never receives the base domain’s policy. On Windows, call curl.exe and use -o NUL.

Watch for these mistakes:

  • Two HSTS headers. When the CDN and the origin both add one, RFC 6797 tells browsers to process only the first, and the hstspreload.org check reports “Multiple HSTS headers” as an error. Decide which layer owns the header.
  • A misspelled directive. Browsers drop directives they do not recognize without any warning, so includeSubdomain without the final s quietly leaves subdomains uncovered.
  • Missing on some responses. The home page has the header, but error pages, the API or static files served by another layer do not.

In Chrome DevTools, open the Network panel, then type http://example.com/ into the address bar after the browser has stored the policy. The first entry shows 307 Internal Redirect with Non-Authoritative-Reason: HSTS: the browser switched to HTTPS by itself, before any request reached the server. The MDN reference lists the header syntax.

7. How to check your preload list status

  • hstspreload.org. Enter the domain in the form. It shows whether the domain is preloaded, pending or not on the list, along with any errors and warnings against the current requirements. A pending domain is not protected yet: it still has to ship in a browser release.
  • chrome://net-internals/#hsts. In Chrome, enter the domain under “Query HSTS/PKP domain”. Fields that start with static_ come from the list built into that browser version; fields that start with dynamic_ come from headers the browser has received. “Delete domain security policies” clears only the dynamic part, so a preloaded entry stays until a browser update removes it.
  • Other browsers. Firefox, Safari and Edge ship their own copies derived from Chrome’s list on their own schedules, so an addition or a removal can reach them at different times.

Repeat the check after changes to DNS, your CDN or your certificates. hstspreload.org notes that domains which stop meeting the requirements may be removed automatically in the future.

8. Leaving the list: removal steps and timing

  1. Keep serving HTTPS with a valid certificate on the base domain; the removal form checks it.
  2. Send an HSTS header without preload. hstspreload.org treats that header as the removal request. Keep includeSubDomains and a long max-age if you still want HSTS, or send max-age=0 to switch HSTS off entirely.
  3. Submit the domain on the removal form.
  4. While you wait, give the subdomain that forced the decision a valid certificate or move it to another domain: removal can take 6 to 12 weeks to reach most Chrome users and longer for other browsers.
  5. Do not send preload again unless you want to be added back.

max-age=0 works only over HTTPS and only for visitors who come back and receive it. Plan for the slowest path: an outdated browser that still has the built-in entry, or a stored two-year policy, can keep enforcing HTTPS long after you have changed course.

9. What the free Launch Readiness Snapshot shows

The free Launch Readiness Snapshot runs eight passive checks on one public domain without signup and returns a score with the result of each check. Two of them look at HSTS:

  • The HTTP security headers check reads the home page of the domain you enter, after up to five redirects. It rates a missing Strict-Transport-Security header on an HTTPS target as medium and shows the value it observed.
  • The HTTPS redirect check flags a max-age under 180 days (15,552,000 seconds) as low when you enter a bare domain or an https:// address. During stages 1 to 3 of the plan, that result is expected.

It does not check includeSubDomains, the preload directive, your subdomains or your list status; use hstspreload.org and the curl commands above for those. To open the header result first, use the free security headers checker, which runs the same snapshot. For the certificate side, read the guide to TLS certificates and HSTS, and the website launch checklist puts HSTS next to redirects, DNS and the other pre-launch checks.

Common questions

Is HSTS preloading still recommended?

Not by default. hstspreload.org recommends HSTS for HTTPS sites but not preloading, because Chrome and Safari already try HTTPS for http:// navigations. Preloading mainly adds protection when an active attacker blocks those upgrades, and removal from the list takes months.

What max-age does the HSTS preload list require?

At least 31536000 seconds (one year), together with includeSubDomains and preload, on HTTPS responses from the base domain. The example header on hstspreload.org uses 63072000, two years. Reach it in stages: 300, 604800 and 2592000 seconds, then the final value.

Can I preload only www or a single subdomain?

No. The list takes the registrable domain, such as example.com, and the entry covers every subdomain below it, including internal ones. If even one subdomain cannot serve HTTPS with a valid certificate, do not preload the domain.

How long does removal from the HSTS preload list take?

hstspreload.org says removal can take 6 to 12 weeks to reach most Chrome users and possibly longer in other browsers. First remove preload from the header, then submit the removal form. Visitors who stored your header keep that policy until its max-age runs out.

How do I check whether my domain is on the preload list?

Enter it at hstspreload.org, which shows preloaded, pending or not preloaded plus any errors against the requirements. In Chrome, chrome://net-internals/#hsts shows static entries from the built-in list and dynamic entries learned from headers.

Sources & further reading

  1. HSTS Preload List Submission (requirements and recommendations)hstspreload.org
  2. HSTS Preload List Removalhstspreload.org
  3. RFC 6797: HTTP Strict Transport Security (HSTS)www.rfc-editor.org
  4. MDN: Strict-Transport-Security headerdeveloper.mozilla.org
  5. The Chromium Projects: HTTP Strict Transport Securitywww.chromium.org
  6. OWASP HTTP Strict Transport Security Cheat Sheetcheatsheetseries.owasp.org
  7. nginx: ngx_http_headers_module (add_header)nginx.org
Sitelemetry team

Prepared by the Sitelemetry editorial team. Explore the linked sources for further detail.

SITELEMETRY

Put what you learned to work.

Explore your website’s structure, settings and signals with Sitelemetry.