generateMetadata
Sie können das metadata
-Objekt oder die generateMetadata
-Funktion verwenden, um Metadaten zu definieren.
Das metadata
-Objekt
Um statische Metadaten zu definieren, exportieren Sie ein Metadata
-Objekt aus einer layout.js
- oder page.js
-Datei.
Siehe Metadata-Felder für eine vollständige Liste der unterstützten Optionen.
generateMetadata
-Funktion
Dynamische Metadaten, die von dynamischen Informationen abhängen, wie z.B. den aktuellen Routenparametern, externen Daten oder metadata
in übergeordneten Segmenten, können durch Exportieren einer generateMetadata
-Funktion definiert werden, die ein Metadata
-Objekt zurückgibt.
Gut zu wissen:
- Metadaten können zu
layout.js
- undpage.js
-Dateien hinzugefügt werden.- Next.js löst die Metadaten automatisch auf und erstellt die relevanten
<head>
-Tags für die Seite.- Die Exporte des
metadata
-Objekts und dergenerateMetadata
-Funktion werden nur in Server Components unterstützt.- Sie können nicht sowohl das
metadata
-Objekt als auch diegenerateMetadata
-Funktion aus demselben Routensegment exportieren.fetch
-Anfragen innerhalb vongenerateMetadata
werden automatisch memoized für dieselben Daten übergenerateMetadata
,generateStaticParams
, Layouts, Pages und Server Components hinweg.- React
cache
kann verwendet werden, fallsfetch
nicht verfügbar ist.- Dateibasierte Metadaten haben eine höhere Priorität und überschreiben das
metadata
-Objekt und diegenerateMetadata
-Funktion.
Referenz
Parameter
Die generateMetadata
-Funktion akzeptiert folgende Parameter:
-
props
- Ein Objekt mit den Parametern der aktuellen Route:-
params
- Ein Objekt mit den dynamischen Routenparametern vom Wurzelsegment bis zu dem Segment, aus demgenerateMetadata
aufgerufen wird. Beispiele:Route URL params
app/shop/[slug]/page.js
/shop/1
{ slug: '1' }
app/shop/[tag]/[item]/page.js
/shop/1/2
{ tag: '1', item: '2' }
app/shop/[...slug]/page.js
/shop/1/2
{ slug: ['1', '2'] }
-
searchParams
- Ein Objekt mit den Suchparametern der aktuellen URL. Beispiele:URL searchParams
/shop?a=1
{ a: '1' }
/shop?a=1&b=2
{ a: '1', b: '2' }
/shop?a=1&a=2
{ a: ['1', '2'] }
-
-
parent
- Ein Promise der aufgelösten Metadaten aus übergeordneten Routensegmenten.
Rückgabewert
generateMetadata
sollte ein Metadata
-Objekt zurückgeben, das ein oder mehrere Metadatenfelder enthält.
Gut zu wissen:
- Wenn Metadaten nicht von Laufzeitinformationen abhängen, sollten sie mit dem statischen
metadata
-Objekt anstelle vongenerateMetadata
definiert werden.fetch
-Anfragen werden automatisch memoized für dieselben Daten übergenerateMetadata
,generateStaticParams
, Layouts, Pages und Server Components hinweg. Reactcache
kann verwendet werden, fallsfetch
nicht verfügbar ist.searchParams
sind nur inpage.js
-Segmenten verfügbar.- Die Next.js-Methoden
redirect()
undnotFound()
können auch innerhalb vongenerateMetadata
verwendet werden.
Metadata-Felder
Die folgenden Felder werden unterstützt:
title
Das title
-Attribut wird verwendet, um den Titel des Dokuments festzulegen. Es kann als einfache Zeichenkette oder als optionales Template-Objekt definiert werden.
Zeichenkette
default
title.default
kann verwendet werden, um einen Fallback-Titel für untergeordnete Routensegmente bereitzustellen, die keinen title
definieren.
template
title.template
kann verwendet werden, um ein Präfix oder Suffix zu titles
hinzuzufügen, die in untergeordneten Routensegmenten definiert sind.
Gut zu wissen:
title.template
gilt für untergeordnete Routensegmente und nicht für das Segment, in dem es definiert ist. Das bedeutet:
title.default
ist erforderlich, wenn Sie eintitle.template
hinzufügen.title.template
, das inlayout.js
definiert ist, gilt nicht für einentitle
, der in einerpage.js
desselben Routensegments definiert ist.title.template
, das inpage.js
definiert ist, hat keine Wirkung, da eine Seite immer das abschließende Segment ist (sie hat keine untergeordneten Routensegmente).
title.template
hat keine Wirkung, wenn eine Route keinentitle
odertitle.default
definiert hat.
absolute
title.absolute
kann verwendet werden, um einen Titel bereitzustellen, der title.template
aus übergeordneten Segmenten ignoriert.
Gut zu wissen:
layout.js
title
(Zeichenkette) undtitle.default
definieren den Standardtitel für untergeordnete Segmente (die keinen eigenentitle
definieren). Es wirdtitle.template
aus dem nächstgelegenen übergeordneten Segment ergänzen, falls vorhanden.title.absolute
definiert den Standardtitel für untergeordnete Segmente. Es ignorierttitle.template
aus übergeordneten Segmenten.title.template
definiert eine neue Titelvorlage für untergeordnete Segmente.
page.js
- Wenn eine Seite keinen eigenen Titel definiert, wird der aufgelöste Titel des nächstgelegenen übergeordneten Elements verwendet.
title
(Zeichenkette) definiert den Titel der Route. Es wirdtitle.template
aus dem nächstgelegenen übergeordneten Segment ergänzen, falls vorhanden.title.absolute
definiert den Titel der Route. Es ignorierttitle.template
aus übergeordneten Segmenten.title.template
hat inpage.js
keine Wirkung, da eine Seite immer das abschließende Segment einer Route ist.
description
Andere Felder
metadataBase
metadataBase
ist eine praktische Option, um einen Basis-URL-Präfix für metadata
-Felder festzulegen, die eine vollständig qualifizierte URL erfordern.
metadataBase
ermöglicht es URL-basiertenmetadata
-Feldern, die im aktuellen Routensegment und darunter definiert sind, einen relativen Pfad anstelle einer ansonsten erforderlichen absoluten URL zu verwenden.- Der relative Pfad des Felds wird mit
metadataBase
kombiniert, um eine vollständig qualifizierte URL zu bilden.
Gut zu wissen:
metadataBase
wird typischerweise in der rootapp/layout.js
gesetzt, um auf URL-basiertemetadata
-Felder über alle Routen hinweg anzuwenden.- Alle URL-basierten
metadata
-Felder, die absolute URLs erfordern, können mit einermetadataBase
-Option konfiguriert werden.metadataBase
kann eine Subdomain enthalten, z.B.https://app.acme.com
oder einen Basispfad, z.B.https://acme.com/start/from/here
- Wenn ein
metadata
-Feld eine absolute URL bereitstellt, wirdmetadataBase
ignoriert.- Die Verwendung eines relativen Pfads in einem URL-basierten
metadata
-Feld ohne Konfiguration einermetadataBase
führt zu einem Build-Fehler.- Next.js normalisiert doppelte Schrägstriche zwischen
metadataBase
(z.B.https://acme.com/
) und einem relativen Feld (z.B./path
) zu einem einfachen Schrägstrich (z.B.https://acme.com/path
)
URL-Zusammensetzung
Die URL-Zusammensetzung bevorzugt die Absicht des Entwicklers gegenüber der Standard-Semantik der Verzeichnistraversierung.
- Schrägstriche zwischen
metadataBase
undmetadata
-Feldern werden normalisiert. - Ein "absoluter" Pfad in einem
metadata
-Feld (der normalerweise den gesamten URL-Pfad ersetzen würde) wird als "relativer" Pfad behandelt (beginnend vom Ende vonmetadataBase
).
Beispielsweise mit der folgenden metadataBase
:
Jedes metadata
-Feld, das die obige metadataBase
erbt und seinen eigenen Wert setzt, wird wie folgt aufgelöst:
metadata -Feld | Aufgelöste URL |
---|---|
/ | https://acme.com |
./ | https://acme.com |
payments | https://acme.com/payments |
/payments | https://acme.com/payments |
./payments | https://acme.com/payments |
../payments | https://acme.com/payments |
https://beta.acme.com/payments | https://beta.acme.com/payments |
openGraph
Gut zu wissen:
- Es kann praktischer sein, die dateibasierte Metadata API für Open-Graph-Bilder zu verwenden. Anstatt die Konfiguration mit den tatsächlichen Dateien synchron halten zu müssen, generiert die dateibasierte API automatisch die korrekten Metadaten für Sie.
robots
icons
Gut zu wissen: Wir empfehlen die Verwendung der dateibasierten Metadata API für Icons, wo möglich. Anstatt die Konfiguration mit den tatsächlichen Dateien synchron halten zu müssen, generiert die dateibasierte API automatisch die korrekten Metadaten für Sie.
Gut zu wissen: Die
msapplication-*
Meta-Tags werden in Chromium-basierten Versionen von Microsoft Edge nicht mehr unterstützt und sind daher nicht mehr notwendig.
themeColor
Veraltet: Die
themeColor
-Option inmetadata
ist seit Next.js 14 veraltet. Bitte verwenden Sie stattdessen dieviewport
-Konfiguration.
colorScheme
Veraltet: Die
colorScheme
-Option inmetadata
ist seit Next.js 14 veraltet. Bitte verwenden Sie stattdessen dieviewport
-Konfiguration.
manifest
Ein Web-App-Manifest, wie in der Web Application Manifest-Spezifikation definiert.
twitter
Die Twitter-Spezifikation wird (überraschenderweise) für mehr als nur X (ehemals bekannt als Twitter) verwendet.
Mehr erfahren über die Twitter Card Markup-Referenz.
viewport
Veraltet: Die
viewport
-Option inmetadata
ist seit Next.js 14 veraltet. Bitte verwenden Sie stattdessen dieviewport
-Konfiguration.
verification
appleWebApp
alternates
appLinks
archives
Beschreibt eine Sammlung von Aufzeichnungen, Dokumenten oder anderen Materialien von historischem Interesse (Quelle).
assets
bookmarks
category
facebook
Sie können eine Facebook-App oder ein Facebook-Konto mit Ihrer Webseite verbinden, um bestimmte Facebook Social Plugins zu nutzen Facebook-Dokumentation
Gut zu wissen: Sie können entweder appId oder admins angeben, aber nicht beides.
Wenn Sie mehrere fb:admins Meta-Tags generieren möchten, können Sie einen Array-Wert verwenden.
pinterest
Sie können Pinterest Rich Pins auf Ihrer Webseite aktivieren oder deaktivieren.
other
Alle Metadaten-Optionen sollten durch die integrierte Unterstützung abgedeckt sein. Es kann jedoch benutzerdefinierte Metadaten-Tags geben, die spezifisch für Ihre Seite sind, oder brandneue Metadaten-Tags, die gerade veröffentlicht wurden. Sie können die other
-Option verwenden, um beliebige benutzerdefinierte Metadaten-Tags zu rendern.
Wenn Sie mehrere Meta-Tags mit demselben Schlüssel generieren möchten, können Sie einen Array-Wert verwenden.
Nicht unterstützte Metadaten
Die folgenden Metadaten-Typen werden derzeit nicht nativ unterstützt. Sie können jedoch weiterhin im Layout oder auf der Seite selbst gerendert werden.
Typen
Sie können Typsicherheit zu Ihren Metadaten hinzufügen, indem Sie den Typ Metadata
verwenden. Wenn Sie das integrierte TypeScript-Plugin in Ihrer IDE verwenden, müssen Sie den Typ nicht manuell hinzufügen, können ihn aber dennoch explizit angeben, wenn Sie möchten.
metadata
-Objekt
generateMetadata
-Funktion
Reguläre Funktion
Async-Funktion
Mit Segment-Props
Mit übergeordneten Metadaten
JavaScript-Projekte
Für JavaScript-Projekte können Sie JSDoc verwenden, um Typsicherheit hinzuzufügen.
Metadaten | Empfehlung |
---|---|
<meta http-equiv="..."> | Verwenden Sie geeignete HTTP-Header über redirect() , Middleware, Security Headers |
<base> | Rendern Sie das Tag im Layout oder auf der Seite selbst. |
<noscript> | Rendern Sie das Tag im Layout oder auf der Seite selbst. |
<style> | Erfahren Sie mehr über Styling in Next.js. |
<script> | Erfahren Sie mehr über die Verwendung von Skripten. |
<link rel="stylesheet" /> | Importieren Sie Stylesheets direkt im Layout oder auf der Seite selbst. |
<link rel="preload /> | Verwenden Sie die ReactDOM preload-Methode |
<link rel="preconnect" /> | Verwenden Sie die ReactDOM preconnect-Methode |
<link rel="dns-prefetch" /> | Verwenden Sie die ReactDOM prefetchDNS-Methode |
Resource Hints
Das <link>
-Element hat eine Reihe von rel
-Schlüsselwörtern, die verwendet werden können, um dem Browser mitzuteilen, dass eine externe Ressource wahrscheinlich benötigt wird. Der Browser verwendet diese Informationen, um je nach Schlüsselwort Preloading-Optimierungen anzuwenden.
Während die Metadata-API diese Hints nicht direkt unterstützt, können Sie neue ReactDOM
-Methoden verwenden, um sie sicher in den <head>
des Dokuments einzufügen.
<link rel="preload">
Startet das Laden einer Ressource früh im Seitenrendering-Lebenszyklus (Browser). MDN Docs.
<link rel="preconnect">
Initiiert präemptiv eine Verbindung zu einem Origin. MDN Docs.
<link rel="dns-prefetch">
Versucht, einen Domainnamen aufzulösen, bevor Ressourcen angefordert werden. MDN Docs.
Gut zu wissen:
- Diese Methoden werden derzeit nur in Client Components unterstützt, die beim ersten Seitenaufruf serverseitig gerendert werden.
- Integrierte Next.js-Funktionen wie
next/font
,next/image
undnext/script
handhaben relevante Resource Hints automatisch.
Verhalten
Standardfelder
Es gibt zwei standardmäßige meta
-Tags, die immer hinzugefügt werden, selbst wenn eine Route keine Metadaten definiert:
- Das meta charset-Tag setzt die Zeichenkodierung der Website.
- Das meta viewport-Tag setzt die Viewport-Breite und Skalierung der Website für verschiedene Geräte.
Gut zu wissen: Sie können das standardmäßige
viewport
-Meta-Tag überschreiben.
Streaming von Metadaten
Metadaten, die von generateMetadata
zurückgegeben werden, werden an den Client gestreamt. Dadurch kann Next.js Metadaten in das HTML einfügen, sobald sie aufgelöst sind.
Da Seitenmetadaten hauptsächlich Bots und Crawler ansprechen, streamt Next.js Metadaten für Bots, die JavaScript ausführen und das vollständige Seiten-DOM untersuchen können (z.B. Googlebot
). Für HTML-beschränkte Bots (z.B. Twitterbot
), die beim Crawlen kein JavaScript ausführen können, blockieren die Metadaten weiterhin das Rendern der Seite.
Next.js erkennt automatisch den User Agent eingehender Anfragen, um zu entscheiden, ob gestreamte Metadaten bereitgestellt oder auf blockierende Metadaten zurückgegriffen werden soll.
Wenn Sie diese Liste anpassen müssen, können Sie sie manuell über die Option htmlLimitedBots
in next.config.js
definieren. Next.js stellt sicher, dass User Agents, die diesem Regex entsprechen, blockierende Metadaten erhalten, wenn sie Ihre Webseite anfordern.
Die Angabe einer htmlLimitedBots
-Konfiguration überschreibt die Standardliste von Next.js und gibt Ihnen die volle Kontrolle darüber, welche User Agents dieses Verhalten aufweisen sollen. Dies ist ein erweitertes Verhalten, und die Standardeinstellung sollte für die meisten Fälle ausreichen.
Reihenfolge
Metadaten werden in der Reihenfolge ausgewertet, beginnend beim Root-Segment bis zum Segment, das dem endgültigen page.js
-Segment am nächsten ist. Zum Beispiel:
app/layout.tsx
(Root-Layout)app/blog/layout.tsx
(Verschachteltes Blog-Layout)app/blog/[slug]/page.tsx
(Blog-Seite)
Zusammenführung
Gemäß der Auswertungsreihenfolge werden Metadata-Objekte, die aus mehreren Segmenten derselben Route exportiert werden, flach zusammengeführt, um die endgültige Metadatenausgabe einer Route zu bilden. Doppelte Schlüssel werden basierend auf ihrer Reihenfolge ersetzt.
Das bedeutet, dass Metadaten mit verschachtelten Feldern wie openGraph
und robots
, die in einem früheren Segment definiert sind, durch das letzte Segment, das sie definiert, überschrieben werden.
Überschreiben von Feldern
Im obigen Beispiel:
title
ausapp/layout.js
wird durchtitle
inapp/blog/page.js
ersetzt.- Alle
openGraph
-Felder ausapp/layout.js
werden inapp/blog/page.js
ersetzt, weilapp/blog/page.js
openGraph
-Metadaten setzt. Beachten Sie das Fehlen vonopenGraph.description
.
Wenn Sie einige verschachtelte Felder zwischen Segmenten teilen möchten, während Sie andere überschreiben, können Sie sie in eine separate Variable auslagern:
Im obigen Beispiel wird das OG-Bild zwischen app/layout.js
und app/about/page.js
geteilt, während die Titel unterschiedlich sind.
Vererbung von Feldern
Hinweise
title
ausapp/layout.js
wird durchtitle
inapp/about/page.js
ersetzt.- Alle
openGraph
-Felder ausapp/layout.js
werden inapp/about/page.js
vererbt, weilapp/about/page.js
keineopenGraph
-Metadaten setzt.
Versionsverlauf
Version | Änderungen |
---|---|
v15.2.0 | Streaming-Unterstützung für generateMetadata eingeführt. |
v13.2.0 | viewport , themeColor und colorScheme zugunsten der viewport -Konfiguration als veraltet markiert. |
v13.2.0 | metadata und generateMetadata eingeführt. |