⊗jsnxPmLtCMd 37 of 57 menu

Dynamic Metadata Passing from Content in NextJS

In the previous lesson, we learned how to set metadata in the site content. This method is good, but not always applicable. The point is that page metadata can change depending on a dynamic route parameter.

Let's look at an example. Suppose we have a content file for displaying a user by their id. Suppose this file contains an array of users:

let users = [ 'user1', 'user2', 'user3', 'user4', 'user5', ];

Let's output the data of the user corresponding to the passed parameter:

export default function User({ params }) { return <> <h1>user {params.id}</h1> <p> name: {users[params.id]} </p> </>; }

Now let's move on to our problem. Since we are showing different users, the metadata for them should also be different. We need to form it dynamically, depending on the parameter value.

This is done using a special function generateMetadata, which we must export from our component:

export const generateMetadata = () => { return { title: '', description: '', }; };

In this function, we have access to the route parameters:

export const generateMetadata = ({params}) => { console.log(params); };

Let's return the necessary metadata depending on the parameter value:

export const generateMetadata = ({params}) => { return { title: `Page for user {params.id}`, description: `Description for user "{users[params.id]}"`, }; };

Create a route that handles addresses like /post/:id, where instead of :id there can be any number.

Given the following array:

let posts = [ { id: '1', title: 'post 1', desc: 'description for post 1', text: 'text1 text1 text1 text1 text1 text1 text1 text1', }, { id: '2', title: 'post 2', desc: 'description for post 2', text: 'text2 text2 text2 text2 text2 text2 text2 text2', }, { id: '3', title: 'post 3', desc: 'description for post 3', text: 'text3 text3 text3 text3 text3 text3 text3 text3', }, ]; export default function Post() { }

Make sure that for a given id the markup of the corresponding post is displayed, and the correct title and meta description are set.

English
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
We use cookies for website operation, analytics, and personalization. Data processing is carried out in accordance with the Privacy Policy.
accept all customize decline