HSTS: HTTP Katı Taşıma Güvenliği SEO İçin

HSTS'nin gerçekte ne yaptığı, Strict-Transport-Security başlık sözdizimi (max-age, includeSubDomains, preload), tarayıcıya özel iç yönlendirme (tarayıcıların asla görmediği), kalıcı yönlendirmelerin yerini neden almadığı ve preload'ın sizi nasıl kilitleyebileceği — Patrick Stox'tan.

İlk yayın tarihi: 3 Tem 2026 · Son güncelleme: 8 Ağu 2026 · Advanced
Diller
Bu sayfada 1 kanıt sinyali

HSTS (HTTP Katı Taşıma Güvenliği), yalnızca güvenli bir bağlantı üzerinden geldiğinde onurlandırılan bir Strict-Transport-Security yanıt başlığıdır — tarayıcıya, alan adınız için bundan sonra her zaman HTTPS kullanmasını söyler ve yeni bir ziyaretçinin ilk isteğinin 301'iniz tetiklenmeden önce HTTP üzerinden yaptığı güvensiz boşluğu kapatır. Sunucu tarafı yönlendirmelerinizin üzerinde, tarayıcı katmanında, istemci başına uygulanan bir politikadır; bir yedek değildir: RFC 6797, tarayıcının herhangi bir istek dışarı çıkmadan önce URI'yi dahili olarak HTTPS'ye yeniden yazmasını sağlar (genellikle dahili 307 tarzı bir yönlendirme olarak gösterilir, ancak RFC belirli bir durum kodu zorunlu kılmaz), böylece sunucu HTTP biçimini asla görmez ve tarayıcıların hareketi anlaması ve bağlantı değerini taşıması için yine de gerçek 301'inize ihtiyaç duyarlar. Başlık üç yönergeye sahiptir: max-age (zorunlu), includeSubDomains ve preload. Preload, alan adınızı hstspreload.org aracılığıyla tarayıcının kendisine yerleştirir (en az bir yıl max-age, includeSubDomains ve preload bayrağı gerektirir) ve neredeyse geri alınamaz — kaldırma, kullanıcılara ulaşması aylar süren ayrı bir başvurudur. HSTS ayrıca kasıtlı olarak affetmez: sizi bir HSTS ana bilgisayarı olarak tanıyan bir tarayıcı, sertifikanız bozulursa tıklama geçişi olmadan sert bir şekilde başarısız olur. Bu nedenle, yalnızca HTTPS her alt alan adında gerçekten sağlam olduğunda etkinleştirin ve preload'ı tek yönlü bir kapı olarak ele alın.

TL;DR — HSTS is the Strict-Transport-Security response header, honored only when a browser receives it over a secure connection, and stored per-client as future policy for that host. It closes the “first request problem” a 301 alone leaves open: the initial HTTP request from a new visitor is insecure until the redirect fires, and that’s the window an SSL-stripping attacker wants. Three directives: max-age (required, seconds), includeSubDomains, preload. When a browser enforces HSTS it rewrites the URI to HTTPS internally, before any request reaches a server — RFC 6797 doesn’t mandate a specific status code for that rewrite, though tools often surface it as a 307 — so your server-side 301s are still mandatory for search engines and link equity; HSTS is on top of them, not instead. Preload bakes your domain into the browser via hstspreload.org (requires max-age ≥ 31536000, includeSubDomains, and preload) and is close to irreversible — removal is a separate submission that takes months to reach users. And HSTS is designed to hard-fail on any cert error, so enable it only when HTTPS is robust across every subdomain.

The HTTPS hub introduces HSTS as a browser-layer protection that sits on top of your 301s. This page is the deep dive: the exact header syntax, the internal redirect that trips SEOs up, the preload list’s near-irreversibility, and the real-world ways HSTS locks people out.

HSTS’nin gerçekten çözdüğü sorun: ilk istek

