Metadata helps describe your web page to browsers and search engines. Using metadata in layouts means you set this info once for many pages.
Metadata in layouts in NextJS
export const metadata = { title: 'Page Title', description: 'Page description here', openGraph: { title: 'OG Title', description: 'OG Description', url: 'https://example.com/page', siteName: 'Site Name', images: [ { url: 'https://example.com/image.png', width: 800, height: 600, alt: 'Image description' } ], locale: 'en_US', type: 'website' }, twitter: { card: 'summary_large_image', title: 'Twitter Title', description: 'Twitter Description', images: ['https://example.com/twitter-image.png'] } };
The metadata object is exported from a layout file in Next.js.
Next.js automatically uses this metadata for the HTML head of pages using this layout.
export const metadata = { title: 'My Blog', description: 'Welcome to my blog' };
export const metadata = { title: 'Shop - Electronics', openGraph: { title: 'Shop Electronics', description: 'Best electronics online', url: 'https://shop.com/electronics' } };
export const metadata = { title: 'Portfolio', twitter: { card: 'summary_large_image', title: 'My Portfolio', images: ['https://portfolio.com/image.png'] } };
This layout sets metadata for all pages inside it. The metadata includes title, description, Open Graph, and Twitter info. The layout wraps page content with header and footer.
import React from 'react'; export const metadata = { title: 'My Website', description: 'This is my website built with Next.js', openGraph: { title: 'My Website', description: 'This is my website built with Next.js', url: 'https://mywebsite.com', siteName: 'My Website', images: [ { url: 'https://mywebsite.com/og-image.png', width: 1200, height: 630, alt: 'My Website Logo' } ], locale: 'en_US', type: 'website' }, twitter: { card: 'summary_large_image', title: 'My Website', description: 'This is my website built with Next.js', images: ['https://mywebsite.com/twitter-image.png'] } }; export default function RootLayout({ children }) { return ( <html lang="en"> <body> <header> <h1>Welcome to My Website</h1> </header> <main>{children}</main> <footer> <p>Ā© 2024 My Website</p> </footer> </body> </html> ); }
Metadata in layouts applies to all pages using that layout automatically.
You can override metadata in individual pages if needed.
Use meaningful titles and descriptions to help users and search engines.
Metadata describes your page for browsers and search engines.
Setting metadata in layouts saves time and keeps info consistent.
Next.js uses the exported metadata object to add tags to the HTML head.
Practice
metadata object in a Next.js layout?Solution
Step 1: Understand the role of metadata in Next.js
Themetadataobject is used to provide page details such as title and description that browsers and search engines use.Step 2: Differentiate metadata from other layout tasks
Styling, authentication, and state management are handled separately, not bymetadata.Final Answer:
To define page information like title and description for browsers and search engines -> Option CQuick Check:
Metadata = page info for browsers and SEO [OK]
- Confusing metadata with CSS styling
- Thinking metadata manages user data
- Assuming metadata controls client state
Solution
Step 1: Recall Next.js metadata export syntax
Next.js expects a named export calledmetadataas a constant object.Step 2: Check each option's syntax
export const metadata = { title: 'Home' }; correctly exports a constant object. const metadata = { title: 'Home' }; export default metadata; exports default, which is incorrect. export function metadata() { return { title: 'Home' }; } exports a function, not an object. export metadata = { title: 'Home' }; has invalid export syntax.Final Answer:
export const metadata = { title: 'Home' }; -> Option DQuick Check:
Named const export = correct syntax [OK]
- Using default export instead of named export
- Exporting a function instead of an object
- Incorrect export syntax without const
export const metadata = { title: 'Dashboard' };
export default function Layout({ children }) {
return <main>{children}</main>;
}Solution
Step 1: Identify the metadata title value
The metadata object setstitleto 'Dashboard'.Step 2: Understand Next.js behavior with metadata
Next.js uses this metadata to set the HTML <title> tag, which appears in the browser tab.Final Answer:
Dashboard -> Option AQuick Check:
metadata.title = browser tab title [OK]
- Assuming default title if metadata is present
- Confusing layout function name with title
- Thinking children content affects title
const metadata = { title: 'Profile' };
export default function Layout({ children }) {
return <main>{children}</main>;
}What is the error?
Solution
Step 1: Check metadata export
The metadata object is declared but not exported, so Next.js cannot read it.Step 2: Confirm correct export syntax
Next.js requiresexport const metadata = { ... }to recognize metadata.Final Answer:
metadata must be exported with export const metadata -> Option BQuick Check:
Export metadata for Next.js to use it [OK]
- Forgetting to export metadata
- Using function or class for metadata
- Changing children wrapper tags unnecessarily
Solution
Step 1: Understand metadata inheritance in Next.js
Metadata in layouts is merged, so root layout metadata applies by default.Step 2: Override metadata in nested layouts or pages
Exporting metadata in a page or nested layout overrides root metadata for that page.Step 3: Confirm correct approach
Export metadata with description in root layout, then export metadata with a different description in the page layout correctly describes exporting metadata in root and overriding in page layout.Final Answer:
Export metadata with description in root layout, then export metadata with a different description in the page layout -> Option AQuick Check:
Root metadata sets default, page metadata overrides [OK]
- Assuming page metadata is ignored if root exists
- Trying to merge metadata manually in code
- Using CSS to set metadata tags
Ready to prove it?
Pass the test and this pattern moves unknown
