HSTS:SEO担当者のためのHTTP Strict Transport Security

HSTSの実際の動作、Strict-Transport-Securityヘッダーの構文、クローラーには見えないブラウザ内アップグレード、恒久リダイレクトが引き続き必要な理由、preloadの固定化リスクを解説します。

初回公開:2026年7月3日 · 最終更新:2026年8月23日 · 上級者向け
このページには証拠シグナルが1件あります

HSTS(HTTP Strict Transport Security)は、安全な接続で受信した場合だけ有効になるStrict-Transport-Securityレスポンスヘッダーです。以後そのドメインで常にHTTPSを使うようブラウザへ伝え、新規訪問者の最初のHTTPリクエストから301が動くまで残る隙を塞ぎます。ブラウザが通信前にURIを内部でHTTPSへ書き換えるクライアント別ポリシーで、RFCが特定コードを定めないものの内部307形式と表示されることがあります。検索エンジンには見えないためサーバー側301の代わりにはなりません。ディレクティブは必須のmax-age、includeSubDomains、preloadの3つです。hstspreload.org経由のpreloadはドメインをブラウザへ組み込み、削除が利用者へ届くまで数か月かかります。HSTSホストは証明書エラーで回避不能な強制失敗になるため、全サブドメインのHTTPS運用が堅牢になってから有効化し、preloadは一方通行の扉として扱ってください。

TL;DR — HSTSは Strict-Transport-Security レスポンスヘッダーです。ブラウザが安全な接続で受信した場合のみ有効となり、そのホストの将来のポリシーとしてクライアントごとに保存されます。301だけでは残る「最初のリクエスト問題」、つまり新規訪問者の初回HTTP通信がリダイレクトまで安全でない隙を塞ぎます。ディレクティブは、必須で秒数を指定する max-ageincludeSubDomainspreload の3つです。HSTS適用時、ブラウザはサーバーへ通信する前にURIを内部でHTTPSへ書き換えます。RFC 6797はこの書き換えの特定ステータスコードを規定しておらず、ツールが307と表示することはあっても、検索エンジンとリンク評価にはサーバー側301が引き続き必須です。hstspreload.org経由のpreloadには max-age 31536000以上、includeSubDomainspreload が必要で、解除がユーザーへ届くまで数か月かかります。証明書エラーは強制停止になるため、全サブドメインのHTTPS運用が堅牢になってから有効化してください。

HTTPSハブでは、HSTSを301の上に重ねるブラウザ層の保護として紹介しています。このページでは、正確なヘッダー構文、SEO担当者が混同しやすい内部リダイレクト、preloadリストのほぼ不可逆な性質、実際のロックアウト原因を詳しく説明します。

HSTSが実際に解決する問題:最初のリクエスト

HTTPS移行が正しく完了したサイトを想像してください。すべての http:// URLは対応する https:// URLへ301リダイレクトされ、証明書は有効で、canonicalもHTTPSを指しています。隙がないように見えますが、完全ではありません。

初めての訪問者がスキームなしで yoursite.com と入力するか、古い http://yoursite.com リンクをクリックすると、ブラウザの最初のリクエストは平文HTTPで送られます。サーバーが301を返した後は安全ですが、その最初の往復だけは暗号化されません。同じネットワーク上のSSLストリッピング攻撃者はHTTPリクエストを傍受し、利用者をHTTPに留めたままサーバーへHTTPSで中継して、内容を読んだり書き換えたりできます。

HSTSは、以前訪問した利用者についてこの隙をなくします。web.devは仕組みを次のように説明しています。“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.” (翻訳) 「Strict Transport Securityを使い、http:// 参照をたどる場合でも常にHTTPSで接続するようクライアントへ伝えます。これによりSSLストリッピングのような攻撃を防ぎ、301リダイレクトの往復コストも回避できます。」 (web.dev) 。最後の点は性能にも関係し、再訪ブラウザはHTTP→HTTPSの往復を丸ごと省けます。 この主張の根拠 After receiving HSTS, a browser upgrades future HTTP attempts to HTTPS before sending the request. 対象範囲: MDN documents user-agent enforcement after the header has been learned; first-visit protection requires preload or a prior secure visit. 信頼度: 高 · 検証日: MDN: Strict-Transport-Security header