Düzgün bir şekilde taşınmış bir site hayal edin. Her http:// URL’si https:// karşılığına 301 yönlendirir, sertifika geçerlidir, canonical’lar HTTPS’yi işaret eder. Hava geçirmez görünüyor. Pek de değil.

Yepyeni bir ziyaretçi yoursite.com yazdığında (şema olmadan) veya eski bir http://yoursite.com bağlantısını tıkladığında, tarayıcının ilk isteği düz HTTP üzerinden gider. Sunucunuz 301 ile yanıt verir ve sonraki her istek güvenlidir. Ancak bu tek ilk gidiş-dönüş açıkta gerçekleşti — ve aynı ağdaki bir SSL soyma saldırganının istediği pencere tam olarak budur. HTTP isteğini yakalarlar, sunucunuza HTTPS’yi proxy’lerken kurbanı HTTP’de tutarlar ve her şeyi okur veya yeniden yazarlar.

HSTS eliminates that window for anyone who has visited before. web.dev is direct about the 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.” (web.dev). That last clause matters for performance too: a returning browser skips the 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

Kesin olmaya değer iki sınır koşulu. İlk olarak, HSTS saklanan, istemci başına politikadır — güvenli bir bağlantı üzerinden iletilen bir başlıktan öğrenilen, o ana bilgisayar için o tek tarayıcının kendi durumunda yaşar; bir HTTP yanıtında gönderilen aynı başlık tamamen yok sayılır (düz HTTP’ye başlık enjekte edebilen veya kaldırabilen bir saldırgan aksi takdirde onu etkisiz hale getirebilir) ve onu hiç almamış bir istemci — yeni bir kurulum, farklı bir tarayıcı, bir tarayıcı — uygulanacak bir politikaya sahip değildir. İkinci olarak, yeniden yazma şema ve bağlantı noktasına duyarlıdır: örtük bir 80 numaralı bağlantı noktası isteği, örtük bir 443 numaralı bağlantı noktası isteği olur, ancak orijinal URI açıkça varsayılan olmayan bir bağlantı noktası adlandırdıysa, tarayıcı aynı bağlantı noktası numarasını korur ve bunun yerine HTTPS üzerinden bağlanır.

Başlık sözdizimi

HSTS, en fazla üç yönergeye sahip tek bir yanıt başlığıdır. MDN başına formlar şunlardır:

Strict-Transport-Security: max-age=31536000
Strict-Transport-Security: max-age=31536000; includeSubDomains
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
  • max-age=<seconds> — zorunlu. “Tarayıcının, bir ana bilgisayara yalnızca HTTPS üzerinden erişilebileceğini hatırlaması gereken süre, saniye cinsinden” (MDN). 31536000 bir yıl; 63072000 iki yıldır. Saat, başlığı taşıyan her yanıtta sıfırlanır, bu nedenle aktif bir site politikasını sürekli yeniler. Bu, istemci başına göreli bir durumdur: başlığı kaldırmak onu hemen temizlemez — politikayı zaten öğrenmiş bir tarayıcı, saklanan max-age süresi dolana kadar onu uygulamaya devam eder. HSTS’yi zaten öğrenmiş istemciler için kapatmak istiyorsanız, güvenli bir yanıt üzerinden aktif olarak max-age=0 sunmanız gerekir; tarayıcı bir sonraki güvenli ziyaretinde politikayı unutur. (max-age=0 yalnızca öğrenilmiş bir politikayı temizler — ayrı ön yükleme listesinden bir alan adını kaldırmaz.)
  • includeSubDomains — isteğe bağlı. “Bu yönerge belirtilirse, HSTS politikası ana bilgisayarın alan adının tüm alt alan adları için de geçerlidir” (MDN). Eşit ölçüde güçlü ve tehlikeli — aşağıdaki kilitlenme senaryolarına bakın.
  • preload — isteğe bağlı. Tarayıcı ön yükleme listesinde yer alma niyetinizi bildiren bir bayrak. Kendi başına hiçbir şey yapmaz; hstspreload.org’a gönderim için bir ön koşuldur. 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

