Dynamische Metadaten hängen von dynamischen Informationen ab, wie aktuellen Routenparametern, externen Daten oder metadata in übergeordneten Segmenten. Sie können durch Export einer generateMetadata-Funktion festgelegt werden, die ein Metadata-Objekt zurückgibt.
Die generateMetadata-Funktion akzeptiert die folgenden Parameter:
props - Ein Objekt, das die Parameter der aktuellen Route enthält:
params - Ein Objekt, das die dynamischen Routenparameter von der Stammebene bis zum Segment enthält, in dem generateMetadata 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, das die aktuellen URL-Suchparameter enthält. 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 mit den aufgelösten Metadaten aus übergeordneten Routensegmenten.
generateMetadata sollte ein Metadata-Objekt mit einem oder mehreren Metadaten-Feldern zurückgeben.
Hinweis:
Wenn Metadaten nicht von Laufzeitinformationen abhängen, sollten sie mit dem statischen metadata-Objekt definiert werden.
fetch-Anfragen werden automatisch memoisiert für dieselben Daten über generateMetadata, generateStaticParams, Layouts, Pages und Server-Komponenten. React cache kann verwendet werden, wenn fetch nicht verfügbar ist.
searchParams sind nur in page.js-Segmenten verfügbar.
Die Next.js-Methoden redirect() und notFound() können auch innerhalb von generateMetadata verwendet werden.
Das title-Attribut wird verwendet, um den Titel des Dokuments festzulegen. Es kann als einfache Zeichenkette oder als optionales Vorlagen-Objekt definiert werden.
title.absolute kann verwendet werden, um einen Titel zu definieren, der title.template in übergeordneten Segmenten ignoriert.
Hinweis:
layout.js
title (Zeichenfolge) und title.default definieren den Standardtitel für untergeordnete Segmente (die kein eigenes title definieren). Sie ergänzen title.template aus dem nächstgelegenen übergeordneten Segment, falls vorhanden.
title.absolute definiert den Standardtitel für untergeordnete Segmente. Er ignoriert title.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 (Zeichenfolge) definiert den Titel der Route. Er ergänzt title.template aus dem nächstgelegenen übergeordneten Segment, falls vorhanden.
title.absolute definiert den Titel der Route. Er ignoriert title.template aus übergeordneten Segmenten.
title.template hat in page.js keine Wirkung, da eine Seite immer das Endsegment einer Route ist.
metadataBase ist eine Komfortfunktion zum Festlegen eines URL-Präfixes für metadata-Felder, die eine vollständig qualifizierte URL erfordern.
metadataBase ermöglicht es URL-basierten metadata-Feldern im aktuellen Routensegment und darunter, einen relativen Pfad zu verwenden, anstatt einer sonst erforderlichen absoluten URL.
Der relative Pfad des Feldes wird mit metadataBase kombiniert, um eine vollständig qualifizierte URL zu bilden.
Wenn nicht konfiguriert, wird metadataBaseautomatisch mit einem Standardwert gefüllt.
Hinweis:
metadataBase wird typischerweise in der Root-app/layout.js gesetzt, um für URL-basierte metadata-Felder über alle Routen hinweg zu gelten.
Alle URL-basierten metadata-Felder, die absolute URLs erfordern, können mit einer metadataBase-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, wird metadataBase ignoriert.
Die Verwendung eines relativen Pfads in einem URL-basierten metadata-Feld ohne Konfiguration von metadataBase 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)
Wenn nicht konfiguriert, hat metadataBase einen Standardwert.
Auf Vercel:
Für Produktionsbereitstellungen wird VERCEL_PROJECT_PRODUCTION_URL verwendet.
Für Vorschau-Bereitstellungen hat VERCEL_BRANCH_URL Vorrang, und es wird auf VERCEL_URL zurückgegriffen, wenn es nicht vorhanden ist.
Wenn diese Werte vorhanden sind, werden sie als Standardwert von metadataBase verwendet, andernfalls wird auf http://localhost:${process.env.PORT || 3000} zurückgegriffen. Dies ermöglicht das Funktionieren von Open Graph-Bildern sowohl bei lokalen Builds als auch bei Vercel-Vorschau- und Produktionsbereitstellungen. Bei der Außerkraftsetzung des Standardwerts empfehlen wir die Verwendung von Umgebungsvariablen zur Berechnung der URL. Dies ermöglicht die Konfiguration einer URL für lokale Entwicklung, Staging und Produktionsumgebungen.
Weitere Details zu diesen Umgebungsvariablen finden Sie in der Dokumentation zu Systemumgebungsvariablen.
Die URL-Zusammensetzung bevorzugt die Entwicklerabsicht gegenüber den Standard-Verzeichnis-Traversal-Semantiken.
Nachgestellte Schrägstriche zwischen metadataBase und metadata-Feldern werden normalisiert.
Ein "absoluter" Pfad in einem metadata-Feld (der typischerweise den gesamten URL-Pfad ersetzen würde) wird als "relativer" Pfad behandelt (beginnend am Ende von metadataBase).
Zum Beispiel, bei folgendem metadataBase:
Alle metadata-Felder, die das obige metadataBase erben und einen eigenen Wert festlegen, werden wie folgt aufgelöst:
Es kann zweckmäßiger sein, die dateibasierte Metadaten-API für Open Graph-Bilder zu verwenden. Anstatt die Konfigurationsexport mit tatsächlichen Dateien synchronisieren zu müssen, generiert die dateibasierte API automatisch die korrekten Metadaten für Sie.
Hinweis: Wir empfehlen, wo möglich die dateibasierte Metadaten-API für Icons zu verwenden. Anstatt die Konfigurationsexport mit tatsächlichen Dateien synchronisieren zu müssen, generiert die dateibasierte API automatisch die korrekten Metadaten für Sie.
Hinweis: Die msapplication-* Metadaten werden in Chromium-Builds von Microsoft Edge nicht mehr unterstützt und sind daher nicht mehr erforderlich.
Alle Metadaten-Optionen sollten durch die integrierte Unterstützung abgedeckt sein. Es können jedoch benutzerdefinierte Metadaten-Tags für Ihre Website oder ganz neue Metadaten-Tags vorhanden sein. Sie können die Option other 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.
Das <link>-Element verfügt über eine Reihe von rel-Schlüsselwörtern, die verwendet werden können, um dem Browser anzudeuten, dass eine externe Ressource wahrscheinlich benötigt wird. Der Browser verwendet diese Informationen, um Preloading-Optimierungen je nach Schlüsselwort anzuwenden.
Obwohl die Metadata API diese Hinweise nicht direkt unterstützt, können Sie neue ReactDOM-Methoden verwenden, um sie sicher in den <head> des Dokuments einzufügen.
Sie können Ihrer Metadata Typsicherheit hinzufügen, indem Sie den Metadata-Typ verwenden. Wenn Sie das integrierte TypeScript-Plugin in Ihrer IDE verwenden, müssen Sie den Typ nicht manuell hinzufügen, können ihn aber bei Bedarf explizit hinzufügen.