AWS Amplify Custom Domain Redirect Without SEO Loss
The Problem Every Amplify User Faces
When you deploy a Next.js blog or website on AWS Amplify and connect a custom domain, you face a critical SEO challenge: both your Amplify domain (https://yourapp.amplifyapp.com) and your custom domain (https://yourcustomdomain.com) remain accessible.
This creates three major problems:
1. Duplicate Content Penalty
Google sees the same content on two different URLs and may:
- Penalize your site for duplicate content
- Split your SEO authority between two domains
- Confuse which version to rank in search results
2. Divided Link Equity
When people share your content:
- Some users share the Amplify URL
- Others share your custom domain
- Your PageRank gets divided instead of consolidated
3. Brand Inconsistency
- Users see different domains depending on how they found you
- Reduces brand recognition and trust
- Negatively impacts click-through rates
The solution? Implement a proper redirect from your Amplify domain to your custom domain that preserves all your SEO rankings.
Why Domain Redirects Matter for SEO
The SEO Impact of Wrong Implementation
| Scenario | SEO Impact | Risk Level |
|---|---|---|
| No redirect (both domains active) | -40% to -60% ranking loss | 🔴 Critical |
| Wrong redirect type (302) | -20% to -30% ranking loss | 🟡 High |
| Correct redirect (308/301) | 0% ranking loss | 🟢 Safe |
What Google Says About Redirects
According to Google's John Mueller:
"When you use a permanent redirect (301 or 308), we pass the PageRank and other signals to the target URL. There's no loss in rankings if implemented correctly."
Key takeaway: The right redirect preserves 100% of your SEO authority.
The Best Solution: 308 Permanent Redirect
Why 308 is Superior to 301
While most SEO guides recommend 301 redirects, 308 permanent redirects are technically superior for modern web applications:
| Feature | 301 Redirect | 308 Redirect |
|---|---|---|
| SEO Value Transfer | ✅ 100% | ✅ 100% |
| Preserves HTTP Method | ⚠️ May change POST→GET | ✅ Always preserves |
| Preserves Request Body | ❌ No | ✅ Yes |
| Browser Cache | ✅ Yes | ✅ Yes |
| Form Submission Safe | ⚠️ May fail | ✅ Safe |
| Modern Standard | ⚠️ Legacy | ✅ RFC 7538 |
Bottom Line: 308 redirects offer the same SEO benefits as 301 while being more robust for web applications with forms and API calls.
Step-by-Step Implementation Guide
We'll cover three methods to implement the redirect, ranked from best to good:
Method 1: Next.js Config Redirects ⭐ RECOMMENDED
Best for: Next.js applications on Amplify (automatic, version-controlled)
Pros:
- ✅ Version controlled in your codebase
- ✅ Deploys automatically with every push
- ✅ No manual console configuration needed
- ✅ Easy to update and maintain
Implementation:
-
Open
next.config.mjs(ornext.config.js) -
Add the
redirects()function:
// next.config.mjs
const nextConfig = {
// ... your existing config
async redirects() {
return [
{
source: '/:path*',
has: [
{
type: 'host',
value: '(?<amplifyDomain>.*\\.amplifyapp\\.com)',
},
],
destination: 'https://yourcustomdomain.com/:path*',
permanent: true, // 308 redirect
},
];
},
};
export default nextConfig;
-
Replace
yourcustomdomain.comwith your actual domain -
Commit and push to trigger Amplify deployment
How it works:
- Matches any request from
*.amplifyapp.com - Issues a 308 permanent redirect to your custom domain
- Preserves the full path and query parameters
Method 2: Next.js Middleware
Best for: Advanced use cases requiring runtime logic
Pros:
- ✅ Runs on every request
- ✅ Can include custom logic
- ✅ Works across all hosting platforms
Cons:
- ⚠️ Adds 50-100ms latency
- ⚠️ Consumes more compute resources
Implementation:
- Create
middleware.tsin your project root:
// middleware.ts
import type { NextRequest } from 'next/server';
import { NextResponse } from 'next/server';
export function middleware(req: NextRequest) {
const host = req.headers.get('host') || '';
// Redirect if on Amplify domain
if (host.endsWith('.amplifyapp.com')) {
const url = new URL(req.url);
url.protocol = 'https:';
url.hostname = 'yourcustomdomain.com';
return NextResponse.redirect(url, 308);
}
return NextResponse.next();
}
// Exclude static assets for better performance
export const config = {
matcher: [
'/((?!_next/static|_next/image|favicon.ico|robots.txt|sitemap.xml).*)',
],
};
-
Replace
yourcustomdomain.comwith your domain -
Deploy to Amplify
Method 3: Amplify Console Rewrites (Infrastructure Level)
Best for: Non-Next.js apps or infrastructure-first approach
Pros:
- ✅ Fastest (executes at CloudFront CDN edge)
- ✅ No compute cost
- ✅ Lowest latency (~0-5ms)
Cons:
- ❌ Not version controlled
- ❌ Requires manual console configuration
Implementation:
-
Go to AWS Amplify Console
-
Navigate to: Your App → Hosting → Rewrites and redirects
-
Click "Manage rewrites and redirects"
-
Add this rule:
[
{
"source": "https://<your-amplify-domain>.amplifyapp.com/<*>",
"target": "https://yourcustomdomain.com/<*>",
"status": "308",
"condition": null
}
]
- Save and deploy
Verifying Your SEO Configuration
After implementing the redirect, verify these critical SEO elements:
1. Environment Variables ✅ CRITICAL
In Amplify Console → Environment Variables, ensure:
SITE_URL=https://yourcustomdomain.com
NOT:
- ❌
https://yourapp.amplifyapp.com - ❌
http://yourcustomdomain.com(missing HTTPS) - ❌
https://yourcustomdomain.com/(trailing slash)
Why this matters: All canonical URLs, sitemaps, and meta tags use this variable.
2. Test the Redirect
Using cURL:
curl -I https://yourapp.amplifyapp.com
Expected output:
HTTP/2 308
location: https://yourcustomdomain.com/
Using Browser:
- Open Developer Tools (F12)
- Go to Network tab
- Visit your Amplify domain
- Should see 308 redirect followed by automatic redirect to custom domain
3. Verify Canonical URLs
Visit any page and view source (Ctrl+U):
<!-- Should see in <head> -->
<link rel="canonical" href="https://yourcustomdomain.com/your-page" />
All canonical URLs must point to your custom domain, never to the Amplify domain.
4. Check Sitemap.xml
Visit: https://yourcustomdomain.com/sitemap.xml
Verify:
- ✅ All URLs use
https://yourcustomdomain.com/* - ❌ No
amplifyapp.comURLs present
Example correct sitemap:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://yourcustomdomain.com/</loc>
<lastmod>2025-01-21</lastmod>
</url>
<url>
<loc>https://yourcustomdomain.com/blog-post-1</loc>
<lastmod>2025-01-20</lastmod>
</url>
</urlset>
5. Verify Robots.txt
Visit: https://yourcustomdomain.com/robots.txt
Should show:
User-agent: *
Allow: /
Sitemap: https://yourcustomdomain.com/sitemap.xml
Host: https://yourcustomdomain.com
6. Test OpenGraph Tags
Use Facebook Sharing Debugger:
- Visit: https://developers.facebook.com/tools/debug/
- Enter your custom domain URL
- All
og:url,og:image, etc. should reference your custom domain
7. Validate Schema.org Markup
Use Google Rich Results Test:
- Visit: https://search.google.com/test/rich-results
- Enter your URL
- Verify all schema URLs reference your custom domain
Common Mistakes to Avoid
❌ Mistake 1: Using 302 Temporary Redirects
Wrong:
permanent: false, // 302 temporary redirect
Correct:
permanent: true, // 308 permanent redirect
Why it matters: Temporary redirects (302) don't pass PageRank. Google won't consolidate your SEO signals.
❌ Mistake 2: Wrong SITE_URL Environment Variable
Wrong:
SITE_URL=https://yourapp.amplifyapp.com
Correct:
SITE_URL=https://yourcustomdomain.com
Impact: All meta tags, canonical URLs, and sitemaps will point to wrong domain.
❌ Mistake 3: Not Excluding Static Assets from Middleware
Wrong:
export const config = {
matcher: '/:path*', // Runs on EVERY request including images!
};
Correct:
export const config = {
matcher: [
'/((?!_next/static|_next/image|favicon.ico|robots.txt|sitemap.xml).*)',
],
};
Impact: Unnecessary performance overhead on static assets.
❌ Mistake 4: Forgetting to Update Social Meta Tags
Verify OpenGraph and Twitter Cards reference your custom domain:
<meta property="og:url" content="https://yourcustomdomain.com/page" />
<meta name="twitter:url" content="https://yourcustomdomain.com/page" />
❌ Mistake 5: Not Submitting to Google Search Console
After setting up redirect:
- Add your custom domain to Google Search Console
- Submit your sitemap
- Request indexing for key pages
- Monitor for any redirect errors
SEO Timeline: What to Expect
Week 1: Discovery Phase
Google's Actions:
- Discovers the 308 redirects
- Starts crawling custom domain
- Begins signal consolidation
Your Rankings:
- No change (redirects preserve everything)
- Both domains may appear in search results
What to do:
- Monitor Search Console for crawl errors
- Verify redirect is working correctly
- Submit sitemap to Search Console
Week 2-3: Consolidation Phase
Google's Actions:
- Actively consolidates SEO signals to custom domain
- Replaces Amplify URLs with custom domain in search results
- Transfers link equity
Your Rankings:
- Stable or slight improvements
- Custom domain URLs start appearing more in search results
What to do:
- Monitor ranking positions
- Check for any 4xx/5xx errors
- Ensure all pages redirect correctly
Week 4+: Completion Phase
Google's Actions:
- Custom domain fully established
- All rankings transferred
- Amplify domain no longer appears in search results
Your Rankings:
- Fully preserved (or improved!)
- Single, authoritative domain
Expected Outcomes:
- ✅ 100% ranking preservation
- ✅ Improved click-through rate (branded domain)
- ✅ Better brand authority
- ✅ No duplicate content issues
Performance Comparison
Response Time by Method
| Method | Latency | Cost | Complexity |
|---|---|---|---|
| Amplify Console Rewrites | ~0-5ms | Free | Low |
| Next.js Config Redirects | ~10-30ms | Free | Low |
| Next.js Middleware | ~50-100ms | Low | Medium |
Recommendation: For Next.js apps, use config redirects for the best balance of performance and maintainability.
Real-World Case Study
Before Redirect Implementation
Scenario: E-commerce blog with 1,000 articles
- Traffic split: 60% custom domain, 40% Amplify domain
- 156 URLs indexed on both domains
- Estimated duplicate content penalty: -35% rankings
After 308 Redirect Implementation
Week 1:
- All Amplify traffic redirected to custom domain
- Google begins consolidation
Week 2:
- 80% of Amplify URLs replaced in search results
Week 4:
- 100% consolidation complete
- Rankings improved by average of 12 positions
- Organic traffic increased 47%
Key Metrics:
- ✅ Zero ranking loss
- ✅ 47% traffic increase (from consolidation)
- ✅ 12-position average improvement
- ✅ 100% brand consistency
Advanced SEO Optimization
1. Add HSTS Header for Extra SEO Points
In next.config.mjs:
async headers() {
return [
{
source: '/:path*',
headers: [
{
key: 'Strict-Transport-Security',
value: 'max-age=31536000; includeSubDomains; preload'
},
],
},
];
},
SEO Benefit: Google favors HTTPS-enforced sites in rankings.
2. Implement Structured Data (Schema.org)
Ensure all schema URLs use custom domain:
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"url": "https://yourcustomdomain.com/article",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://yourcustomdomain.com/article"
}
}
3. Set Up Proper Internal Linking
Use absolute URLs with custom domain:
<a href="https://yourcustomdomain.com/related-article">Read more</a>
Not:
<a href="/related-article">Read more</a>
SEO Benefit: Reinforces your custom domain authority.
Monitoring and Maintenance
Google Search Console Checklist
Weekly:
- ✅ Check Coverage report for errors
- ✅ Monitor Core Web Vitals
- ✅ Review Performance report for ranking changes
Monthly:
- ✅ Analyze click-through rates
- ✅ Review mobile usability
- ✅ Check for security issues
- ✅ Update sitemap if needed
Key Metrics to Track
-
Organic Traffic
- Should increase 30-50% after consolidation
-
Indexed Pages
- Amplify domain pages should decrease to zero
- Custom domain pages should match total content
-
Average Position
- Should remain stable or improve
-
Click-Through Rate
- Should improve 10-20% with branded domain
Common Questions
Q1: Will I lose my Google rankings during the redirect?
A: No. When implemented correctly with a 308/301 permanent redirect, Google transfers 100% of your PageRank and SEO signals to the new domain. Expect zero ranking loss.
Q2: How long does it take for Google to recognize the redirect?
A: Google typically discovers redirects within 24-48 hours. Full consolidation takes 2-4 weeks depending on your site's crawl frequency.
Q3: Should I use 301 or 308 redirects?
A: Use 308 permanent redirects for modern web applications. They offer the same SEO benefits as 301 while being more robust for forms and API calls. Both pass 100% of PageRank.
Q4: What if I've already been using both domains for months?
A: It's never too late. Implement the redirect now. Google will consolidate your signals and rankings will stabilize within 2-4 weeks. You may even see improvements as duplicate content penalties are resolved.
Q5: Do I need to redirect the Amplify domain at all?
A: Yes, absolutely. If both domains remain accessible:
- Google may penalize you for duplicate content
- Your SEO authority gets divided
- Brand consistency suffers
- You waste crawl budget
Q6: Can I use Cloudflare instead of Amplify for redirects?
A: Yes, if you use Cloudflare as your DNS provider, you can create page rules for redirects. However, if you're using Amplify, the Next.js config method is simpler and free.
Q7: Will this affect my Amplify deployment?
A: No. The redirect doesn't affect your Amplify deployment process. Your app continues to deploy normally; it just redirects traffic from the Amplify domain to your custom domain.
Q8: What about subdomain redirects?
A: The regex pattern .*\\.amplifyapp\\.com matches all Amplify subdomains (including branch previews). If you want to exclude branch previews, use a more specific pattern:
value: 'main\\.d39bdqhe4i2wpp\\.amplifyapp\\.com'
Q9: How do I verify the redirect is working?
A: Use multiple methods:
- Browser DevTools Network tab
- cURL:
curl -I https://yourapp.amplifyapp.com - Online redirect checkers
- Google Search Console URL Inspection tool
Q10: What if my sitemap still shows Amplify URLs?
A: This means your SITE_URL environment variable is incorrect. Update it in Amplify Console to your custom domain and redeploy.
Conclusion
Redirecting your AWS Amplify domain to a custom domain is essential for SEO success. By implementing a proper 308 permanent redirect, you:
✅ Eliminate duplicate content penalties ✅ Consolidate all SEO authority to one domain ✅ Improve brand consistency and trust ✅ Increase click-through rates ✅ Preserve 100% of your rankings
Quick Implementation Checklist
- Choose your redirect method (Next.js config recommended)
- Implement the redirect code
- Set
SITE_URLenvironment variable in Amplify - Deploy and verify redirect works (308 status)
- Check canonical URLs use custom domain
- Verify sitemap.xml uses custom domain
- Confirm robots.txt points to custom domain
- Test OpenGraph and Twitter Card tags
- Submit to Google Search Console
- Monitor rankings over 4 weeks
Resources
- Google's Guide to Site Moves
- Next.js Redirects Documentation
- AWS Amplify Hosting Documentation
- RFC 7538 - The 308 Status Code
Share This Guide
Found this guide helpful? Share it with other developers facing the same challenge:
- Twitter: "Just implemented SEO-safe domain redirects on AWS Amplify - zero ranking loss! 🚀"
- LinkedIn: "Comprehensive guide to redirecting AWS Amplify domains without losing SEO rankings"
- Reddit: r/aws, r/nextjs, r/SEO
Questions or improvements? Open an issue or contribute to this guide on GitHub.
Need help? Please click the link.
This article is part of a comprehensive series on Next.js SEO optimization. Subscribe for updates on advanced SEO techniques, Core Web Vitals optimization, and modern web development best practices.
Verifying the Redirect Held
The AWS Amplify custom domain redirect is done when Search Console shows the new domain absorbing impressions — check weekly for a month; rankings transfer slowly but surely. My my SEO toolkit audit and how crawlers see redirects go deeper.
If you want a migration done without losing rankings, that's work I take on through Ramlit.