Davranış, yine MDN’den: “Bir http URL’sini yüklemeden önce tarayıcı, alan adını HSTS ana bilgisayar listesine karşı kontrol eder. Alan adı, bir HSTS ana bilgisayarıyla büyük/küçük harf duyarlı olmayan bir eşleşmeyse veya includeSubDomains belirten bir ana bilgisayarın alt alan adıysa, tarayıcı URL şemasını https ile değiştirir.”

Dahili yükseltme tarayıcılarının asla görmediği şey (SEO’nun can alıcı noktası)

İşte HSTS hakkında en çok yanlış anlaşılan şey ve yönlendirmelerinizin yerini alamamasının nedeni.

Bir tarayıcı, HSTS altında bir http:// isteğini yükselttiğinde, herhangi bir ağ isteği yapılmadan önce URI’yi dahili olarak HTTPS’ye yeniden yazar — RFC 6797, şema değişiminin kendisini gerektirir ancak bunun için belirli bir durum kodu zorunlu kılmaz (RFC 6797 §8.3), bu nedenle belirli bir tarayıcı veya tarama aracı bu dahili adımı dilediği gibi temsil edebilir — çoğu bunu dahili bir 307 olarak görüntüler, ancak bu istemci/araca özgüdür, protokol garantisi değildir. SEO için önemli olan daha basittir ve etiketten bağımsız olarak geçerlidir: HTTP sürümü için hiçbir sunucuya başvurulmaz, bu nedenle hiçbir tarayıcı onu asla görmez. Googlebot ve Bingbot, geri dönen bir insanın Chrome’unun yaptığı gibi öğrenilmiş bir HSTS politikası taşımaz — sunucunuza taze olarak ulaşırlar ve orada görmeleri gereken şey gerçek, sunucu tarafı bir 301’dir. 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 the rule is blunt: HSTS does not replace your server-side 301s. The 301 is what search engines use to understand the protocol move and to consolidate signals (301 and other permanent redirects don’t cause a loss in PageRank, per Google). The browser-only internal upgrade is a user-experience and security layer on top. You need both, doing different jobs:

  • 301 (sunucu tarafı): tarayıcılar, dizinleme ve bağlantı değeri için.
  • Dahili 307 tarzı yükseltme (tarayıcı tarafı, HSTS’den): geri dönen insanlar ve SSL soyma koruması için — kesin durum temsili istemci/araca göre değişir.

HSTS’nin “yönlendirmeyi hallettiği için 301’inizi bırakabileceğinizi” söyleyen herhangi bir rehber, size sessizce maliyet çıkaracak şekilde yanlıştır.

HSTS ön yükleme: neredeyse kalıcı sürüm

max-age, geri dönen ziyaretçileri korur, ancak bir başlangıç sorunu vardır: başlığınızı hiç almamış ilk kez gelen bir ziyaretçi, o ilk istekte hâlâ korumasızdır. Preload, alan adınızı tarayıcının kaynağına sabit kodlayarak bunu çözer; böylece tarayıcı, daha önce hiç bağlanmamış olsa bile HTTPS-only olduğunuzu bilir.

hstspreload.org adresinden kaydolursunuz. Gereksinimler kesindir:

  1. “Serve a valid certificate.”
  2. “Redirect from HTTP to HTTPS on the same host, if you are listening on port 80.”
  3. “Serve all subdomains over HTTPS” — buna, bir DNS kaydı varsa özellikle www alt alan adı da dahildir.
  4. Temel alan adının HTTPS yanıtında, max-age en az 31536000 saniye (1 yıl) olmalıdır,” includeSubDomains yönergesi belirtilmelidir,” ve preload yönergesi belirtilmelidir.” şeklinde bir HSTS başlığı. (hstspreload.org)

Bu yüzden yukarıdaki iki yıllık örnek (max-age=63072000; includeSubDomains; preload) kişilerin gönderdiği biçimdir — bunların hstspreload.org tarafından yayınlanan tam gönderim gereksinimleri olduğunu unutmayın; bunları kalıcı bir sabit değil, güncel çıta olarak ele alın ve göndermeden önce canlı sayfayı yeniden kontrol edin.

