If a visitor mistypes a URL on your site, or an old link from Google points at a page you deleted years ago, they land on a bare, ugly server error page — white background, a stack trace-looking heading, maybe your server's name and version leaking out. It doesn't just look unfinished. It's a dead end that sends people straight back to the search results, and on an e-commerce or business site that's a lost customer. The good news: cpanel" class="auto-link">wordpress-missing-a-temporary-folder-upload-error" class="auto-link">cPanel has a built-in tool for exactly this, and most people who host with us have never opened it.

Symptom

You (or a visitor) hit a broken link and instead of something branded and helpful you get one of these:

  • A plain Apache/LiteSpeed "Not Found" page with no styling at all
  • A generic "Internal Server Error" that gives zero clue what to do next
  • WordPress's own default 404 template, which technically works but doesn't match the rest of your site if a theme update or plugin conflict knocked it out
  • Old campaign or product URLs bouncing visitors to a wall instead of a "sorry, try this instead" page

None of these are fatal. But they're free conversions and SEO signal you're leaving on the table.

Cause

By default, Apache and LiteSpeed ship a minimal, unstyled response for each HTTP status code (403, 404, 500, 503, and so on). cPanel gives every account an Error Pages tool to override these per domain, but because nothing breaks without it, almost nobody goes looking for it until they notice how bad the default looks — or until a client asks why a mistyped URL doesn't at least say "Page Not Found" in plain English.

There's a second, more specific cause for WordPress sites: if your theme's 404.php template is missing, broken by a theme switch, or your permalinks are misconfigured, WordPress can fall through to the server-level default instead of its own themed 404 page. That's worth ruling out separately before you touch anything at the server level.

Fix

1. Set custom pages through cPanel (works for any site, any CMS)

  1. Log in to cPanel and open Error Pages under the "Advanced" section.
  2. If you have more than one domain or addon domain on the account, pick the correct one from the dropdown at the top — error pages are set per domain, not account-wide.
  3. Click the status code you want to customize. 404 (Not Found) and 500 (Internal Server Error) cover 90% of what visitors actually hit; 403 (Forbidden) is worth doing too if you have any password-protected directories.
  4. Write your HTML in the box provided. cPanel gives you a set of tags you can drop in — _PAGE_HOST_TITLE_, _PAGE_REFERRER_, _PAGE_URL_TITLE_ and similar — so the page can say "The page you requested at yoursite.com/old-page wasn't found" without you hardcoding it.
  5. Save. cPanel writes the correct ErrorDocument directive into your domain's .htaccess automatically — you don't need to edit anything by hand.

2. Or do it manually via .htaccess

If you'd rather host your own static error page and link to it directly, add this near the top of your domain's public_html/.htaccess:

ErrorDocument 404 /custom-404.html
ErrorDocument 500 /custom-500.html
ErrorDocument 403 /custom-403.html

Then upload custom-404.html etc. to your document root through File Manager or SFTP. Keep these pages simple, self-hosted HTML with inline or locally-linked CSS — a custom error page that itself depends on an external stylesheet, font CDN, or broken image is exactly the kind of thing that fails silently when something is already wrong with the server.

3. WordPress sites: check the theme first

If your site is WordPress, don't just override at the server level and call it done — check whether the theme's own 404 handling is intact:

  • Go to Settings → Permalinks in wp-admin and click Save (this re-flushes rewrite rules and fixes a surprising number of "wrong page for everything" issues).
  • Confirm your active theme has a 404.php template, or that you're using a page builder's dedicated 404 template feature (Elementor, Divi, and similar all support this natively).
  • Only fall back to the cPanel-level Error Pages tool for the 500/403 cases WordPress itself can't template — a database outage or PHP fatal error happens before WordPress can render anything, so your custom-designed WP 404 page won't show for those; the server-level one will.

Which codes are worth customizing

CodeMeaningWorth customizing?
404Page not foundYes — highest traffic of any error page
500Internal server errorYes — reassure visitors it's temporary, add a support link
403ForbiddenWorth it if you use password-protected directories
503Service unavailable / maintenanceYes, if you take planned downtime for updates
401Unauthorized (htpasswd prompts)Usually skip — the browser's native login prompt is fine

Testing without breaking anything

Don't just guess a random URL on the live site and hope. A cleaner way:

curl -I https://yourdomain.com/this-page-does-not-exist-xyz

Check the HTTP status code in the response, then open that same URL in an incognito window to see the rendered page. If you're behind Cloudflare or another CDN/proxy, purge the cache for that domain after saving changes in cPanel — proxied error pages can get cached at the edge and keep serving the old default for a few minutes.

Prevention

  • Whenever you delete or rename a page, add a 301 redirect from the old URL instead of letting it 404 — fewer visitors hit the error page at all.
  • Check Google Search Console's "Not Found" report every month or two; it'll show you exactly which broken URLs get real traffic so you can prioritize redirects.
  • Keep your custom error pages dependency-free — no external CDN scripts, no calls back to your database — so they still render even when the actual site is down.
  • If you run multiple domains on one account, don't assume setting it once covers all of them; revisit the domain dropdown in Error Pages for each one.

Frequently Asked Questions

Will a custom error page hurt my SEO?

No — as long as the server still returns the correct HTTP status code (404, 500, etc.) alongside your custom HTML. cPanel's Error Pages tool and the ErrorDocument directive both preserve the real status code; you're only changing what's displayed, not how it's reported to search engines and browsers.

Do I need to do this separately for each addon domain?

Yes. cPanel's Error Pages tool is scoped per domain, so if you host multiple sites on one account, select each domain from the dropdown and set its pages individually.

My custom 404 page isn't showing — why?

Usually one of three things: a caching layer (Cloudflare, a browser cache, or a page cache plugin) is still serving the old response — purge it; the .htaccess edit didn't save correctly, which you can confirm by opening File Manager and checking for the ErrorDocument line; or, on a WordPress site, WordPress itself is intercepting the request before it reaches your server-level page.

Can I use a custom page for 500 errors even if the database is down?

Yes, and you should — that's the main reason to set it at the cPanel/server level rather than relying only on your CMS's error handling. A server-level static HTML page renders even when PHP or MySQL can't, so visitors see something reassuring instead of a blank screen.

Is this feature available on VPS hosting too?

If your VPS runs cPanel/WHM, yes, the same Error Pages tool is there per account. On a bare VPS without cPanel, you'd set ErrorDocument directives directly in your Apache or Nginx virtual host config instead.