"Blocked due to access forbidden (403)" in Search Console
Your server let Googlebot ask, then refused to answer. Usually a bot-management rule rather than anything you configured on purpose. Here is how to tell.
This URL is not indexed and it should be. Something is in the way.
Is it still happening?
Paste the URL. We request it twice from the same place, once with a browser user agent and once with the Googlebot user agent, and show you both status codes side by side.
Whether your server responds differently to a crawler than to a browser, which separates a bot-management rule from a genuine access restriction.
We request from our own network, not from Google's IP ranges. An edge rule that verifies Googlebot by reverse DNS will treat us as a spoofed crawler, so a 403 here does not always mean the real Googlebot is blocked. URL Inspection in Search Console fetches from Google and settles it.
What this error actually means.
Google requested the page and the server replied 403 Forbidden: request received, understood, and refused. This is not a crawl block and not a missing page. Your infrastructure made a decision about the requester.
Because the response carries no content, Google has nothing to index and nothing to judge. Persistent 403s eventually drop a URL from the index entirely.
The tell that separates the two causes is simple: does the page load for you in a browser? If it does, something is treating crawler traffic differently, and the culprit is almost always a security layer you did not think of as an SEO surface.
5 things that produce this error.
Ordered by how often they turn out to be the cause, not by how obvious they look.
A WAF or bot-management rule at the edge
The most common cause by a wide margin. Cloudflare, AWS WAF, Akamai, Sucuri, and most managed hosts ship bot rules that are on by default. They are tuned to block scrapers, and a crawler that is not on the allowlist looks exactly like a scraper. Nothing in your application logs this, because the request never reaches your application.
Rate limiting that a crawl triggers and a human never does
A limit of a few requests per second per IP is invisible to real visitors and routine for a crawler working through a large site. The first few requests succeed and the rest return 403, which is why this error often covers a subset of URLs with no pattern in common.
Authentication in front of content that should be public
Basic auth left on a subdirectory, a preview-protection setting on a hosting platform, a members-only rule that matches more paths than intended, or a paywall that returns 403 instead of serving a public preview.
IP or country blocking
Googlebot crawls predominantly from US IP ranges. A site that geo-blocks traffic outside its own market, or that blocks entire hosting-provider ranges to fight scrapers, blocks the crawler along with everything else.
A user-agent blocklist that is too broad
A rule written to stop one abusive bot, matching on a substring that also appears in legitimate crawler user agents. Blocking on user agent alone is unreliable in both directions: it stops crawlers you want and does nothing against a scraper that sends a browser user agent.
How to clear it.
Establish whether it is bot-specific
Request the URL twice, once with a browser user agent and once as Googlebot. If the browser gets 200 and the crawler gets 403, you are looking at a bot rule and can stop searching your application code.
curl -sI https://example.com/page -o /dev/null -w "browser: %{http_code}\n"
curl -sI https://example.com/page \
-A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" \
-o /dev/null -w "googlebot: %{http_code}\n"Allow verified crawlers at the edge, not by user agent
Every major CDN has a verified-bot category that confirms identity by reverse DNS rather than trusting the user-agent string. Use it. An allowlist keyed on the user agent alone is trivially spoofed and gives you no real protection in exchange for the risk of blocking Google.
Raise or exempt rate limits for verified crawlers
If the block comes from a rate limiter, exempt verified crawler traffic rather than raising the global limit. If crawl volume is genuinely a load problem, set a crawl rate in Search Console instead of returning errors, which is the worst possible signal to send.
Check the edge logs, not the application logs
A 403 from a WAF never reaches your origin, so your framework logs will show nothing at all for these requests. Look in the CDN or firewall event log, filter for the URL, and read which rule fired. That log entry names the rule, which turns an afternoon of guessing into a one-line change.
Next to check.
LintPage rules covering this: ai/all-crawlers-blocked, security-headers
Questions, answered.
Why does the page load fine for me but return 403 to Google?
Does Cloudflare block Googlebot?
Will a 403 remove my page from Google?
Should I block AI crawlers the same way?
What is the difference between 403 and 401 in Search Console?
Catch this one before Search Console does.
Search Console tells you weeks after the fact. LintPage runs 60 checks against a URL in about 30 seconds. Free, no signup.
run a full scan →