İnsanlar bunları sürekli karıştırdığı için dört ayrı durumu netleştirmek yardımcı olur:

DurumGerçekte doğru olan
Belirteç mevcutBaşlığınız preload içeriyor. Bu yalnızca bir işarettir — tek başına hiçbir şey yapmaz ve sizi herhangi bir listeye koymaz.
UygunSitеniz yukarıdaki dört hstspreload.org gereksiniminin tümünü karşılıyor (sertifika, yönlendirme, alt alan adları, başlık biçimi). Yine de listede değilsiniz.
Gönderildi / bekliyorhstspreload.org adresine gönderdiniz ve yaklaşan bir tarayıcı sürümüne dahil edilmek üzere sıraya alındı. Gerçek kullanıcılar için henüz uygulanmıyor.
Gerçekten listelenmişAlan adı, belirli bir tarayıcının yayınlanan sürümüne gömülüdür. Uygulama yalnızca bu sürümdeki kullanıcılar için geçerlidir — dağıtım anlık veya tarayıcılar arasında evrensel değildir.

Kaldırma işlemi aynı dört durumu tersine ve aynı yavaşlıkta işletir: başlığınızdan preload yönergesini kaldırmak sizi kaldırma formuna uygun hale getirir, ardından gönderim bekliyor durumuna geçer ve alan adı, o sürüm döngüden çıkana kadar onu hâlâ yayınlayan bir tarayıcı sürümündeki herhangi bir kullanıcı için uygulanmaya devam eder.

Şimdi preload’u tek yönlü bir kapıya dönüştüren kısım. Gönderim sitesinin kendisinden: “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.” (hstspreload.org). Ve kendi tavsiyesi: “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.”

Pratik çeviri: preload gerçekten harika bir güvenlik duruşudur, ancak bir gün herhangi bir şeyi — eski bir alt alan adı, satın alınmış bir marka, dahili bir araç — düz HTTP üzerinden sunmanız gerekirse, her kullanıcıya ulaşmak için tarayıcı sürüm döngülerini beklemek zorunda kalırsınız. Kinsta’nın rehberi operasyonel gerçeği açıkça ortaya koyuyor: alan adınızı kaldırmanın zor ve zaman alıcı bir süreç olabileceğini. Preload’u kalıcı olarak kabul edin.

HSTS neden bir şeyler bozulduğunda can yakacak şekilde tasarlanmıştır

HSTS’nin katılığı bir hata değildir — tüm güvenlik garantisidir. web.dev takası şöyle açıklıyor: “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.” (web.dev).

Google’ın vardığı sonuç, bunu açacak herkesin koluna dövme yapacağım cümledir: “HSTS’yi, sitenizin operasyonunun sertifika doğrulama hatalarıyla HTTPS dağıtımından asla kaçınmayacak kadar sağlam olduğundan emin olana kadar etkinleştirmeyin.” (web.dev).

“Sert başarısızlık” tam olarak şu anlama gelir: “yine de devam et” bağlantısı yok, tıklayıp geçme yok. Normal bir HTTPS sayfasında, süresi dolmuş bir sertifika, kararlı bir kullanıcının atlayabileceği korkutucu bir ara sayfa gösterir. Bir HSTS ana bilgisayarında tarayıcı doğrudan reddeder. Bu nedenle, kaçırılan bir sertifika yenilemesinin başarısızlık modu kategori değiştirir — *“insanlar korktuğu için trafik düşüşleri”*nden *“site, geri dönen her ziyaretçi için erişilemez.”*e.

Gerçek dünyadan kilitlenme senaryoları

