401 Unauthorized

HTTP 401 Unauthorizedは、サーバーがリソースを返す前に有効な認証情報が必要であることを示します。そのため、公開クローラーはアクセスできません。

401レスポンスの意味

401 Unauthorizedのレスポンスは、リクエストした側が受け入れられる認証情報を示すまで、サーバーが対象のリソースを返さないことを伝えます。名前は歴史的な経緯によるもので、実際には認証情報の不足や失敗を示すステータスです。権限がないと判断したわけではありません。仕様に沿ったレスポンスには、通常、認証方式を示すWWW-Authenticateチャレンジが含まれます。

会員エリア、APIのエンドポイント、プレビュー用リンク、非公開ドキュメントなら、401は正しい境界になり得ます。SEOの不具合になるのは、一般のユーザー向けのURL、またはその公開URLのレンダリングに必要なCSS、JavaScript、画像、データのリクエストが401を返す場合です。検索クローラーは通常の会員としてログインできないため、保護されたレスポンスを確実に取得できません。

概念イラスト:401レスポンスは認証の境界であり、公開ページがすべての人に利用できないという証拠ではありません。
意図したログイン要件を、SEOの問題として扱ってはいけません。まず、URLとレンダリングに必要なリソースをすべて、公開、認証が必要、意図的に利用不可のいずれかに分類します。

公開するものを決める

ページの役割から考えます。商品、記事、カテゴリ、ヘルプページ、公開のランディングページは、セッションなしで取得できる必要があります。アカウントページ、請求書、非公開のプレビューは認証を必須にし、公開のナビゲーションやサイトマップには載せません。この分類により、よくある誤った対処を避けられます。監視ツールが200と報告するようにするためだけに、アクセス制御を弱める対処です。

レスポンス意味一般的な対応
401認証情報が必要、または拒否された非公開のリソースでは維持する。公開すべきルートからはチャレンジを外す。
403サーバーはリクエストを理解したうえで拒否している認可とボットのルールを見直す。ログインの要求として扱わない。
404現在のリソースが見つからない関連する後継ページがない限り、廃止したURLや未知のURLに返す。

ページは公開でも、その処理の一部は非公開という場合があります。たとえば、商品ページとその画像は匿名で読み込めるようにし、アカウント領域を開いたときだけユーザーに認証を求めます。公開HTMLは、初回の訪問が認証付きのAPIリクエストに依存しない程度に、自己完結させておきます。

レスポンスの経路を調べる

ブラウザーのCookieなしで代表的なURLをテストし、最終的なステータス、リダイレクトチェーン、レスポンスヘッダーを記録します。続いて、ページのネットワークリクエストを調べ、レンダリングに不可欠なアセットが401になっていないか確認します。CDN、リバースプロキシ、アプリケーションのミドルウェア、上流のAPIが追加したログイン画面は、パスごとに影響が異なることがあります。ホームページへのリクエストが1回成功しただけでは、十分な証拠になりません。

1匿名で再現する

クリーンなセッションで対象のURLにリクエストし、最終的なステータスとWWW-Authenticateヘッダーを記録します。

2境界を特定する

正常に動く公開ルートと、チャレンジが返るルートを、リダイレクトや必要なアセットも含めて比較します。

3最小限の修正を行う

公開リソースを誤って分類しているルートまたはミドルウェアのルールだけを変更します。

4両側を再テストする

公開ルートは匿名でアクセスでき、意図して非公開にしたルートでは認証が必要なままであることを確認します。

実際の確認は両面から行います。公開ページにチャレンジが返るようになっていたら、アクセスルールを直し、レンダリングしたページをもう一度テストします。保護すべきページが誤って公開されていたら、境界を元に戻し、内部リンク、フィード、XMLサイトマップに載っていないことを確認します。ステータスコードが示すのは動作です。ルートの一覧の代わりにはなりません。

修正を確認する

デプロイ後、匿名のリクエスターとして、テンプレートごとの少数のサンプルを再クロールします。最終的なHTMLと、メインコンテンツ、スタイル、スクリプト、画像、構造化データを運ぶリソースを確認します。Google Search ConsoleのURL検査は、現在の取得の問題と古いインデックス登録のレポートを区別するのに役立ちますが、ライブのレスポンスを自分で確認する作業の代わりにはなりません。

この種の問題を解決済みとする前に、公開ルートと認証が必要なルートを明記したリストを用意します。目指すのは、すべてが200を返す状態ではありません。公開するページは正常に表示され、非公開のページは保護されたままという、一貫した境界です。

確認のサンプルには、保護されたアセットやAPIも含めます。公開ページが200を返していても、メインコンテンツ、スタイルシート、画像のリクエストが401になれば、レンダリングされた表示が不完全になります。レンダリングに不可欠なリクエストごとに最終的なステータスと認証のチャレンジを確認し、アクセスルールの変更後に再テストします。

ステータスは、全体の合計ではなく、URLの種類ごとに監視します。401を返す公開記事と、匿名のリクエストすべてに正しくチャレンジを返すアカウントのエンドポイントとでは、調べるべき内容が異なります。検出結果ごとに、サンプル、日時、リクエスターの状態、最終URLを記録しておくと、後の変更を同じ条件で確認できます。

FAQ

HTTP 401は、ページがずっと利用できないという意味ですか?
いいえ。今回のリクエストに、受け入れられる認証情報がなかったことを示すだけです。有効なログインの直後ならリソースを取得できる場合もありますが、このレスポンスの状態では、誰でも取得できるわけではありません。
401は403 Forbiddenと同じですか?
いいえ。401は認証を求めるレスポンスです。403は、サーバーがリクエストを理解したうえで拒否していることを意味します。この違いによって対処法が変わります。
401を返すページを、XMLサイトマップに載せるべきですか?
いいえ。サイトマップには、検索エンジンにクロールとインデックス登録の検討をしてほしい、公開の正規URLを載せます。認証が必要なURLは、この目的に合いません。
意図しない401が疑われるとき、どうテストすればよいですか?
ログアウトした状態のクリーンなセッションで対象のURLにリクエストし、リダイレクトとヘッダーを記録します。続いてレンダリングしたページを調べ、依存するリクエストにも401を返すものがないか確認します。