This guide is for anyone who has received a vmess:// link, a vless:// link, or a subscription URL and is unsure how to import it. You’ll learn to distinguish single-node links from subscription URLs, understand key fields, choose the right import path in v2rayN and v2rayNG, and decide how to save them based on update frequency.
First, distinguish single-node links from subscription URLs
Text beginning with vmess:// or vless:// is usually a single-node share link. It describes the address, port, user identifier, transport method, and security settings required to connect to one server. Importing it creates a configuration entry in the client; if the server settings change later, the original entry will not update automatically.
A subscription URL usually begins with https:// and is essentially a remotely accessible resource. After requesting the URL, the client receives one or more node records and saves them in a subscription group. When the provider adds or removes nodes, changes domains, or adjusts ports, you can update the subscription to resync the remote list locally.
Single-node share link
Imports one clearly defined configuration at a time, with its settings fixed in the link. Useful for testing, migration, or temporarily adding a node.
Best for: using one node or checking settings field by field
Subscription URL
RecommendedThe client periodically requests the remote list, allowing node names, server addresses, ports, and transport settings to be maintained centrally.
Best for: long-term use, syncing across devices, and switching between multiple nodes
Manual configuration
Enter the protocol, address, port, and transport-layer fields one by one to troubleshoot whether a share link was parsed correctly.
Best for: debugging fields or correcting a small number of settings
| Comparison | Share link | Subscription URL |
|---|---|---|
| Typical prefix | vmess://、vless:// | https:// |
| What it contains | Connection settings for one node | A URL pointing to a remote node list |
| How it updates | Fetch and import it again | Update it from the subscription group |
| Import result | Creates one server entry | Creates or refreshes a group of server entries |
Bottom line: check the protocol prefix before choosing an import path
If the text starts directly with vmess:// or vless://, use “Import from clipboard.” If it starts with https:// and the provider identifies it as a subscription, add it to a subscription group. Do not put both types of URL into the same input field and retry repeatedly.
What vmess:// and vless:// links contain
A typical VMess share link encodes a JSON configuration and appends it after vmess://. Encoding makes multi-field content easier to copy; it does not hide the settings. After decoding, the client still needs to read fields such as the server address, port, user ID, transport network, path, TLS, and server name.
The following VMess decoding example illustrates the structure. The example domain and user ID are for documentation only and cannot establish a real connection. add is the server address, port is the remote port, net and path together describe WebSocket transport, while tls and sni are used for the TLS connection.
{
"v": "2",
"ps": "Documentation example node",
"add": "edge.example.com",
"port": "443",
"id": "00000000-0000-4000-8000-000000000000",
"aid": "0",
"scy": "auto",
"net": "ws",
"type": "none",
"host": "edge.example.com",
"path": "/ray",
"tls": "tls",
"sni": "edge.example.com"
}
A VLESS share link is closer to a standard URI. The user ID appears before @, the server address and port follow it, transport and security settings are written in the query string, and the text after the hash is used as the node name. Because the fields are visible directly, checking the port, transport type, and path is usually more straightforward.
vless://[email protected]:443?encryption=none&security=tls&type=ws&host=edge.example.com&path=%2Fray&sni=edge.example.com#Documentation example node
| Field | Meaning | Common checks |
|---|---|---|
| address / add | Server domain or IP address | Check for extra spaces and confirm that the domain still resolves |
| port | Remote listening port | Must be between 1 and 65535 and match the server |
| id | VMess or VLESS user identifier | Check that every character is present and that no chat tool truncated it |
| type / net | Transport type, such as TCP, WebSocket, or gRPC | When the type changes, update fields such as the path and service name as well |
| security | TLS, Reality, or another security method | Must match the server’s actual configuration |
| sni | Server name used during the TLS handshake | Do not infer it from the node label alone; use the value provided by the provider |
Import correctly in v2rayN and v2rayNG
Before importing, copy the complete original text rather than selecting only the portion visible in a chat message. Links may contain question marks, equal signs, percent signs, and hashes; truncating any part can cause parsing failures or create a configuration missing transport settings. The menu names below are based on the common interfaces of v2rayN 7.14.3 and v2rayNG 1.10.31.
Import a single-node link in v2rayN
- Copy the complete
vmess://orvless://link. - Open the v2rayN main window and choose “Servers” → “Import batch URLs from clipboard.”
- Find the new entry in the server list and verify the protocol, address, remote port, and label.
- Select the entry, set it as the active server, then check the log window at the bottom for configuration parsing or core startup errors.
- To check local listeners, go to “Settings” → “Parameter settings” and confirm that the local port is not already used by another program.
Add a subscription URL in v2rayN
- Open “Subscription groups” → “Subscription group settings.”
- Add a group, enter an easy-to-recognize alias, and paste the complete HTTPS subscription URL into the address field.
- After saving, open the “Subscription groups” menu and choose “Update subscription” for that group.
- After the update, check the node count and update time; existing manual nodes normally do not become subscription nodes as a result.
Import links or subscriptions in v2rayNG
- Single-node link: copy the link, open the plus menu in the top-right corner, and choose “Import configuration from clipboard.”
- Subscription URL: open the menu in the top-left corner, go to “Subscription group settings,” add a group, and enter the subscription URL.
- Return to the main screen, update the subscription, wait for the node list to refresh, and then select an entry to start the connection.
- If the system asks whether to allow a local connection service, confirm it as prompted; otherwise, the client cannot take over traffic that needs forwarding.
Bottom line: a successful import does not mean the settings will work
Seeing a node in the list only confirms that the link was parsed. You still need to verify the remote port, transport type, TLS or Reality settings, and the core logs for timeouts, DNS failures, or port conflicts during the handshake.
When to use a share link and when to use a subscription
The deciding factor is not the number of nodes, but who maintains the settings and how often they change. If you manage the server yourself and its address is stable, a share link keeps a clearly defined configuration. If nodes are maintained remotely and their entry points may change, a subscription is better for long-term use.
Recommended setup: keep long-term subscriptions and temporary nodes separate
Desktop: v2rayN
- Keep long-term nodes in a dedicated subscription group
- Import temporary test links as manual nodes
- After updates, recheck availability using latency and logs
Android: v2rayNG
- Use the same valid subscription URL
- Import temporary links separately from the clipboard
- Give groups clear names to avoid deleting the source by mistake
Keeping subscription entries separate from manual entries prevents confusion after an update and makes it easier to identify where a configuration came from.
If you only need to verify one new node, importing the share link directly is faster. During testing, keep the original label and check the server address, port, and transport settings. Once it works, you can edit the local label, but do not treat the label as a protocol setting. A node name that says “TLS” or “High Speed” cannot replace the actual fields in the configuration.
For multiple devices, a subscription avoids repeated manual entry. v2rayN and v2rayNG can each save the same subscription URL, but local routing, system proxy, and app traffic controls remain independent on each device. A subscription syncs the node list; it does not sync client settings such as “bypass LAN,” “per-app proxy,” or the local listening port.
| Use case | Recommended approach | Why |
|---|---|---|
| Testing one new configuration temporarily | Share link | Shorter import path with direct access to every setting |
| Nodes are centrally added, removed, or moved to different ports | Subscription URL | Update the subscription to retrieve the latest remote list |
| Maintaining a fixed server yourself | Share link or manual configuration | Settings change infrequently, making precise control easier |
| Using the same node set on desktop and Android | Subscription URL | Reduces one-by-one copying, but local settings still need to be configured separately |
| Troubleshooting why one node cannot connect | Single-node entry | Isolates subscription updates and interference from other nodes |
Troubleshooting parse failures, empty lists, and duplicate nodes
Start with the original input instead of repeatedly switching cores. First confirm whether you copied a node link or a subscription URL, then check that the link is complete and that the client version supports the protocol and transport. A subscription opening in a browser does not guarantee that its response is a node list the client can parse; login pages, error pages, and expiration notices may all be returned as ordinary web pages.
What should I do if pasting vmess:// reports a format error?
Copy the entire link again and confirm that the beginning, end, and every character in between remain on one line. If it still fails, upgrade the client before importing again and ask the configuration provider to regenerate the link. Do not manually rewrite the encoded content.
What should I do if vless:// imports successfully but errors immediately on startup?
Open the node editor and check security, type, sni, path, and serviceName one by one. Recognizing VLESS link syntax does not mean the current core supports every transport setting declared in the link.
What should I do if the node list is empty after updating the subscription?
First confirm that the subscription URL has not expired, then check the update message and client logs. If the response is a login page or error page, restore the required subscription access and update again instead of importing the URL as a single node.
Why do duplicate nodes appear after every update?
Check whether the same URL was added to multiple subscription groups or whether nodes from the subscription were imported manually first. Keep one valid subscription group, remove confirmed duplicate manual entries, and update once more.
What should I do if the node starts but web pages will not load?
In v2rayN, check the system proxy mode; in v2rayNG, check the connection status. Then review the logs for DNS errors, handshake timeouts, or local port conflicts. For example, if local port 10808 is already in use, change it under “Settings” → “Parameter settings” and restart the core.
- First verify the input type: protocol links use clipboard import, while HTTPS subscriptions use a subscription group.
- Then verify the parsed result: the protocol, address, port, user ID, and transport-layer fields must all be present.
- Next verify core startup: the logs should not report unsupported configuration fields or a local port conflict.
- Finally verify the connection path by distinguishing DNS resolution, TCP connection, TLS handshake, and application proxy settings.
Operational boundaries for saving, updating, and sharing
Share links and subscription URLs may contain access parameters that can be used to connect to a server, so handle them like account credentials. Do not include the complete content in public screenshots, log posts, or searchable documents. When asking others for help, keep the protocol name, transport type, and error message, but redact the user ID, domain, subscription URL, and other identifying fields.
Before updating a subscription, you can record the names, remote ports, and update times of currently working nodes. If many nodes disappear afterward, first check that the correct group is selected and that the remote response is normal; do not immediately add the same URL repeatedly. Before deleting a subscription group, confirm that it does not contain local entries you still need to keep.
- After receiving the content, identify its prefix and confirm its source and purpose.
- Use the matching import path; do not try to open protocol links in a web browser’s address bar.
- After importing, verify the key fields, then start the core and review the logs.
- Keep long-term nodes in a subscription group and temporary nodes as separate entries.
- Update the client regularly to gain support for parsing newer protocol fields and transport settings.
Final takeaway: update behavior determines how to save it
Use a subscription when settings are maintained remotely; use a share link when settings are fixed, need to be imported once, or require field-by-field debugging. Whichever method you choose, check the protocol, port, transport, and security fields after importing. A node label or its appearance in the list is not proof that it works.