HSTS: HTTP Strict Transport Security untuk SEO

Apa HSTS sebenarnya melakukan, Strict-Transport-Security header syntax (max-age, includeSubDomains, preload), browser-hanya internal redirect crawler tidak pernah see, mengapa ini tidak replace Anda 301s, dan bagaimana preload dapat lock Anda di — dari Patrick Stox.

Pertama kali diterbitkan: 3 Jul 2026 · Terakhir diperbarui: 10 Agu 2026 · Advanced
Bahasa
1 sinyal bukti di halaman ini

HSTS (HTTP Strict Transport Security) adalah sebuah Strict-Transport-Security respons header — honored hanya ketika ini arrives di atas sebuah secure connection — itu tells sebuah browser untuk selalu gunakan HTTPS untuk Anda domain going forward, closing insecure kesenjangan itu sebuah baru pengunjung's pertama permintaan masih membuat di atas HTTP sebelum Anda 301 fires. ini adalah sebuah browser-layer, per-client policy pada top dari Anda server-side redirects, tidak sebuah replacement: RFC 6797 memiliki browser rewrite URI untuk HTTPS internally sebelum apa pun permintaan goes out (sering ditampilkan sebagai sebuah internal 307-style redirect, though RFC tidak mandate sebuah spesifik kode status), so Tidak server ever sees HTTP form dan crawler masih perlu Anda nyata 301 untuk memahami move dan carry tautan equity. header memiliki three directives — max-age (diperlukan), includeSubDomains, dan preload. Preload bakes Anda domain ke browser itself melalui hstspreload.org (requiring max-age dari setidaknya sebuah tahun, includeSubDomains, dan preload flag) dan adalah close untuk irreversible — removal adalah sebuah terpisah submission itu takes months untuk reach pengguna. HSTS adalah juga dengan sengaja unforgiving: sebuah browser itu knows Anda sebagai sebuah HSTS host akan hard-fail dengan Tidak click-melalui jika Anda certificate ever breaks. So enable ini hanya setelah HTTPS adalah genuinely solid di seluruh setiap subdomain, dan treat preload sebagai sebuah satu-cara door.

TL;DR — HSTS adalah Strict-Transport-Security respons header, honored hanya ketika sebuah browser menerima ini di atas sebuah secure connection, dan stored per-client sebagai future policy untuk itu host. ini closes “pertama request problem” (terjemahan) “pertama permintaan masalah” sebuah 301 alone leaves open: awal HTTP permintaan dari sebuah baru pengunjung adalah insecure until redirect fires, dan itu’s window sebuah SSL-stripping attacker ingin. Three directives: max-age (diperlukan, seconds), includeSubDomains, preload. Ketika sebuah browser enforces HSTS ini rewrites URI untuk HTTPS internally, sebelum apa pun permintaan reaches sebuah server — RFC 6797 tidak mandate sebuah spesifik kode status untuk itu rewrite, though alat sering surface ini sebagai sebuah 307 — so Anda server-side 301s adalah masih mandatory untuk mesin pencari dan tautan equity; HSTS adalah pada top dari them, tidak alih-alih. Preload bakes Anda domain ke browser melalui hstspreload.org (memerlukan max-age ≥ 31536000, includeSubDomains, dan preload) dan adalah close untuk irreversible — removal adalah sebuah terpisah submission itu takes months untuk reach pengguna. dan HSTS adalah designed untuk hard-fail pada apa pun cert error, so enable ini hanya ketika HTTPS adalah robust di seluruh setiap subdomain.

HTTPS hub introduces HSTS sebagai sebuah browser-layer protection itu sits pada top dari Anda 301s. ini halaman adalah deep dive: tepat header syntax, internal redirect itu trips SEOs up, preload list’s near-irreversibility, dan dunia nyata cara HSTS locks orang out.

masalah HSTS sebenarnya solves: pertama permintaan

Picture sebuah properly migrated situs. setiap http:// URL 301-redirects untuk -nya https:// twin, certificate adalah valid, canonicals poin untuk HTTPS. Looks airtight. ini tidak, quite.

Ketika sebuah brand-baru pengunjung jenis yoursite.com (Tidak scheme) atau clicks sebuah old http://yoursite.com tautan, browser’s pertama permintaan goes out di atas plain HTTP. Anda server jawaban dengan 301, dan setiap permintaan setelah itu adalah secure. tetapi itu satu awal round-trip happened di jelas — dan itu’s persis window sebuah SSL-stripping attacker pada yang sama network ingin. mereka intercept HTTP permintaan, pertahankan victim pada HTTP sementara mereka proxy HTTPS untuk Anda server, dan baca atau rewrite semuanya.

