- Record: type SRV, name
_minecraft._tcp.play, priority0, weight0, portyour port, targetplay.yourdomain.com(an A record, DNS only on Cloudflare). - Test:
nslookup -type=SRV _minecraft._tcp.play.yourdomain.comshould print the port and target. Then add the server in game with only the name. - Bedrock ignores SRV records; Bedrock players type the domain and the port. Our pinger resolves SRV the way the Java client does, so a listing with just the hostname works.
A Minecraft server SRV record lets Java players connect to play.yourdomain.com when your server actually listens on play.yourdomain.com:25566, or on a different machine altogether. Since Java Edition 1.3.1 the client, given a name with no port, looks up _minecraft._tcp. followed by that name, and if an SRV record answers it uses the port and target from the record. That is the whole mechanism, and the Minecraft Wiki's server tutorial confirms the lookup name is exactly _minecraft._tcp.<your-domain-name>.
You need one only if your port isn't 25565, or the name players type isn't where the server runs. If your host gave you 25565 on a dedicated IP, an A record is enough and you can stop reading. Otherwise, here is the exact record, the Cloudflare screen, how to test it, the mistakes that break it, and how our pinger handles it so your listing works with just the hostname.
The exact record
An SRV record has more fields than an A record, and every one of them has tripped somebody up. Assume your domain is yourdomain.com, players will type play.yourdomain.com, and the server listens on port 25566.
| Field | Value | Why |
|---|---|---|
| Type | SRV | |
| Service | _minecraft | The Java client looks up this service name and no other. |
| Protocol | _tcp | Java uses TCP. There is no _udp lookup, because Bedrock doesn't do SRV at all. |
| Name | play (so the full record name is _minecraft._tcp.play.yourdomain.com) | This is the name players type, minus the domain. Use @ or leave it blank for the bare yourdomain.com. |
| Priority | 0 | Lower wins. It only matters if you have several SRV records for the same name. |
| Weight | 0 | Splits traffic between records with equal priority. With one record, 0 and 5 behave the same. |
| Port | 25566 | The port the server really listens on. |
| Target | play.yourdomain.com | A hostname that has an A record pointing at the server's IP. Not an IP address, and not a CNAME. |
| TTL | Auto, or 300 | How long resolvers cache the answer. Lower it before a move; anything is fine once it is stable. |
So you always have two records: the A record for play pointing at the IP, and the SRV record for _minecraft._tcp.play pointing at play with the port. The target can be a different hostname (node7.yourdomain.com) if the game runs somewhere other than where the name resolves; it still needs its own A record.
Cloudflare steps
- Open DNS, then Records, and click Add record for your domain in the Cloudflare dashboard.
- Type: SRV. The current dashboard has no separate Service and Protocol boxes; you write them into the name.
- Name:
_minecraft._tcp.play. Cloudflare appends.yourdomain.com, so don't type the domain again. For the bare domain, use_minecraft._tcp. - Priority 0, Weight 0, Port 25566, Target
play.yourdomain.com. No trailing dot needed. TTL Auto. - Save. SRV records have no proxy toggle because only A, AAAA and CNAME records can be proxied.
- Check the A record for
play. Its proxy status must be DNS only (gray cloud). Cloudflare's proxy carries only web ports by default (80, 443 and a short list of others, per its network ports page), so a proxied target sends port 25566 into nothing.
Cloudflare's record types reference shows the composed name format (_service._proto.name) if your panel looks different. On other providers the boxes have the same names; the only thing that changes is whether the domain is appended for you.
Testing it with nslookup and dig
Test the record from a computer before you test it in the game, so you know which half is wrong. On Windows, in PowerShell or Command Prompt:
nslookup -type=SRV _minecraft._tcp.play.yourdomain.com
On macOS or Linux:
dig SRV _minecraft._tcp.play.yourdomain.com +short
A working record prints the priority, weight, port and target, for example 0 0 25566 play.yourdomain.com.. Then check that the target resolves:
nslookup play.yourdomain.com
That should print your server's IP. If the SRV lookup answers but the A lookup doesn't, the target is wrong or missing. If neither answers, wait a few minutes (or query your DNS provider's own nameserver directly, which skips your local cache) and check for a typo in the name. Once both answer, open the game, add a server with only play.yourdomain.com and no port, and refresh. Finally, paste the bare hostname into our checker: it resolves SRV the same way the client does, so a green result there means the record works from outside your house too.
Why Bedrock ignores SRV records
Bedrock Edition doesn't look up SRV records. GeyserMC's common issues page lists a domain that resolves only through SRV as a reason Bedrock players can't connect, and the fix is the same for a Geyser server or a native Bedrock server: Bedrock players type the name (which resolves through the plain A record) and the port in the separate port field, 19132 unless you changed it. If Geyser or your Bedrock server listens on 19132, the name alone is enough on Bedrock because 19132 is the client's default. If your host assigned a different UDP port, that number goes in your listing's Bedrock box, in your description and in every join guide. Our crossplay guide covers the Geyser side; the domain guide covers the naming.
Common mistakes
- The A record is proxied. The orange cloud on the target record. Everything resolves, nothing connects, and every server list shows you offline. Set it to DNS only.
- The name is doubled or on the wrong label. Typing
_minecraft._tcp.play.yourdomain.cominto a box that appends the domain gives you_minecraft._tcp.play.yourdomain.com.yourdomain.com. Or the record is on_minecraft._tcp(the bare domain) while players typeplay.yourdomain.com. The record name must be_minecraft._tcp.plus exactly what players type. - Players type the port. The client only consults SRV when no port is given.
play.yourdomain.com:25565ignores your record and hits the wrong port. Tell players the name alone. - The target is an IP or a CNAME. The target has to be a hostname with an A record. Point it at
playor at a node name that has one. - Trailing dot trouble. Zone-file style panels want
play.yourdomain.com.with the dot; form-style panels want it without and add it themselves. If a panel rejects the target, try it the other way. - Nothing opened the port. An SRV record only tells clients where to go. The port still has to be open on the host or forwarded on your router; the public server guide covers that.
- Old answers cached. A record you changed with a long TTL keeps its old value in players' resolvers for hours. Lower the TTL before a migration, not after.
- The proxy runs on the port, not the backend. On a Velocity or BungeeCord network, the SRV port is the proxy's port; backends are never reached directly. The Velocity guide covers the network side.
How our pinger resolves SRV
When you list a server with just a hostname and no port, we do exactly what the Java client does. We treat an empty port as 25565, and for any address that is a name rather than an IP we first look up _minecraft._tcp. plus that name. If SRV records come back we take the one with the lowest priority and use its target and port; if none do, we connect to the name on 25565. The target has to resolve to a public IP, or the check fails and your page says so. If you list an explicit port instead, we skip SRV, again like the client. The Bedrock probe never uses SRV: it tries your address on UDP 19132 once a day, which is why Geyser on the default port is the easy way to earn a Bedrock join box and a place on the crossplay list.
The address our checks actually reach, after SRV, is what we compare between listings, so listing one server under two names shows up as a duplicate. And the address on your listing is what players copy, so list the clean name and let the record do the port. Once nslookup answers and the game connects with the name alone, add the server with that name and claim it from its server page with the code in your MOTD.
Quick questions
What is the SRV record for a Minecraft server?
Type SRV, name _minecraft._tcp. followed by the name players type (for example _minecraft._tcp.play under your domain), priority 0, weight 0, the port your server listens on, and a target hostname that has an A record for the server's IP.
How do I make a Minecraft SRV record on Cloudflare?
DNS, Records, Add record, type SRV. Name _minecraft._tcp.play, priority 0, weight 0, your port, target play.yourdomain.com, TTL Auto, Save. Then make sure the A record for play is DNS only, not proxied.
Does a Minecraft Bedrock server support SRV records?
No. The Bedrock client doesn't look them up. Bedrock players use the domain, which resolves through the A record, plus the port typed in the port field, 19132 by default.
My SRV record is right but players still can't connect. Why?
Most often the target A record is proxied on Cloudflare, the port isn't open on the host or router, or the record has an extra copy of the domain in its name. Run nslookup -type=SRV on the full name, then nslookup on the target, and check the proxy status.
