
- 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 - generateMetadata Function
In Next.js generateMetadata() function is used to dynamically generate metadata based on route parameters or fetched data. In this chapter we will learn, what is generateMetadata function, how to use it, syntax and example usage of generateMetadata method.
Next.js Generate Metadata Method
The generateMetadata function is a feature introduced in Next.js 13+ (App router) to simplify the management of metadata. This function can create metadata based on route parameters or fetched external data. That means when user navigate to a product page in our website, the title changes to name of current product.
Syntax
Following is syntax of generateMetadata function.
// Import library import { Metadata } from "next"; // Dynamic Metadata function export const generateMetadata = (prams, searchParams): Metadata => { return { title: `Product ${params.id} - My Store`, description: "Page Description" // Other metadata }; }
- params: This define route parameters. For example, { id: "123" } for a dynamic route like /blog/[id].
- searchParams: This define query parameters from the URL. For example { sort: "asc" } for a URL like /blog?sort=asc
Example of Using generateMetadata
In the following code, we will generate a dynamic title (ie, the metadata) for a component based on page selected by user. Learn how dynamic routes works before going through the example.
// app/products/[id]/page.tsx import { Metadata } from "next"; type Props ={ params: { id: string; }; } // Dynamic Metadata function export const generateMetadata = ({ params }: Props): Metadata => { return { title: `Product ${params.id} - My Store`, }; } export default function ProductPage({params }: Props) { return ( <div> <h1>Product {params.id}</h1> <p>This is the product page for item {params.id}</p> </div> ); }
Output
In the output you can see that the title of page is changing based on route we choose.
