<title> and <meta> tags): a static metadata export and an async generateMetadata function.
Both are Server Component-only exports from layout.tsx or page.tsx.
Static metadata object
Export a Metadata object for static, non-dynamic metadata:
layout.tsx
generateMetadata function
Use generateMetadata when metadata depends on dynamic information such as route params or external data:
app/products/[id]/page.tsx
Parameters
An object containing the current route’s parameters:
params(Promise<object>) — Dynamic route parameters from root to the current segment.searchParams(Promise<object>) — The current URL’s search params. Only available inpage.js.
A promise resolving to the metadata from parent route segments. Use to extend rather than replace parent values.
Returns
AMetadata object (or a Promise<Metadata> for async functions).
Good to know
- Only Server Components can export
metadataorgenerateMetadata. - You cannot export both from the same route segment.
fetchrequests insidegenerateMetadataare automatically memoized.- File-based metadata takes priority over
metadataorgenerateMetadata. redirect()andnotFound()can be called insidegenerateMetadata.
Metadata fields
title
app/layout.tsx
app/about/page.tsx
title.absolute to override parent templates:
description
metadataBase
Set a base URL for all relative URL fields:
app/layout.tsx
openGraph
twitter
robots
icons
manifest
alternates
verification
other (custom tags)
Behavior
Evaluation order
Metadata is evaluated from the root segment down to the closestpage.tsx:
app/layout.tsx(root layout)app/blog/layout.tsx(nested layout)app/blog/[slug]/page.tsx(page)
Merging
Metadata objects from multiple segments are shallowly merged. Duplicate keys are replaced by the value from the deepest segment. Nested objects likeopenGraph are replaced entirely (not merged).
Streaming metadata
Next.js 15.2+ supports streaming metadata: the initial UI is sent to the browser without waiting forgenerateMetadata to complete. For HTML-limited bots (e.g. Facebook’s crawler) metadata continues to block rendering. See htmlLimitedBots to configure this.
Version history
| Version | Changes |
|---|---|
v15.2.0 | Streaming support for generateMetadata introduced. |
v13.2.0 | metadata and generateMetadata introduced. |