境界条件を2つ正確に押さえましょう。第一に、HSTSはクライアントごとに保存されるポリシーです。安全な接続で配信されたヘッダーから、そのブラウザがそのホストについて学習します。HTTPレスポンス上の同じヘッダーは、平文通信で攻撃者が注入や削除を行えるため完全に無視されます。新規インストール、別ブラウザ、クローラーなど、ヘッダーを受け取ったことがないクライアントには適用するポリシーがありません。第二に、書き換えはスキームとポートを考慮します。暗黙のポート80は暗黙の443になりますが、元のURIに標準外ポートが明示されていれば、ブラウザは同じポート番号のままHTTPSで接続します。

ヘッダー構文

HSTSは、最大3つのディレクティブを持つ1つのレスポンスヘッダーです。MDN では、次の形式が示されています。

Strict-Transport-Security: max-age=31536000
Strict-Transport-Security: max-age=31536000; includeSubDomains
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
  • max-age=<seconds> — 必須です。“The time, in seconds, that the browser should remember that a host is only to be accessed using HTTPS” (翻訳) 「ブラウザが、そのホストへHTTPSでのみアクセスすると記憶する秒数」 (MDN)。31536000 は1年、63072000 は2年です。ヘッダーを含むレスポンスを受け取るたびに期限がリセットされるため、稼働中のサイトはポリシーを継続的に更新します。ヘッダーを単に削除しても、学習済みポリシーはすぐ消えません。保存された max-age が切れるまで適用されます。学習済みクライアントでHSTSを無効にするには、安全なレスポンスで max-age=0 を配信し、次回の安全な訪問時に忘れさせる必要があります。これは学習済みポリシーだけを消し、別管理のpreloadリストからは削除しません。
  • includeSubDomains — 任意です。“If this directive is specified, the HSTS policy applies to all subdomains of the host’s domain as well” (翻訳) 「このディレクティブを指定すると、HSTSポリシーはホストのドメイン配下の全サブドメインにも適用されます」 (MDN)。強力ですが同じだけ危険でもあるため、後述のロックアウト例を確認してください。
  • preload — 任意です。ブラウザのpreloadリストへ登録する意思を示すフラグで、単独では何も起こりません。hstspreload.orgへ申請するための前提です。 この主張の根拠 HSTS preload requires at least a one-year max-age, includeSubDomains, and preload; removal can take months to reach users. 対象範囲: The Chromium preload service documents submission and removal behavior; requirements can change and should be rechecked before submission. 信頼度: 高 · 検証日: Chromium: HSTS Preload List Submission

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.” (翻訳)http URLを読み込む前に、ブラウザはドメイン名をHSTSホスト一覧と照合します。大文字小文字を区別せずHSTSホストに一致するか、includeSubDomains を指定したホストのサブドメインであれば、URLスキームを https に置き換えます。」

クローラーには見えない内部アップグレード(SEO上の核心)

HSTSで最も誤解されやすく、リダイレクトの代わりにできない理由となる点です。

ブラウザがHSTSに従って http:// リクエストをアップグレードすると、ネットワークリクエストを送る前にURIを内部でHTTPSへ書き換えます。RFC 6797 §8.3 はスキーム置換を要求しますが、特定のステータスコードは規定しません。そのためブラウザやクロールツールは内部処理を任意に表現でき、多くは内部307と表示しますが、これはクライアントまたはツール固有でありプロトコル保証ではありません。SEO上重要なのは、HTTP版についてサーバーへ接続しないため、クローラーには見えないことです。GooglebotやBingbotは再訪者のChromeのように学習済みHSTSポリシーを保持せず、サーバーへ新規にアクセスします。そこで必要なのは実際のサーバー側301です。 この主張の根拠 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. 対象範囲: 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. 信頼度: 高 · 検証日: RFC 6797 §8.3 — URI Loading and Port Mapping

