HSTS: HTTP Strict Transport Security cho SEO

Điều gì HSTS thực ra làm, đó Strict-Transport-Security header syntax (max-age, includeSubDomains, preload), đó trình duyệt-chỉ internal chuyển hướng các crawler không bao giờ see, vì sao điều này không replace của bạn 301s, và cách preload có thể lock bạn trong — từ Patrick Stox.

Xuất bản lần đầu: 3 thg 7, 2026 · Cập nhật lần cuối: 8 thg 8, 2026 · Advanced
Ngôn ngữ
1 tín hiệu bằng chứng trên trang này

HSTS (HTTP Strict Transport Security) là một Strict-Transport-Security header phản hồi — honored chỉ khi điều này arrives over một secure connection — đó tells một trình duyệt để luôn dùng HTTPS cho của bạn domain going forward, closing đó insecure khoảng trống đó một new khách truy cập đầu tiên yêu cầu vẫn làm over HTTP trước của bạn 301 fires. đây là một trình duyệt-layer, theo-client policy on top of máy chủ của bạn-side các chuyển hướng, không một replacement: RFC 6797 có đó trình duyệt rewrite đó URI để HTTPS internally trước bất kỳ yêu cầu goes out (thường shown as an internal 307-style chuyển hướng, though đó RFC không mandate một cụ thể mã trạng thái), so không máy chủ bao giờ sees đó HTTP form và các crawler vẫn cần của bạn real 301 để understand đó move và carry giá trị liên kết. Đó header có three directives — max-age (bắt buộc), includeSubDomains, và preload. Preload bakes của bạn domain vào đó trình duyệt itself qua hstspreload.org (requiring max-age of ít nhất một năm, includeSubDomains, và đó preload flag) và là close để irreversible — removal là một tách biệt submission đó takes months để reach người dùng. HSTS là cũng có chủ ý unforgiving: một trình duyệt đó knows bạn as an HSTS host sẽ hard-fail với không nhấp-qua nếu của bạn certificate bao giờ breaks. So enable điều này chỉ khi HTTPS là genuinely solid trên mỗi subdomain, và treat preload as một một-way door.

TL;DR — HSTS là đó Strict-Transport-Security header phản hồi, honored chỉ khi một trình duyệt nhận điều này over một secure connection, và stored theo-client as tương lai policy cho đó host. Điều này closes đó “first request problem” (bản dịch) «đầu tiên yêu cầu vấn đề» một 301 alone leaves open: đó ban đầu HTTP yêu cầu từ một new khách truy cập là insecure until đó chuyển hướng fires, và đó là đó window an SSL-stripping attacker wants. Three directives: max-age (bắt buộc, seconds), includeSubDomains, preload. Khi một trình duyệt enforces HSTS điều này rewrites đó URI để HTTPS internally, trước bất kỳ yêu cầu reaches một máy chủ — RFC 6797 không mandate một cụ thể mã trạng thái cho đó rewrite, though tools thường surface điều này as một 307 — so của bạn máy chủ-side 301s là vẫn mandatory cho các công cụ tìm kiếm và giá trị liên kết; HSTS là on top of them, không thay vì. Preload bakes của bạn domain vào đó trình duyệt qua hstspreload.org (requires max-age ≥ 31536000, includeSubDomains, và preload) và là close để irreversible — removal là một tách biệt submission đó takes months để reach người dùng. Và HSTS là designed để hard-fail on bất kỳ cert lỗi, so enable điều này chỉ khi HTTPS là robust trên mỗi subdomain.

HTTPS hub introduces HSTS as trình duyệt-layer protection đó sits bên cạnh của bạn 301s. điều này trang là deep dive: chính xác header syntax, internal chuyển hướng đó trips SEOs lên, preload list near-irreversibility, và thực-world ways HSTS locks mọi người out.

vấn đề HSTS thực ra solves: đầu tiên yêu cầu

Picture properly migrated trang web. mỗi http:// URL 301-các chuyển hướng để của nó https:// twin, certificate là hợp lệ, canonicals point để HTTPS. Looks airtight. nó không phải, quite.

