HTTP redirects tell search engines and users that content has moved to a new location. When implemented correctly, they preserve your SEO value while ensuring users find your content.
✅ Good for:
❌ Don't use for:
In Nuxt applications, implement redirects at the server level:
export default defineNuxtConfig({
routeRules: {
'/old-page': { redirect: '/new-page' },
'/blog/:slug': { redirect: '/articles/:slug' }
}
})
export default defineEventHandler((event) => {
if (event.path === '/old-page') {
return sendRedirect(event, '/new-page', 301)
}
})
<script setup>
// Only use for simple cases
navigateTo('/new-page', { redirectCode: 301 })
</script>
301: Permanent redirect - transfers SEO value302: Temporary redirect - keeps SEO value on original URL307: Temporary redirect (preserves HTTP method)308: Permanent redirect (preserves HTTP method)For SEO, 301 redirects are most common as they pass ranking signals to the new URL.
export default defineEventHandler((event) => {
const host = getRequestHost(event)
// Redirect old domain to new
if (host === 'old-domain.com') {
return sendRedirect(
event,
`https://new-domain.com${event.path}`,
301
)
}
})
export default defineNuxtConfig({
routeRules: {
// Single redirects
'/old': { redirect: '/new' },
// Pattern matching
'/blog/*': { redirect: '/articles/*' },
// Parameter mapping
'/products/:id': { redirect: '/shop/:id' }
}
})
export default defineEventHandler((event) => {
if (!event.headers.get('x-forwarded-proto')?.includes('https')) {
return sendRedirect(
event,
`https://${getRequestHost(event)}${event.path}`,
301
)
}
})
Learn more about HTTPS in our security guide.
export default defineEventHandler((event) => {
const host = getRequestHost(event)
// Redirect non-www to www
if (!host.startsWith('www.')) {
return sendRedirect(
event,
`https://www.${host}${event.path}`,
301
)
}
})
Bad:
/old → /interim → /final
Good:
/old → /final
/interim → /final
When moving to HTTPS, update all resource URLs:
export default defineEventHandler((event) => {
// Redirect HTTP to HTTPS
if (event.headers.get('x-forwarded-proto') === 'http') {
return sendRedirect(
event,
`https://${getRequestHost(event)}${event.path}`,
301
)
}
})
Avoid circular redirects:
export default defineNuxtConfig({
// ❌ Bad
'/page-a': { redirect: '/page-b' },
'/page-b': { redirect: '/page-a' },
// ✅ Good
'/page-a': { redirect: '/final' },
'/page-b': { redirect: '/final' }
})