403 Forbidden(アクセス禁止)
HTTP 403エラーとは何か、Googleがどのように扱うか(ブロックされ、noindexに似た結果になる)、一般的な原因(アクセス制御、ボットブロック、権限設定のミス)、SEOのために403を修正する方法を解説します。
言語
このページには証拠シグナルが1件あります
- 関連するライブツールHTTP Status & Redirect Checker
403 Forbiddenは、サーバーがリクエストを理解したものの拒否したことを意味します。アクセスは拒否されますが、その理由は必ずしも認証情報ではありません(禁止されたリソースの存在を隠すため、サーバーは404を返すことさえできます)。「何もない」404や「先に認証してほしい」401ではなく、403は「これは取得できない」という能動的な拒否です。SEOでは、公開したいページが403のままだとGoogleのインデックスに入りません。noindexに似た結果ですが、4xxレスポンスのコンテンツをGoogleがまったく読めないため、仕組みは異なります。Googlebotは認証情報を送らないため、Googlebotに返された403は意図的だと決めつけず調査する価値があります。一般的な原因にはCDN/WAFのボットフィルター、サーバーのIP/ユーザーエージェントブロック、セキュリティプラグイン、.htaccess/権限エラーがありますが、どれが最も多いかを示す信頼できるデータはありません。クロールを抑えるために403を使わないでください(短期間なら429/503です)。まず意図を確認しましょう。ステージング、管理エリア、ゲート付きコンテンツなど、一部の403は正しく、修正不要です。なお、robots.txt自身の403は許可的に扱われますが、ページの403はハードブロックとして扱われます。
TL;DR — 403 Forbiddenは、サーバーがリクエストを理解したものの、拒否していることを意味します。要求した人に権限がありません。404(「ここには何もない」)や401(「先にログイン」)とは異なります。SEOでは、Googlebotに403を返し続けるページはインデックスされず、すでにインデックスされていれば外れます。見つけてもらいたいページで起きたなら、403は修正すべき問題です。
403の実際の意味
サイトを運営していない訪問者として403に遭遇した場合:これはブラウザーではなくサーバー側のルールです。別のネットワークや端末を試し、サイトがブロックするVPNを使っていないか確認し、Cookieを消去してください。それでも続くなら、修正すべき場所はサイト所有者側です。この記事の残りは所有者向けに書いています。
あなた(または検索エンジンのボット)がページをリクエストすると、サーバーはステータスコードを返します。200は「here it is」 (翻訳)「ここにあります」という意味です。403 Forbiddenは「要求は理解したが、渡すことを拒否する」です。拒否の理由は認証情報でなくてもかまいません。また、禁止されたリソースの存在自体を隠したい場合、サーバーは404を返すことも許されています。 Evidence for this claim A 403 response means the server understood the request but refuses to fulfill it, and authenticating does not necessarily make a difference. Scope: RFC 9110 defines the protocol semantics; it does not identify the application, firewall, or policy responsible for a specific response. Confidence: high · Verified: IETF: RFC 9110 §15.5.4 — 403 Forbidden
4xxコードを整理する最も簡単な方法は次のとおりです。
- 404 Not Found — 「ここには何もない」。ページは存在しない。
- 403 Forbidden — 「ここには何かあるが、渡せない」。積極的なブロック。
- 401 Unauthorized — 「先にログイン/認証が必要」。403のほうが強く、ログインしても解決しない。
つまり403は、サーバーが壊れているということではありません。指示どおりに動いているのです。問題は、サーバーに正しい指示が出ていたかです。
SEOで重要になる理由
Googlebotはページを取得できなければインデックスできません。ページを求めて403を受け取ると、Googleはそのレスポンスからコンテンツをまったく読めず、そこまで到達する前に拒否されます。403を返すページはGoogleにインデックスされず、以前インデックスされていたページも403を返し続ければ最終的に検索結果から外れます。結果はnoindexを追加した場合とよく似て、ページがGoogleから消えますが、仕組みは違います。noindexタグは取得して読まれなければ機能しません。一方403は、最初からGoogleが何も読めないようにブロックします。 Evidence for this claim Google does not index 4xx URLs and removes already-indexed 4xx URLs over time. Scope: Google's crawler documentation supports the indexing outcome for persistent 403 responses, not the article's analogy to noindex. Confidence: high · Verified: Google: How HTTP status codes affect Google's crawlers
403を理解する価値があるひねりはここです。Googlebotは決してログインしません。 パスワードや認証情報を送らないため、「認証情報が受け付けられなかった」という意味の403は、Googlebotについてはその理由になりません。ただし、それが自動的にミスだという意味ではありません。ステージングサイト、管理エリア、クロールさせたくないゲート付きコンテンツなど、ブロックが意図的な場合もあります。公開したいページで403が出ているなら調査する価値がある、ということです。セキュリティルール、ファイアウォール、プラグインがGooglebotを怪しいと判断した可能性があります。Googleの案内も同じ範囲です。ページをインデックスさせたいなら、認証を要求せずGooglebotを通してください。
よくある原因
どの原因が最も多いかについて確かなデータはありません。順位付けではなくチェックリストとして扱ってください。
- CDNまたはファイアウォール(WAF)がボットをブロックしている。 Cloudflareのボット対策モードは、悪質なボットと一緒にGooglebotまで捕捉することがよくあります。
- サーバーまたはホスティングのルールが特定のIPアドレスやユーザーエージェントをブロックしている。
robots.txtまたは.htaccessの設定ミス。- セキュリティプラグイン(WordPressのWordfenceなど)が攻撃的すぎる。
- ログインウォール。 認証の背後にあるものは設計上、403の拒否応答になります。これはバグではなく意図的な場合がよくあります。
- サーバー上のファイル権限エラー。
まず行う修正手順
- Google Search ConsoleでPage Indexingレポートを開き、「Blocked due to access forbidden (403).」 (翻訳)「アクセス禁止のためブロック(403)」を探します。
- URL検査ツールでURLを調べ、Test Live URLを押して、Googlebotが現在受け取るものを確認します。
- CloudflareなどのCDN/ファイアウォールを使っているなら、セキュリティログでGooglebotがブロックされていないか確認し、確認済み検索ボットを通します。
- ルールを修正したら、Search ConsoleのValidate Fixで検証します。
してはいけないことが1つあります。Googlebotを遅くするために403を使わないでください。 機能せず、ページをインデックスから外す可能性があります。ボットがサーバーを連続的に叩いているなら、そのためにあるのは429と503です。
より深い内容――Cloudflare/WAFの診断、robots.txtの403の落とし穴、ボットを正しく許可リストに入れる方法――は、Advancedタブに切り替えてください。
TL;DR — 403は、サーバーがリクエストを理解したものの、アクセスを理由に拒否したレスポンスです。404(消滅)や401(認証が必要)とは異なります。インデックスについては
noindexと同じような結果になり、Googleは403 URLをインデックスせず、インデックス済みのURLは削除します。ただし仕組み(サーバー/CDN/WAFによるブロック)はメタタグとはまったく違います。Googlebotは認証情報を送らないため、Googlebotへの403はほぼ常に設定ミスです。最も多い原因はCDN/WAFのボットフィルタリング(Cloudflareのボット対策モードが先頭)、サーバーのIP/UAブロック、セキュリティプラグイン、.htaccess/権限です。403はクロールレートに影響しません。スロットルに使わないでください(その用途は429/503です)。反対のケースも重要です。robots.txt自体の403は寛容に扱われますが、ページの403はハードブロックです。
403、401、404:まず正しいメンタルモデルを持つ
この3つは頻繁に混同されますが、その違いが診断全体を左右します。基本定義はHTTP仕様そのもの、RFC 9110 §15.5.4にあります。サーバーはリクエストを理解したものの、実行を拒否します。同じ節にある、軽視されがちな注意点がいくつかあります。
- 拒否は認証情報に関係なくてよい。 RFC 9110は認証と無関係な理由による403を認めています。リクエスターが「既知」であることや、認証情報が関与したことを普遍的に証明するものではありません。すべての403を認証の話として読まないでください。
- 403はリソースの存在を認めなくてよい。 禁止されたリソースが存在するかどうかを隠したいオリジンサーバーは、明示的に404を返せます。逆も同じです。404が常に「ここには何もなかった」を意味するとは限らず、「ここにあるが知られたくない」という場合もあります。
- 401と403は単なる「弱い対強い」ではない。 401は認証チャレンジであり、クライアントの認証方法を示す
WWW-Authenticateヘッダーを伴うことが仕様で必要です。403にその要件はありません。同じ認証情報で再認証しても、別の認証情報で再認証しても何も変わらないことを約束しない、より広い拒否です。MDNの平易な説明では、403は「similar to 401, except that … authenticating or re-authenticating makes no difference. The request failure is tied to application logic, such as insufficient permissions.」 (翻訳)「401に似ていますが、認証または再認証しても違いがありません。リクエストの失敗は、権限不足などアプリケーションロジックに結びついています。」 Evidence for this claim A 403 response means the server understood the request but refuses to fulfill it, and authenticating does not necessarily make a difference. Scope: RFC 9110 defines the protocol semantics; it does not identify the application, firewall, or policy responsible for a specific response. Confidence: high · Verified: IETF: RFC 9110 §15.5.4 — 403 Forbidden - 404 Not Foundは対照的に、通常は「ここには何もない」です。ただし上記の隠蔽の点は除きます。
だからこそ、Googlebotへの403は何も考えず受け入れるのではなく、もう一度確認する価値があります。会員限定ページでボットに401を返すなら、エリアにログインが必要なので機能していると言えます。公開されるべきページでボットに403を返すなら、リクエスターを歓迎しないルールが働いたことを意味します。ただし以下で述べるように、バグと呼ぶ前にページが本当に公開されるべきだったかを確認してください。
Googleが403を扱う方法(結果はnoindexに似るが仕組みは違う)
Googleは403を4xxファミリーの他のコードとまとめます。Search Centralの文書によれば、「Google doesn’t index URLs that return a 4xx status code, and URLs that are already indexed and return a 4xx status code are removed from the index.」 (翻訳)「Googleは4xxステータスコードを返すURLをインデックスせず、すでにインデックスされていて4xxを返すURLはインデックスから削除します」。さらに「All 4xx errors, except 429, are treated the same: Google crawlers inform the next processing system that the content doesn’t exist.」 (翻訳)「429を除くすべての4xxエラーは同じように扱われ、Googleのクローラーは次の処理システムにコンテンツが存在しないと伝えます」。Googleは、既知のURLが4xxを返し続けるほど、そのURLのクロール頻度が徐々に下がるとも説明しています。これはサイト全体のクロールレートとは別の、URL単位の効果です。 Evidence for this claim Google does not index 4xx URLs and removes already-indexed 4xx URLs over time. Scope: Google's crawler documentation supports the indexing outcome for persistent 403 responses, not the article's analogy to noindex. Confidence: high · Verified: Google: How HTTP status codes affect Google's crawlers
そのため、結果はnoindexに似ています。ページはインデックスに入りません。すでにあれば時間とともに外れます。しかし仕組みは見た目以上に違います。noindexタグはページのHTMLから取得して解析されなければ効きませんが、403はGoogleがコンテンツをまったく読めないようにします。Googleが処理するページがないのです。これは別々の経路が、Searchに表示されない同じ結果へ収束する例です。だから私のHTTP Status Codes guide では、403を「the client is known but doesn’t have access rights」 (翻訳)「クライアントは既知だがアクセス権がない」と説明し、こうしたエラー応答がページをインデックスから外すと述べています。ただし、そこにある「known」はGoogleのレポート上の短縮表現であり、すべての403に認証済みのリクエスターが関与するという主張ではありません。
Googlebotへの403を調査する価値(常にミスとは限らない)
この節はGoogleのPage Indexingヘルプ文書に基づきます。「HTTP 403 means that the user agent provided credentials, but was not granted access. However, Googlebot never provides credentials, so your server is returning this error incorrectly. The page will not be indexed.」 (翻訳)「HTTP 403は、ユーザーエージェントが認証情報を提供したもののアクセスを許可されなかったことを意味します。しかしGooglebotは認証情報を決して提供しないため、サーバーはこのエラーを誤って返しています。ページはインデックスされません」。ただし文脈を確認してください。これはSearch Consoleがインデックスさせたいと想定するページ向けのレポート固有の案内であり、Googlebotへのすべての403がバグだという普遍的主張ではありません。Googlebotは認証しないため、「認証情報が正しくない」という厳密な意味の403は当てはまりにくいですが、403の多くは認証情報とは無関係です。サーバーがGooglebot(または誰であれ)にリソースを渡さないと正当に決めることもあります。
修正を追う前に、このページは本当に公開・インデックスされるべきかを確認してください。ステージング、管理エリア、ペイウォール、その他のゲート付きページなら、Googlebotへの403は正しく、修正するものはありません(詳しくは下の「403が本当に問題ない場合」を参照)。公開されるべきページなら、誤ったリクエスターにルールが発火した可能性が高いです。WAFがクローラーをブロック対象ボットと判定した、IP範囲のブロックがGoogleの範囲まで含んだ、セキュリティプラグインの既定設定が過剰だった、などです。ただし各原因が実際にどの程度多いかについて信頼できるデータはないため、下の一覧は診断ではなく確認候補です。公開されるべきページに対するGoogleの案内は、未ログインユーザーを通すか、本人確認後に認証なしでGooglebotを明示的に許可することです。
403はクロールレートに影響しない — スロットルに使わない
苦しいサーバーからGooglebotを後退させるために、403(または404)を使う人がいます。やめてください。Googleは明確に「Don’t use 401 and 403 status codes for limiting the crawl rate. The 4xx status codes, except 429, have no effect on crawl rate.」 (翻訳)「クロールレートの制限に401や403を使わないでください。429を除く4xxステータスコードはクロールレートに影響しません」と述べています。ここでも範囲を正確に捉えます。Googleは、既知の個別URLが4xxを返し続けるほど、そのクロール頻度が徐々に下がるとも言っています。しかしこれはそのURLへの関心が狭まることであり、サイト全体のクロールレートをスロットルすることではありません。後者が必要でも、403では実現できません。
Gary Illyesはこの件について記事(Don’t 404 my yum)全体を書いています。「All 4xx HTTP status codes (again, except 429) will cause your content to be removed from Google Search.」 (翻訳)「429を除くすべての4xx HTTPステータスコードは、コンテンツをGoogle検索から削除します」。正しい緊急手段は、短い期間(数時間で、数日ではない)だけ500、503、または429を返すことです。それでも無条件ではありません。Googleは、5xxを何日も返し続けるとページもインデックスから外れるリスクがあると警告しています。重要なのは選んだコードだけでなく、範囲と期間です。Barry Schwartzの以前の事例報告は、「lost load[s] of their pages from our index because they were serving them with a 403 status code instead of a 503.」 (翻訳)「503の代わりに403を配信したため、大量のページをインデックスから失った」と影響を端的に伝えています。503は一時的なものと理解され、403ではインデックスから外れます。
robots.txtの落とし穴:robots.txtの403は制限ではなく寛容
ほぼすべての競合記事が見落とす区別で、直感と逆の結果になります。ページの403はハードブロックです。しかしrobots.txtファイル自体の403は逆に扱われます。Googleのrobots.txt仕様によれば、「Google’s crawlers treat all 4xx errors, except 429, as if a valid robots.txt file didn’t exist. This means that Google assumes that there are no crawl restrictions.」 (翻訳)「Googleのクローラーは429を除くすべての4xxエラーを、有効なrobots.txtファイルが存在しなかったかのように扱います。つまりGoogleはクロール制限がないと判断します。」
Evidence for this claim A 403 on `/robots.txt` is handled differently from a 403 on a page: Google treats a non-429 4xx robots response as if no valid robots file exists and assumes no restrictions from that file. Scope: robots.txt fetch only Confidence: high · Verified: How Google interprets the robots.txt specificationファイアウォールがrobots.txtに403を返し始めると、Googleはルールがないと結論し、意図して禁止したパスも含めて自由にクロールします。Illyesの色鮮やかな表現では、「dirty laundry」 (翻訳)「見られたくないもの」を禁止するルールがあったのに、今度はGooglebotまでそれを知ることになります。「robots.txtが403を返した」(Googleがルールを無視する)と「ページが403を返した」(URLがインデックスから外れる)を混同しないでください。効果は正反対で、どちらを見ているかを誤診すると、間違ったものを修正することになります。
Bingは403をどう扱うか
正直に言うと、Bingが403を特に扱う公開文書はGoogleより薄いです。そのため、話を広げず狭く述べます。BingbotはGooglebotと同じ仕組み――robots.txtルール、サーバーレベルのIP/ユーザーエージェントブロック、WAF/ファイアウォールルール――で拒否されます。Bing Webmaster Toolsはクロールエラーの警告でクロールエラーを表示します。実務上の結論は両エンジンで同じです。確認済みクローラーをセキュリティ層で通し、ユーザーエージェント文字列を信頼せず、公開IP範囲と逆引きDNSでボットを確認してください。「Googlebotを修正する」が自動的に「すべてのボットを修正する」ではない点を思い出し、WAF変更後は両エンジンのツールを確認します。
よくある原因(順位付けではありません。サイト横断の発生率データはありません)
CDN/WAFのボット保護 — 既存のSEOコンテンツで最も扱いが不足している原因。 2026年に私が最初に調べるならここです。ただし、下の他の原因と比べて実際の犯人である頻度は分かりません。Cloudflareのボット対策モードと上位ボット対策モード、WAF管理ルール、カスタムファイアウォールルールは、巻き添えでGooglebotとBingbotを定期的に403にします。手掛かりはエッジでブロックされることです。オリジンサーバーとCMSは完全に正常に見えるのに、GSCは403を報告します。CDNダッシュボードのSecurity Eventsでクローラーがチャレンジまたはブロックされていないか確認してください。
2. サーバー/ホスティングレベルのIPまたはユーザーエージェントによるブロック。 ホストによっては、デフォルトでユーザーエージェントをブロックしたり、一般的なレート制限をかけたりします。悪質なトラフィック向けのIP範囲ブロックが、クローラーの範囲まで誤って捕捉することもあります。
3. robots.txt / .htaccess の設定ミス。 余計な Deny from や壊れたリライトルールによって、ディレクトリ全体が禁止されることがあります。(上で説明したrobots.txtの落とし穴も忘れないでください。)
4. セキュリティプラグイン。 Wordfence、iThemes Securityなどのツールには、正当なクローラーまで捕捉する強力なボットブロックの初期設定が含まれていることがあります。
5. ログインウォール/認証が必要なコンテンツ。 認証の背後にあるものは、設計上ボットを拒否します。Googlebotは決してログインしません。この原因は、最後のセクションで説明するように、意図的であることも多いものです。
6. ファイル/ディレクトリの権限エラー。 サーバー管理者にとって典型的な原因です。WordPressでは、Rank Mathが妥当な値を案内しています。ディレクトリは 755/750、ファイルは 644/640、wp-config.php は 400/440 です。また、パーマリンク設定から「.htaccess を再生成する」ことも一般的な修正方法です。
7. マルウェア/侵害されたサイトが不正なアクセスルールを注入しているケース、そしてクローラーのIP範囲を意図せず捕捉する8. 地域ブロックです。
403を診断する — どの層が発行しているかを切り分ける
多くのガイドは、すぐに「プラグインを無効にする」よう勧めます。本当に必要なスキルは、どの層がリクエストを拒否しているかを見つけることです。裸の403ステータスコードだけでは、それ自体で原因は分かりません。CDN、WAF、アプリケーション、ホスト、権限、地域、キャッシュのどれを指すのか、レスポンスヘッダー、ログ、またはセキュリティイベントの記録を確認してから原因を特定してください。証拠なしに「たぶんWAFだ」と決めつけないでください。層によって修正方法は変わります。
- GSCのページのインデックス登録 → 「アクセスが禁止されているためブロック(403)」で影響を受けるURLを確認し、次にURL検査 → 公開URLをテストで現在のライブレスポンスを確認します。
- curlで再現し、ユーザーエージェントを入れ替えて、サーバーが実際に返しているステータスを確認します。
通常のブラウザーUAでは# As a generic client curl -I https://example.com/page/ # Spoofing Googlebot's UA (tests UA-based rules) curl -I -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" https://example.com/page/200なのにGooglebotのUAでは403になるなら、ユーザーエージェントのルールを見つけたことになります。 - robots.txt自身のステータスを確認します。(それ自体が403になっている場合は別の問題です。上を参照してください。)
- CDN/WAFのセキュリティイベントで、クローラーがチャレンジを受けたりブロックされたりしていないか確認します。
- リバースDNS + フォワードDNSで、本当にGooglebotか確認します。UA文字列だけでは確認できません。UAは簡単に偽装できます。
- 段階的に無効化して切り分けます。WAFルールまたはプラグインを一度に1つずつ無効化し、403が消えるまで確認します。
修正する — ボットを正しい方法で許可リストに追加する
魅力的に見える修正は、Googlebotのユーザーエージェント文字列を許可リストに追加することです。しかし、そこで止めないでください。UA文字列は簡単に偽装できるため、UAだけで許可するのは、Googlebotを名乗るスクレーパーを誰でも通してしまうセキュリティホールです。正しく確認してください。
- リバースDNS + フォワードDNS、またはGoogle/Bingが公開しているIP範囲でボットを確認します。
- 多くのCDN/WAFには、この確認を代行する**「verified bots」**カテゴリがあります。生のUA許可ルールより、こちらを優先してください。
- セキュリティ全体を無効にするのではなく、特定のルール(WAFの管理ルール、1つのファイアウォールルール、1つのプラグイン設定)を修正します。
- その後、GSCのページのインデックス登録レポートで**「修正を検証」**し、緊急ならURL検査から再インデックスをリクエストします。
403が実際には問題ない場合 — これらを「修正」しない
すべての403がバグとは限りません。ステージングサイト、管理エリア、非公開の会員セクション、ペイウォール/ゲート付きコンテンツは、そもそもインデックスさせたくないため、403が正しく意図的です。AhrefsやScreaming Frogの監査でそれらに403が出ても問題ではありません。修正が必要なのは、公開され、インデックス可能であるはずのページが誤ってブロックされている場合だけです。監査で出た403をすべて反射的に「解決」しないでください。まず、そのページを本当にインデックスに入れたいのかを確認します。
より広いファミリー、つまり4xxと5xxの違い、そして403がその中でどこに位置するかについては、私のHTTPステータスコードとSEOへの影響 ガイドを参照してください。このクラスターにある姉妹記事の401 Unauthorizedと404 Not Foundの詳しい解説もあります。
AIによる要約
Advanced版の要点をまとめます。
- 403=「理解したが、拒否した」。 RFC 9110では、その拒否は認証情報が理由である必要はなく、禁止されたリソースの存在を隠すためにサーバーが404を返すことさえできます。通常存在しないことを示す404や、
WWW-Authenticateヘッダーを必要とする特定の認証チャレンジである401とは異なります。再認証すれば403が確実に直るわけではありません。 - インデックス登録の結果は
noindexに似るが、仕組みは異なる。noindexタグは取得して読み取られなければ機能しません。一方、403はGoogleがコンテンツをまったく読めないようにします。どちらも異なる経路で、ページが検索に表示されないという結果になります。 - Googlebotへの403は調査する価値があるが、自動的に誤りとは限らない。 まず、そのページが本当に公開されるべきかを確認します。公開されるべきなら、WAF、IPブロック、セキュリティプラグインなどのルールが誤って発動した可能性があります。ただし、どの原因が最も多いかを示す信頼できるデータはないため、原因は順位ではなくチェックリストとして扱います。
- 403はサイト全体のクロールレートに影響しない。 既知のURLは、見つからない系の応答を返し続ける期間が長いほど、個別のクロール頻度が徐々に下がります。しかし、それはサイト全体のスロットリングとは異なります。Googlebotのクロールを抑えるために401/403を使わないでください。短い期間なら429/503/500を使います。ただし、長く続ければインデックスから外れるリスクがあります。
- robots.txtの落とし穴(逆の効果): ページの403はハードブロックです。一方、robots.txt自身の403は許可的に扱われ、Googleはクロールルールがないと仮定します。
- 思い込みではなく証拠で診断する。 裸の403だけでは発生源は特定できません。特定の層を疑う前に、レスポンスヘッダー、ログ、CDNのセキュリティイベントで確認します。GSCのページのインデックス登録 + 公開URLをテスト → Googlebot UAあり/なしでcurl → CDNのセキュリティイベント → UAではなくDNS/IPでボットを確認 → 段階的に無効化、という順で進めます。
- 修正: 生のUA文字列ではなく、DNS/IPやCDNの「verified bots」カテゴリで確認済みボットを許可します。その後、GSCで修正を検証します。
- 一部の403は正しい。 ステージング、管理エリア、会員限定、ペイウォール付きコンテンツは「修正」しないでください。バグと決めつける前に意図を確認します。
公式ドキュメント
403と4xxファミリーがどのように扱われるかを説明する一次資料です。
プロトコル
- RFC 9110 §15.5.4: 403 Forbidden — 基本となるHTTP仕様です。拒否は認証情報が理由である必要はなく、禁止されたリソースの存在を隠すためにオリジンが404を返すことも認めています。
- HTTPステータスコードがGoogleのクローラーに与える影響 — 429を除く4xxのURLはインデックスから削除され、クロールレートにも影響しないという決定的な説明です。
- ページのインデックス登録レポート — Search Consoleヘルプ — 「アクセスが禁止されているためブロック(403)」のステータスと、「Googlebotは認証情報を決して提示しない」という説明です。
- クロールのレート制限に403や404を使わない — Gary Illyesによる、4xxがクロール抑制に不適切な理由の説明です。
- Googleのクロールレートを下げる — 403/404ではなく、短時間だけ500/503/429を返す正しい方法です。
- Googleによるrobots.txt仕様の解釈 — robots.txtの4xxは制限なしとして扱われるというニュアンスです。
- Googlebotの確認 — 正しい方法で許可リストに追加するためのリバースDNSと公開IP範囲です。
Bing/Microsoft
- クロールエラーアラート一覧 — Bing Webmaster Tools — Bingのクロールエラーのカテゴリです。
CDN/WAF
- 正当なリクエストをブロックする偽ボット検出 — Cloudflare自身が、管理された偽ボットルールによって誤検知のブロックが生じる可能性を説明しています。WAFルールが発行元の層だと思い込まず、確認するために役立ちます。
一般的なWebリファレンス
- MDN — 403 Forbidden — 権威ある基本定義と、401と403の明確な違いです。
原文からの引用
記録に基づく発言です。各リンクは、引用された箇所へ直接移動するディープリンクです。
Google — 4xx/403の扱い
- “Google doesn’t use the content from URLs that return 4xx status codes… Google doesn’t index URLs that return a 4xx status code, and URLs that are already indexed and return a 4xx status code are removed from the index.” (翻訳)「Googleは4xxステータスコードを返すURLのコンテンツを使用しません。Googleは4xxステータスコードを返すURLをインデックスに登録せず、すでにインデックスされていて4xxステータスコードを返すURLはインデックスから削除されます。」 — Google Search Centralのドキュメント。 引用箇所へ移動
- “All 4xx errors, except 429, are treated the same: Google crawlers inform the next processing system that the content doesn’t exist.” (翻訳)「429を除くすべての4xxエラーは同じように扱われます。Googleのクローラーは次の処理システムに、コンテンツが存在しないと伝えます。」 引用箇所へ移動
- “Don’t use 401 and 403 status codes for limiting the crawl rate. The 4xx status codes, except 429, have no effect on crawl rate.” (翻訳)「クロールレートの制限に401や403のステータスコードを使わないでください。429を除く4xxステータスコードはクロールレートに影響しません。」 引用箇所へ移動
Google — 「Googlebotは認証しない」という点
- “HTTP 403 means that the user agent provided credentials, but was not granted access. However, Googlebot never provides credentials, so your server is returning this error incorrectly. The page will not be indexed.” (翻訳)「HTTP 403は、ユーザーエージェントが認証情報を提示したものの、アクセスを許可されなかったことを意味します。しかし、Googlebotは決して認証情報を提示しないため、サーバーはこのエラーを誤って返しています。ページはインデックスに登録されません。」 — Search Consoleヘルプ「アクセスが禁止されているためブロック(403)」。 引用箇所へ移動
GoogleのGary Illyes — 4xxでレート制限しない
- “All 4xx HTTP status codes (again, except 429) will cause your content to be removed from Google Search. What’s worse, if you also serve your robots.txt file with a 4xx HTTP status code, it will be treated as if it didn’t exist.” (翻訳)「429を除くすべての4xx HTTPステータスコードは、コンテンツをGoogle検索から削除させます。さらに悪いことに、robots.txtファイルも4xx HTTPステータスコードで配信すると、存在しないかのように扱われます。」 — Google Search Central Blog、2023年2月。 引用箇所へ移動
- “Return a 500, 503, or 429 HTTP status code to Googlebot when it’s crawling too fast.” (翻訳)「Googlebotのクロールが速すぎる場合は、500、503、または429 HTTPステータスコードを返してください。」 引用箇所へ移動
Google — robots.txtの403がもたらす逆転
- “Google’s crawlers treat all 4xx errors, except 429, as if a valid robots.txt file didn’t exist. This means that Google assumes that there are no crawl restrictions.” (翻訳)「Googleのクローラーは、429を除くすべての4xxエラーを、有効なrobots.txtファイルが存在しなかったかのように扱います。つまり、Googleはクロール制限がないと仮定します。」 — 「Googleによるrobots.txt仕様の解釈」。 引用箇所へ移動
MDN — 一般的な定義と401対403の違い
- “The HTTP 403 Forbidden client error response status code indicates that the server understood the request but refused to process it. This status is similar to 401, except that for 403 Forbidden responses, authenticating or re-authenticating makes no difference.” (翻訳)「HTTP 403 Forbiddenクライアントエラーレスポンスステータスコードは、サーバーがリクエストを理解したものの、処理を拒否したことを示します。このステータスは401に似ていますが、403 Forbiddenレスポンスでは、認証や再認証を行っても違いがない点が異なります。」 — MDN Web Docs。 引用箇所へ移動
Barry Schwartz — 403対503の深刻度 Googleの発言を伝える報道であり、Google公式ページの一次資料ではありません。また、元のURL自体が自動取得に対して403を返します(話題に即した皮肉です)。最終情報として扱う前に、ブラウザーで確認してください。
- Googleの警告を報じた記事:“lost load[s] of their pages from our index because they were serving them with a 403 status code instead of a 503.” (翻訳)「403ではなく503を配信したため、インデックスから大量のページを失ったサイトがある」。 報道記事を読む
403を診断する — 意思決定ツリー
まずGooglebotが実際に受け取るものから始め、層を絞り込みます。
Q1. その403は、インデックスに入れたいページに出ていますか?
- いいえ(ステージング、管理エリア、会員限定、ペイウォール)→ おそらく正しい状態です。そのままにします。 ここで終了です。
- はい → 続けます。
Q2. 403を返しているのはページですか、それとも robots.txt ですか?
robots.txtが403になっている → 別の問題です。Googleは今やすべてのクロールルールを無視し(robots.txtがないものとして扱い)、制限なしであるとみなします。robots.txtが200を返すよう修正してください。ページの403は別の問題かもしれません。- ページが403になっている → 続けます。
Q3. curl で再現しますか — そしてユーザーエージェントによって変わりますか?
curl -I https://example.com/page/
curl -I -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" https://example.com/page/- ブラウザーUA=200、Googlebot UA=403 → ユーザーエージェントルールがボットをブロックしています(WAF、サーバー設定、またはプラグイン)。Q4へ進みます。
- 両方=403 → より広いブロック(IP範囲、ディレクトリ権限、
.htaccessのDeny)です。サーバー設定とファイル権限を確認します。 - 両方=200なのにGSCには403が表示される → ブロックはおそらくエッジ/CDN側で、IPまたは確認済みボットの状態をキーにしています。Q4に進み、CDNのセキュリティイベントを確認します。
Q4. CDN/WAF(Cloudflareなど)の背後にいますか?
- はい → セキュリティイベントで、クローラーがチャレンジを受けたりブロックされたりしていないか確認します。ボット対策モード/上位ボット対策モード、WAFの管理ルール、カスタムファイアウォールルールを疑います。生のUAではなく、確認済みの検索ボットを許可します。
- いいえ → サーバーレベルのIP/UAブロック、次にセキュリティプラグイン(Wordfenceなど)、その次に
.htaccessとファイル権限を確認します。
Q5. ルールを修正しましたか?
- 確認済みボット/DNS/IP範囲で許可し、UA文字列だけでは許可しない → GSCのページのインデックス登録で修正を検証 → 緊急ならURL検査から再インデックスをリクエストします。
アンチパターン — 私が何度も見る403の間違い
Googlebotを遅くするために403(または404)を使う。 403を返すとクロールが抑制されるという神話があります。しかし、429を除く4xxはクロールレートに影響せず、403を返したページをインデックスから外すだけです。クロールを遅くしたいなら、短い期間(数時間から1〜2日)だけ429、503、または500を返すか、Search Consoleのクロールレートに関するレポートを使います。403は一時的であってもクロール制御の道具ではありません。
監査で403を404とまったく同じように扱う。 どちらも最終的にはURLをインデックスから外すため、同じ分類にまとめたくなります。しかし、404は通常「なくなった」を意味する一方、403は「アクセスを積極的に拒否された」を意味します。修正可能な設定ミスのこともあれば、意図的なブロックのこともあります。どちらの場合も、ひとまとめにすると本当の問題が隠れます。結果だけでなく、原因と意図を診断してください。
Googlebotがブロックされるような「怪しいことをした」と考える。 Googlebotは認証情報を決して送らないため、「悪い認証情報」が理由の403という説明は、Googlebotには本当には当てはまりません。ただし、すべてのブロックがバグという意味ではありません。まず、そのページが公開される想定だったかを確認します。公開されるはずなら、Googlebotが引き起こしたと合理化せず、発動したルール(WAF、IPブロック、プラグイン)を見つけてください。
ユーザーエージェント文字列だけで許可リストに追加する。 UA文字列は簡単に偽装できるため、allow if UA contains "Googlebot" というルールは、Googleになりすましたすべてのスクレーパーをセキュリティの内側へ招き入れます。リバースDNS + フォワードDNSまたは公開IP範囲で確認するか、CDNのverified-botsカテゴリを使ってください。
robots.txt の403とページの403を混同する。 効果は反対です。ページの403は、インデックスから外すハードブロックです。robots.txt の403は、Googleにクロールルールがないと思わせるため、禁止したかったパスまでクロールする可能性があります。何かを修正する前に、実際にどちらを見ているのかを診断してください。
意図的な403を「修正」する。 ステージングサイト、管理エリア、会員限定、ペイウォール付きコンテンツは、クローラーに403を返す想定です。監査で見つかった403をすべて反射的に解決すると、インデックスさせたくなかったものまで公開する可能性があります。まず、そのページが公開されるべきかを確認してください。
意図・範囲・発行層のフレームワーク
403の監査は、3つの質問に順番に答えると速くなります。
- 意図: このリソースは公開されるべきですか?意図的な非公開エリアのブロックはそのままにします。インデックス可能なページの403はインシデントとして扱います。
- 範囲: 失敗は1つのURL、1つのディレクトリ、1つのユーザーエージェント、1つの地域に影響しますか、それともすべてのリクエストに影響しますか?プラグインを無作為に変更するより、境界のほうが責任のあるルールを速く特定できることが多いものです。
- 発行層: CDN/WAFイベント、オリジンのアクセスログ、アプリケーションログ、レスポンスヘッダーを比較します。403を実際に発行している最初の層を変更してください。403を発行し得るすべての層を変更する必要はありません。
修正後は、匿名アクセスと確認済みクローラーのアクセスを別々に検証します。Googlebotを名乗るユーザーエージェントは、UAルールを再現するには便利ですが、クローラーの身元を証明するものではありません。
プロンプト:層ごとに403を切り分ける
Diagnose this HTTP 403 using only the evidence I paste. Classify the likely issuing
layer as CDN/WAF, web server, application/security plugin, filesystem permissions,
or intentional access control. Compare generic and claimed-bot responses, identify
which observation supports each conclusion, and give the smallest safe change plus
an anonymous curl test and Search Console validation. Do not recommend disabling all
security or trusting a user-agent string as identity.
[PASTE SANITIZED HEADERS, CURL OUTPUT, SECURITY EVENT, AND LOG LINES]プロンプト:WAF例外をレビューする
Review this WAF rule intended to stop 403s for legitimate search crawlers. Check its
scope, whether crawler identity is verified, what non-crawler traffic it could admit,
and whether robots.txt behaves differently from page URLs. Return a least-privilege
rewrite, test cases, and rollback conditions. Do not invent provider syntax.
[PASTE RULE AND PROVIDER] 403レスポンスを診断するツール
- 一括HTTPステータスコードチェッカー: ログインセッションを引き継がずに、ブロックが孤立しているのか、URLパターン全体に影響しているのかを確認します。
- HTTPヘッダーチェッカー: 発行層の特定に役立つCDNフィンガープリント、リクエストID、セキュリティヘッダーを調べます。
- Googlebot検証ツール: クローラーを通す前にIPの証拠を検証します。ユーザーエージェントだけを証拠にしないでください。
- Search Consoleのページのインデックス登録とURL検査: 報告された影響範囲を確認し、現在のレスポンスをライブテストし、修正後に検証します。
- CDN/WAFのセキュリティイベントとオリジンログ: エッジがブロックを記録し、オリジンがリクエストを記録していないなら、修正場所はエッジです。
自分で確認する:403 Forbidden
403の意味と対処方法についての5つの簡単な質問です。それぞれの答えを選んでから、確認しましょう。
役立つリソース
私の関連記事
- HTTPステータスコードとSEOへの影響 — 4xx/5xxを網羅するまとめです。コードの中で403がどこに位置するか、そして「4xxはページをインデックスから外す」という仕組みを説明しています。
- テクニカルSEO初心者ガイド — 403のようなクロール/インデックスへのアクセス問題が、より大きな全体像のどこに当たるかを説明します。
- Robots.txtとSEO:知っておくべきすべて — robots.txtの403のニュアンスと、クロール制御の実際を扱います。
私の講演
- How Search Works (SlideShare)— 私の「クロール → レンダリング → インデックス → 配信」ウォークスルーです。403は最初のゲートでの失敗です。(通常の免責事項: “This is my understanding of systems… not going to be 100% complete or accurate.” (翻訳)「これはシステムについての私の理解であり、完全または正確とは限りません」)
業界の関連記事
- クロールレート制限に403や404を使わない (Google Search Central Blog)— 4xxがクロール抑制に不適切な理由をGary Illyesが説明します。
- Googleのクロールレートを下げる (Google Search Central)— 対比のための、正しい500/503/429アプローチです。
- Google、403ステータスコードの誤用に警告 (検索エンジン・ラウンドテーブル)— 403と503の深刻度に関する逸話です(ブラウザーで確認してください。このページはボットに403を返します)。
- Google:Googlebotのレート制限に403/404エラーレスポンスを使わない (検索エンジン・ジャーナル)— 2023年の指針に関する報道です。
- Google Search Consoleで「アクセスが禁止されているためブロック(403)」を修正する方法 (SEOTesting)— 原因と修正の構成がしっかりしており、「すべての403を修正すべきか」という観点も含みます。
- 「アクセスが禁止されているためブロック(403)」エラーの修正方法 (Rank Math)— 具体的なWordPressの
chmod値とHealth Checkのワークフローを紹介します。 - HTTPステータスコード:なぜウェブサイトがクロールされないのか (Screaming Frog)— クローラー側の診断(UA切り替え、JSレンダリング、IP/UA許可リスト)です。
変更履歴
2026年8月22日に更新。
編集概要と記録された変更の詳細。変更の詳細
-
変更の詳細な注記は現在英語でのみ提供されています。
完全な比較は利用できません — この改訂の以前のスナップショットがアーカイブされていません。
2026年8月6日に更新。
編集概要と記録された変更の詳細。変更の詳細
-
変更の詳細な注記は現在英語でのみ提供されています。
完全な比較は利用できません — この改訂の以前のスナップショットがアーカイブされていません。
2026年8月6日に更新。
編集概要と記録された変更の詳細。変更の詳細
-
変更の詳細な注記は現在英語でのみ提供されています。
完全な比較は利用できません — この改訂の以前のスナップショットがアーカイブされていません。
2026年7月17日に更新。
編集概要と記録された変更の詳細。変更の詳細
-
変更の詳細な注記は現在英語でのみ提供されています。
完全な比較は利用できません — この改訂の以前のスナップショットがアーカイブされていません。
Try it live
This is a real endpoint on this site — not a simulation.
Hit it from the button, open it in a new tab, or
curl -i it from your terminal, and the server answers with the actual status code this article is about.