Chatvertise
Back to blog

October 02, 2026 · 6 min read

Ad rejected? What “crawler_bot_blocked”, “robots_txt” and “missing_favicon” mean — and how to fix them

Status “rejected”, next to it a code like crawler_bot_blocked — and you wonder what was wrong with your ad. Usually: nothing. Most rejections in ChatGPT Ads aren't about the ad copy but about the landing page. On every review, OpenAI automatically fetches the destination URL to verify content, preview image and brand. If that fetch fails, there's no approval — no matter how good the ad is.

How the review works

After you save a new or edited ad, an OpenAI crawler visits the destination URL, follows redirects, reads robots.txt, loads the page and takes a screenshot. Only after a successful capture does the ad move on to the content review. That's why the rejection reason tells you fairly precisely where the fetch broke down.

Group 1: the crawler is locked out

  • robots_txt: your robots.txt forbids access to the page. Explicitly allow the OpenAI crawler for the landing page (or the whole site).
  • crawler_bot_blocked: a bot-protection layer (WAF, firewall rules, DDoS protection) blocks the fetch. Put the OpenAI crawler's user agent on the allowlist.
  • crawler_captcha: the page shows a captcha before any content is visible. Captchas must not sit in front of the landing page.
  • crawler_login_required: the URL requires a login. Landing pages must be reachable without signing in — link a public page.

Group 2: the server answers with an error

Codes like crawler_404, crawler_403, crawler_500 or crawler_503 mirror the HTTP status your server returned to the crawler. crawler_404 simply means the URL doesn't exist — a typo, a deleted page, or tracking parameters your shop can't handle. crawler_429 means your server turned the crawler away because of a rate limit. 5xx codes show the page was unreachable at review time — after a deployment or outage, just re-save the ad so the review runs again. crawl_failed without a number is the catch-all for timeouts, DNS problems or dropped connections.

Group 3: the page is there but unusable

  • unsupported_content_type: the URL doesn't return HTML but, for example, a PDF or a downloadable file.
  • landing_page_image_processing_failed: the page's preview image couldn't be processed — check that your Open Graph image is reachable and in a common image format.
  • landing_page_unusable: the page loads but shows no usable content: an empty page, a bare JavaScript shell without server rendering, or an error page served with status 200.

Group 4: it's the account, not the page

missing_favicon is the most common account-level reason: OpenAI shows your brand's favicon next to every ad and requires one before anything is served. In Chatvertise you upload it on the Ad account page (PNG, ICO or SVG, up to 1 MB); it's passed straight to OpenAI and clears the reason. Domain approval belongs here too: if the destination URL points to a domain that isn't verified for your account, the API rejects even saving the ad with “Destination domain is not approved” — verification happens in the OpenAI Ads Manager.

What to do

  • Read the reason on the ad detail page in Chatvertise — it sits right below the “rejected” status.
  • Open the URL in a private browser window: do you see content immediately, without login and without a captcha?
  • Check robots.txt and bot protection, verify the status code with curl or an HTTP checker.
  • Apply the fix and re-save the ad — every change starts a new review.

Looking ahead: OpenAI has just published the crawler evidence — fetch status, robots.txt result and a screenshot of the reviewed version — in the API. Once it runs reliably, we'll show it right on the rejected ad, so you no longer have to guess what the crawler saw.

Ready to advertise in ChatGPT?

Connect your account and launch your first ad in minutes.

Start for free