Bluesky allows you to replace the default username.bsky.social handle with your own domain name. This proves your identity and makes your profile look professional. You can use a root domain or a subdomain such as user.example.com or bsky.example.com. This article explains the requirements for using a subdomain, how to set up the DNS record, and how to verify it inside Bluesky.
Key Takeaways: Using a Subdomain as Your Bluesky Handle
- DNS TXT record at the subdomain: Bluesky reads the atproto TXT record at the subdomain you want to use, not the root domain.
- Settings > Account > Handle > I have my own domain: The only place in Bluesky where you start the domain verification process.
- Subdomain format in Bluesky: Enter the full subdomain as your handle, for example bsky.example.com, not just example.com.
What a Subdomain Handle Is and What You Need First
A subdomain handle is a custom handle that uses a subdomain of a domain you own. Instead of user.bsky.social, your handle becomes something like @bsky.example.com. Bluesky verifies ownership by checking a DNS TXT record at the exact subdomain you enter.
There are no Bluesky plan restrictions — any account can use a custom domain. The only requirement is that you control the domain's DNS settings. You need access to your domain registrar or DNS hosting provider to add a TXT record. If you use a service like Cloudflare, Namecheap, or GoDaddy, you can manage DNS records from their control panel.
How Bluesky Verifies Domain Ownership
Bluesky uses the AT Protocol to look up a specific TXT record at the subdomain you provide. For example, if you enter bsky.example.com as your handle, Bluesky queries _atproto.bsky.example.com for a TXT record. The record value must contain your Bluesky DID, which is a unique identifier for your account. If the record matches, Bluesky assigns the subdomain as your handle.
Prerequisites
Before you start, confirm the following:
– You own a domain and can add DNS records.
– You know your Bluesky DID. You can find it in Settings > Account > Advanced > My DID.
– Your DNS provider supports TXT records. All major registrars do.
– You are ready to wait for DNS propagation, which can take from a few minutes to 24 hours.
Steps to Set Up a Subdomain as Your Bluesky Handle
- Copy your Bluesky DID
Open Bluesky on the web or in the app. Go to Settings > Account > Advanced. Copy the DID string that starts with did:plc: or did:web:. Keep this value ready for the DNS record. - Log in to your DNS provider
Open your domain registrar or DNS hosting provider. Navigate to the DNS management section. The exact page name varies — look for DNS Settings, Zone Editor, or Advanced DNS. - Add a TXT record for the subdomain
Create a new TXT record. In the Name or Host field, enter the subdomain prefix followed by _atproto. For example, if your subdomain is bsky.example.com, enter _atproto.bsky. If your provider requires the full subdomain, enter _atproto.bsky.example.com including the trailing dot. In the Value or Content field, paste your Bluesky DID exactly as copied. Set TTL to 300 or Auto. - Wait for DNS propagation
DNS changes do not take effect instantly. Wait at least 5 to 10 minutes. If your provider uses low TTL values, propagation may be faster. You can check the record using a tool like dig _atproto.bsky.example.com TXT or an online DNS checker. - Start the handle change in Bluesky
Open Bluesky Settings > Account > Handle. Click I have my own domain. In the text field, enter the full subdomain you want to use, for example bsky.example.com. Do not include the @ symbol or any protocol prefix. - Verify the DNS record
After entering the subdomain, Bluesky attempts to check the TXT record. If the record is found and the DID matches, Bluesky confirms the handle change. Your profile now shows the subdomain as your handle.
Common Mistakes and Issues When Using a Subdomain Handle
Bluesky says "DNS record not found"
This is the most frequent error. The TXT record is missing, has the wrong name, or has not propagated yet. Double-check that you added the record at _atproto.your-subdomain.your-domain.com, not at the root domain. If you just added the record, wait another 15 minutes and try again. If the problem persists, use a DNS lookup tool to confirm the record is publicly visible.
Bluesky says "DID mismatch"
The DID in the TXT record does not match your Bluesky account DID. Copy the DID again from Settings > Account > Advanced. Paste it into the TXT record value exactly, with no extra spaces or quotes. Some DNS providers add quotes automatically — remove them if present.
Handle change succeeds but profile shows old handle
Bluesky caches handle information. Log out of Bluesky and log back in. On the web version, clear your browser cache and reload the page. The new handle should appear within a few minutes.
Subdomain handle works on web but not in the app
The Bluesky app may cache the old handle. Force close the app and reopen it. On iOS, swipe up from the app switcher. On Android, go to Settings > Apps > Bluesky > Force Stop. Then open the app again.
Subdomain Handle vs Root Domain Handle on Bluesky
| Item | Subdomain Handle | Root Domain Handle |
|---|---|---|
| Example handle | @bsky.example.com | @example.com |
| DNS record location | _atproto.bsky.example.com | _atproto.example.com |
| DNS record name | _atproto.bsky | _atproto |
| Use case | Separate brand or service from main domain | Personal or company main domain |
| Complexity | Same as root domain | Same as subdomain |
Both methods require the same DNS setup steps. The only difference is where you place the TXT record and what handle you enter in Bluesky. A subdomain is useful if you already use your root domain for a website and want to keep your Bluesky handle separate.
You can now use a subdomain as your Bluesky handle. After the DNS record propagates and Bluesky verifies it, your profile will display the subdomain. Next, consider adding a custom feed or creating starter packs to make your profile more useful. If you manage multiple Bluesky accounts, you can set up a different subdomain for each account using the same root domain.