There are two different ways to create a subdomain, and choosing the wrong one is why people end up with a subdomain that resolves but shows the wrong site, or a directory that exists and cannot be reached.
If the subdomain will be hosted on this account, use cPanel's Subdomains tool; it creates the DNS record and the directory in one step. If it points somewhere else entirely, you only need a DNS record.
Hosted here: use the Subdomains tool
In cPanel, open Subdomains. Type the prefix only, blog, not blog.example.com, and choose the parent domain.
cPanel fills in the document root automatically, usually public_html/blog. Keep that default; it keeps each subdomain in a clearly named folder.
Create it, and two things happen at once: an A record is added to the DNS zone, and the directory is created. The subdomain resolves within a minute or two, because the record is added on the server that already answers for your domain. No registrar involvement and nothing to wait for.
That is the whole job. Load the address to confirm; an empty directory shows a blank page or a listing, which means it works and there is simply nothing there yet.
Hosted elsewhere: add one DNS record
If the subdomain should point at an external platform. A shop, a helpdesk, a status page, do not use the Subdomains tool. You only need a record.
Open Zone Editor and add whichever the service specifies:
Type: A Name: shop Value: 203.0.113.45 Type: CNAME Name: shop Value: target.theirplatform.com
Use the type they ask for. A CNAME follows their infrastructure if they renumber, which is why platforms prefer it; an A record is fixed and breaks silently when they change addresses.
Creating a subdomain in cPanel and pointing it externally is the common error. The local directory competes with the external destination and you get a subdomain that resolves to your own empty folder.
SSL for the subdomain
A certificate covering example.com does not cover blog.example.com unless it is a wildcard.
Ahosting includes free SSL and normally issues for new subdomains automatically within a short time. Check the SSL status page after creating one. A subdomain without a certificate shows visitors a browser warning and nothing else alerts you.
For externally hosted subdomains, the certificate is the external service's job, not yours.
Using one for staging
The most valuable use of a subdomain, and the reason to create one even if you never need a blog. A copy of the live site at staging.example.com lets you test a major update without your visitors discovering the problem.
Two things are essential. Block it from search engines: otherwise you have published a duplicate of your entire site at a second address. Password-protecting the directory is more reliable than a robots setting, because it does not depend on the crawler choosing to respect it: password protecting directories in cPanel explains it.
And remember it exists. Staging copies are created for one job and left running for years, unpatched, holding a full copy of the live database.
Wildcard subdomains
A wildcard record catches every subdomain not explicitly defined:
Type: A Name: * Value: your server IP
Useful for an application that generates subdomains per customer. Otherwise avoid it: it means every typo and every probe resolves to your server, and it makes diagnosing a wrong subdomain harder, because nothing ever fails to resolve.
Removing one
Removing a subdomain in cPanel deletes the DNS record and stops the address resolving. It does not delete the files, which stay in the document root and keep using disk.
Delete the directory separately once you are sure, and look at what is in it first. Staging copies contain a full database dump surprisingly often.
When it does not work
Shows the main site instead of its own content. The document root points at public_html instead of the subdirectory.
Does not resolve at all. Rare for a subdomain, since no registrar change is involved. Check the parent domain still points at this server, if the parent moved, the subdomain went with it.
Certificate warning. No certificate for that name yet. Run AutoSSL for it.
404 on every page except the homepage. Rewrite rules. In WordPress, save the permalink settings without changing anything.
Resolves to the wrong place after pointing it externally. A leftover local subdomain or an old A record is still in the zone. Check the zone for duplicate records for that name. Using the zone editor deals with reading it.
If the subdomain is going to an external service rather than your own server, How to Point a Subdomain at a Third-Party Service goes over the record and the certificate.
Confirm which system is answering for the name
A subdomain can be configured in two places at once, and the one that answers is not always the one that was edited.
dig sub.example.com A +short dig example.com NS +short curl -sI https://sub.example.com/ | head -1
Compare the nameservers against where you made the change. Editing a record in a panel while the domain's DNS is served elsewhere changes nothing that anybody sees.
This is the commonest reason a correctly created subdomain does not resolve, and it is invisible from the panel, which reports the change as saved because it was.
Removing one leaves things behind
Deleting a subdomain removes the configuration and not necessarily the files or the record.
ls -la ~/public_html/sub 2>/dev/null dig sub.example.com A +short grep -c 'sub.example.com' /etc/userdatadomains 2>/dev/null
A directory left in place is still reachable through the main site's address, so content intended to be removed is still served from a different path.
A DNS record left pointing at the server produces a name that resolves to a site that no longer exists, which either shows the main site or an error depending on the configuration. Neither is what was intended, and both persist until somebody checks. Using the zone editor covers removing the record.