What the default page is telling you
Host header the browser sent with each vhost's ServerName and ServerAlias. If one matches, that site is served. If none match, Apache uses the first vhost defined for that IP and port.
On a cPanel server, that first vhost is the server's default host. It serves the default page, which an administrator may have customized. So the default page is not an error page in the usual sense. It means: "A request reached this IP, but no account on this IP claims this domain."
That clue narrows the problem a lot. Either the request reached a different IP than the one the account's vhost uses, or the vhost for that domain doesn't exist in the live configuration. The same matching logic explains a related symptom, where a site presents another domain's certificate. That case is covered in Why Your Site Serves Another Domain's SSL Certificate.
IP mismatch between DNS and the vhost
/etc/userdatadomains lists each domain with its owner, document root, and IP:port. That gives you the server's side of the story in one line. You can then skip DNS entirely and ask the server directly for the domain on a specific IP with curl --resolve. This tells you whether the vhost works on that IP, regardless of what any resolver or browser cache says.
BASH
# What public DNS returns (check both IPv4 and IPv6)
dig +short A example.com
dig +short AAAA example.com
# Which IP cPanel bound the account's vhost to (read-only)
grep 'example.com' /etc/userdatadomains
# Ask the server for the site on a specific IP, bypassing DNS
curl -sI --resolve example.com:80:192.0.2.10 http://example.com/example.com and 192.0.2.10 with the real domain and the IP from userdatadomains. Suppose curl against the vhost IP returns the site's own headers, such as a redirect to its canonical URL or the WordPress-style headers you expect. Then the server is fine and DNS is pointing somewhere else. Now suppose curl against the IP DNS returns gives you the default page. That confirms the mismatch.
The fix depends on which side is wrong. Either update the A record to the IP the account uses, or move the account to the IP DNS points to. Whichever you choose, make it a deliberate decision, especially if the dedicated IP exists for a reason such as an older SSL setup or a mail reputation the customer cares about.
The AAAA record nobody remembered
When the server itself is behind NAT
userdatadomains and the zone file don't look like anything the provider assigned, check the NAT configuration in WHM before editing records one by one.
The vhost doesn't exist in the live config
httpd.conf from them. If a restore was interrupted, if httpd.conf was edited by hand outside cPanel's templates, or if the web server wasn't restarted after the rebuild, the userdata can be correct while the running config is missing the domain.
You can confirm this by asking the web server to dump its parsed vhosts. On most Apache builds, apachectl -S lists each vhost with its IP, port, and names. If the domain isn't in that list, Apache can't match it, and the default host wins. On cPanel, the usual fix is to rebuild the configuration from userdata with /usr/local/cpanel/scripts/rebuildhttpdconf and then restart the web server. If the rebuild fails with a syntax error, fix that error first. It's often a leftover custom include from the old server.
LiteSpeed setups add one more step. Depending on how LiteSpeed is configured, it may read Apache's configuration or use its own. If Apache's config looks correct and LiteSpeed still serves the default page, a graceful restart of LiteSpeed is usually the next step.
Document root problems look different
public_html for the primary domain, and often a subfolder for addon domains.
If the vhost matched but the document root is empty, you usually get a 403 Forbidden or a directory listing, depending on the server's settings. You don't usually get the server's default page. If the document root points to a path that doesn't exist, which happens when an addon domain's folder was renamed or not included in the backup, you typically get a 404 or an error in the domain's error log. A wrong but existing document root shows the wrong content: an old placeholder index.html, a parked page, or another project's files.
This distinction saves time. If you're truly seeing the server's default page, start with IPs and vhosts. If you're seeing a 403, a 404, or stale content, go straight to the document root in userdatadomains, then check that the directory exists, contains an index file, and is owned by the account user. An index.html sitting next to index.php is easy to miss. It's also a common reason a restored WordPress site shows an old "coming soon" page, because many servers prefer index.html when both files exist.
Common mistakes while chasing this
curl --resolve against a known IP removes those variables. It's usually the first thing a support engineer does before touching any configuration.
The second is fixing DNS in the wrong place. Editing the zone in cPanel changes nothing if the domain's nameservers point to a registrar or an external DNS provider. Check which nameservers the domain actually delegates to before editing records.
The third is assuming a dedicated IP carried over. A restore can bring an account back on the shared IP even if it had a dedicated one on the old server, depending on the options chosen. The reverse can happen too. Look at the IP the account has now, not the one you remember.
The fourth is restoring files over a working vhost and then blaming the files. If the vhost was fine and the site broke after you copied content, the cause is in the document root. It isn't Apache.
When a restored account shows the default page, read it as a routing message, not a data-loss message. Check what DNS returns for both A and AAAA records, compare that to the IP in userdatadomains, and test the server directly with curl --resolve. If those agree and the domain still isn't matched, rebuild the vhost configuration. Look at the document root only when the symptom is a 403, a 404, or the wrong content.