Consolidating Domains with CloudFront Functions
I recently consolidated my two separate blogs (ai.saurav.io and cloud.saurav.io) into a single unified home: blog.saurav.io.
While moving the markdown files was easy, the networking challenge took a bit more finesse. I needed to ensure that visitors (and search engines) visiting the old domains were automatically redirected to the new one, verifying path preservation.
Here is how I solved it using CloudFront Functions.

The Architecture
Instead of maintaining separate CloudFront distributions or S3 buckets for redirection—which is the “old school” way—I pointed all domains to a single CloudFront distribution and handled the routing logic at the edge.
- CloudFront: Added
ai.saurav.io,cloud.saurav.io, andblog.saurav.ioas aliases (CNAMEs) to my main distribution. - DNS: Updated Route53 to point all three domains to that distribution.
- Edge Logic: Attached a CloudFront Function to the Viewer Request event.
The CloudFront Function
CloudFront Functions are lightweight Javascript functions that run at AWS edge locations. They are perfect for header manipulation and URL redirects because they have extremely low latency and cost.
Here is the function code I used to force the redirect:
1 | function handler(event) { |
Why Not Just “Point” the Domains?
A common question is: “Why can’t I just add the CNAMEs to CloudFront and be done with it?”
Technically, that would serve the content. If a visitor accesses ai.saurav.io, they would see the blog. But serving content and managing identity are two different things.
Here is the critical difference between “Just Pointing” (CNAME only) vs. “Redirecting” (CloudFront Function):
| Feature | Edge Redirect (CloudFront Function) | “Just Pointing” (No Function) |
|---|---|---|
| Browser URL Bar | Updates to blog.saurav.io automatically. |
Stays on ai.saurav.io. |
| User Experience | Visitors know they are on the new site. | Visitors are confused; they see the old domain but new content. |
| SEO (Google) | Consolidates Authority. Google transfers “link juice” from the old domain to the new one. | Duplicate Content Penalty. Google sees two identical websites on two different domains, which hurts rankings for both. |
| Analytics | Unified traffic stats under blog. |
Fragmented stats across ai, cloud, and blog. |
Why This Approach Matches Modern Architecture
The only non-code way to achieve this would be to create three separate S3 buckets (one for content, two empty ones for redirects) and potentially separate CloudFront distributions for each.
By using a CloudFront Function, I kept the infrastructure minimal:
- 1 S3 Bucket
- 1 CloudFront Distribution
- 1 Function
This approach is cleaner, easier to maintain, and ensures that my diverse technical interests in AI and Cloud are finally unified under one roof.
Built with AI
This entire migration—from identifying the conflicting aliases, writing the Python scripts, to authoring this blog post—was planned and executed using Antigravity IDE and the Google Gemini 3 Pro model. The agent figured out the complex steps, and I simply validated the plan. It turns hours of DevOps work into single commands.
