Why Images Won't Show Up On X And What Actually Fixes It
I've spent years troubleshooting media rendering on social platforms, and images failing to load on X is one of those problems that seems simple until you realize there are actually about a dozen different failure modes, most of which have nothing to do with your internet connection. The first thing I always check isn't the network config. It's whether the issue exists across both the mobile app and the web version, because if it's only happening on one platform, you're dealing with a client-side cache or app version problem, not a server-side outage. I had a situation recently where a client was convinced X was down for everyone when really their iOS app had been cached on an old CDN node that was returning 404s for media URLs. Cleared the cache, restarted, gone. Here's the thing most people miss: X uses a complex media pipeline. When you tap a tweet with an image, the request goes through content delivery network routing, format negotiation, and then asset retrieval from their storage layer. If any hop in that chain fails, you get a blank space where a photo should be. The error itself rarely tells you which hop broke. You get a spinner that never resolves, or the fallback placeholder image, and that's it.
The most common culprit is actually the encoding format. X serves images in multiple formats depending on what the client supports. If your browser or app has corrupted preferences around what formats it accepts, the negotiation fails and you see nothing. This happens more often on Android with third-party apps that hijack media requests, but it also occurs in desktop browsers after certain update cycles change how the user-agent string gets reported. I've seen this exact pattern where a Chrome update on a company device silently changed the Accept header behavior, and images stopped rendering for half the team while other browsers worked fine. Switching to Firefox as a test confirmed it immediately, and updating Chrome fixed it about two weeks later. Then there's the rate limiting angle. If an account or IP range has been hitting X's media endpoints too aggressively, they start getting throttled. The images don't fail outright. They just time out. This shows up as a loading spinner that hangs for thirty seconds or more before giving up. I dealt with a situation where a social media management tool was pulling media previews for hundreds of tweets per minute, and X quietly started dropping the requests. Nothing in the tool's logs indicated a failure. The images just never loaded. Cutting the request rate by half resolved it within an hour.
Another angle that catches people out is DNS. X media URLs sometimes resolve through separate CDN domains, and if your DNS resolver is slow or returning stale records, the image requests fail while the tweet text loads fine. Running a quick dig or nslookup against a known X media domain can tell you this in about ten seconds. If the TTL is unusually high or the IP addresses look wrong, switching to a different DNS resolver like 1.1.1.1 or 8.8.8.8 usually clears it up immediately. On the mobile side, app data corruption is the single most frequent issue. I've walked through this probably two hundred times. The fix is straightforward: clear the app cache and data, but don't just force close and reopen. Fully clear the stored data. On iOS this means offloading and reinstalling the app. On Android it's Settings, Apps, X, Storage, Clear Data. The account data gets re-downloaded on next launch, and the corrupted media cache goes with it. There's also the browser extension problem, which I see constantly. Ad blockers and privacy tools intercept media requests, and sometimes the filter lists get out of sync with X's current domain structure. Images stop loading while everything else works. Disabling extensions one by one is the fastest way to identify the culprit, but as a shortcut, opening the same tweet in incognito or private browsing mode will tell you immediately if an extension is the cause.
Get the Full Details

Server-side issues are rare but they happen. X maintains a status page at help.x.com, and if there's a widespread media delivery outage, it usually shows up there within thirty minutes. I've learned to check that first before spending twenty minutes troubleshooting my own setup. There's nothing worse than clearing your cache four times when the problem is on their end. If you're working with X's API and images aren't loading through programmatic requests, check whether you're requesting the original media URLs or the proxied ones. The API returns different endpoints depending on whether you include the include_media_id parameter, and mixing them up causes silent failures. The thumbnails work fine while the full-resolution versions return errors. It took me a good afternoon once to figure out that my integration was pulling from a deprecated media endpoint that X had quietly shut down without updating their documentation. One last thing that matters more than people realize: your TCP connection settings. X's media servers are sensitive to MTU mismatches, especially on networks that use VPNs or custom DNS routing. If you're on a corporate or VPN-connected network and images sporadically fail while everything else works, lowering your MTU to 1400 or even 1350 can eliminate the packet fragmentation issues that cause media requests to hang. It sounds obscure, but it's the solution I reach for after ruling out everything else.