
- Next.js - Home
- Next.js - Overview
- Next.js - Project Setup
- Next.js - Folder Structure
- Next.js - App Router
- Next.js - Page Router
- Next.js Features
- Next.js - Pages
- Next.js - Data Fetching
- Next.js - ISR
- Next.js - Static File Serving
- Next.js - Pre-Rendering
- Next.js - Partial Pre Rendering
- Next.js - Server Side Rendering
- Next.js - Client Side Rendering
- Next.js Routing
- Next.js - Routing
- Next.js - Nested Routing
- Next.js - Dynamic Routing
- Next.js - Parallel Routing
- Next.js - Imperative Routing
- Next.js - Shallow Routing
- Next.js - Intercepting Routes
- Next.js - Redirecting Routes
- Next.js - Navigation and Linking
- Next.js Configuration
- Next.js - TypeScript
- Next.js - Environment Variables
- Next.js - File Conventions
- Next.js - ESLint
- Next.js API & Backend
- Next.js - API Routes
- Next.js - Dynamic API Routes
- Next.js - Route Handlers
- Next.js - API MiddleWares
- Next.js - Response Helpers
- Next.js API Reference
- Next.js - CLI Commands
- Next.js - Functions
- Next.js - Directives
- Next.js - Components
- Next.js - Image Component
- Next.js - Font Component
- Next.js - Head Component
- Next.js - Form Component
- Next.js - Link Component
- Next.js - Script Component
- Next.js Styling & SEO
- Next.js - CSS Support
- Next.js - Global CSS Support
- Next.js - Meta Data
- Next.js Advanced Topics
- Next.js - Error Handling
- Next.js - Server Actions
- Next.js - Fast Refresh
- Next.js - Internationalization
- Next.js - Authentication
- Next.js - Session Management
- Next.js - Authorization
- Next.js - Caching
- Next.js - Data Caching
- Next.js - Router Caching
- Next.js - Full Route Caching
- Next.js - Request Memoization
- Next.js Performance Optimization
- Next.js - Optimizations
- Next.js - Image Optimization
- Next.js - Lazy Loading
- Next.js - Font Optimization
- Next.js - Video Optimization
- Next.js - Script Optimization
- Next.js - Memory Optimization
- Next.js - Using OpenTelemetry
- Next.js - Package Bundling Optimization
- Next.js Testing
- Next.js - Testing
- Next.js - Testing with Jest
- Next.js - Testing with Cypress
- Next.js - Testing with Vitest
- Next.js - Testing with Playwright
- Next.js Debugging & Deployment
- Next.js - Debugging
- Next.js - Deployment
- Next.js Useful Resources
- Next.js - Interview Questions
- Next.js - Quick Guide
- Next.js - Useful Resources
- Next.js - Discussion
Next.js - Redirecting Routes
Next.js provide inbuilt methods and APIs for handling redirecting of routes in application. This is very useful when we want the user to redirect to an actual page if they are visiting a broken or incorrect page. In this chapter we will learn how to implement redirecting of external routes, conditional redirecting and client side redirecting in Next.js application
Methods for Redirecting in Next.js
Following are three methods to implement redirecting in Next.js.
Methods | Purpose | Used at |
---|---|---|
useRouter hook | Used to perform client side navigation and redirecting. | Client side components |
redirect() method | Redirects external or internal requests to any of the routes in application. | next.config.js file |
NextResponse.redirect | Redirect an incoming request based on a condition | Middleware |
Redirecting in Next.js using redirect() method
The redirects option in the next.config.js file allows you to redirect an incoming request path to a different destination path. This is useful when you change the URL structure of pages or have a list of redirects that are known ahead of time.
Example
In this example, the route "/abouttt" will be redirected to "/about" page. This will useful when user make error in typing URL.
// ./next.config.ts file import type { NextConfig } from "next"; const nextConfig: NextConfig = { async redirects() { return [ { source: "/abouttt", // The path redirect from destination: "/about", // The path redirect to permanent: true, // Permanent redirecting } ]; }, }; export default nextConfig;
Output
In the output below, you can see that /abouttt is redirected to /about

Redirecting in Next.js Using useRoute hook
In Next.js, useRoute hook is used to redirect or navigate routes at client side. This hook can only be used in client side components. This is useful when we want redirect user to home page or any other page after clicking a button or submitting a form.
Example
In the example below, we implemented a product ordering feature to the product page we created in the previous chapters. On clicking the button, user will get a confirmation of the order and redirect them to home page using 'useRoute' hook.
"use client"; import { useRouter } from "next/navigation"; import { PageProps } from "next/dist/shared/lib/router/utils/page-props"; export default function ProductPage({ params }: PageProps) { const router = useRouter(); const handleClick = () =>{ alert("Order Placed..."); // Navigate to home page after placing order router.push("/"); }; return ( <div> <h1>Product {params.id}</h1> <p>This is the product page for item {params.id}</p> <button onClick={handleClick}>Order Item</button> </div> ); }
Output
In the output, after placing order user is getting redirected to home page.

Redirect in Next.js Using Middleware
Middleware allows you to run a code before a request is completed. Then, based on the incoming request, redirect to a different URL using NextResponse.redirect. This is useful if you want to redirect users based on a condition (e.g. authentication, session management, etc) or have a large number of redirects.
Example
In the example below, we will redirect the user to a /login page if they are not authenticated.
import { NextResponse, NextRequest } from 'next/server' import { authenticate } from 'auth-provider' export function middleware(request: NextRequest) { const isAuthenticated = authenticate(request) // If the user is authenticated, continue as normal if (isAuthenticated) { return NextResponse.next() } // Redirect to login page if not authenticated return NextResponse.redirect(new URL('/login', request.url)) } export const config = { matcher: '/dashboard/:path*', }