HSTS eliminates itu window untuk anyone siapa memiliki visited sebelum. web.dev adalah direct tentang mechanism: “use Strict Transport Security to tell clients they should always connect to your server using HTTPS, even when following an http:// reference. This defeats attacks like SSL Stripping, and avoids the round-trip cost of the 301 redirect.” (terjemahan) “gunakan Strict Transport Security untuk tell clients mereka seharusnya selalu connect untuk Anda server menggunakan HTTPS, bahkan ketika berikut sebuah http:// reference. ini defeats attacks like SSL Stripping, dan menghindari round-trip cost dari 301 redirect.” (web.dev). itu terakhir clause penting untuk performa too: sebuah returning browser skips HTTP→HTTPS round-trip entirely. Evidence for this claim After receiving HSTS, a browser upgrades future HTTP attempts to HTTPS before sending the request. Scope: MDN documents user-agent enforcement after the header has been learned; first-visit protection requires preload or a prior secure visit. Confidence: high · Verified: MDN: Strict-Transport-Security header

Dua boundary conditions worth menjadi precise tentang. pertama, HSTS adalah stored, per-client policy — ini lives di itu satu browser’s own state untuk itu host, learned dari sebuah header delivered di atas sebuah secure connection; yang sama header dikirim pada sebuah respons HTTP adalah ignored outright (sebuah attacker siapa dapat inject atau strip headers pada plain HTTP dapat jika tidak neutralize ini), dan sebuah client itu memiliki tidak pernah diterima ini — sebuah fresh install, sebuah berbeda browser, sebuah crawler — memiliki Tidak policy untuk enforce. kedua, rewrite adalah scheme-dan-port aware: sebuah implicit port 80 permintaan becomes sebuah implicit port 443 permintaan, tetapi jika original URI named sebuah jelas non-default port, browser mempertahankan itu sama port angka dan sekadar contacts ini di atas HTTPS alih-alih.

header syntax

HSTS adalah satu respons header dengan up untuk three directives. Per MDN, forms adalah:

Strict-Transport-Security: max-age=31536000
Strict-Transport-Security: max-age=31536000; includeSubDomains
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
  • max-age=<seconds> — diperlukan. “The time, in seconds, that the browser should remember that a host is only to be accessed using HTTPS” (terjemahan) “ time, di seconds, itu browser seharusnya remember itu sebuah host adalah hanya untuk menjadi accessed menggunakan HTTPS” (MDN). 31536000 adalah satu tahun; 63072000 adalah dua. clock resets pada setiap respons itu carries header, so sebuah active situs continually renews -nya policy. ini adalah relative, per-client state: sekadar menghapus header tidak immediately jelas ini — sebuah browser itu sudah learned policy mempertahankan enforcing ini until -nya stored max-age berjalan out. untuk turn HSTS off untuk clients itu sudah learned ini, Anda memiliki untuk actively sajikan max-age=0 di atas sebuah secure respons; browser lalu forgets policy pada -nya berikutnya secure visit. (max-age=0 clears sebuah learned policy hanya — ini melakukan tidak hapus sebuah domain dari terpisah preload list.)
  • includeSubDomains — opsional. “If this directive is specified, the HSTS policy applies to all subdomains of the host’s domain as well” (terjemahan) “jika ini directive adalah specified, HSTS policy applies untuk semua subdomains dari host’s domain sebagai well” (MDN). Powerful dan dangerous di equal mengukur — see lockout scenarios di bawah.
  • preload — opsional. sebuah flag itu sinyal Anda intent untuk menjadi pada browser preload list. ini melakukan tidak ada apa pun pada -nya own; ini adalah sebuah prerequisite untuk submitting untuk hstspreload.org. Evidence for this claim HSTS preload requires at least a one-year max-age, includeSubDomains, and preload; removal can take months to reach users. Scope: The Chromium preload service documents submission and removal behavior; requirements can change and should be rechecked before submission. Confidence: high · Verified: Chromium: HSTS Preload List Submission

perilaku, again dari MDN: “Before loading an http URL, the browser checks the domain name against its HSTS hosts list. If the domain name is a case insensitive match for an HSTS host or is a subdomain of one that specified includeSubDomains, then the browser replaces the URL scheme with https.” (terjemahan) “sebelum memuat sebuah http URL, browser memeriksa domain name terhadap -nya HSTS hosts list. jika domain name adalah sebuah case insensitive match untuk sebuah HSTS host atau adalah sebuah subdomain dari satu itu specified includeSubDomains, lalu browser replaces URL scheme dengan https.”

