DEV Community

Haastrup Elijah
Haastrup Elijah

Posted on

How I Hosted a WordPress Blog on a Subdomain While Keeping My Main Domain on Render

It's been a while since I shared my excitement here; I guess I lost it.
I got my excitement back and am here to share again!

A semi-automated Let’s Encrypt SSL setup for WordPress on Namecheap, without breaking existing DNS and SSL setups.


The Goal

I had a simple (but tricky) need:

  • My main domain is hosted on Namecheap.
  • My main site and APIs are hosted on Render.com using A records.
  • I wanted to create a blog using WordPress on a subdomain like blog.mydomain.com.
  • I wanted to do this without messing up existing DNS/SSL settings for the main domain and API services.
  • I also needed a valid SSL certificate for the subdomain - even though Namecheap shared hosting doesn’t allow Let’s Encrypt automation.

Here's how I did it.


Why I Chose Namecheap Legacy Hosting Over Cloud Hosting

While there are dozens of cloud-based WordPress hosting platforms out there (like Kinsta, Cloudways, WP Engine, and even Render itself), I made a conscious decision to go with Namecheap’s legacy shared hosting plan - and here’s why:

Cost.

The amount I pay yearly for legacy hosting on Namecheap is less than what I would pay monthly on a typical cloud-based WordPress hosting platform.

Since this blog isn't mission-critical in terms of performance or uptime, and I can handle the technical bits myself, it didn’t make sense to overpay for managed cloud infrastructure. The legacy hosting plan gave me:

  • Full cPanel access
  • Softaculous for 1-click WordPress install
  • Support for manual SSL
  • Enough storage and bandwidth for my use case

The tradeoff: No automation for SSL

The win: I save real money every year


The Problem

If you’ve tried something similar, you’ve likely hit at least one of these roadblocks:

  1. DNS conflict — Hosting your main domain on Render means you don’t want Namecheap’s hosting to override your A records or nameservers.
  2. Namecheap’s shared hosting forces you to assign a primary domain, and if you use your real domain, it may mess with existing DNS setups.
  3. No free SSL automation — Shared hosting on Namecheap doesn’t support Let’s Encrypt natively or auto-renewals.

The Setup That Worked

1. Keep Main Domain on Render

My @ and api DNS records on Namecheap point to Render's IP addresses - this part stays untouched.

2. Create a Dummy Domain for Hosting Setup

Since Namecheap requires a domain when setting up shared hosting, I used a dummy domain (e.g., mysandboxdomain.com) just to initialise the hosting account.

This way, my main domain's DNS was never touched.

3. Add a Subdomain (blog) Pointing to Namecheap

In my DNS settings on Namecheap (or Cloudflare if you're managing DNS there), I added this:

Type: A
Host: blog
Value: <Namecheap hosting IP>
TTL: Automatic
Enter fullscreen mode Exit fullscreen mode

This pointed only the subdomain (blog.mydomain.com) to Namecheap hosting - leaving mydomain.com and api.mydomain.com on Render untouched.

4. Install WordPress on the Subdomain

In Namecheap’s cPanel:

  • I added blog.mydomain.com as an Addon Domain or via the Domains panel.
  • Then I installed WordPress to that subdomain via Softaculous.

Everything was working, except…

5. SSL: The Final Challenge

Render already handles SSL for my main site and APIs.

But Namecheap wouldn’t let me install Let’s Encrypt automatically for the subdomain.

So I did the next best thing:


Manual Let’s Encrypt Setup with Certbot

On my local Linux machine:

  1. I installed Certbot:
   sudo apt install certbot
Enter fullscreen mode Exit fullscreen mode
  1. Then I generated a cert manually using the DNS challenge:
   certbot certonly --manual --preferred-challenges dns -d blog.mydomain.com
Enter fullscreen mode Exit fullscreen mode
  1. Certbot gave me a _acme-challenge.blog TXT record to add.

  2. I added that in my DNS and waited a few minutes before confirming.

    Certbot suggested Google Admin Toolbox tool to confirm that the TXT value has propagated.

Files Generated

After successful verification, Certbot gave me:

  • cert.pem (SSL certificate)
  • privkey.pem (Private key)
  • chain.pem (CA bundle)

Installed Certificate in cPanel

In cPanel > SSL/TLS > Manage SSL Sites, I selected blog.mydomain.com and:

  • Pasted cert.pem as the Certificate (CRT)
  • Pasted privkey.pem as the Private Key
  • Pasted chain.pem as the CA Bundle

Boom - SSL activated.


What I Have to Do Every 90 Days

Let’s Encrypt certs expire every 90 days, so I:

  1. Run the same certbot command
  2. Update the TXT record again
  3. Get fresh certs
  4. Paste them into cPanel manually

It takes 5–10 minutes and works reliably.


What This Setup Gives Me

[] Outcome
- Main domain + API remain fully functional on Render
- Blog subdomain is hosted separately on Namecheap
- SSL for blog via Let's Encrypt (manual install)
- Legacy hosting saves $$$ vs cloud WordPress hosting
- I have a full-featured WordPress blog securely running

Who This Is For

  • You host your main domain/app on Render, Vercel, Netlify, etc.
  • You want a separate WordPress blog under the same domain
  • You need HTTPS on a subdomain via Let’s Encrypt
  • You want to avoid high-cost WordPress hosting platforms
  • You’re okay pasting a cert every 90 days

Final Thoughts

This setup might sound like a hack, but it’s a clean and modular way to get:

  • Performance and simplicity (Render)
  • Flexibility and blogging power (WordPress on Namecheap)
  • No extra monthly cost for cloud blog hosting
  • SSL across your stack, with control over all parts

And the best part? I didn't have to touch the main domain's DNS or sacrifice performance.


Let me know if you have any suggestions or questions in the comments.
You can reach me on LinkedIn and Twitter: killcodeNG.

Top comments (0)