Khi brand-new khách truy cập types yoursite.com (không scheme) hoặc clicks old http://yoursite.com link, trình duyệt đầu tiên yêu cầu goes out over đơn giản HTTP. của bạn máy chủ các câu trả lời với 301, và mỗi yêu cầu sau khi Đó là secure. nhưng đó một ban đầu round-trip happened trong clear — và đó chính xác window SSL-stripping attacker on giống nhau network wants. họ intercept HTTP yêu cầu, giữ victim on HTTP trong khi họ proxy HTTPS để của bạn máy chủ, và đọc hoặc rewrite mọi thứ.

HSTS eliminates đó window cho anyone ai có visited trước. web.dev là trực tiếp về đó 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.” (bản dịch) «Dùng Strict Transport Security để yêu cầu client luôn kết nối đến máy chủ của bạn bằng HTTPS, ngay cả khi sau an http:// reference. Cách này ngăn các cuộc tấn công như SSL Stripping và tránh chi phí một vòng khứ hồi của chuyển hướng 301. » (web.dev). Đó cuối cùng clause matters cho performance cũng: một returning trình duyệt skips đó HTTP→HTTPS round-trip hoàn toàn. 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

Hai boundary conditions worth là precise về. đầu tiên, HSTS là stored, theo-client policy — nó lives trong đó một trình duyệt own state cho đó host, learned từ header delivered over secure connection; giống nhau header được gửi on HTTP phản hồi là đã bỏ qua outright ( attacker ai có thể inject hoặc strip các header on đơn giản HTTP có thể nếu không neutralize nó), và client đó có không bao giờ đã nhận nó — fresh install, khác trình duyệt, crawler — có không policy để enforce. thứ hai, rewrite là scheme-và-port aware: implicit port 80 yêu cầu becomes implicit port 443 yêu cầu, nhưng nếu gốc URI named rõ ràng non-default port, trình duyệt giữ đó giống nhau port number và đơn giản contacts nó over HTTPS thay vì.

header syntax

HSTS là một phản hồi header với lên để three directives. Theo MDN, forms là:

Strict-Transport-Security: max-age=31536000
Strict-Transport-Security: max-age=31536000; includeSubDomains
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
  • max-age=<seconds> — bắt buộc. “The time, in seconds, that the browser should remember that a host is only to be accessed using HTTPS” (bản dịch) «Thời gian tính bằng giây mà trình duyệt phải ghi nhớ rằng một host chỉ được truy cập bằng HTTPS» (MDN). 31536000 là một năm; 63072000 là hai. Đó clock resets on mỗi phản hồi đó carries đó header, so an active site continually renews của nó policy. Này là relative, theo-client state: đơn giản removing đó header không immediately clear điều này — một trình duyệt đó đã learned đó policy giữ enforcing điều này until của nó stored max-age chạy out. Để turn HSTS off cho clients đó đã learned điều này, bạn có để actively serve max-age=0 over một secure phản hồi; đó trình duyệt thì forgets đó policy on của nó tiếp theo secure visit. (max-age=0 clears một learned policy chỉ — điều này không xóa một domain từ đó tách biệt preload list.)
  • includeSubDomains — tùy chọn. “If this directive is specified, the HSTS policy applies to all subdomains of the host’s domain as well” (bản dịch) «Nếu chỉ thị này được chỉ định, chính sách HSTS cũng áp dụng cho mọi subdomain của miền của host.» (MDN). Powerful và dangerous trong equal đo lường — see đó lockout scenarios dưới.
  • preload — tùy chọn. MỘT flag đó các tín hiệu của bạn intent để là on đó trình duyệt preload list. Điều này làm không có gì on của nó own; đây là một prerequisite cho submitting để 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

Đó behavior, again từ 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.” (bản dịch) «Trước loading an http URL, đó trình duyệt kiểm tra đó domain name so với của nó HSTS hosts list. Nếu đó domain name là một case insensitive match cho an HSTS host hoặc là một subdomain of một đó specified includeSubDomains, thì đó trình duyệt replaces đó URL scheme với https

