403 Forbidden
What an HTTP 403 error is, how Google treats it (blocked — similar to a noindex), common causes (access controls, bot blocking, misconfigured permissions), and how to fix 403s for SEO.
1 evidence signal on this page
- Related live toolHTTP Status & Redirect Checker
A 403 Forbidden means the server understood the request but refused it — access was denied, and that refusal doesn't have to be about credentials at all (the server can even send a 404 instead to hide that a forbidden resource exists). It's not a 404 ("nothing here") and not a 401 ("authenticate first"); a 403 is an active "you can't have this." For SEO, a 403 that stays on a page you want public keeps it out of Google's index — a similar end result to a noindex, but a different mechanism, since Google can't read content from a 4xx response at all. Because Googlebot never sends credentials, a 403 served to it is worth investigating rather than assuming intentional — common causes include a CDN/WAF bot filter, a server IP/user-agent block, a security plugin, or an .htaccess/permissions error, though there's no reliable data on which is most frequent. Never use 403 to throttle crawling (that's 429/503, for a short window only). And check intent first: some 403s (staging, admin, gated content) are correct and don't need fixing. Note the flip: a 403 on robots.txt itself is treated permissively, while a 403 on a page is a hard block.
TL;DR — A 403 ForbiddenAn HTTP 403 client-error status code meaning the server understood the request but refuses to fulfill it — access is denied, whether or not credentials are involved. For SEO, a 403 served to Googlebot on a page meant to be public and indexable usually points to a misconfigured rule; a persistent 403 keeps a page out of the index either way. means the server understood the request but is refusing it — whoever asked doesn’t have permission. It’s different from a 404 (“nothing here”) and from a 401 (“log in first”). For SEO, a page that keeps returning a 403 to GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. won’t get indexedStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed., and if it was already indexed it drops out — so if it’s a page you want foundA 302 (\"Found\") is a temporary redirect: it forwards users to a new URL while telling search engines the original URL should stay in the index. It's a weak canonicalization signal, not the zero-equity dead end of SEO folklore., a 403 is a problem to fix.
What a 403 actually means
If you’re a visitor who just hit a 403 on a site you don’t run: it’s a server-side rule, not something in your browser. Try a different network or device, make sure you’re not on a VPN the site blocks, and clear cookies — but if it persists, the fix is on the site owner’s end, and the rest of this article is written for them.
When you (or a search engine botA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index.) request a page, the server sends back a status
code. 200 means “here it is.” A 403 Forbidden means “I understood what you
asked for, and I’m refusing to give it to you.” That refusal doesn’t have to be
about credentials — the server can refuse for other reasons too, and it’s even
allowed to send a 404 instead if it wants to hide that a forbidden resource
exists at all. 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
The easiest way to keep the 4xx codes straight:
- 404 Not Found404 Not Found is the HTTP client-error status code a server returns when it can't find the requested URL — RFC 9110 defines it as no current representation, or unwillingness to disclose one. A \"hard 404\" actually returns the 404 status; a \"soft 404\" returns a success code (like 200) for a page that's really gone. 404s are normal and expected: the fact that some URLs 404 doesn't affect your site's other, successful pages, and Google de-indexes 404'd URLs over time (probably retrying for some period, less and less often). — “There’s nothing here.” The page doesn’t exist.
- 403 Forbidden — “There’s something here, but you can’t have it.” An active block.
- 401 Unauthorized401 Unauthorized is a client-error HTTP status code meaning the request lacks valid authentication credentials — the server wants you to log in before it serves the page. For SEO it means the content is gated: Googlebot never sends credentials, so a 401'd page can't be seen and won't be indexed. — “You need to log in / authenticate first.” (A 403 is stronger: even logging in wouldn’t help.)
So a 403 isn’t the server being broken. It’s the server working exactly as told — the question is whether it was told the right thing.
Why this matters for SEO
GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. has to be able to fetch a page to index it. If it asks for your page and
gets a 403, Google can’t read any content from that response at all — it’s refused
before Google gets that far. Google won’t index a page that returns a 403, and a
page that was indexed will eventually drop out of the results if it keeps
returning one. The end result looks a lot like adding a noindex — the page
disappears from Google — but the mechanism is different: a noindex tag has to be
fetched and read to work, while a 403 blocks Google from reading anything in the
first place. 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
Here’s the twist that makes 403s worth understanding: Googlebot never logs in. It doesn’t send passwords or credentials. So a 403 — which often means “your credentials weren’t accepted” — can’t be that, specifically, for Googlebot. That doesn’t automatically mean it’s a mistake, though: the block could still be intentional (a staging site, an admin area, gated content you never wanted crawled). What it does mean is that a 403 on a page you do want public is worth investigating — some security rule, firewall, or plugin may have decided Googlebot looked suspicious. Google’s own guidance is scoped the same way: if you want the page indexed, allow Googlebot through without requiring authentication.
What usually causes it
I don’t have hard data on which cause is most common — treat this as a checklist, not a ranked list:
- A CDN or firewall (WAF) blocking the bot — Cloudflare’s Bot Fight Mode is a frequent offender, catching Googlebot along with the bad bots.
- A server or hosting rule blocking certain IP addresses or user-agentsA user agent is the HTTP request header a client (browser, crawler, or bot) sends to identify itself. For crawlers, a short user-agent token — a substring of that string — is what robots.txt rules actually target..
- A misconfigured
robots.txtor.htaccessfile. - A security plugin (like Wordfence on WordPress) being too aggressive.
- A login wall — anything behind authentication will 403 a bot by design, and this one is often intentional rather than a bug.
- File permission errors on the server.
The quick fix path
- In Google Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results., open the Page IndexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. report and look for “Blocked due to access forbidden (403).”
- Run the URL through the URL Inspection tool and hit Test Live URL to see what Googlebot gets right now.
- If you use Cloudflare or another CDN/firewall, check its security logs for Googlebot being blocked, and allow verified search bots through.
- Once you’ve fixed the rule, use Validate Fix in Search ConsoleGoogle's free tool for monitoring crawling, indexing, and search performance..
And one thing not to do: never use a 403 to try to slow Googlebot down. It
doesn’t work and it can get your pages deindexed. If a bot is hammering your server,
that’s what 429 and 503 are for.
Want the deeper version — the Cloudflare/WAF diagnosis, the robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere.-403 gotcha, and how to allowlist bots the right way? Switch to the Advanced tab.
TL;DR — A 403 means the server understood the request and refused it on an access basis — distinct from 404 (gone) and 401 (authenticate). For indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. the outcome mirrors a
noindex: Google won’t index a 403 URL and removes one that was indexed, though the mechanism (a server/CDN/WAF block) is nothing like a meta tag. Because GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. never sends credentials, a 403 to GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. is nearly always a misconfiguration — most often CDN/WAF botA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. filtering (Cloudflare Bot Fight Mode leads the pack), server IP/UA blocks, security plugins, or.htaccess/permissions. 403 has no effect on crawl rateCrawl rate is how fast a search engine crawler fetches pages from your site — the number of simultaneous requests it makes and the delay between them. Google sets it automatically based on your server's health; it's the supply side of crawl budget, not a ranking factor. — never use it to throttle (that’s 429429 Too Many Requests is an HTTP client-error status code that means a client sent too many requests in a given time window — a mechanism called rate limiting. Unlike other 4xx codes, Google treats 429 as a server-overload signal and slows crawling instead of removing content./503503 Service Unavailable is the HTTP status code a server returns when it's temporarily unable to handle a request — usually because of overload or planned maintenance. It tells crawlers 'come back later' instead of 'this page is gone,' which is why Google recommends it (paired with a Retry-After header) for short, planned downtime.). And the flip case matters: a 403 on robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. itself is treated permissively, while a 403 on a page is a hard block.
403 vs 401 vs 404 — get the mental model right first
These three get conflated constantly, and the distinction drives the whole diagnosis. The base definition comes from the HTTP spec itself, RFC 9110 §15.5.4: the server understood the request and refuses to fulfill it. A couple of nuances in that same section matter more than people give them credit for:
- Refusal doesn’t have to be about credentials. RFC 9110 allows a 403 for reasons unrelated to authentication — it doesn’t universally prove the requester is “known” or that credentials were even involved. Don’t read every 403 as an authentication story.
- A 403 doesn’t have to admit the resource exists. The spec explicitly permits an origin server that wants to hide whether a forbidden resource exists at all to respond with 404 instead. So the reverse is also true: a 404 doesn’t always mean “nothing was ever here” — sometimes it means “there’s something here I don’t want you to know about.”
- 401 vs. 403 isn’t just “weaker vs. stronger.” A 401 is specifically an
authentication challenge — the spec requires it to come with a
WWW-Authenticateheader telling the client how to authenticate. A 403 carries no such requirement; it’s a broader refusal that doesn’t promise re-authenticating (with the same or different credentials) will change anything. MDN’s plain-English version: a 403 is “similar to 401, except that … authenticating or re-authenticating makes no difference. The request failure is tied to application logic, such as insufficient permissions.” 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 Found404 Not Found is the HTTP client-error status code a server returns when it can't find the requested URL — RFC 9110 defines it as no current representation, or unwillingness to disclose one. A \"hard 404\" actually returns the 404 status; a \"soft 404\" returns a success code (like 200) for a page that's really gone. 404s are normal and expected: the fact that some URLs 404 doesn't affect your site's other, successful pages, and Google de-indexes 404'd URLs over time (probably retrying for some period, less and less often)., for contrast — the ordinary case is “there’s nothing here,” though see the concealment point above.
That difference is part of why a 403 to Googlebot is worth a second look rather than business-as-usual. A 401 to a bot on a members-only page is arguably working — the area needs a login. A 403 to a bot on a page that’s supposed to be public means some rule decided the requester was unwelcome — though, as below, it’s still worth confirming that page was actually meant to be public before you call it a bug.
How Google treats a 403 (outcome resembles noindex; the mechanism doesn’t)
Google lumps 403 in with the rest of the 4xx family. From the Search Central docs: “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.” And: “All 4xx errors, except 429, are treated the same: Google crawlersA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. inform the next processing system that the content doesn’t exist.” Google also notes that a known URL’s crawl frequency gradually decreases the longer it keeps returning a 4xx — that’s a per-URL effect, separate from your site’s overall crawl rateCrawl rate is how fast a search engine crawler fetches pages from your site — the number of simultaneous requests it makes and the delay between them. Google sets it automatically based on your server's health; it's the supply side of crawl budget, not a ranking factor. (more on that distinction below). 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
So the outcome resembles a noindex: the page won’t enter the index, and if it’s
already there, it falls out over time. But the mechanism is genuinely different,
not just cosmetically different: a noindex tag has to be fetched and parsed out of
the page’s HTML to take effect, while a 403 stops Google from reading any content at
all — there’s no page for Google to process. Two different paths that happen to
converge on the same non-appearance-in-Search result. This is why in my
HTTP Status Codes guide I describe
403 simply as “the client is known but doesn’t have access rights,” and note that
4xxs cause pages to drop from the index — though “known” there is Google’s report
shorthand, not a claim that every 403 involves a credentialed requester.
Why a 403 to Googlebot is worth investigating (not always a mistake)
This section leans on Google’s own Page IndexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. help doc: “HTTP 403 means that the user agentA user agent is the HTTP request header a client (browser, crawler, or bot) sends to identify itself. For crawlers, a short user-agent token — a substring of that string — is what robots.txt rules actually target. 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.” Read that in context, though — it’s report-specific guidance about a page Search ConsoleGoogle's free tool for monitoring crawling, indexing, and search performance. assumes you want indexed, not a universal claim that every 403 to Googlebot is a bug. Googlebot doesn’t authenticate, so a 403 framed strictly as “your credentials aren’t good enough” doesn’t quite apply to it — but plenty of 403s aren’t about credentials at all, and a server can legitimately decide Googlebot (or anyone else) doesn’t get a resource, full stop.
So before you chase a fix: is this a page you actually want public and indexed? If it’s staging, an admin area, a paywall, or anything gated, a 403 to Googlebot is correct and there’s nothing to fix (more in “When a 403 is actually fine,” below). If it is a page meant to be public, then yes, you’re most likely looking at a rule that fired on the wrong requester — a WAF that flagged the crawler as a bot to block, an IP-range block that swept up Google’s ranges, a security plugin’s default paranoia — but I don’t have reliable data on how often each of those is the actual cause, so treat the list below as candidates to check, not a diagnosis. Google’s guidance for a page that should be public: admit non-signed-in users, or explicitly allow Googlebot without authentication (after verifying its identity — more on that below).
403 has no effect on crawl rate — do not use it to throttle
People sometimes reach for 403 (or 404) to get Googlebot to back off a struggling server. Don’t. Google is explicit: “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.” Worth being precise about scope here: Google separately says an individual known URL’s crawl frequency gradually decreases the longer it keeps 4xx-ing — but that’s a narrowing of interest in that one URL, not a site-wide crawl-rate throttle. If you need the latter, 403 doesn’t do it.
Gary Illyes wrote an entire post about this ( Don’t 404 my yum): “All 4xx HTTP status codesAn HTTP status code is the three-digit number a server returns with every response to tell a browser or crawler what happened to its request — success, redirect, client error, or server error. For SEO the code matters as much as the content: it tells Google and Bing whether to index a page, follow a redirect, retry later, or drop the URL from the index. (again, except 429) will cause your content to be removed from Google Search.” The correct emergency lever is a 500, 503, or 429 returned for a short window (hours, not days) — and even that isn’t a free pass: Google warns that persistent 5xx responses over multiple days risk pages being dropped from the index too, so scope and duration matter, not just which status code you picked. Barry Schwartz’s write-up of an earlier incident captured the stakes bluntly: sites have “lost load[s] of their pages from our index because they were serving them with a 403 status code instead of a 503.” A 503 is understood as temporary; a 403 gets you deindexed.
The robots.txt gotcha: a 403 on robots.txt is permissive, not restrictive
Here’s a distinction nearly every competing article misses, and it flips the intuition. A 403 on a page is a hard block. But a 403 on your robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. file itself is treated the opposite way. From Google’s robots.txt spec: “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.”
So if your firewall starts 403-ing robots.txt, Google concludes you have no
rules and crawls freely — including paths you meant to disallow. Illyes’ colorful
version: if you had a rule disallowing your “dirty laundry,” now Googlebot knows
about it too. Don’t conflate “my robots.txt returned a 403” (Google now ignores your
rules) with “my pages returned a 403” (those URLs get deindexed). They have opposite
effects, and misdiagnosing which one you’re looking at sends you fixing the wrong
thing.
How Bing treats 403
Honestly, Bing’s public documentation on 403 specifically is thinner than Google’s, so I’ll scope this narrowly rather than pad it. BingbotBingbot is Microsoft Bing's primary web crawler — the bot that discovers, fetches, and renders pages to build the Bing index. That index also powers Yahoo, DuckDuckGo, Ecosia, and Microsoft Copilot, so Bingbot's reach is far wider than Bing's own search-market share. is denied by the same mechanisms Googlebot is — robots.txt rules, server-level IP/user-agent blocks, and WAF/firewall rules. Bing Webmaster ToolsMicrosoft's free portal for monitoring and improving how a site appears in Bing search — the peer to Google Search Console, plus IndexNow instant indexing, richer backlink data, and keyword volumes. Because Bing's index also feeds Microsoft Copilot, it doubles as a window into AI-search visibility. surfaces crawl errors under its crawl-error alerts. The practical takeaway is the same on both engines: allow the verified crawler through your security layer, and verify the bot by its published IP ranges and reverse DNS rather than by trusting a user-agent string. If anything, treat Bing as a reminder that “fix Googlebot” isn’t automatically “fix all bots” — check both engines’ tools after a WAF change.
Common causes (not ranked — I don’t have prevalence data across sites)
CDN/WAF bot protection — the most underserved cause in existing SEO content. This is where I’d start checking in 2026, even though I can’t tell you how often it’s the actual culprit versus the others below. Cloudflare’s Bot Fight Mode and Super Bot Fight Mode, WAF Managed Rules, and custom firewall rules routinely 403 Googlebot and Bingbot as collateral damage. The tell: the block is at the edge, so your origin server and CMSA content management system (CMS) is software that lets users create, manage, and publish digital content — like blog posts and pages — without writing raw code. WordPress, Drupal, and Joomla are the most common open-source CMS platforms. look totally clean while GSC still reports 403s. Check Security Events in your CDN dashboard for the crawler being challenged or blocked.
2. Server / hosting-level IP or user-agent blocks. Some hosts block by user-agent or rate-limit by default, and IP-range blocks meant for abusive traffic can catch crawler ranges.
3. robots.txt / .htaccess misconfiguration. A stray Deny from or a broken
rewrite rule can forbid a whole directory. (And remember the robots.txt gotcha
above.)
4. Security plugins. Wordfence, iThemes Security, and similar tools ship with aggressive bot-blocking defaults that can catch legitimate crawlers.
5. Login walls / authenticated content. Anything gated behind auth 403s a bot by design — Googlebot never logs in. This one is often intentional (see the last section).
6. File / directory permission errors. The classic server-admin cause. On
WordPress, Rank Math documents sane values — directories 755/750, files
644/640, wp-config.php 400/440 — and “regenerate .htaccess” via the
Permalinks settings as a common fix.
7. Malware / compromised site injecting bad access rules, and 8. geoGenerative Engine Optimization — visibility inside AI answer engines.-blocking that inadvertently catches a crawler’s IP range.
Diagnosing a 403 — isolate which layer is issuing it
Most guides jump straight to “disable your plugins.” The real skill is finding which layer is refusing the request — and a bare 403 status code doesn’t tell you that by itself; you need response headers, logs, or a security-event entry that actually points at the CDN, WAF, application, host, permissions, geography, or cache before you name a culprit. Don’t skip straight to “it’s probably the WAF” without evidence. Here’s how the fix differs by layer:
- GSC Page Indexing → “Blocked due to access forbidden (403)” to see affected URLs, then URL Inspection → Test Live URL for the current live response.
- Reproduce it with curl, swapping user-agents, to confirm the status the
server actually returns:
If a normal browser UA gets# 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/200but the Googlebot UA gets403, you’ve found a user-agent rule. - Check robots.txt’s own status (is it 403-ing? different problem — see above).
- Review CDN/WAF Security Events for the crawler being challenged or blocked.
- Verify the crawler is really Googlebot via reverse + forward DNS, not the UA string (which is trivially spoofed).
- Isolate by disabling in stages — one WAF rule or plugin at a time — until the 403 clears.
Fixing it — allowlist bots the right way
The tempting fix is to allowlist the Googlebot user-agent string. Don’t stop there — UA strings are trivially spoofed, so allowlisting by UA alone is a security hole that lets any scraper claiming to be Googlebot straight in. Verify properly:
- Confirm bots by reverse DNS + forward DNS or against Google’s/Bing’s published IP ranges.
- Most CDNs/WAFs offer a “verified bots” category that does this validation for you — prefer that over a raw UA allow rule.
- Fix the specific rule (a WAF managed rule, one firewall rule, one plugin setting) rather than disabling security wholesale.
- Then Validate Fix in GSC’s Page Indexing reportThe Google Search Console report (formerly Index Coverage) showing how many of your URLs are indexed vs. not indexed, and grouping the not-indexed ones by reason. and, if it’s urgent, request re-indexing via URL Inspection.
When a 403 is actually fine — don’t “fix” these
Not every 403 is a bug. A 403 is correct and intentional for staging sites, admin areas, private member sections, and paywalled/gated content you never wanted indexed. In an Ahrefs or Screaming Frog audit, a 403 on those is a non-issue — the fix is only needed when a page that’s supposed to be public and indexable is getting blocked by accident. Don’t reflexively “resolve” every 403 an audit throws; confirm the page is one you actually want in the index first.
For the broader family — how 4xx vs 5xx differ, and where 403 sits among them — see my HTTP Status Codes & Their SEO Impact guide, and the sibling 401 Unauthorized401 Unauthorized is a client-error HTTP status code meaning the request lacks valid authentication credentials — the server wants you to log in before it serves the page. For SEO it means the content is gated: Googlebot never sends credentials, so a 401'd page can't be seen and won't be indexed. and 404 Not Found404 Not Found is the HTTP client-error status code a server returns when it can't find the requested URL — RFC 9110 defines it as no current representation, or unwillingness to disclose one. A \"hard 404\" actually returns the 404 status; a \"soft 404\" returns a success code (like 200) for a page that's really gone. 404s are normal and expected: the fact that some URLs 404 doesn't affect your site's other, successful pages, and Google de-indexes 404'd URLs over time (probably retrying for some period, less and less often). deep dives in this cluster.
A 403 can come from the origin, CDN, WAF, geo rule, or bot policy. The status confirms denial; it does not identify the responsible layer by itself.
Use my HTTP Status Checker with representative user agents to confirm which public URL and redirect hop returns 403. HTTP Status Checker Free
- Test without cookies from outside the trusted network.
- Compare ordinary browser and crawler behavior and inspect the redirect chain.
- Correct the responsible access rule, then rerun the same URL and user-agent combinations.
AI summary
A condensed take on the Advanced version:
- 403 = “understood, but refused.” Per RFC 9110, that refusal doesn’t have to be
about credentials, and the server can even send a 404 instead if it wants to
hide that a forbidden resource exists. Distinct from 404 (usually doesn’t
exist) and 401 (a specific authentication challenge requiring a
WWW-Authenticateheader) — re-authenticating doesn’t reliably fix a 403. - IndexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. outcome resembles a
noindex, but the mechanism differs. Anoindextag has to be fetched and read to work; a 403 blocks Google from reading any content at all. Both end with the page not appearing in Search, by different paths. - A 403 to GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. is worth investigating, not automatically a mistake. Check whether the page is actually supposed to be public first. If it is, the likely cause is a misfired rule (WAF, IP block, security plugin) — but there’s no reliable data on which cause is most common, so treat causes as a checklist, not a ranking.
- 403 has no effect on site-wide crawl rateCrawl rate is how fast a search engine crawler fetches pages from your site — the number of simultaneous requests it makes and the delay between them. Google sets it automatically based on your server's health; it's the supply side of crawl budget, not a ranking factor.. A known URL’s own crawl frequency gradually declines the longer it 4xxs, but that’s not the same as throttling the whole site. Never use 401/403 to throttle GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer.; use 429429 Too Many Requests is an HTTP client-error status code that means a client sent too many requests in a given time window — a mechanism called rate limiting. Unlike other 4xx codes, Google treats 429 as a server-overload signal and slows crawling instead of removing content./503503 Service Unavailable is the HTTP status code a server returns when it's temporarily unable to handle a request — usually because of overload or planned maintenance. It tells crawlers 'come back later' instead of 'this page is gone,' which is why Google recommends it (paired with a Retry-After header) for short, planned downtime./500 for a short window instead — and even that risks deindexingDeindexing means getting a URL to stop appearing in Google's search results. There's no single delete button — the right method depends on whether you own the page, whether removal is temporary or permanent, and whether the content should still exist. if left on too long.
- robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. gotcha (opposite effect): a 403 on a page is a hard block; a 403 on robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. itself is treated as permissive — Google assumes no crawl rules exist.
- Diagnose by evidence, not assumption. A bare 403 doesn’t identify its source — confirm with response headers, logs, or CDN security events before blaming a specific layer. GSCA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results. Page IndexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. + Test Live URL → curl with/without a Googlebot UA → CDN Security Events → verify the bot by DNS/IP, not UA → disable in stages.
- Fix: allowlist verified bots (DNS/IP or a CDN “verified bots” category), not the raw UA string. Then Validate Fix in GSC.
- Some 403s are correct: staging, admin, member-only, paywalled content — don’t “fix” those. Check intent before assuming a bug.
Official documentation
Primary-source documentation on how 403 and the 4xx family are handled.
Protocol
- RFC 9110 §15.5.4: 403 Forbidden — the base HTTP spec: refusal doesn’t have to be about credentials, and an origin may send 404 instead to conceal a forbidden resource.
- How HTTP status codes affect Google’s crawlers — the definitive statement that 4xx (except 429429 Too Many Requests is an HTTP client-error status code that means a client sent too many requests in a given time window — a mechanism called rate limiting. Unlike other 4xx codes, Google treats 429 as a server-overload signal and slows crawling instead of removing content.) URLs are removed from the indexStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. and don’t affect crawl rateCrawl rate is how fast a search engine crawler fetches pages from your site — the number of simultaneous requests it makes and the delay between them. Google sets it automatically based on your server's health; it's the supply side of crawl budget, not a ranking factor..
- Page Indexing report — Search Console Help — the “Blocked due to access forbidden (403)” status and the “GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. never provides credentials” explanation.
- Don’t use 403s or 404s for rate limiting — Gary Illyes, Feb 2023, on why 4xx codes are the wrong crawl-throttle tool.
- Reduce Google’s crawl rate — the correct approach: return 500/503503 Service Unavailable is the HTTP status code a server returns when it's temporarily unable to handle a request — usually because of overload or planned maintenance. It tells crawlers 'come back later' instead of 'this page is gone,' which is why Google recommends it (paired with a Retry-After header) for short, planned downtime./429 briefly, not 403/404.
- How Google Interprets the robots.txt Specification — the nuance that a 4xx on robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. is treated as no restrictions.
- Verifying Googlebot — reverse DNS and the published IP ranges, for allowlisting the right way.
Bing / Microsoft
- List of crawl error alerts — Bing Webmaster Tools — Bing’s crawl-error categories.
CDN/WAF
- Fake bot detection blocking legitimate requests — Cloudflare’s own documentation of how managed fake-botA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. rules can produce false-positive blocks, useful for confirming (rather than assuming) that a WAF rule is the issuing layer.
General web reference
- MDN — 403 Forbidden — the authoritative base definition and the clean 401-vs-403 distinction.
Quotes from the source
On-the-record statements. Each link is a deep link that jumps to the quoted passage on the source page.
Google — how 4xx / 403 are handled
- “Google doesn’t use the content from URLs that return 4xx status codes… Google doesn’t indexStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. 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 Search Central docs. Jump to quote
- “All 4xx errorsThe 4xx (client error) and 5xx (server error) HTTP status codes a server returns instead of a successful 2xx — and how Google treats each class very differently., except 429429 Too Many Requests is an HTTP client-error status code that means a client sent too many requests in a given time window — a mechanism called rate limiting. Unlike other 4xx codes, Google treats 429 as a server-overload signal and slows crawling instead of removing content., are treated the same: Google crawlersGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. inform the next processing system that the content doesn’t exist.” Jump to quote
- “Don’t use 401 and 403 status codes for limiting the crawl rateCrawl rate is how fast a search engine crawler fetches pages from your site — the number of simultaneous requests it makes and the delay between them. Google sets it automatically based on your server's health; it's the supply side of crawl budget, not a ranking factor.. The 4xx status codes, except 429, have no effect on crawl rateCrawl rate is how fast a search engine crawler fetches pages from your site — the number of simultaneous requests it makes and the delay between them. Google sets it automatically based on your server's health; it's the supply side of crawl budget, not a ranking factor..” Jump to quote
Google — the “GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. never authenticates” point
- “HTTP 403 means that the user agentA user agent is the HTTP request header a client (browser, crawler, or bot) sends to identify itself. For crawlers, a short user-agent token — a substring of that string — is what robots.txt rules actually target. 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.” — Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results. Help, “Blocked due to access forbidden (403).” Jump to quote
Gary Illyes, Google — don’t rate-limit with 4xx
- “All 4xx HTTP status codesAn HTTP status code is the three-digit number a server returns with every response to tell a browser or crawler what happened to its request — success, redirect, client error, or server error. For SEO the code matters as much as the content: it tells Google and Bing whether to index a page, follow a redirect, retry later, or drop the URL from the index. (again, except 429) will cause your content to be removed from Google Search. What’s worse, if you also serve your robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. file with a 4xx HTTP status codeAn HTTP status code is the three-digit number a server returns with every response to tell a browser or crawler what happened to its request — success, redirect, client error, or server error. For SEO the code matters as much as the content: it tells Google and Bing whether to index a page, follow a redirect, retry later, or drop the URL from the index., it will be treated as if it didn’t exist.” — Google Search Central Blog, Feb 2023. Jump to quote
- “Return a 500, 503, or 429 HTTP status code to Googlebot when it’s crawlingCrawling is how search engines use automated bots (like Googlebot and Bingbot) to discover URLs and download pages. A page has to be crawlable to be indexed, but crawling on its own isn't a ranking factor. too fast.” Jump to quote
Google — the robots.txt-403 flip
- “Google’s crawlersA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. 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.” — How Google Interprets the robots.txt Specification. Jump to quote
MDN — the general definition and the 401-vs-403 distinction
- “The HTTP 403 ForbiddenAn HTTP 403 client-error status code meaning the server understood the request but refuses to fulfill it — access is denied, whether or not credentials are involved. For SEO, a 403 served to Googlebot on a page meant to be public and indexable usually points to a misconfigured rule; a persistent 403 keeps a page out of the index either way. 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.” — MDN Web Docs. Jump to quote
Barry Schwartz, Search Engine Roundtable — 403-vs-503 severity Relayed reporting on a Google statement, not a first-party Google page; and note the source URL itself 403s automated fetchers (an on-topic irony) — confirm against a browser before treating as final.
- Reporting Google’s warning: sites have “lost load[s] of their pages from our index because they were serving them with a 403 status code instead of a 503.” Read the coverage
Diagnosing a 403 — decision tree
Start from what GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. actually gets, then narrow by layer.
Q1. Is the 403 on a page you want indexedStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed.?
- No (staging, admin, member-only, paywalled) → it’s likely correct. Leave it. Stop here.
- Yes → continue.
Q2. Is it the page returning 403, or robots.txt?
- robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. is 403-ing → different problem: Google now ignores all your crawl
rules (treats robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. as absent). Fix robots.txt to return
200; your page 403 may be a separate issue. - The page is 403-ing → continue.
Q3. Does curl reproduce it — and does it depend on the user-agentA user agent is the HTTP request header a client (browser, crawler, or bot) sends to identify itself. For crawlers, a short user-agent token — a substring of that string — is what robots.txt rules actually target.?
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/- Browser UA = 200, GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. UA = 403 → a user-agent rule is blocking the botA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. (WAF, server config, or plugin). Go to Q4.
- Both = 403 → a broader block (IP range, directory permissions,
.htaccessDeny). Check server config and file permissions. - Both = 200 but GSCA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results. still shows 403 → the block is likely edge/CDN-side and keyed on IP or verified-bot status. Go to Q4 and check CDN Security Events.
Q4. Do you sit behind a CDN/WAF (Cloudflare etc.)?
- Yes → check Security Events for the crawlerA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. being challenged/blocked. Suspect Bot Fight Mode / Super Bot Fight Mode, WAF Managed Rules, or a custom firewall rule. Allow verified search bots (not a raw UA allow).
- No → check server-level IP/UA blocks, then security plugins (Wordfence etc.),
then
.htaccessand file permissions.
Q5. Fixed the rule?
- Allowlist by verified bot / DNS / IP range, never UA string alone → Validate Fix in GSC Page IndexingThe Google Search Console report (formerly Index Coverage) showing how many of your URLs are indexed vs. not indexed, and grouping the not-indexed ones by reason. → request re-index via URL InspectionA Google Search Console feature that reports how Google sees one specific URL on a property you own. By default it shows the last-indexed snapshot; a separate \"Test live URL\" mode fetches the current version. if urgent.
Anti-patterns — 403 mistakes I see constantly
Using 403 (or 404) to slow GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. down. The myth is that returning a 403 throttles crawlingCrawling is how search engines use automated bots (like Googlebot and Bingbot) to discover URLs and download pages. A page has to be crawlable to be indexed, but crawling on its own isn't a ranking factor.. It doesn’t — 4xx (except 429429 Too Many Requests is an HTTP client-error status code that means a client sent too many requests in a given time window — a mechanism called rate limiting. Unlike other 4xx codes, Google treats 429 as a server-overload signal and slows crawling instead of removing content.) has no effect on crawl rateCrawl rate is how fast a search engine crawler fetches pages from your site — the number of simultaneous requests it makes and the delay between them. Google sets it automatically based on your server's health; it's the supply side of crawl budget, not a ranking factor., and instead deindexes the pages you 403’d. If you need to slow a crawl, return 429, 503503 Service Unavailable is the HTTP status code a server returns when it's temporarily unable to handle a request — usually because of overload or planned maintenance. It tells crawlers 'come back later' instead of 'this page is gone,' which is why Google recommends it (paired with a Retry-After header) for short, planned downtime., or 500 for a short window (hours to a day or two), or use Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results.’s crawl-rate reporting. 403 is never the crawl-control tool, even temporarily.
Treating a 403 exactly like a 404 in an audit. Both eventually drop the URL from the indexStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed., so it’s tempting to bucket them together. But a 404 usually means “gone,” while a 403 means “access was actively refused” — sometimes a fixable misconfiguration, sometimes an intentional block. Lumping them masks the actual problem either way. Diagnose the cause and the intent, not just the outcome.
Assuming GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. “did something suspicious” to earn the block. Googlebot never sends credentials, so a 403 framed as “bad credentials” doesn’t really apply to it. That doesn’t mean every block is a bug, though — first confirm the page was meant to be public. If it was, don’t rationalize the block as something Googlebot triggered; find the rule that fired (WAF, IP block, plugin) instead.
Allowlisting by user-agentA user agent is the HTTP request header a client (browser, crawler, or bot) sends to identify itself. For crawlers, a short user-agent token — a substring of that string — is what robots.txt rules actually target. string alone. UA strings are trivially spoofed, so an
allow if UA contains "Googlebot" rule invites every scraper pretending to be
Google straight through your security. Verify via reverse + forward DNS or
published IP ranges, or use your CDN’s verified-bots category.
Confusing a 403 on robots.txt with a 403 on your pages. Opposite effects. A
403 on a page is a hard block that deindexes it. A 403 on robots.txt makes Google
assume you have no crawl rules — so it may crawl paths you meant to disallow.
Diagnose which one you’re actually seeing before you fix anything.
“Fixing” intentional 403s. Staging sites, admin areas, member-only, and paywalled content are supposed to 403 crawlersA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index.. Reflexively resolving every 403 in an audit can expose things you never wanted indexed. Confirm the page should be public first.
The intent, scope, and issuing-layer framework
A 403 audit gets faster when I answer three questions in order:
- Intent: should this resource be public? Leave a deliberate private-area block alone. Treat a 403 on an indexable page as an incident.
- Scope: does the failure affect one URL, one directory, one user agentA user agent is the HTTP request header a client (browser, crawler, or bot) sends to identify itself. For crawlers, a short user-agent token — a substring of that string — is what robots.txt rules actually target., one geography, or every request? The boundary usually identifies the responsible rule faster than changing plugins at random.
- Issuing layer: compare the CDN/WAF event, origin access log, application log, and response headers. Change the first layer that actually emits the 403, not every layer that could.
After the fix, verify anonymous access and verified crawlerA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. access separately. A
claimed Googlebot user agentA user agent is the HTTP request header a client (browser, crawler, or bot) sends to identify itself. For crawlers, a short user-agent token — a substring of that string — is what robots.txt rules actually target. is useful for reproducing a UA rule but is not proof
of crawlerA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. identity.
Prompt: isolate a 403 by layer
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] Prompt: review a WAF exception
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] Patrick's relevant free tools
- Website Down Checker — Check whether one URL or a small sample is reachable right now from one Cloudflare location, with response timing, redirects, DNS fallback evidence, and connection-status details.
Tools for diagnosing 403 responses
- Bulk HTTP Status Code Checker: find whether the block is isolated or affects a URL pattern without carrying your login session.
- HTTP Header Checker: inspect CDN fingerprints, request IDs, and security headers that help identify the issuing layer.
- Googlebot Verifier: validate IP evidence before allowing a crawlerA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. through; never treat the user-agentA user agent is the HTTP request header a client (browser, crawler, or bot) sends to identify itself. For crawlers, a short user-agent token — a substring of that string — is what robots.txt rules actually target. alone as proof.
- Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results. Page IndexingThe Google Search Console report (formerly Index Coverage) showing how many of your URLs are indexed vs. not indexed, and grouping the not-indexed ones by reason. and URL InspectionA Google Search Console feature that reports how Google sees one specific URL on a property you own. By default it shows the last-indexed snapshot; a separate \"Test live URL\" mode fetches the current version.: get the reported affected set, live-test the current response, and validate after the fix.
- CDN/WAF security events plus origin logs: if the edge records a block and the origin records no request, the fix belongs at the edge.
Test yourself: 403 Forbidden
Five quick questions on what a 403 means and how to handle it. Pick an answer for each, then check.
Resources worth your time
My related writing
- HTTP Status Codes & Their SEO Impact — the full 4xx/5xx roundup; where 403 sits among the codes, and the “4xxs drop pages from the indexStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed.” mechanics.
- The Beginner’s Guide to Technical SEO — where crawl/index access problems like 403s fit in the bigger picture.
- Robots.txt and SEO: Everything You Need to Know — for the robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere.-403 nuance and how crawl controls actually work.
My speaking
- How Search Works (SlideShare) — my crawl → render → index → serve walkthrough; a 403 is a failure at the very first gate. (Standing disclaimer: “This is my understanding of systems… not going to be 100% complete or accurate.”)
From around the industry
- Don’t use 403s or 404s for rate limiting (Google Search Central Blog) — Gary Illyes on why 4xx is the wrong crawl-throttle tool.
- Reduce Google’s crawl rate (Google Search Central) — the correct 500/503503 Service Unavailable is the HTTP status code a server returns when it's temporarily unable to handle a request — usually because of overload or planned maintenance. It tells crawlers 'come back later' instead of 'this page is gone,' which is why Google recommends it (paired with a Retry-After header) for short, planned downtime./429429 Too Many Requests is an HTTP client-error status code that means a client sent too many requests in a given time window — a mechanism called rate limiting. Unlike other 4xx codes, Google treats 429 as a server-overload signal and slows crawling instead of removing content. approach for contrast.
- Google Warns About Misuse Of 403 Status Codes (Search Engine Roundtable) — the 403-vs-503 severity anecdote (verify in a browser; the page 403s botsA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index.).
- Google: Don’t Use 403/404 Error Responses For Rate Limiting Googlebot (Search Engine Journal) — coverage of the 2023 guidance.
- How to Fix Blocked Due to Access Forbidden (403) in Google Search Console (SEOTesting) — solid causes/fix structure, including the “should you fix every 403?” framing.
- How To Fix Blocked Due to Access Forbidden (403) Error (Rank Math) — concrete WordPress
chmodvalues and a Health Check workflow. - HTTP Status Codes: Why Won’t My Website Crawl? (Screaming Frog) — the crawlerA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index.-side diagnostic (UA switch, JS renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM., IP/UA allowlisting).
403 Forbidden
An HTTP 403 client-error status code meaning the server understood the request but refuses to fulfill it — access is denied, whether or not credentials are involved. For SEO, a 403 served to Googlebot on a page meant to be public and indexable usually points to a misconfigured rule; a persistent 403 keeps a page out of the index either way.
Related: Blocked due to access forbidden (403), 401 Unauthorized, 404 Not Found, HTTP Status Code
403 Forbidden
HTTP 403 Forbidden is a client-error status code returned when a server understands a request but refuses to fulfill it — the requester (a browser, botA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index., or crawlerA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index.) doesn’t have permission to access the resource. Per RFC 9110, that refusal doesn’t have to be about credentials at all, and it doesn’t confirm the requester is “known” — the spec even permits an origin to send a 404 instead if it wants to hide that a forbidden resource exists. Unlike a 401 Unauthorized401 Unauthorized is a client-error HTTP status code meaning the request lacks valid authentication credentials — the server wants you to log in before it serves the page. For SEO it means the content is gated: Googlebot never sends credentials, so a 401'd page can't be seen and won't be indexed., which is specifically an authentication challenge, a 403 is a broader refusal where re-authenticating usually won’t help. Google’s Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results. help phrases the report-specific case as: the user agentA user agent is the HTTP request header a client (browser, crawler, or bot) sends to identify itself. For crawlers, a short user-agent token — a substring of that string — is what robots.txt rules actually target. provided credentials, but access wasn’t granted — that’s guidance about a page you want indexedStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed., not the universal definition.
The distinction from a 404 Not Found404 Not Found is the HTTP client-error status code a server returns when it can't find the requested URL — RFC 9110 defines it as no current representation, or unwillingness to disclose one. A \"hard 404\" actually returns the 404 status; a \"soft 404\" returns a success code (like 200) for a page that's really gone. 404s are normal and expected: the fact that some URLs 404 doesn't affect your site's other, successful pages, and Google de-indexes 404'd URLs over time (probably retrying for some period, less and less often). matters for diagnosis, with the caveat above. A 404 usually says “there’s nothing here.” A 403 says “there’s something here, but you can’t have it” — an active denial. Because GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. never sends credentials, Google’s own guidance treats a 403 to GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. on a page meant to be public as likely a misfiring access rule (a WAF, a CDN bot filter, an IP block, a security plugin) rather than working access control — but a 403 to Googlebot on a page that’s supposed to be private (staging, admin, gated content) is correct and not a mistake at all.
For indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed., the outcome resembles a noindex, but the mechanism is genuinely different: a noindex tag has to be fetched and read to take effect, while a 403 blocks Google from reading any content in the first place. Google doesn’t index URLs that return a 4xx status, and URLs already indexed that start returning a 4xx are removed from the index over time. A 403 also has no effect on site-wide crawl rateCrawl rate is how fast a search engine crawler fetches pages from your site — the number of simultaneous requests it makes and the delay between them. Google sets it automatically based on your server's health; it's the supply side of crawl budget, not a ranking factor. — you can’t use it to slow Googlebot down; a known URL’s own retry frequency may decline over time, but 429 and 503 (for a short window) are the actual tools for throttling.
One important nuance runs the opposite way: a 403 on the robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. file itself is treated permissively — Google assumes no crawl restrictions exist — whereas a 403 on an actual page is a hard block that deindexes that URL. In Google Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results.’s Page Indexing reportThe Google Search Console report (formerly Index Coverage) showing how many of your URLs are indexed vs. not indexed, and grouping the not-indexed ones by reason., a page-level 403 surfaces as “Blocked due to access forbidden (403).”
Related: Blocked due to access forbidden (403), 401 Unauthorized, 404 Not Found, HTTP Status Code
Build-time retrieval analysis plus live signals for this exact article. The automatic chunk report includes a deterministic readiness score and is ready without a model download.
Search Console
sampleGA4 traffic (28d)
sampleCloudflare traffic (7d)
sampledCrUX field data (28d, phone)
sampleGoogle NLP entities
localChangelog
Revision history
Compare the published article with an archived editorial snapshot. Added and removed words are shown only after you open a comparison.
Updated Jul 17, 2026.
Editorial summary and recorded change details.Summary
Separated intentional access control from misconfiguration and grounded 403 behavior in RFC 9110.
Change details
-
Added the RFC-permitted edge case where a server returns 404 instead of 403 to conceal a forbidden resource.
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.