結論は明確です。HSTSはサーバー側301の代わりにはなりません。 検索エンジンがプロトコル移行を理解し、シグナルを統合するために使うのは301です。Googleも、“301 and other permanent redirects don’t cause a loss in PageRank” (翻訳) 「301などの恒久的リダイレクトでPageRankが失われることはありません」(Googleの説明)と述べています。ブラウザ内アップグレードは、その上に重ねるユーザー体験とセキュリティの層です。役割の異なる両方が必要です。

  • 301(サーバー側): クローラー、インデックス、リンク評価のため。
  • 内部307形式のアップグレード(HSTSによるブラウザ側): 再訪する人とSSLストリッピング対策のため。正確なステータス表現はクライアントやツールによって異なります。

HSTSがリダイレクトを処理するから301を削除できる、と説明するガイドは誤りで、気づかないうちに損失を招きます。

HSTS preload:ほぼ恒久的な方式

max-age は再訪者を保護しますが、まだヘッダーを受け取っていない初回訪問者は最初のリクエストで保護されないという起動時の問題があります。Preloadは、ドメインをブラウザのソース自体へ組み込み、接続したことがなくてもHTTPS専用だと認識させて解決します。

hstspreload.org から申請します。要件は厳密です。

  1. “Serve a valid certificate.” (翻訳) 「有効な証明書を配信する。」
  2. “Redirect from HTTP to HTTPS on the same host, if you are listening on port 80.” (翻訳) 「ポート80で待ち受ける場合、同一ホストでHTTPからHTTPSへリダイレクトする。」
  3. “Serve all subdomains over HTTPS” (翻訳) 「すべてのサブドメインをHTTPSで配信する。」DNSレコードが存在する場合は、特に www も含みます。
  4. ベースドメインのHTTPSレスポンスで、“the max-age must be at least 31536000 seconds (1 year),” (翻訳)max-age は少なくとも 31536000 秒、つまり1年」、“the includeSubDomains directive must be specified,” (翻訳)includeSubDomains ディレクティブを指定」、“the preload directive must be specified.” (翻訳)preload ディレクティブを指定」というHSTSヘッダーを配信する。 (hstspreload.org)

このため、上の2年の例(max-age=63072000; includeSubDomains; preload)が一般的な申請形式です。これはhstspreload.orgが公開する正確な申請要件であり、恒久的な定数ではなく現在の基準として扱い、申請前に公開ページを再確認してください。

混同されがちな4つの状態を分けて考えると理解しやすくなります。

状態実際の意味
トークンありヘッダーに preload が含まれるだけです。単独では何もせず、リストにも入りません。
申請可能証明書、リダイレクト、サブドメイン、ヘッダー形式というhstspreload.orgの4要件を満たしています。まだリストには入りません。
申請済み/保留中hstspreload.orgで申請し、今後のブラウザリリースへの収録待ちです。実利用者にはまだ適用されません。
実際に収録済み特定ブラウザの出荷済みビルドにドメインが組み込まれています。そのビルドの利用者にだけ適用され、反映は即時でも全ブラウザ共通でもありません。

削除も同じ4状態を逆向きに、同じように時間をかけて進みます。ヘッダーから preload を外すと削除フォームを申請できる状態になり、申請後は保留中になります。そのドメインを含むブラウザビルドが使われなくなるまで、利用者への適用は続きます。

ここがpreloadを一方通行の扉にする点です。申請サイト自体が、“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.” (翻訳) 「preloadリストへの収録は簡単には元に戻せません。ドメインは削除できますが、変更がChromeの更新で利用者へ届くまで数か月かかり、他のブラウザについては保証できません。」 (hstspreload.org) と注意しています。さらに、“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.” (翻訳) 「サイト全体と全サブドメインで長期的にHTTPSを維持できる確信がない限り、収録を申請しないでください。」と助言しています。

実務的には、preloadは非常に優れたセキュリティ対策ですが、将来レガシーなサブドメイン、買収したブランド、社内ツールなどを平文HTTPで提供する必要が生じても、全利用者へブラウザ更新が行き渡るまで待たなければなりません。Kinstaも、it can be a difficult and time-consuming process to get your domain removed (翻訳) 「ドメインの削除は難しく時間のかかる作業になり得ます」と説明しています。preloadは恒久的なものとして扱ってください。

障害時に厳しくなるようHSTSが設計されている理由

HSTSの厳格さは不具合ではなく、セキュリティ保証そのものです。web.devはトレードオフを次のように示しています。“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.” (翻訳) 「サイトを既知のHSTSホストとして登録したクライアントは、証明書期限切れなどTLS設定にエラーがあると強制的に失敗する可能性があります。攻撃者がHTTPSなしでサイトへアクセスさせるようクライアントを欺けないよう、HSTSは意図的にこのように設計されています。」 (web.dev)

