BIMI Down: When Your CDN Kills Your SVG Logo
Your SVG is perfect, the DMARC record is solid, but the logo is a ghost—the problem isn't your SVG, it's the network path delivering it.

You did everything right. The SVG is a perfect tiny profile, stripped of scripts, meeting every requirement of the spec. Your DMARC policy is locked down at `p=quarantine` or `p=reject`. The TXT record is in DNS, pointing to a valid HTTPS URL for the logo. Yet, in Gmail, Yahoo, and Apple Mail, your brand's avatar is conspicuously absent. The BIMI checker gives you a maddeningly vague error: 'Logo Not Accessible'.
Your first instinct is to check the URL. You paste it into your browser, and the logo loads instantly. It's there. So the checker must be wrong, right? Wrong. The problem isn't the file or the URL's existence. The problem is that the entity fetching your logo isn't a human in a browser; it's an automated, server-side agent with a completely different set of rules and expectations.
This isn't an SVG syntax problem. It's a Layer 7 delivery problem, hidden in the network traffic between your web server or CDN and the mailbox provider's infrastructure. And debugging it requires you to stop thinking like a web developer and start thinking like a mail system administrator.
The Checker Says 'Inaccessible,' But the URL Works For You
The fundamental disconnect happens when we assume Google's or Apple's BIMI fetcher behaves like Chrome or Safari. It doesn't. Your browser is incredibly permissive. It will follow multiple redirects, execute JavaScript, and negotiate complex security challenges without you even noticing. The mailbox provider's fetcher is the opposite: it's rigid, security-conscious, and has a very low tolerance for ambiguity.
Think of it from their perspective. They are programmatically fetching millions of images from untrusted endpoints all over the internet. Each fetch is a potential security risk. Is the URL a redirect loop? Is it a 10GB file masquerading as an SVG? Is it behind a firewall that will interpret their fetch as a DDoS attack? To protect their infrastructure, they enforce strict, simple rules. Your logo URL must resolve directly, respond with the correct headers, and serve the file without any shenanigans. When your browser says the URL is fine but the BIMI validator fails, the validator is the one telling you the truth that matters.
Your Server Is Sending the Wrong Signals
Before a single byte of your SVG is downloaded, the server hosting it sends a package of metadata known as HTTP headers. For BIMI, these headers are not a suggestion; they are a hard requirement. The single most common point of failure we see is a misconfigured `Content-Type` header.
The Content-Type Mismatch
The BIMI specification is explicit: the logo must be served with `Content-Type: image/svg+xml`. No exceptions. Yet, many default server or CDN configurations don't have a mapping for the `.svg` extension. They fall back to a generic type like `application/octet-stream` (a binary file) or even `text/plain`. To a mailbox provider's strict verifier, receiving the wrong content type is an immediate and fatal error. It won't even try to parse the file; the connection is dropped, and the fetch is marked as a failure.
Don't trust your browser's developer tools here, as they can sometimes be misleading. Get the ground truth with a command-line tool like cURL. The `-I` flag fetches headers only, giving you a clean, unambiguous look at what your server is telling the world.
$ curl -I https://cdn.example.com/bimi/logo.svg
HTTP/2 200
...
content-type: application/octet-stream
content-length: 4321
... — A failed request's headers
That `content-type: application/octet-stream` is the smoking gun. The fix is to log into your CDN provider (or edit your `.htaccess` / Nginx config) and explicitly set the MIME type for SVG files. Once `curl -I` reports `image/svg+xml`, you've cleared the first and most common hurdle.
Chasing Ghosts in Redirect Chains
Cleanliness and directness are key. Mailbox providers are deeply suspicious of redirects for image fetches. A single, clean `301` redirect from an HTTP to an HTTPS version of the same URL is usually tolerated. Anything more complex is a massive red flag.
Why the paranoia? Redirects can be abused to stitch together denial-of-service attacks or to cloak malicious payloads. The provider's bot isn't going to follow you down a rabbit hole of `Location:` headers. If the URL in your BIMI record isn't the final destination of the asset, there's a high chance the fetch will be abandoned after the first hop.
We've seen this happen when a marketing department insists on putting the logo URL behind a branded link shortener for "tracking." This is a catastrophic mistake for BIMI. The fetcher hits the shortener, gets a `302` redirect, and may simply give up. The URL in your `a=` tag in the BIMI DNS record must be the canonical, final, 200-OK-serving URL for the SVG file itself.
Use `curl -v` or `curl -L` to trace the full path. The `-L` flag tells cURL to follow redirects, showing you every hop. If you see more than one `Location:` header in the output, your redirect chain is too complex and needs to be flattened. Point the DNS record directly to the CDN resource.
Is Your WAF Blocking Google?
The irony of modern security is that sometimes your defenses are aimed so squarely at automated threats that they end up blocking legitimate, necessary automation. Your Web Application Firewall (WAF) is a prime suspect when BIMI fails for network reasons.
Aggressive User-Agent and Bot Filtering
Many WAFs come with a pre-configured rule set to block common bots and scrapers. They do this by inspecting the `User-Agent` string of the incoming request. If it doesn't look like a standard browser (Chrome, Firefox, Safari), it gets blocked. The problem is, Google's BIMI fetcher isn't a browser. It might have a User-Agent like `Google-BIMI-Fetcher` or something similarly robotic. If your WAF policy is "block all known bots," you're almost certainly blocking the very service you're trying to work with.
You must audit your WAF logs to see if requests for your SVG are being denied. If so, you'll need to create an exception. Find the User-Agent string or IP address ranges used by the major mailbox providers for their BIMI fetches and explicitly allowlist them. This isn't a one-time fix; providers can and do change these, so it requires periodic review.
Geo-Blocking and JavaScript Challenges
Two other WAF features can silently kill BIMI. The first is geo-blocking. If you block traffic from countries where you don't do business, you might inadvertently block a provider's distributed fetch infrastructure. Google's servers aren't just in California; they're everywhere. Your SVG needs to be globally accessible.
The second, and more insidious, is the JavaScript challenge. Features like Cloudflare's "I'm Under Attack Mode" or high security settings work by intercepting a request and serving a page that requires JavaScript to solve a puzzle before proceeding. This is brilliant for stopping unsophisticated bots. But the BIMI fetcher cannot execute JavaScript. It receives the challenge, can't solve it, and reports a failure. Your logo must be hosted on a path that is exempt from these kinds of active challenges.
Case Study: Unmasking a Cloudflare Configuration Block
Let's walk through a real-world triage. A client's BIMI setup passed all validators but logos weren't showing up in production. The SVG was hosted on Cloudflare, and direct `curl` requests were intermittently failing with HTTP 403 Forbidden errors.
Digging into the Cloudflare dashboard, we found the site's overall "Security Level" was set to "High." This setting automatically challenges requests from IP addresses with a poor reputation or exhibiting non-browser-like behavior. While great for the site's main pages, it was wreaking havoc on the BIMI fetch. The provider's fetchers, coming from a wide and dynamic range of IPs, were periodically tripping this threat score threshold and getting challenged or blocked outright.
The solution wasn't to lower the security for the entire domain. That would be trading one problem for another. The fix was surgical.
We created a specific "Page Rule" in Cloudflare targeting the exact path of the SVG file: `*.example.com/bimi-logo.svg`. For this specific URL pattern, we configured the rule to perform three actions: set "Security Level" to "Essentially Off," disable "Browser Integrity Check," and disable "Bot Fight Mode." This created a narrow, secure tunnel for the BIMI fetchers. All other traffic to the domain remained protected by the high-security-level policy, but the critical SVG asset was now accessible to the automated agents without being challenged. Within hours, the logos began to appear.
The takeaway
Your BIMI logo's URL isn't a webpage asset for human visitors; it's a machine-to-machine API endpoint, and it must be treated as such. Its consumer is a script, not a person. Success depends on providing a clean, direct, and unambiguous path from the provider's server to your file. Test with the tools the machines use, like cURL, and analyze the raw HTTP conversation. Don't just look at the final picture—inspect the entire delivery chain.
When debugging these complex, multi-system interactions where DNS, DMARC, and HTTP services intersect, having a unified view is critical. Correlating BIMI fetch failures documented in your WAF logs with aggregate DMARC reports, which tools like MailSleuth.AI can provide, helps you pinpoint whether a failure is isolated or part of a systemic delivery issue affecting your entire email posture.
We dissect phishing campaigns and email infrastructure so you don't have to.


