Facebook Sharing Debugger shows 403 error despite server returning 200 OK
5

Problem Summary

Facebook Sharing Debugger consistently returns a 403 error for URLs on my website, even though our server logs confirm that Facebook's crawler received a 200 OK response with valid OG meta tags.

Environment

  • Hosting: Google Cloud Platform (Cloud Run + Global External Application Load Balancer)
  • Framework: Next.js (App Router)
  • Domain: https://www.fullstackfamily.com

    What I've Verified

    1. Server Logs (GCP Load Balancer) Request URL: https://www.fullstackfamily.com/news/2848 Status: 200 Remote IP: 173.252.127.24 (Facebook crawler IP, AS32934) User-Agent: facebookexternalhit/1.1 Timestamp: 2026-01-06T21:31:17Z

    2. Response Content (verified via curl)

    3. robots.txt

  • Returns 200 OK
  • Explicitly allows facebookexternalhit

    1. Additional Checks
  • No Cloud Armor blocking (created explicit allow rules for Meta IP ranges)
  • No IPv6 AAAA records (IPv4 only)
  • Cloud Run IAM: allUsers has roles/run.invoker
  • SSL certificate: Valid Google-managed certificate
  • Other OG validators (opengraph.xyz): Show correct OG data

    Facebook Debugger Output

  • Response Code: 403

  • Response Code Reason: "This response code could be due to a robots.txt block"
  • og:title: Shows domain name instead of actual title

    The Mystery

  • GCP logs show 200 OK response to Facebook crawler

  • curl with Facebook's User-Agent returns 200 OK with correct OG tags
  • Facebook Debugger displays 403 error
  • Tried "Scrape Again" multiple times and Batch Invalidator - same result
  • Tested with brand new URLs never shared before - same 403 error

    Questions

    1. Why does Facebook Debugger show 403 when the server clearly returns 200 OK?
    2. Is there a known issue with Facebook crawler and GCP Load Balancer?
    3. How can I further debug this issue?

    Any help would be greatly appreciated. Thank you!

Sungpark Kim
Asked about 3 months ago
Selected Answer
1

same here, with s3 and my website local store as fallback storage.

Instagram Graph API media creation is failing with code 9004 / subcode 2207052 for publicly accessible S3-hosted JPEG files.

What we tested: - Same IG user ID and same access token - Same /{ig-user-id}/media call - External image URL works - Our own S3 public image URL fails - S3 object returns HTTP 200 - Content-Type is image/jpeg - File is publicly downloadable - This started suddenly on April 1–2, 2026 with no infrastructure or code changes - It affects multiple client accounts

Observed error: code: 9004 error_subcode: 2207052 message: Only photo or video can be accepted as media type. error_user_title: Media download has failed. The media URI doesn't meet our requirements.

Evidence: - Same token works with third-party URL - Public S3 URL fails - Sharing/Meta debugging shows fetch issues on our origin

April 2 at 10:39 AM
Emerson
2

Same problem here.

Logs clearly show facebookexternalhit getting a 200 response. We also updated our robots.txt yesterday to explicitly allow full access to facebookexternalhit, still no luck.

April 2 at 7:20 AM
Todd
Todd

Should clarify, same issue, but AWS and a standard load balancer.

April 2 at 7:23 AM
Todd

After testing many subdomains in the share-debugger (to get fresh robots.txts every time):

Every once in a while Facebook sends a "range: bytes=0-512000" header, which results in a 206 "Partial Content" status code, and in that case the whole process works, no 403 error. All other times, we are sending back a 200 status code, resulting in failure.

April 2 at 10:16 AM
Todd

Should clarify. I was observing facebookexternalhit grabbing the robots.txt. There are two scenarios that happen:

  • Facebookexternalhit sets a "range: bytes=0-512000" header while requesting robots.txt. We return a status code 206. The URL being shared gets scraped, everything works.

  • Facebookexternhit does NOT set the range header while requesting robots.txt). We return a status code 200. Facebook's crawler claims it received a 403 status code.

April 2 at 11:11 AM
5

same problem!

March 6 at 2:14 AM
Mariyan