HSTS’nin pratikte ısırdığı yollar neredeyse her zaman includeSubDomains veya ön yüklemenin gerçek HTTPS kapsamınızın önüne geçmesine dayanır:

  • Unutulan alt alan adı. includeSubDomains üzerinde example.com ayarlarsınız, ancak legacy.example.com (eski bir uygulama, bir durum sayfası, bir satıcı aracı) yalnızca HTTP konuşur veya onu kapsamayan bir sertifikaya sahiptir. Başlığı gören her tarayıcı artık o alt alan adını yüklemeyi reddeder. O sunucuda hiçbir şey değişmedi — politika aşağı uzanıp onu bozdu.
  • Joker sertifika boşluğu. Bir *.example.com joker karakteri foo.example.com’u kapsar ancak foo.bar.example.com’u kapsamaz (bir joker karakter bir DNS etiketi derinliğindedir). Daha derin bir alt alan adı HTTP’ye veya uyumsuz bir sertifikaya güveniyorsa, includeSubDomains onu kilitler.
  • HSTS ana bilgisayarında süresi dolmuş sertifika. Yenileme otomasyonu başarısız olur, sertifika geçerliliğini yitirir ve atlanabilir bir uyarı yerine, politikanızı hatırlayan herkes için site kapalı olur — geçerli bir sertifika geri alana kadar ve yeniden bağlanıp taze bir güvenli yanıt alana kadar. Daha hızlı bir geçersiz kılma yoktur.
  • Ön yükleme pişmanlığı. Ön yükleme yaptınız, ardından bir iş ihtiyacı alan adı altında yalnızca HTTP’ye özel bir hizmeti zorlar. Bunu geri almak iki ayrı, anlık olmayan iştir, tek değil: HTTPS üzerinden max-age=0 sunmak yalnızca eski max-age’leri zaten dolmadan önce yeniden bağlanan istemciler için öğrenilen politikayı temizlerken, alan adını ön yükleme listesinden çıkarmak, sunucunuzda yaptığınız her şeyden bağımsız olarak kullanıcılara ulaşması tarayıcı sürüm döngüleri — aylar — alan ayrı bir gönderimdir.
  • Yerel geliştirme / hazırlama çakışmaları. example.com ile includeSubDomains’u ön yüklemek, aynı tepe noktası altındaki dev.example.com veya localhost tarzı bir dahili ana bilgisayarın HTTP’yi reddetmesine neden olarak yerel iş akışlarını şaşırtıcı şekillerde bozabilir.

Bunların hiçbiri HSTS’den kaçınma nedeni değil. Bunları aşamalı hale getirme nedenleridir: önce kısa max-age, her alt alan adını denetledikten sonra includeSubDomains ekleyin ve preload’u emin olduğunuzda saklayın.

HSTS bir sıralama hamlesi değildir (ve kurallaştırmaya dokunmaz)

To be clear on the SEO framing: HSTS is not a ranking signal. HTTPS itself is a deliberately tiny one — Google called it a “very lightweight signal” affecting fewer than 1% of queries — and HSTS is a layer on top of HTTPS, not a separate ranking input. It also doesn’t directly control canonicalization or indexing. Google’s own documentation is more specific than a flat “doesn’t matter,” though: Google prefers HTTPS as canonical over an equivalent HTTP page except when there’s an invalid certificate, insecure page dependencies, an HTTPS page that redirects to HTTP, or an HTTP rel="canonical" tag (Google: consolidating duplicate URLs). HSTS cannot fix or override any of that. It’s a browser-side policy with no influence on Google’s canonicalization logic — a bad certificate or a broken redirect chain can still push Google toward an HTTP canonical regardless of what your HSTS header says. Canonicalization is driven by your 301s, your certificate, your rel="canonical", and your internal links — HSTS earns its place for security, user trust, and closing the SSL-stripping gap — do it for those reasons, keep your 301s and certificate genuinely solid, and you’ll never see HSTS itself on a rankings report either way.

Daha geniş HTTP→HTTPS geçişini yapıyorsanız, HSTS açtığınız son şeydir, ilk değil — migrasyon oturduktan sonra, daha geniş site migrasyonu disiplininin bir parçası olarak devreye girer.

Add an expert note

Pin an expert quote

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