This advanced configuration is for customers using Google Cloud to terminate SSL for their branded link domain.
This guide walks through configuring SendGrid link branding with SSL when the customer manages their branded link domain on Google Cloud Platform. It is a companion to the main link branding setup documentation and specifically covers the proxy and SSL termination steps.
On Google Cloud, a Global External Application Load Balancer with Cloud CDN is used to terminate SSL for the branded link domain and forward traffic to sendgrid.net. This replaces the Cloudflare or other CDN setup referenced in the main link branding documentation.
For the main link branding flow (steps 1 and 2 in the SendGrid UI, DNS records, and SSL verification), see the main Link Branding Setup page. This document covers the customer-side infrastructure step only.
Prerequisites
A Google Cloud Platform project with billing enabled
A registered domain with access to DNS management
The gcloud CLI installed and authenticated, or access to the Google Cloud Console
The branded link domain and CNAME records already generated in the InOne panel during step 2 of the link branding setup
Familiarity with DNS, SSL certificates, and load balancing concepts, or a DevOps engineer who is
Part 1: Complete link branding setup in the InOne panel
Before configuring Google Cloud, complete steps 1 and 2 of the link branding setup in the InOne panel. This generates the CNAME records you will need in Part 3.
In the InOne panel, open the branded link management screen and select Use Custom Branded Link.
Add your branded domain. E.g., links.yourdomain.com. A custom subdomain is optional. If you do not provide one, SendGrid will assign one.
Complete the DNS records step. The panel will display two CNAME records.
Example CNAME records generated during this step:
Type | Host | Value |
|---|---|---|
CNAME | url1234.yourdomain.com | sendgrid.net |
CNAME | 12345.yourdomain.com | sendgrid.net |
Do not click the Check SSL button in the InOne panel yet. You will verify after completing the Google Cloud setup and DNS configuration. Revalidating more than once causes authentication to stop working.
Part 2: Configure the Google Cloud infrastructure
This section walks through setting up a Global External Application Load Balancer that terminates SSL for the branded link domain and forwards requests to sendgrid.net.
Step 2.1: Reserve a global static IP address
Reserve a global external IP address for the load balancer. You will point the branded link domain to this IP in Part 3.
gcloud compute addresses create sendgrid-link-ip --global --ip-version=IPV4Retrieve the allocated IP address:
gcloud compute addresses describe sendgrid-link-ip --global --format="value(address)"Note this IP. It is needed for the A record in Part 3.
Step 2.2: Create an Internet NEG and a backend service
An Internet Network Endpoint Group points to sendgrid.net so the load balancer can forward traffic to it. Create the NEG first:
gcloud compute network-endpoint-groups create sendgrid-neg \
--network-endpoint-type=internet-fqdn-port \
--global
gcloud compute network-endpoint-groups update sendgrid-neg \
--global \
--add-endpoint="fqdn=sendgrid.net,port=443"Create the backend service and attach the NEG:
gcloud compute backend-services create sendgrid-backend \
--global \
--protocol=HTTPS \
--port-name=https \
--enable-cdn
gcloud compute backend-services add-backend sendgrid-backend \
--global \
--network-endpoint-group=sendgrid-neg \
--global-network-endpoint-groupStep 2.3: Provision a Google-managed SSL certificate
Create a Google-managed SSL certificate for the branded link domain. Google will provision and renew the certificate once DNS points to the load balancer.
gcloud compute ssl-certificates create sendgrid-link-cert \
--domains=links.yourdomain.com \
--globalThe certificate will stay in PROVISIONING status until DNS points to the load balancer IP. This is expected and resolves once DNS is updated in Part 3.
Step 2.4: Create the URL map and HTTPS target proxy
Create a URL map that routes all traffic to the SendGrid backend, and a target HTTPS proxy that uses the SSL certificate:
gcloud compute url-maps create sendgrid-link-map \
--default-service=sendgrid-backend \
--global
gcloud compute target-https-proxies create sendgrid-link-proxy \
--ssl-certificates=sendgrid-link-cert \
--url-map=sendgrid-link-map \
--globalStep 2.5: Create the forwarding rule
Bind the reserved IP address to the HTTPS proxy on port 443.
gcloud compute forwarding-rules create sendgrid-link-rule \
--global \
--address=sendgrid-link-ip \
--target-https-proxy=sendgrid-link-proxy \
--ports=443Step 2.6: Optional HTTP to HTTPS redirect
Google-managed certificates use HTTP-01 validation on port 80. Configuring this redirect also satisfies that requirement:
gcloud compute url-maps import sendgrid-http-redirect \
--global \
--source /dev/stdin <<EOF
name: sendgrid-http-redirect
defaultUrlRedirect:
httpsRedirect: true
redirectResponseCode: MOVED_PERMANENTLY_DEFAULT
EOF
gcloud compute target-http-proxies create sendgrid-http-proxy \
--url-map=sendgrid-http-redirect \
--global
gcloud compute forwarding-rules create sendgrid-http-rule \
--global \
--address=sendgrid-link-ip \
--target-http-proxy=sendgrid-http-proxy \
--ports=80Part 3: Configure DNS records
Point the branded link domain to the load balancer and add the SendGrid CNAME records for verification.
Step 3.1: A record for the branded link domain
In your DNS provider (or Cloud DNS), create an A record pointing to the static IP reserved in step 2.1.
Type | Host | Value |
|---|---|---|
A | links.yourdomain.com | <static IP from step 2.1> |
Step 3.2: SendGrid CNAME records
Add the two CNAME records generated by the InOne panel in Part 1. These are required for link branding verification.
Step 3.3: Wait for propagation
DNS propagation can take anywhere from a few minutes to 48 hours. Verify with:
dig links.yourdomain.com +shortThe result should return the static IP you reserved.
Step 3.4: Verify SSL certificate provisioning
Check the status of the Google-managed certificate:
gcloud compute ssl-certificates describe sendgrid-link-cert --global --format="value(managed.status)"Wait until the status changes from PROVISIONING to ACTIVE. This typically takes 15 to 60 minutes after DNS is correctly configured.
Part 4: Verify the setup
Return to the link branding screen in the InOne panel and click Check SSL for your branded domain.
If DNS has propagated and the certificate is active, verification will succeed. If it fails, wait longer for propagation and retry, but do not revalidate DNS records in the panel multiple times.
Send a test email from your Insider One account to confirm that tracking links use the branded domain and display a valid SSL certificate.
Final step: enable SSL click tracking
After verification, contact your Insider One CSM or the deliverability team to request SSL click tracking to be enabled on the SendGrid account. This step is handled by Insider and is required for HTTPS links to function correctly.
Reference: Cloudflare to Google Cloud component mapping
If you are comparing this setup against the Cloudflare instructions in SendGrid's documentation, this table maps each component.
Feature | Cloudflare | Google Cloud |
|---|---|---|
DNS Management | Cloudflare DNS | Cloud DNS |
SSL certificate | Universal SSL (auto) | Google-managed certificate |
CDN and proxy | Cloudflare CDN | Cloud CDN with Global LB |
HTTP to HTTPS redirect | Always use HTTPS rule | URL map redirect rule |
Traffic routing | Cloudflare proxy | Internet NEG backend |
Troubleshooting
SSL certificate stuck in PROVISIONING
Confirm the DNS A record points to the correct static IP address.
Ensure the forwarding rule on port 443 is active.
Google-managed certificates use HTTP-01 validation. Confirm port 80 is also forwarded (step 2.6).
Verification fails in the InOne panel
Confirm both CNAME records are added correctly to DNS.
Wait for full propagation before retrying. Do not revalidate multiple times.
Use dig or nslookup to verify CNAME resolution.
ERR_CERT_COMMON_NAME_INVALID in browser
The SSL certificate domain must exactly match the branded link subdomain.
Confirm the certificate status is ACTIVE, not PROVISIONING or FAILED_NOT_VISIBLE.
Links do not resolve over HTTPS
Confirm with Insider that SSL click tracking has been enabled on the SendGrid account.
Verify the HTTP to HTTPS redirect is functioning (step 2.6).
External Network endpoint option appears disabled in the load balancer UI
This usually means the Console UI is filtering by the wrong load balancer type. The Internet NEG must be attached to a Global External Application Load Balancer, not a regional or internal one. Using the gcloud commands above avoids the UI filtering issue entirely.
References
SendGrid: Enabling SSL for click and open tracking
SendGrid: Custom SSL configurations
Google Cloud: Setting up a Global External Application Load Balancer
Google Cloud: Using Google-managed SSL certificates
Google Cloud: Internet NEG overview