internal upgrade crawler tidak pernah see (ini adalah SEO crux)

Di sini’s single sebagian besar misunderstood hal tentang HSTS, dan alasan ini dapat’t replace Anda redirects.

Ketika sebuah browser upgrades sebuah http:// permintaan di bawah HSTS, ini rewrites URI untuk HTTPS internally, sebelum apa pun network permintaan adalah dibuat — RFC 6797 memerlukan scheme substitution itself tetapi melakukan tidak mandate sebuah particular kode status untuk ini (RFC 6797 §8.3), so sebuah diberikan browser atau crawling alat dapat mewakili itu internal langkah namun ini likes — banyak display ini sebagai sebuah internal 307, tetapi itu’s client/alat-spesifik, tidak sebuah protocol jaminan. Apa penting untuk SEO adalah simpler dan holds regardless dari label: Tidak server adalah contacted untuk HTTP versi, so Tidak crawler ever sees ini. Googlebot dan Bingbot jangan carry sebuah learned HSTS policy sekitar cara sebuah returning human’s Chrome melakukan — mereka hit Anda server fresh, dan apa mereka perlu untuk see ada sebuah nyata, server-side 301. Evidence for this claim RFC 6797 requires the user agent to rewrite a known-HSTS-host HTTP URI to HTTPS internally, but does not mandate any specific redirect status code for that internal rewrite; how a given browser or crawling tool represents that step (e.g., as an internal 307) is a client/tool implementation detail, not a protocol requirement. Scope: RFC 6797 Section 8.3 ("URI Loading and Port Mapping") specifies the UA MUST replace the URI scheme with https; it does not prescribe an HTTP status code for that internal substitution, since no HTTP exchange occurs for it. Section 7.2's suggestion of status code 301 addresses ordinary server-side redirect behavior, not this internal client-side rewrite. Confidence: high · Verified: RFC 6797 §8.3 — URI Loading and Port Mapping

So aturan adalah blunt: HSTS melakukan tidak replace Anda server-side 301s. 301 adalah apa mesin pencari gunakan untuk memahami protocol move dan untuk consolidate sinyal (pengalihan permanen tidak mengurangi PageRank“301 and other permanent redirects don’t cause a loss in PageRank” (terjemahan) “Pengalihan 301 dan pengalihan permanen lainnya tidak mengurangi PageRank”, per Google). browser-hanya internal upgrade adalah sebuah pengguna-experience dan security layer pada top. Anda perlu keduanya, melakukan berbeda jobs:

  • 301 (server-side): untuk crawler, pengindeksan, dan tautan equity.
  • Internal 307-style upgrade (browser-side, dari HSTS): untuk returning humans dan SSL-stripping protection — tepat status representation varies oleh client/alat.

apa pun guide itu tells Anda HSTS “handles the redirect so you can drop your 301” (terjemahan) “menangani redirect so Anda dapat drop Anda 301” adalah wrong di sebuah cara itu akan diam-diam cost Anda.

HSTS preload: near-permanent versi

max-age melindungi returning pengunjung, tetapi ini memiliki sebuah bootstrap masalah: sebuah pertama-time pengunjung siapa memiliki tidak pernah diterima Anda header adalah masih exposed pada itu awal permintaan. Preload solves ini oleh hardcoding Anda domain ke browser’s sumber itself, so browser knows Anda’re HTTPS-hanya sebelum ini memiliki ever connected.

Anda opt di hstspreload.org. requirements adalah tepat:

  1. “Serve a valid certificate.” (terjemahan) “sajikan valid certificate.”
  2. “Redirect from HTTP to HTTPS on the same host, if you are listening on port 80.” (terjemahan) “Redirect dari HTTP untuk HTTPS pada yang sama host, jika Anda adalah listening pada port 80.”
  3. “Serve all subdomains over HTTPS” (terjemahan) “sajikan semua subdomains di atas HTTPS” — including di particular www subdomain jika sebuah DNS record ada.
  4. pada base domain’s HTTPS respons, sebuah HSTS header di mana “the max-age must be at least 31536000 seconds (1 year),” (terjemahan)max-age harus menjadi setidaknya 31536000 seconds (1 tahun),” “the includeSubDomains directive must be specified,” (terjemahan)includeSubDomains directive harus menjadi specified,” dan “the preload directive must be specified.” (terjemahan)preload directive harus menjadi specified.” (hstspreload.org)

itu’s mengapa dua-tahun contoh di atas (max-age=63072000; includeSubDomains; preload) adalah shape orang submit — note ini adalah tepat submission requirements sebagai published oleh hstspreload.org; treat them sebagai saat ini bar, tidak sebuah permanent constant, dan re-periksa langsung halaman sebelum Anda submit.

ini helps untuk pertahankan four distinct status straight, since orang conflate them constantly:

Stateapa sebenarnya benar
Token presentAnda header mencakup preload. ini adalah sebuah flag hanya — ini melakukan tidak ada apa pun oleh itself dan tidak put Anda pada apa pun list.
EligibleAnda situs memenuhi semua four hstspreload.org requirements di atas (cert, redirect, subdomains, header shape). masih tidak pada list.
Submitted / pendingAnda’ve submitted di hstspreload.org dan ini adalah queued untuk inclusion di sebuah upcoming browser rilis. Belum enforced untuk pengguna nyata.
Sebenarnya listeddomain adalah baked ke sebuah diberikan browser’s shipped bangun. Enforcement hanya ada untuk pengguna pada itu bangun — rollout tidak instant atau universal di seluruh browser.

Removal berjalan yang sama four status di reverse, dan hanya sebagai slowly: menghapus preload directive dari Anda header membuat Anda eligible untuk removal form, lalu submission adalah pending, dan domain tetap enforced untuk apa pun pengguna pada sebuah browser bangun itu masih ships ini — until itu bangun cycles out.

Now bagian itu turns preload ke sebuah satu-cara door. dari submission situs itself: “Be aware that inclusion in the preload list cannot easily be undone. Domains can be removed, but it takes months for a change to reach users with a Chrome update and we cannot make guarantees about other browsers.” (terjemahan) “menjadi aware itu inclusion di preload list cannot easily menjadi undone. Domains dapat menjadi dihapus, tetapi ini takes months untuk sebuah perubahan untuk reach pengguna dengan sebuah Chrome perbarui dan kami cannot membuat jaminan tentang lainnya browser.” (hstspreload.org). dan -nya own advice: “Don’t request inclusion unless you’re sure that you can support HTTPS for your entire site and all its subdomains in the long term.” (terjemahan) “jangan permintaan inclusion unless Anda’re sure itu Anda dapat mendukung HTTPS untuk Anda entire situs dan semua -nya subdomains di panjang istilah.”

Practical translation: preload adalah sebuah genuinely great security posture, tetapi jika Anda ever perlu untuk sajikan apa pun — sebuah legacy subdomain, sebuah acquired brand, sebuah internal alat — di atas plain HTTP again, Anda’re stuck menunggu pada browser rilis cycles untuk reach setiap pengguna. Kinsta’s guide puts operational reality plainly: ini dapat menjadi sebuah difficult dan time-consuming proses untuk mendapatkan Anda domain dihapus. Treat preload sebagai permanent.

Mengapa HSTS adalah designed untuk hurt ketika hal break

HSTS’s strictness adalah tidak sebuah bug — ini adalah entire security jaminan. web.dev spells out tradeoff: “Clients that have listed your site as a known HSTS Host are likely to hard-fail if your site ever has an error in its TLS configuration, (such as an expired certificate). HSTS is explicitly designed this way to ensure that network attackers can’t trick clients into accessing the site without HTTPS.” (terjemahan) “Clients itu memiliki listed Anda situs sebagai sebuah known HSTS Host adalah mungkin untuk hard-fail jika Anda situs ever memiliki sebuah error di -nya TLS configuration, (such sebagai sebuah expired certificate). HSTS adalah explicitly designed ini cara untuk ensure itu network attackers dapat’t trick clients ke accessing situs tanpa HTTPS.” (web.dev).

conclusion Google draws adalah kalimat I’d tattoo pada anyone tentang untuk flip ini pada: “Don’t enable HSTS until you’re certain your site operation is robust enough to avoid ever deploying HTTPS with certificate validation errors.” (terjemahan) “jangan enable HSTS until Anda’re certain Anda situs operation adalah robust cukup untuk hindari ever deploying HTTPS dengan certificate validation errors.” (web.dev).

“Hard-fail” (terjemahan) “Hard-fail” berarti persis itu: Tidak “proceed anyway” (terjemahan) “proceed anyway” tautan, Tidak click-melalui. pada sebuah wajar HTTPS halaman, sebuah expired cert throws sebuah scary interstitial itu sebuah determined pengguna dapat bypass. pada sebuah HSTS host, browser refuses outright. So failure mode dari sebuah missed certificate renewal perubahan category — dari “traffic dips because people are scared off” (terjemahan) “traffic dips karena orang adalah scared off” untuk “the site is unreachable for every returning visitor.” (terjemahan) “ situs adalah unreachable untuk setiap returning pengunjung.”