internal upgrade các crawler không bao giờ see (Đây là SEO crux)

Ở đây single phần lớn misunderstood điều về HSTS, và reason nó có thể’t replace của bạn các chuyển hướng.

Khi trình duyệt upgrades http:// yêu cầu dưới HSTS, nó rewrites URI để HTTPS internally, trước khi bất kỳ network yêu cầu là đã làm — RFC 6797 requires scheme substitution itself nhưng không mandate particular mã trạng thái cho nó (RFC 6797 §8,3), so được cho trình duyệt hoặc crawling tool có thể represent đó internal step tuy nhiên nó likes — nhiều display nó as internal 307, nhưng đó client/tool-cụ thể, không giao thức bảo đảm. Điều gì matters Đối với SEO là simpler và holds regardless của label: không máy chủ là contacted cho HTTP version, so không crawler bao giờ sees nó. Googlebot và Bingbot không carry learned HSTS policy khoảng way returning human Chrome làm — họ hit của bạn máy chủ fresh, và Điều gì họ cần để see có thực, máy chủ-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 đó rule là blunt: HSTS không replace máy chủ của bạn-side 301s. Đó 301 là điều gì các công cụ tìm kiếm dùng để understand đó giao thức move và để consolidate các tín hiệu (301 and other permanent redirects don’t cause a loss in PageRank, theo Google). Đó trình duyệt-chỉ internal upgrade là một người dùng-experience và security layer on top. Bạn cần cả hai, đang làm khác nhau jobs:

  • 301 (máy chủ-side): cho các crawler, lập chỉ mục, và giá trị liên kết.
  • Internal 307-style upgrade (trình duyệt-side, từ HSTS): cho returning humans và SSL-stripping protection — chính xác status representation varies by client/tool.

Bất kỳ hướng dẫn đó tells bạn HSTS “handles the redirect so you can drop your 301” (bản dịch) «xử lý đó chuyển hướng so bạn có thể drop của bạn 301» là sai trong một way đó sẽ âm thầm cost bạn.

HSTS preload: near-vĩnh viễn version

max-age bảo vệ returning khách truy cập, nhưng nó có bootstrap vấn đề: đầu tiên-time khách truy cập ai có không bao giờ đã nhận của bạn header là vẫn exposed on đó ban đầu yêu cầu. Preload solves nó by hardcoding của bạn domain vào trình duyệt nguồn itself, so trình duyệt knows bạn’re HTTPS-chỉ trước khi nó có bao giờ connected.

bạn opt trong tại hstspreload.org. requirements là chính xác:

  1. “Serve a valid certificate.” (bản dịch) «Phục vụ một chứng chỉ hợp lệ.»
  2. “Redirect from HTTP to HTTPS on the same host, if you are listening on port 80.” (bản dịch) «Chuyển hướng từ HTTP để HTTPS on đó giống nhau host, nếu bạn là listening on port 80.»
  3. “Serve all subdomains over HTTPS” (bản dịch) «Serve all subdomains over HTTPS» — including trong particular đó www subdomain nếu một DNS record tồn tại.
  4. On đó base domain HTTPS phản hồi, an HSTS header nơi “the max-age must be at least 31536000 seconds (1 year),” (bản dịch) «đó max-age phải được ít nhất 31536000 seconds (1 năm),» “the includeSubDomains directive must be specified,” (bản dịch) «đó includeSubDomains directive phải được specified,»“the preload directive must be specified.” (bản dịch) «đó preload directive phải được specified.» (hstspreload.org)

Đó là lý làm hai-năm ví dụ trên (max-age=63072000; includeSubDomains; preload) là shape mọi người submit — note những điều này là chính xác submission requirements as published by hstspreload.org; treat them as hiện tại bar, không vĩnh viễn constant, và re-kiểm tra trực tiếp trang trước khi bạn submit.

