Which parts of your stack break first in China
reCAPTCHA, Google Sign-In, YouTube, Google Maps — the foreign dependencies that fail for Mainland China users, measured live from a Mainland China node.
Most teams assume “China access” is one big switch. It isn’t. A site that loads perfectly from London can fail in a dozen small, independent ways from Shanghai — and the failures rarely announce themselves. They show up as a blank login button, a hero section with no typeface, or a checkout that silently stalls.
To make that concrete, we keep an open lab — Stack Break Lab — where each dependency lives on its own minimal page and is re-tested every week from a Mainland China node. The four groups below follow where a dependency sits in the stack, and every verdict is the live measurement — which moves with carrier, region, and time. The code and the latest results are public: github.com/chinaready/launchready-stackbreak-lab.
How we tested
A diagnostic is only as honest as the place it runs from. Every verdict below comes from real Mainland China infrastructure on our launchready.cn node — not a proxy, not a simulation from a nearby region. The method mirrors our network diagnostics:
- Network probe. A
curl+digscript requests each dependency’s real URL and records the HTTP code, total time, and whether DNS even resolves. - Browser checks. A real Chromium session (Playwright) loads a single-dependency demo page, captures which requests fail or time out, and screenshots what the user actually sees.
Each result is stamped with the test date, cloud region, and host, and we sort verdicts into three buckets — Blocked, Degraded, Reachable — the same vocabulary as the dependency risk table. Results change with carrier, region, and time, so treat each run as a single-node snapshot. The current numbers are always at stackbreak.launchready.cn/results.
At a glance
Latest snapshot from an Alibaba Cloud Beijing node (cn-beijing-h), 2026-06-24. The
live table is the source of truth and is re-measured
every week — verdicts can change with carrier, region, and time.
| Dependency | Category | China behavior (latest run) | What the user sees when it fails |
|---|---|---|---|
| Google reCAPTCHA | Auth | Blocked | Login/signup button spins forever |
| Google Sign-In | Auth | Blocked | ”Continue with Google” does nothing |
| YouTube embed | Media | Blocked | Black, empty player area |
| Google Maps | Media | Blocked | Grey box that never tiles |
| Vimeo embed | Media | Blocked | Player blank or never starts |
| Auth0 | Auth | Degraded | Hosted login slow or popup hangs white |
| Google Fonts | Fonts | Reachable | Fallback type, weight shift, layout jump |
| Material Symbols | Fonts | Reachable | Icons render as empty boxes or raw words |
| Adobe Fonts (Typekit) | Fonts | Reachable | Brand typeface silently falls back site-wide |
| Google Tag Manager | Analytics | Reachable | Head-blocking tag drags first paint |
| Google Analytics 4 | Analytics | Reachable | China traffic invisible in reports |
The fix is almost never “move everything to China.” It is identifying the specific dependencies that fail and replacing only those. The four groups below walk the stack from front-end assets to embeds; the verdict on each is whatever the latest Mainland China run measured.
1. Web fonts and icon kits
The dependency. Most sites pull type and icons from Google Fonts
(fonts.googleapis.com, fonts.gstatic.com), Google’s Material Symbols, or Adobe Fonts
(use.typekit.net) with a single <link> in the head.
Mainland China behavior. In the latest Beijing run all three were Reachable — but fonts are the dependency that flips most often by carrier and region, and a degraded or blocked font endpoint is slow enough that text renders before the brand face arrives, then reflows. Watch the live verdict rather than assuming a fixed state.
Evidence. The probe requests the real stylesheet URLs:
curl -sS -o /dev/null -w "code=%{http_code} total=%{time_total}s\n" \
--connect-timeout 10 --max-time 15 \
"https://fonts.googleapis.com/css2?family=Inter"
Reproduce it on the live demo: fonts-google.html and icons-material.html.
User impact and fix. When these endpoints do fail, it is the most common “looks broken” report we receive: a hero with the wrong font, a navbar of empty icon squares, and a visible layout shift. The fix is cheap and worth doing pre-emptively — self-host the WOFF2 files or use a Mainland China font mirror, and load icons as inline SVG.
2. Auth and identity widgets
The dependency. Social login buttons, hosted auth widgets, and bot-protection challenges that
phone home to Google or Auth0: reCAPTCHA (www.google.com/recaptcha), Google Sign-In
(accounts.google.com), and Auth0’s Lock widget (cdn.auth0.com).
Mainland China behavior. Google reCAPTCHA and Google Sign-In are Blocked. Auth0’s hosted assets are typically Degraded — they sometimes arrive, slowly, which is worse than a clean failure because the UI half-works.
Evidence. The reCAPTCHA and Google Sign-In demos load the real scripts and report whether the widget ever renders: recaptcha.html, google-signin.html, auth0-lock.html.
User impact and fix. Users see a spinner that never resolves, or a captcha box that never appears — so they can’t create an account at all. This is the highest-conversion-cost failure on the list. The fix is a China-compatible captcha and an identity provider with regional routing, loaded conditionally.
3. Analytics and tag managers
The dependency. Google Tag Manager (www.googletagmanager.com) and Google Analytics 4
(gtag.js from the same host), usually wired high in the <head>.
Mainland China behavior. Both were Reachable in the latest Beijing run. They remain worth watching: GTM is the quiet killer, because when a render-blocking tag in the head does stall, time-to-first-byte and first paint drag for every visitor — even though nothing visible “broke.” Check the live verdict for the current state.
Evidence. The demos load a container and fire a page_view, then record the failed requests: gtm.html, ga4.html.
curl -sS -o /dev/null -w "ssl=%{time_appconnect}s total=%{time_total}s\n" \
--connect-timeout 10 "https://www.googletagmanager.com/gtm.js?id=GTM-XXXXXXX"
User impact and fix. Two costs: the page feels slow, and your China traffic disappears from analytics, so you can’t even see the problem in your dashboards. Load tags asynchronously and adopt a China-reachable analytics endpoint for Mainland China visitors.
4. Maps, media, and embeds
The dependency. Embedded video players and map tiles: YouTube (www.youtube.com, i.ytimg.com),
Google Maps JS API (maps.googleapis.com), and Vimeo (player.vimeo.com).
Mainland China behavior. All three were Blocked in the latest Beijing run — YouTube, Google Maps, and Vimeo alike.
Evidence. Each embed lives on its own demo so you can watch the player area stay blank: youtube-embed.html, google-maps.html, vimeo-embed.html.
User impact and fix. Present in the DOM, blank on screen — a black video box or a grey map that never tiles. Host video on a China-reachable CDN and swap Google Maps for a Mainland China mapping provider.
What this is not
This is not “move everything to China,” and it is not a full dependency inventory. It is the front-of-stack set that fails first and hurts most. For the complete, scored list across your whole stack, see the dependency risk table. And note the distinction from compliance: an unreachable dependency is a network problem, separate from whether your site needs ICP filing.
Want your own stack tested?
Stack Break Lab is open. If you depend on a service that isn’t covered yet, open a pull request to add a minimal demo page and we’ll measure it from Mainland China on the next run — contribute on GitHub.
FAQ
Does a global CDN fix this? No. A CDN speeds up assets you control. reCAPTCHA, Google Sign-In, and YouTube are third-party domains your CDN never touches — they fail at the source.
Will moving hosting to China help Google services? No. Hosting location doesn’t make a blocked third-party domain reachable. You replace or self-host the dependency.
How is this different from ICP filing? Filing is a regulatory step for hosting in Mainland China. These failures are about network reachability and happen regardless of filing status.
The next step is to map your dependencies and see which of these apply to your product — with evidence, not guesswork.