dunia nyata lockout scenarios

cara HSTS bites dalam praktik hampir selalu trace back untuk includeSubDomains atau preload getting ahead dari Anda sebenarnya HTTPS coverage:

  • ** forgotten subdomain.** Anda set includeSubDomains pada example.com, tetapi legacy.example.com (sebuah old app, sebuah status halaman, sebuah vendor alat) hanya speaks HTTP atau memiliki sebuah cert itu tidak cover ini. setiap browser itu saw header now refuses untuk muat itu subdomain. Tidak ada apa pun changed pada itu server — policy reached down dan broke ini.
  • ** wildcard-cert kesenjangan.** sebuah *.example.com wildcard covers foo.example.com tetapi tidak foo.bar.example.com (sebuah wildcard adalah satu DNS label deep). jika sebuah deeper subdomain relies pada HTTP atau sebuah mismatched cert, includeSubDomains locks ini out.
  • ** expired cert pada sebuah HSTS host.** Renewal automation fails, cert lapses, dan alih-alih sebuah bypassable warning Anda mendapatkan sebuah situs itu’s down untuk everyone milik siapa browser remembers Anda policy — until Anda mendapatkan sebuah valid cert back dan mereka reconnect dan menerima sebuah fresh secure respons. tidak ada lebih cepat override.
  • Preload regret. Anda preloaded, lalu sebuah business perlu forces sebuah HTTP-hanya service di bawah domain. Rolling itu back adalah dua terpisah, non-instant jobs, tidak satu: serving max-age=0 di atas HTTPS hanya clears learned policy untuk clients itu reconnect sebelum mereka old max-age akan’ve expired anyway, sementara getting domain out dari preload list adalah sebuah distinct submission itu masih takes browser rilis cycles — months — untuk reach pengguna, independent dari apa pun Anda perubahan pada Anda server.
  • Local dev / staging collisions. Preloading example.com dengan includeSubDomains dapat membuat dev.example.com atau sebuah localhost-style internal host di bawah yang sama apex refuse HTTP, breaking local workflows di surprising cara.

None dari ini adalah alasan untuk hindari HSTS. mereka’re alasan untuk stage ini: pendek max-age pertama, tambahkan includeSubDomains hanya setelah auditing setiap subdomain, dan reserve preload untuk ketika Anda’re certain.

HSTS adalah tidak sebuah peringkat play (dan tidak touch canonicalization)

untuk menjadi jelas pada SEO framing: HSTS adalah tidak sebuah sinyal peringkat. HTTPS itself adalah sebuah dengan sengaja tiny satu — Google called ini sebuah “very lightweight signal” (terjemahan) “very lightweight sinyal” affecting fewer daripada 1% dari kueri — dan HSTS adalah sebuah layer pada top dari HTTPS, tidak sebuah terpisah peringkat input. ini juga tidak secara langsung control canonicalization atau pengindeksan. Google’s own documentation adalah lebih spesifik daripada sebuah flat “doesn’t matter,” (terjemahan) “tidak penting,” though: Google prefers HTTPS sebagai canonical di atas sebuah equivalent HTTP halaman except ketika ada sebuah tidak valid certificate, insecure halaman dependencies, sebuah HTTPS halaman itu redirects untuk HTTP, atau sebuah HTTP rel="canonical" tag (Google: consolidating duplicate URLs). HSTS cannot perbaiki atau override apa pun dari itu. ini adalah sebuah browser-side policy dengan Tidak influence pada Google’s canonicalization logic — sebuah buruk certificate atau sebuah rusak redirect chain dapat masih push Google toward sebuah HTTP canonical regardless dari apa Anda HSTS header says. Canonicalization adalah driven oleh Anda 301s, Anda certificate, Anda rel="canonical", dan Anda tautan internal — HSTS earns -nya place untuk security, pengguna trust, dan closing SSL-stripping kesenjangan — melakukan ini untuk itu alasan, pertahankan 301s dan certificate genuinely solid, dan Anda’ll tidak pernah see HSTS itself pada sebuah rankings report either cara.

jika Anda’re berjalan lebih luas HTTP→HTTPS move, HSTS adalah terakhir hal Anda switch pada, tidak pertama — ini belongs setelah migration memiliki settled, sebagai bagian dari wider situs migration discipline.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.