Does Twitter (X) Work in China? Blocked Embeds, ICP & the Compliant Fix
Twitter (X) is blocked by the Great Firewall in mainland China, so an embedded tweet loads its widget script and links from blocked X hosts and fails — breaking your China-facing page. There is no compliant way to unblock it; the fix is to remove the blocked embed and deliver your own site from an ICP-filed in-country path. A compliance-first look.
Does Twitter (X) work in China?
Whether Twitter — now X — works in China is a reachability question with a blunt answer: it is blocked by the Great Firewall, and there is no compliant way to make it load inside the mainland. 21YunBox does not route around that block, and would not — the honest fix is to stop depending on a blocked host, not to tunnel to it.
The damage most teams actually see is not x.com itself but the tweet they embedded. X documents an embedded post as two parts — an HTML <blockquote> and the "X for Websites" script that upgrades it — and that script loads from an X-operated host (platform.x.com) while the post links back to x.com. Inside the mainland those hosts don't answer, so the script never runs; in X's own words, only the fallback <blockquote> stays visible, and scripts waiting on the widget can stall the page around it. The compliant path is to remove or gracefully degrade that blocked dependency and serve your own site from an ICP-filed, in-country path. The table below separates what's blocked from what you can actually fix.
This is a delivery-and-licensing picture, not a verdict — what applies depends on whether your site is public-facing in the mainland and how the post is embedded. Our China team can map an in-country path with you →
What Twitter's documentation says, and what we measured from inside China
| Fact | Primary source |
|---|---|
An embedded tweet is a block of HTML plus X's own JavaScript. X's developer docs state that "An embedded Post consists of two parts: An HTML snippet hosted in your web page, and the X for Websites JavaScript," and that the script works by "converting blockquote.twitter-tweet elements into fully-rendered embedded Posts." So any page that embeds a tweet depends on reaching X to render the card. | X Developer Platform — Embedded Posts overview, retrieved 2026-10-08 |
The widget script loads from an X-operated host, so a blocked host leaves an unrendered stub. X's docs show the script as <script id="twitter-wjs" … src="//platform.x.com/widgets.js"></script>, and note that when a post can't be rendered, "The fallback <blockquote> containing Post information will be visible on the page." platform.x.com sits on the blocked x.com domain family, so from inside the mainland the script never arrives and only the unrendered blockquote remains. | X Developer Platform — Embedded Posts FAQ, retrieved 2026-10-08 |
From inside the mainland, both x.com and twitter.com returned nothing. Requested from an Alibaba Cloud probe in Zhangjiakou on 2026-08-28, x.com and twitter.com each produced no first byte and no paint across three runs, every attempt abandoned at a 60-second navigation-timeout ceiling with no connection established — a block on the destination, not a slow load. A page that embeds a tweet is waiting on hosts that answer the same way. | 21YunBox — China delivery measurement, from inside mainland China |
| Your own public site still needs an ICP filing — that part doesn't go away with the widget. A website served to mainland visitors from inside China turns on an ICP filing (ICP 备案) under State Council Order No. 292 and MIIT's filing measures, tied to a hosting resource physically located in the mainland. Removing a broken embed fixes the card; it does not, by itself, give a China-facing site the in-country, ICP-filed footing it needs to operate lawfully. | State Council Order No. 292, Article 4 (Measures for the Administration of Internet Information Services) |
Sources verified by the 21YunBox compliance team on 2026-10-08.
For a mainland-China audience, the question about Twitter — now X — has a blunt answer before performance ever comes up: X is blocked by the Great Firewall, and there is no compliant way to make it load inside the mainland. What actually trips up most businesses is more specific — the tweet they embedded. An embed is an HTML block that only becomes a real card once X’s own script runs, and that script, plus the links inside the card, live on X-operated hosts the mainland blocks. When those hosts can’t be reached, the card never renders and the page around it can hang. The fix is not to tunnel to a blocked platform; it is to stop depending on it, and to put your own site on compliant, in-country footing.
<script id="twitter-wjs" … src="//platform.x.com/widgets.js"></script> — and when it can't run, “The fallback <blockquote> containing Post information will be visible on the page.” Both the script host (platform.x.com) and the post's x.com links sit on domains the mainland blocks, so the widget never initializes. Source: docs.x.com/x-for-websites/embedded-posts/faqTwitter (X) in China at a glance
| What decides it | What it means for a China-facing page |
|---|---|
| Is it reachable? | No. Twitter (X) is blocked by the Great Firewall; x.com and twitter.com do not load from inside the mainland. This is a block on the destination, not a slow route. |
| Your embedded tweet | An embedded post is a fallback <blockquote> upgraded by the "X for Websites" script at platform.x.com. That host and the x.com links are blocked, so the script can't run — only the unrendered blockquote remains, and scripts waiting on it can stall the page. |
| Can it be unblocked? | Not compliantly. There is no lawful way to route mainland visitors around the Firewall to a blocked platform, and 21YunBox does not do it. The fix is to remove the dependency, not tunnel to it. |
| Your own site's license | A public site served to mainland visitors needs an ICP filing tied to in-country hosting — independent of where the embed points. |
| The compliant fix | Remove or gracefully degrade the blocked embed, republish any must-reach content in a China-reachable form, and deliver your own site from an ICP-filed, in-country path — as an overlay on your current stack. |
Blocked at the destination, not slowed on the route
Twitter’s problem in China is not latency; it is reachability. The Great Firewall blocks the platform, so from inside the mainland x.com and twitter.com simply do not answer — not slowly, but at all. 21YunBox measured this directly: from an Alibaba Cloud probe in Zhangjiakou on 2026-08-28, both x.com and twitter.com returned no first byte and no paint across three runs each, every attempt abandoned at a 60-second navigation-timeout ceiling with no connection established. No amount of routing or caching on your side changes that, because the block sits on the destination, not on the path your page takes to reach it. That is the honest starting point, and it rules out the whole category of “just make it faster” answers.
Why the embedded tweet breaks your China-facing page
The damage most teams actually see is on their own pages. A tweet is usually added the way X documents it: a small block of HTML — a <blockquote> holding the post’s text — paired with X’s “X for Websites” JavaScript, which upgrades that block into the interactive card you expect. X describes an embedded post as consisting of two parts, that HTML snippet and the script. The script loads from an X-operated host, platform.x.com, and the post’s links and media point back to x.com — all on domains the mainland blocks. So when a visitor in China opens the page, the script never arrives, the upgrade never happens, and, in X’s own words, the fallback <blockquote> stays visible on the page. At best that is an unstyled stub where a rich card should be; at worst, layout or scripts waiting on the widget drag down the rest of the page. Because everything renders normally outside China, this rarely gets filed as a bug — it just quietly costs you the mainland visitor.
Your own site still needs an ICP filing
Degrading a broken widget fixes the card, but it does not settle the separate question of whether your site is cleared to operate in the mainland at all. A public-facing website served to mainland visitors from inside China turns on an ICP filing (ICP 备案) under State Council Order No. 292 and MIIT’s filing measures, and that filing has to attach to a hosting resource physically located in the mainland. That obligation is about your site, not about X — it stands whether the embedded tweet stays, goes, or is replaced with a plain screenshot. Reaching China and being licensed to operate there are two different things. Whether the duty applies to you is a risk question worth settling with counsel, based on what you serve and who your users are.
The compliant fix — remove the blocked dependency, not tunnel to it
The durable fix follows from the diagnosis, and it is not to tunnel to X. 21YunBox does not route visitors around the Great Firewall to a blocked platform, and a public China-facing site should not depend on that working. Instead: remove or gracefully degrade the blocked embed so the page renders cleanly without it; where a post matters to mainland readers, republish that content in a form a Chinese audience can actually reach; and deliver your own site from a compliant, in-country path. Each step swaps a dependency on a blocked host for one that works lawfully inside China — the opposite of trying to sneak the blocked one through.
Where 21YunBox fits — a compliant overlay, not a migration
You keep building on the stack you already have. We add the parts a blocked platform can’t give you: we help you replace or gracefully degrade the dead X embed so your pages render cleanly for mainland visitors, and we set up compliant, ICP-filed delivery of your own site from inside the mainland — in front of your existing origin, with no rebuild, no second codebase, and no attempt to route around the Firewall. Our China team maps your ICP obligations against your entity and what you serve, then stands up the in-country delivery a lawful China presence needs, while your application stays exactly where it runs today.
Related reading:
