When a Shadowrocket subscription expires or burns its traffic, node names usually remain—URL Test may still print a number—while a real page resets or lands on the provider’s expiry interstitial. Open the subscription row: traffic, expire date, counters. Cross-check the provider dashboard. That is not a bad URL, a blocked UA, or a cert error; those fail the Update button, which is update failed.
Import still: subscribe. The App Store charge is not traffic. Channel copy: download. Groups pointing at expired names go hollow—groups.
Three ledgers: in-app headers, the dashboard, the handshake
In-app: some providers send upload, download, expire in HTTP headers and Shadowrocket draws a bar. No bar → dashboard. Dashboard says live, app says empty: refresh once. Still split: believe the handshake. 1.1.1.1/help or the site you actually need is the only success signal.
Cached nodes: after a failed refresh the old list can sit for days. You think the plan is alive. Look at “last updated.” If that timestamp is older than the bill you remember, treat it as a corpse. A 402/403 or an expiry keyword on refresh means pay, not rewrite rules.
| Signal | Expired / quota | Update failed |
|---|---|---|
| Update button | Often succeeds | Error, empty list |
| Node rows | Still there | Gone or grey |
| TCP to a site | RST / paywall page | Never connected |
| Traffic bar | Full or date passed | May show a stale remainder |
Quota first, calendar first, device/IP first
Metered plans die before the printed date. OS updates and video eat the bar; Shadowrocket will not shout “200 MB left” in the status bar. Calendar plans zero the leftover traffic at midnight. A family iPad sharing the same URL can trip a device or IP cap that looks like expiry and is a provider policy—not an in-app “device slot” like account-based VPNs.
After you pay, you must tap Update. Otherwise you keep talking to cached corpses. Buying the iOS app does not add gigabytes. Keep the order id somewhere that is not the same note as the subscription URL.
What not to do in the expiry window
Do not enable HTTPS decryption “to see what is blocking you.” The interstitial is the answer. Do not install modules to rescue a dead bill. Do not replace the URL with a random free list. You may backup rules—backup—backups do not extend ledgers.
A handoff drop that only happens on the last day of the bill is still traffic until proven otherwise—handoff. Fake-IP will still ping—DNS.
Short acceptance after you pay
Dashboard shows a new date → Update in Shadowrocket → bar resets → hand-pick a node → open the real site. If a group still names the old node, select once. Five refreshes still showing yesterday’s expiry: you may be updating a leftover backup URL. Guides: hub. App access: FAQ.
Put a calendar alert two days before expiry. Shadowrocket will not splash a streaming-app-style banner. Keep this slug next to “update failed” in your notes so you pick the right checklist at 1 a.m.