image.refused-everywhere

Image refused to the API's crawler, probe refused. Level: Error.

When it is raised

The API's crawler (PolymorphismOGPreview/1.0, or the user agent chosen with ?ua=) requested the image URL, followed at most 7 redirects (8 requests), and got HTTP 401 or 403. The API then sent a second GET (the probe) for the same URL from its own server with the facebookexternalhit/1.1 user agent; the probe also follows at most 7 redirects (8 requests) and stops reading once more than 1,024 bytes have arrived. The probe also sends a different Accept header (text/html,application/xhtml+xml instead of image/*). Raised when the probe ends in any status outside 2xx, for example 401, 403, 404, 429 or 5xx, or a 3xx response with no Location header.

What it does to a shared link

The image host refused the API's crawler and answered the probe, which carries the facebookexternalhit/1.1 user agent, with a status outside 2xx. Any client refused in the same way cannot fetch the image. No dimensions, size, format or crop could be measured.

How to fix it

  1. Find the rule that refuses the image: authentication, signed or expiring URLs, hotlink protection, or a bot filter on the image host or its CDN.
  2. Serve the card image publicly, with no cookie, login, Referer or user-agent requirement.
  3. If the host cannot be changed, move the image to one that serves it publicly and update the og:image or twitter:image tag to the new URL.
  4. Confirm the result by requesting the image with GET and a non-browser user agent, following redirects, and checking for status 200.
curl -sL -o /dev/null -w "%{http_code}\n" -A "ExampleBot/1.0" https://example.com/card.png # expect: 200

Related checks

Sources