This guide is for people who already have their own subscription in Shadowrocket and find that it will not refresh or shows no nodes. Check the subscription’s response and format before repeatedly importing it; then add it from the correct screen, confirm that entries appear in Home, and test one connection. The examples use reserved placeholder values, not working subscription details. Keep your actual subscription URL private: anyone who obtains it may be able to use the access it provides.
1. Separate the subscription URL from the imported nodes
A subscription URL is an address Shadowrocket requests to retrieve connection entries. The nodes are the entries returned by that request. Having a URL saved somewhere in the app does not prove that the address is reachable, that its response contains usable entries, or that the entries have been imported into Home.
Start by noting exactly what is wrong. Does the first import fail, does an existing subscription fail to update, or does the update complete but leave Home empty? These are different checkpoints. A timeout suggests that the request did not receive a usable response in time; a parse failure points toward the response content or format; an apparently successful update with no nodes can mean the response is empty, contains unsupported or malformed lines, or did not add entries to the place you are checking.
Check Home for the subscription entry and its imported connections. Config is for configuration files; importing or selecting a file there is not the same as adding a subscription. Likewise, changing Global Routing does not repair a subscription that returns no entries. Keep the selected network and the subscription you are checking consistent while troubleshooting so the result is easier to interpret.
2. Check what the subscription returns
Subscription services can provide connection information in different forms. Some return one or more URI lines, such as entries beginning with a protocol scheme like ss://, vmess://, vless://, or trojan://. Others return a Base64-encoded list that the app must decode before it can read the entries. A subscription URL is not necessarily itself a node URI: opening the URL in a browser may show encoded text, multiple lines, or a service-generated response.
When an update fails, ask the service that issued your subscription what format that specific URL is intended to return and whether the account is active. Do not assume that changing the URL by hand, adding a protocol prefix, or copying the visible response into a different field will make it valid. A URL may be account-specific, time-limited, or subject to access controls; even a response that looks like text can be an error message rather than a node list.
ss://[redacted-credentials]@server.example.invalid:443
vless://[redacted-identifier]@server.example.invalid:443?type=tcp
trojan://[redacted-password]@server.example.invalid:443
These lines illustrate recognizable URI shapes only. The reserved example.invalid host and bracketed redactions are not usable connection details. Real entries may include additional parameters, and the required fields vary by protocol. Do not use these examples as a template for constructing or repairing a real node.
- If the response is an HTML page, a sign-in page, or a plain-text error, it is not a parsed list of connection entries.
- If the response is empty, check whether the subscription has expired, reached an account limit, or needs attention from its issuer.
- If the response contains URI lines, check for incomplete lines, missing separators, accidental spaces, or text copied along with the entries.
- If it is encoded, do not edit or re-encode it manually unless the issuer has supplied specific instructions for that exact format.
A browser check can reveal that a request returns a page, but it cannot by itself prove Shadowrocket can parse the response or use its entries. Avoid pasting a real subscription URL into public checkers, chat rooms, screenshots, or support posts. If you need help from the service that issued it, share the error and a redacted description instead of the full URL or credentials.
3. Reimport from the Home subscription menu
For a new subscription, use the subscription import option rather than adding a single server manually or importing a configuration file. In Shadowrocket, open Home, tap the upper-right +, choose Type → Subscribe, enter your own subscription URL, and save. The imported subscription should then appear in Home; if the interface offers an update action for that entry, use it and wait for the result before repeating the import.
-
Open Home
Return to Home and look for the existing subscription entry. If it is already listed, update that entry rather than creating several copies of the same URL.
-
Add as Subscribe
For a new import, tap + in the upper-right corner of Home → Type → Subscribe. Do not choose a single-node type for a subscription URL.
-
Save the URL
Paste the complete URL supplied for your own account, check that it has not been truncated, and save. Avoid adding spaces, line breaks, or quotation marks around it.
-
Refresh once
Use the subscription’s available update action, wait for completion, and check Home for the returned entries. Record the result before changing other settings.
-
Remove duplicates
If repeated attempts created multiple entries, identify the one you intend to keep and remove only confirmed duplicates. Keep the original URL private while doing so.
Menu wording and layout can differ between device sizes or app builds, so follow the English labels shown in your interface and confirm that the selected type is Subscribe. A subscription entry visible in Home is not the same as a node being selected or connected. After the refresh, verify that actual connection entries are listed before moving on to connectivity tests.
4. Diagnose refresh and empty-node errors
Read the update result as a clue about which checkpoint failed. Do not keep tapping refresh if the same response is returned: repeated requests will not correct an expired URL, a blocked request, or a response that uses a format the app cannot parse. First note whether the issue occurs on Wi-Fi, cellular data, or both, and whether it affects one subscription or every subscription you already have.
“Failed to load subscription”
Likely cause and next step: The request may be timing out, the URL may no longer be valid, or the service may not be returning the expected content. Try one refresh on a different trusted network; if it still fails, ask the issuer to confirm the URL and service status.
“No nodes found”
Likely cause and next step: The response may be empty, encoded in an unexpected way, or contain no entries Shadowrocket can read. Ask the issuer which subscription format the URL returns and whether it currently includes connection entries.
“Parse” or format error
Likely cause and next step: The response may contain an incomplete URI, unrelated page text, or malformed protocol fields. Do not manually alter credentials or parameters; request a corrected subscription URL or format guidance from its issuer.
These descriptions summarize common failure patterns; exact wording can vary. If a refresh appears successful but Home remains empty, check whether the app shows an update result for the intended subscription, not another entry. Then verify that the subscription was added using Subscribe, that the complete URL was saved, and that the issuer confirms the response currently contains entries.
When comparing Wi-Fi and cellular results, switch only the network and repeat the same update once. If one network works and the other does not, the problem may be related to that network’s access to the subscription service rather than the node format. If neither works, ask the issuer to verify the URL and response before deleting and re-adding the subscription. Keep any diagnostic screenshots redacted.
5. Test an imported entry and manage updates
Once entries appear in Home, select one of the entries supplied by your own subscription and test it separately from the subscription refresh. A successful import only confirms that entries were read; it does not prove that a selected connection is reachable. Check the connection status, use Home → Connectivity Test if available, and then make a new request in an app or page you normally use. If a test fails, note the selected entry, network type, and result without sharing its private credentials.
Keep subscription updates and connection tests separate
Subscription update
- Checks whether the URL can return entries
- Updates the list shown in Home
- Does not guarantee a connection will work
Connection test
- Uses an imported entry you select
- Checks reachability under current conditions
- Does not repair a missing subscription response
First confirm that entries exist in Home; then test one selected entry on a known network.
For routine updates, use the subscription entry already saved in Home and confirm that the refreshed list contains the expected entries. If several devices use the same subscription, do not assume that one device’s successful update automatically refreshes another. Check each device’s Home list and use its own update action when needed. The available sync behavior depends on how the subscription and device settings are configured.
After an update, a node name may remain the same even if its underlying connection details have changed. If a previously working entry stops connecting, refresh once, select the updated entry, and start a new test request rather than relying on an old connection. Change one variable at a time: network, selected entry, or subscription update. This makes it possible to distinguish a stale connection from an import or reachability issue.
6. Frequently asked questions
Can I paste a subscription URL into the single-server form?
Use Home → + → Type → Subscribe for a subscription URL. A single-server form is intended for one connection’s details, not a URL that returns a list. If you are unsure which type the URL represents, confirm it with the issuer.
The refresh says it worked, but Home is still empty. What should I check?
Confirm that you refreshed the intended subscription entry and that it was added as Subscribe. Ask the issuer whether the response currently contains entries and what format it uses. Do not infer that an empty list means the connection switch or Global Routing is at fault.
Should I send my full URL when asking for help?
No. Treat the URL as a private credential. Share the error wording, device network type, and whether the response is empty or malformed, but redact the URL, identifiers, passwords, and tokens from messages and screenshots.
Why do my devices show different node lists?
They may have refreshed at different times, or one device may have a different saved URL or import entry. Compare the intended subscription without exposing its value, then update it separately in Home on each device and check the resulting lists.
Keep the troubleshooting sequence simple: verify the subscription response with its issuer, import through Home → + → Type → Subscribe, confirm that entries appear, and only then test a selected entry. This separates a URL or format problem from a connection problem and avoids unnecessary changes to unrelated settings.