nó helps để giữ four distinct trạng thái straight, since mọi người conflate them constantly:

StateĐiều gì thực ra đúng
Token presentcủa bạn header bao gồm preload. Đây là flag chỉ — nó làm không có gì by itself và không put bạn on bất kỳ list.
Eligiblecủa bạn trang web đáp ứng all four hstspreload.org requirements trên (cert, chuyển hướng, subdomains, header shape). vẫn không on list.
Được gửi / pendingbạn’ve được gửi tại hstspreload.org và nó queued cho inclusion trong upcoming trình duyệt phát hành. không tuy vậy enforced cho thực người dùng.
thực ra listeddomain là baked vào được cho trình duyệt shipped xây dựng. Enforcement chỉ tồn tại cho người dùng on đó xây dựng — rollout không phải instant hoặc universal trên các trình duyệt.

Removal chạy giống nhau four trạng thái trong reverse, và chỉ as slowly: removing preload directive từ của bạn header làm bạn eligible cho removal form, sau đó submission là pending, và domain vẫn giữ enforced cho bất kỳ người dùng on trình duyệt xây dựng đó vẫn ships nó — cho đến khi đó xây dựng cycles out.

Hiện tại đó part đó turns preload vào một một-way door. Từ đó submission site 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.” (bản dịch) «Hãy lưu ý rằng không dễ hoàn tác việc đưa vào danh sách preload. Có thể xóa các miền, nhưng một thay đổi mất nhiều tháng mới đến được người dùng qua bản cập nhật Chrome, và chúng tôi không thể bảo đảm về các trình duyệt khác.» (hstspreload.org). Và của nó 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.” (bản dịch) «không yêu cầu inclusion trừ khi bạn là sure đó bạn có thể hỗ trợ HTTPS cho của bạn entire site và all của nó subdomains trong đó dài term.»

Practical translation: preload là genuinely great security posture, nhưng nếu bạn bao giờ cần để phục vụ bất cứ điều gì — legacy subdomain, acquired brand, internal tool — over đơn giản HTTP again, bạn’re stuck đang chờ on trình duyệt phát hành cycles để reach mỗi người dùng. Kinsta hướng dẫn diễn đạt operational reality plainly: nó có thể là difficult và time-consuming xử lý để nhận của bạn domain đã xóa. Treat preload as vĩnh viễn.

Vì sao HSTS là designed để hurt Khi điều break

HSTS strictness không phải một bug — đây là đó entire security bảo đảm. 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.” (bản dịch) «Các client đã liệt kê trang web của bạn là một HSTS Host đã biết có khả năng thất bại cứng nếu trang web gặp lỗi trong cấu hình TLS (chẳng hạn chứng chỉ hết hạn). HSTS được thiết kế rõ ràng như vậy để bảo đảm kẻ tấn công mạng không thể lừa client truy cập trang web mà không có HTTPS.» (web.dev).

Đó conclusion Google draws là đó sentence I’d tattoo on anyone về để flip này on: “Don’t enable HSTS until you’re certain your site operation is robust enough to avoid ever deploying HTTPS with certificate validation errors.” (bản dịch) «Không bật HSTS cho đến khi bạn chắc chắn hoạt động của trang web đủ ổn định để không bao giờ triển khai HTTPS với lỗi xác thực chứng chỉ.» (web.dev).

“Hard-fail” có nghĩa là chính xác đó: không “proceed anyway” (bản dịch) «proceed anyway» link, không nhấp-qua. On một thông thường HTTPS trang, an expired cert throws một scary interstitial đó một determined người dùng có thể bypass. On an HSTS host, đó trình duyệt từ chối outright. So đó chế độ lỗi of một missed certificate renewal thay đổi category — từ “traffic dips because people are scared off” (bản dịch) «traffic dips vì mọi người là scared off» để “the site is unreachable for every returning visitor.” (bản dịch) «đó site là unreachable cho mỗi returning khách truy cập.»

thực-world lockout scenarios