Googleが導く結論は、有効化を考える人に必ず伝えたい一文です。“Don’t enable HSTS until you’re certain your site operation is robust enough to avoid ever deploying HTTPS with certificate validation errors.” (翻訳) 「証明書検証エラーのあるHTTPSを決してデプロイしないほどサイト運用が堅牢だと確信するまで、HSTSを有効にしないでください。」 (web.dev)

「強制失敗」とは、「このまま続行」リンクも回避手段もないという意味です。通常のHTTPSページで証明書が切れると、決意した利用者なら回避できる警告画面が出ます。HSTSホストではブラウザが完全に拒否します。証明書更新漏れの影響は、「警告を恐れた人が離れてトラフィックが減る」から「すべての再訪者がサイトへ到達できない」へ変わります。

実際に起きるロックアウト

実務でHSTSが問題になる原因は、ほぼ常に includeSubDomains またはpreloadが実際のHTTPS対応範囲を追い越すことです。

  • 忘れられたサブドメイン。 example.comincludeSubDomains を設定したものの、古いアプリ、ステータスページ、外部ツールである legacy.example.com がHTTP専用か、証明書の対象外になっています。ヘッダーを見たブラウザはそのサブドメインを拒否します。サーバー側は変わっていなくても、親のポリシーが届いて壊します。
  • ワイルドカード証明書の深さ不足。 *.example.comfoo.example.com を覆いますが、DNSラベルが2階層深い foo.bar.example.com覆いません。深いサブドメインがHTTPや不一致証明書に依存すると、includeSubDomains で締め出されます。
  • HSTSホストの証明書切れ。 自動更新に失敗すると、回避可能な警告ではなく、ポリシーを覚えている全利用者にとってサイトが停止します。有効な証明書を戻し、再接続して新しい安全なレスポンスを受け取るまで、より速い解除手段はありません。
  • Preload後の後悔。 preload後にHTTP専用サービスが必要になると、戻す作業は1つではなく独立した2つです。HTTPSで max-age=0 を配信して消せるのは、再接続したクライアントの学習済みポリシーだけです。preloadリストからの削除は別申請で、サーバーをどう変更してもブラウザのリリースサイクルを通じて数か月かかります。
  • ローカル開発/ステージングとの衝突。 example.comincludeSubDomains 付きでpreloadすると、dev.example.com や同じapex配下の localhost 形式の社内ホストまでHTTPを拒否し、予想外に開発を妨げることがあります。

これらはHSTSを避ける理由ではなく、段階的に導入する理由です。まず短い max-age、全サブドメインを監査してから includeSubDomains、確信できた場合だけ preload へ進んでください。

HSTSは順位施策ではなく、canonicalも制御しない

SEOの観点を明確にすると、HSTSはランキングシグナルではありません。HTTPS自体も意図的にごく小さなシグナルで、Googleは全クエリの1%未満に影響する「very lightweight signal」と呼びました。HSTSはHTTPS上の層であり、別の順位入力ではありません。canonicalやインデックスを直接制御するものでもありません。ただしGoogleは、同等のHTTPページよりHTTPSをcanonicalとして優先する一方、証明書が無効、ページ依存物が安全でない、HTTPSページがHTTPへリダイレクトする、HTTPを指す rel="canonical" がある場合は例外としています(Google: consolidating duplicate URLs)。HSTSはこれらを修正も上書きもできません。 Googleのcanonical判断に影響しないブラウザ側ポリシーだからです。canonicalは301、証明書、rel="canonical"、内部リンクで決まります。HSTSはセキュリティ、利用者の信頼、SSLストリッピングの隙を塞ぐことのために導入し、301と証明書を堅牢に保ってください。

より広いHTTP→HTTPS移行では、HSTSは最初ではなく最後に有効化します。移行が安定してから、全体的なサイト移行手順の一部として導入してください。

専門家メモを追加

専門家の引用を固定

新しい人物ですか?まず、 /admin/experts/ → 専門家の引用を固定 から未登録プロフィールを作成してください。