401レスポンスの意味
401 Unauthorizedのレスポンスは、リクエストした側が受け入れられる認証情報を示すまで、サーバーが対象のリソースを返さないことを伝えます。名前は歴史的な経緯によるもので、実際には認証情報の不足や失敗を示すステータスです。権限がないと判断したわけではありません。仕様に沿ったレスポンスには、通常、認証方式を示すWWW-Authenticateチャレンジが含まれます。
会員エリア、APIのエンドポイント、プレビュー用リンク、非公開ドキュメントなら、401は正しい境界になり得ます。SEOの不具合になるのは、一般のユーザー向けのURL、またはその公開URLのレンダリングに必要なCSS、JavaScript、画像、データのリクエストが401を返す場合です。検索クローラーは通常の会員としてログインできないため、保護されたレスポンスを確実に取得できません。
公開するものを決める
ページの役割から考えます。商品、記事、カテゴリ、ヘルプページ、公開のランディングページは、セッションなしで取得できる必要があります。アカウントページ、請求書、非公開のプレビューは認証を必須にし、公開のナビゲーションやサイトマップには載せません。この分類により、よくある誤った対処を避けられます。監視ツールが200と報告するようにするためだけに、アクセス制御を弱める対処です。
| レスポンス | 意味 | 一般的な対応 |
|---|---|---|
| 401 | 認証情報が必要、または拒否された | 非公開のリソースでは維持する。公開すべきルートからはチャレンジを外す。 |
| 403 | サーバーはリクエストを理解したうえで拒否している | 認可とボットのルールを見直す。ログインの要求として扱わない。 |
| 404 | 現在のリソースが見つからない | 関連する後継ページがない限り、廃止したURLや未知のURLに返す。 |
ページは公開でも、その処理の一部は非公開という場合があります。たとえば、商品ページとその画像は匿名で読み込めるようにし、アカウント領域を開いたときだけユーザーに認証を求めます。公開HTMLは、初回の訪問が認証付きのAPIリクエストに依存しない程度に、自己完結させておきます。
レスポンスの経路を調べる
ブラウザーのCookieなしで代表的なURLをテストし、最終的なステータス、リダイレクトチェーン、レスポンスヘッダーを記録します。続いて、ページのネットワークリクエストを調べ、レンダリングに不可欠なアセットが401になっていないか確認します。CDN、リバースプロキシ、アプリケーションのミドルウェア、上流のAPIが追加したログイン画面は、パスごとに影響が異なることがあります。ホームページへのリクエストが1回成功しただけでは、十分な証拠になりません。
クリーンなセッションで対象のURLにリクエストし、最終的なステータスとWWW-Authenticateヘッダーを記録します。
正常に動く公開ルートと、チャレンジが返るルートを、リダイレクトや必要なアセットも含めて比較します。
公開リソースを誤って分類しているルートまたはミドルウェアのルールだけを変更します。
公開ルートは匿名でアクセスでき、意図して非公開にしたルートでは認証が必要なままであることを確認します。
実際の確認は両面から行います。公開ページにチャレンジが返るようになっていたら、アクセスルールを直し、レンダリングしたページをもう一度テストします。保護すべきページが誤って公開されていたら、境界を元に戻し、内部リンク、フィード、XMLサイトマップに載っていないことを確認します。ステータスコードが示すのは動作です。ルートの一覧の代わりにはなりません。
修正を確認する
デプロイ後、匿名のリクエスターとして、テンプレートごとの少数のサンプルを再クロールします。最終的なHTMLと、メインコンテンツ、スタイル、スクリプト、画像、構造化データを運ぶリソースを確認します。Google Search ConsoleのURL検査は、現在の取得の問題と古いインデックス登録のレポートを区別するのに役立ちますが、ライブのレスポンスを自分で確認する作業の代わりにはなりません。
この種の問題を解決済みとする前に、公開ルートと認証が必要なルートを明記したリストを用意します。目指すのは、すべてが200を返す状態ではありません。公開するページは正常に表示され、非公開のページは保護されたままという、一貫した境界です。
確認のサンプルには、保護されたアセットやAPIも含めます。公開ページが200を返していても、メインコンテンツ、スタイルシート、画像のリクエストが401になれば、レンダリングされた表示が不完全になります。レンダリングに不可欠なリクエストごとに最終的なステータスと認証のチャレンジを確認し、アクセスルールの変更後に再テストします。
ステータスは、全体の合計ではなく、URLの種類ごとに監視します。401を返す公開記事と、匿名のリクエストすべてに正しくチャレンジを返すアカウントのエンドポイントとでは、調べるべき内容が異なります。検出結果ごとに、サンプル、日時、リクエスターの状態、最終URLを記録しておくと、後の変更を同じ条件で確認できます。