ways HSTS bites trên thực tế gần như luôn trace lại để includeSubDomains hoặc preload getting ahead của bạn thực tế HTTPS coverage:

  • ** forgotten subdomain.** bạn đặt includeSubDomains on example.com, nhưng legacy.example.com ( old app, status trang, vendor tool) chỉ speaks HTTP hoặc có cert đó không cover nó. mỗi trình duyệt đó saw header hiện tại từ chối để load đó subdomain. Không có gì changed on đó máy chủ — policy reached xuống và broke nó.
  • ** wildcard-cert khoảng trống.** *.example.com wildcard covers foo.example.com nhưng không foo.bar.example.com ( wildcard là một DNS label deep). nếu deeper subdomain relies on HTTP hoặc mismatched cert, includeSubDomains locks nó out.
  • ** expired cert on HSTS host.** Renewal automation fails, cert lapses, và thay vì bypassable warning bạn nhận trang web đó xuống cho mọi người whose trình duyệt remembers của bạn policy — cho đến khi bạn nhận hợp lệ cert lại họ reconnect và nhận fresh secure phản hồi. có không nhanh hơn override.
  • Preload regret. bạn preloaded, sau đó business cần forces HTTP-chỉ service dưới domain. Rolling đó lại là hai tách biệt, non-instant jobs, không một: serving max-age=0 over HTTPS chỉ clears learned policy cho clients đó reconnect trước khi của họ old max-age sẽ’ve expired anyway, trong khi getting domain out của preload list là distinct submission đó vẫn takes trình duyệt phát hành cycles — months — để reach người dùng, independent của bất cứ điều gì bạn thay đổi on của bạn máy chủ.
  • Local dev / staging collisions. Preloading example.com với includeSubDomains có thể làm dev.example.com hoặc localhost-style internal host dưới giống nhau apex từ chối HTTP, breaking local workflows trong surprising ways.

None của những điều này là reasons để tránh HSTS. họ’re reasons để stage nó: ngắn max-age đầu tiên, thêm includeSubDomains chỉ sau khi auditing mỗi subdomain, và reserve preload cho Khi bạn’re certain.

HSTS không phải xếp hạng play (và không touch canonicalization)

Để là clear on đó SEO cách diễn đạt: HSTS không phải một tín hiệu xếp hạng. HTTPS itself là một có chủ ý tiny một — Google called điều này một “very lightweight signal” (bản dịch) «very lightweight tín hiệu» affecting ít hơn 1% of các truy vấn — và HSTS là một layer on top of HTTPS, không một tách biệt xếp hạng input. Điều này cũng không trực tiếp control canonicalization hoặc lập chỉ mục. Google own tài liệu là hơn cụ thể hơn một flat “doesn’t matter,” (bản dịch) «không quan trọng,» though: Google prefers HTTPS as canonical over an tương đương HTTP trang except khi có an không hợp lệ certificate, insecure trang dependencies, an HTTPS trang đó các chuyển hướng để HTTP, hoặc an HTTP rel="canonical" tag (Google: consolidating duplicate URLs). HSTS không thể cách sửa hoặc override bất kỳ of đó. đây là một trình duyệt-side policy với không influence on Google canonicalization logic — một bad certificate hoặc một hỏng chuyển hướng chain có thể vẫn push Google toward an HTTP canonical regardless of điều gì của bạn HSTS header says. Canonicalization là driven by của bạn 301s, của bạn certificate, của bạn rel="canonical", và của bạn liên kết nội bộ — HSTS earns của nó place cho security, người dùng trust, và closing đó SSL-stripping khoảng trống — làm điều này cho những reasons, giữ của bạn 301s và certificate genuinely solid, và bạn’ll không bao giờ see HSTS itself on một thứ hạng báo cáo either way.

nếu bạn’re đang chạy rộng hơn HTTP→HTTPS move, HSTS là cuối cùng điều bạn chuyển on, không đầu tiên — nó belongs sau khi migration có settled, as part của wider trang web migration discipline.

Add an expert note

Pin an expert quote

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