How to configure Google Domains + Heroku w a Naked Domain

Solution 1:

It's advisable to make the www subdomain the default here, such that the root/naked domain redirects to www. This is in line with Heroku recommendations, which states:

For maximum scalability and resiliency applications should avoid using DNS A-records and instead use a DNS provider that supports CNAME functionality at the apex, or use sub-domains exclusively

You can achieve this with Google Domains Synthetic Records:

  • Go to the Synthetic Records section
  • Select Subdomain forward
  • Enter @ for subdomain, and www.xyz.com for destination

Solution 2:

Another solution is to use some 3rd party DNS provider like Cloudflare to do this. I just went through this same process. App hosted on Heroku with a domain purchased from Google. Signed up for a free account with Cloudflare and was up and running in about an hour following this guide: https://support.cloudflare.com/hc/en-us/articles/205893698

Things I did:

  • Delete DNS rules I had tried adding earlier to Google under "Custom resource records"
  • Have just one domain added in Heroku for the root: "myapp.com" (not "www.myapp.com", not "*.myapp.com") which gave me a DNS address like "blah-blah-12345-herokudns.com"
  • In Cloudflare add two CNAME records on the DNS page:

    1. CNAME "myapp.com" blah-blah-12345-herokudns.com
    2. CNAME "www" blah-blah-12345-herokudns.com
  • Copy over custom DNS nameservers into Google from Cloudflare

After that now I can go to myapp.com and it just works. Super stoked because I really didn't want www.myapp.com.

One cool thing is I had already set up an GSuite account for the domain and when I signed up for Cloudflare it imported all the DNS rules from Google, including the MX records for email so it worked seamlessly.

Solution 3:

IMHO, you should:

1/ Set your heroku domain to be http://example.com. All the info are in the Heroku documentation.

Heroku should serve your site using http://example.com.

2/ You need to redirect in Google Domains your http://www.example.com to http://example.com. To do this, you need to set web forwarding in the Google Domain console under the website tab. The documentation is straight forward.

Any http://www.example.com request should be forwarded to http://example.com.

UPDATE

Due to your needs, I am wondering if the best is not to disable the naked to www redirection, have both domain points to your heroku instance and get a SSL certificate for them (using let's encrypt makes things easy).

Here is a tutorial.

I hope this helps!