yarn add next-sitemap next-sitemap erfordert eine grundlegende Konfigurationsdatei ( next-sitemap.config.js ) unter Ihrem Projektroot
✅
next-sitemaplädt Umgebungsvariablen aus.envDateien standardmäßig.
/** @type {import('next-sitemap').IConfig} */
module . exports = {
siteUrl : process . env . SITE_URL || 'https://example.com' ,
generateRobotsTxt : true , // (optional)
// ...other options
}Fügen Sie als Skript nach dem Postbauer Nächstes-Sitemap hinzu
{
"build" : " next build " ,
"postbuild" : " next-sitemap "
} Sie können auch eine benutzerdefinierte Konfigurationsdatei anstelle von next-sitemap.config.js verwenden. Einfach passieren --config <your-config-file>.js zu erstellen Befehl (Beispiel: Custom-Config-Datei)
{
"build" : " next build " ,
"postbuild" : " next-sitemap --config awesome.config.js "
} Wenn Sie PNPM verwenden, müssen Sie im Stamm Ihres Projekts eine .npmrc -Datei erstellen, wenn Sie einen Nachbauerschritt verwenden möchten:
//.npmrc
enable-pre-post-scripts=true
Ab next-sitemap v2.x wird sitemap.xml Index Sitemap sein. Es enthält URLs aller anderen erzeugten Sitemap -Endpunkte.
Die Index-Sitemap-Generierung kann abgeschaltet werden, indem generateIndexSitemap: false in der Konfigurationsdatei Next-Sitemap eingestellt wird. (Dies ist nützlich für kleine/Hobby-Sites, für die keine Index-Sitemap erforderlich ist) (Beispiel: No-Index-Sitemaps)
Definieren Sie die sitemapSize Eigenschaft in next-sitemap.config.js um große Sitemap in mehrere Dateien aufzuteilen.
/** @type {import('next-sitemap').IConfig} */
module . exports = {
siteUrl : 'https://example.com' ,
generateRobotsTxt : true ,
sitemapSize : 7000 ,
} Oben ist die minimale Konfiguration, um eine große Sitemap zu teilen. Wenn die Anzahl der URLs in einer Sitemap mehr als 7000 beträgt, erstellt next-sitemap Sitemap (z.
| Eigentum | Beschreibung | Typ |
|---|---|---|
| Siteurl | Basis -URL Ihrer Website | Saite |
| Ausgabe (optional) | NEXT.JS Ausgangsmodi. Überprüfen Sie die Dokumentation. | standalone , export |
| ChangeFreq (optional) | Frequenz ändern. daily | Saite |
| Priorität (optional) | Priorität. Standard 0.7 | Nummer |
| SitemapbaseFileName (optional) | Der Name der generierten Sitemap -Datei vor der Dateierweiterung. Standard "sitemap" | Saite |
| AlternateRefs (optional) | Bezeichnen Sie mehrsprachige Unterstützung durch eindeutige URL. Standard [] | AlternateRef [] |
| SitemapSize (optional) | Teilen Sie große Sitemap in mehrere Dateien auf, indem Sie die Sitemap -Größe angeben. Standard 5000 | Nummer |
| Autolastmod (optional) | Fügen Sie <lastmod/> Eigenschaft hinzu. Standard true | WAHR |
| ausschließen (optional) | Array von relativen Pfaden (Wildcard-Muster unterstützt), um von der Auflistung auf sitemap.xml oder sitemap-*.xml . zB: ['/page-0', '/page-*', '/private/*'] .Abgesehen von dieser Option next-sitemap bietet auch eine benutzerdefinierte transform , mit der URLs ausgeschlossen werden können, die bestimmte Muster entsprechen | String [] |
| Sourcedir (optional) | NEXT.js Build Directory. Standard .next | Saite |
| im Freien (optional) | Alle generierten Dateien werden in dieses Verzeichnis exportiert. public | Saite |
| Transformation (optional) | Eine Transformationsfunktion, die für jeden relative-path in der Sitemap ausgeführt wird. Der Rückgabe null aus der Transformationsfunktion führt zum Ausschluss dieses spezifischen path aus der generierten Sitemap -Liste. | Asynchronisierungsfunktion |
| Zusätzliche Pfade (optional) | Async -Funktion, die eine Liste zusätzlicher Pfade zurückgibt, die zur generierten Sitemap -Liste hinzugefügt werden sollen. | Asynchronisierungsfunktion |
| generateIndexsitemap | Generieren Sie Index -Sitemaps. Standard true | boolean |
| generaterobotstxt (optional) | Generieren Sie eine robots.txt -Datei und listen Sie die generierten Sitemaps auf. Standard false | boolean |
| RobotStxtOptions.transformrobotstxt (optional) | Benutzerdefinierte Robots.txt -Transformatorfunktion. (Beispiel: Custom-Robot-TXT-Transformator) Standard: async(config, robotsTxt)=> robotsTxt | Asynchronisierungsfunktion |
| RobotStxtOptions.Policies (optional) | Richtlinien zum Generieren robots.txt .Standard: [{ userAgent: '*', allow: '/' }] | Irobotpolicy [] |
| RobotStxtOptions.AdditionalsItemaps (optional) | Optionen zum Hinzufügen zusätzlicher Sitemaps zu robots.txt Hosteintrag | String [] |
| RobotstxtOptions.includenonIndexSitemaps (optional) | Ab v2.4x enthält generierte robots.txt nur eine URL von index sitemap und benutzerdefinierte Endpunkte von robotsTxtOptions.additionalSitemaps .Dies soll die doppelte URL -Einreichung verhindern (einmal durch Index -Sitemap -> Sitemap -URL und einmal über Robots.txt -> Host) Legen Sie diese Option true , um alle generierten Sitemap -Endpunkte zu robots.txt hinzuzufügenStandard false (empfohlen) | boolean |
Benutzerdefinierte Transformation bietet eine Erweiterungsmethode zum Hinzufügen, Entfernen oder Ausschluss von path oder properties von einem URL-Set. Die Transformationsfunktion läuft für jeden relative path in der Sitemap. Und verwenden Sie den key : value -Objekt, um Eigenschaften im XML hinzuzufügen.
Der Rückgabe null aus der Transformationsfunktion führt zum Ausschluss dieses spezifischen relative-path aus der generierten Sitemap-Liste.
/** @type {import('next-sitemap').IConfig} */
module . exports = {
transform : async ( config , path ) => {
// custom function to ignore the path
if ( customIgnoreFunction ( path ) ) {
return null
}
// only create changefreq along with path
// returning partial properties will result in generation of XML field with only returned values.
if ( customLimitedField ( path ) ) {
// This returns `path` & `changefreq`. Hence it will result in the generation of XML field with `path` and `changefreq` properties only.
return {
loc : path , // => this will be exported as http(s)://<config.siteUrl>/<path>
changefreq : 'weekly' ,
}
}
// Use default transformation for all other cases
return {
loc : path , // => this will be exported as http(s)://<config.siteUrl>/<path>
changefreq : config . changefreq ,
priority : config . priority ,
lastmod : config . autoLastmod ? new Date ( ) . toISOString ( ) : undefined ,
alternateRefs : config . alternateRefs ?? [ ] ,
}
} ,
} additionalPaths Diese Funktion kann nützlich sein, wenn Sie eine große Liste von Seiten haben, aber nicht alle rendern und Fallback verwenden: True. Das Ergebnis der Ausführung dieser Funktion wird der allgemeinen Liste der Pfade hinzugefügt und mit sitemapSize verarbeitet. Sie können dynamische Pfade hinzufügen, aber im Gegensatz zu additionalSitemap müssen Sie die Liste der Pfade nicht in verschiedene Dateien aufteilen, falls es viele Pfade für eine Datei gibt.
Wenn Ihre Funktion einen bereits vorhandenen Pfad zurückgibt, wird sie einfach aktualisiert, die Duplikation wird nicht geschehen.
/** @type {import('next-sitemap').IConfig} */
module . exports = {
additionalPaths : async ( config ) => {
const result = [ ]
// required value only
result . push ( { loc : '/additional-page-1' } )
// all possible values
result . push ( {
loc : '/additional-page-2' ,
changefreq : 'yearly' ,
priority : 0.7 ,
lastmod : new Date ( ) . toISOString ( ) ,
// acts only on '/additional-page-2'
alternateRefs : [
{
href : 'https://es.example.com' ,
hreflang : 'es' ,
} ,
{
href : 'https://fr.example.com' ,
hreflang : 'fr' ,
} ,
] ,
} )
// using transformation from the current configuration
result . push ( await config . transform ( config , '/additional-page-3' ) )
return result
} ,
} URL -Set kann zusätzliche von Google definierte Sitemaps enthalten. Dies sind Google News Sitemap, Image Sitemap oder Video Sitemap. Sie können die Werte für diese Sitemaps hinzufügen, indem Sie die Eintrag in der transform aktualisieren oder mit additionalPaths hinzufügen. Sie müssen in beiden Fällen einen Sitemap -Eintrag zurückgeben. Dies ist daher der beste Ort für die Aktualisierung der Ausgabe. In diesem Beispiel werden jedem Eintrag ein Bild- und Nachrichten -Tag hinzugefügt, aber IRL würden es natürlich mit einer bestimmten Bedingung oder in additionalPaths verwenden.
/** @type {import('next-sitemap').IConfig} */
const config = {
transform : async ( config , path ) => {
return {
loc : path , // => this will be exported as http(s)://<config.siteUrl>/<path>
changefreq : config . changefreq ,
priority : config . priority ,
lastmod : config . autoLastmod ? new Date ( ) . toISOString ( ) : undefined ,
images : [ { loc : 'https://example.com/image.jpg' } ] ,
news : {
title : 'Article 1' ,
publicationName : 'Google Scholar' ,
publicationLanguage : 'en' ,
date : new Date ( ) ,
} ,
}
} ,
}
export default config Hier ist ein Beispiel für die Konfiguration next-sitemap.config.js mit allen Optionen
/** @type {import('next-sitemap').IConfig} */
module . exports = {
siteUrl : 'https://example.com' ,
changefreq : 'daily' ,
priority : 0.7 ,
sitemapSize : 5000 ,
generateRobotsTxt : true ,
exclude : [ '/protected-page' , '/awesome/secret-page' ] ,
alternateRefs : [
{
href : 'https://es.example.com' ,
hreflang : 'es' ,
} ,
{
href : 'https://fr.example.com' ,
hreflang : 'fr' ,
} ,
] ,
// Default transformation function
transform : async ( config , path ) => {
return {
loc : path , // => this will be exported as http(s)://<config.siteUrl>/<path>
changefreq : config . changefreq ,
priority : config . priority ,
lastmod : config . autoLastmod ? new Date ( ) . toISOString ( ) : undefined ,
alternateRefs : config . alternateRefs ?? [ ] ,
}
} ,
additionalPaths : async ( config ) => [
await config . transform ( config , '/additional-page' ) ,
] ,
robotsTxtOptions : {
policies : [
{
userAgent : '*' ,
allow : '/' ,
} ,
{
userAgent : 'test-bot' ,
allow : [ '/path' , '/path-2' ] ,
} ,
{
userAgent : 'black-listed-bot' ,
disallow : [ '/sub-path-1' , '/path-2' ] ,
} ,
] ,
additionalSitemaps : [
'https://example.com/my-custom-sitemap-1.xml' ,
'https://example.com/my-custom-sitemap-2.xml' ,
'https://example.com/my-custom-sitemap-3.xml' ,
] ,
} ,
} Die obige Konfiguration generiert Sitemaps basierend auf Ihrem Projekt und einem robots.txt wie diesem.
# *
User-agent: *
Allow: /
# test-bot
User-agent: test-bot
Allow: /path
Allow: /path-2
# black-listed-bot
User-agent: black-listed-bot
Disallow: /sub-path-1
Disallow: /path-2
# Host
Host: https://example.com
# Sitemaps
Sitemap: https://example.com/sitemap.xml # Index sitemap
Sitemap: https://example.com/my-custom-sitemap-1.xml
Sitemap: https://example.com/my-custom-sitemap-2.xml
Sitemap: https://example.com/my-custom-sitemap-3.xml next-sitemap stellt jetzt zwei APIs zum Generieren von Sitemaps von Server-Seite bereit. Dies wird dazu beitragen, index-sitemap und sitemap dynamisch zu generieren, indem Daten aus CMS oder benutzerdefinierte Quelle beschrieben werden.
getServerSideSitemapIndex : Generiert Index -Sitemaps basierend auf den bereitgestellten URLs und gibt application/xml -Antwort zurück. Unterstützt Next13+ Route. {TS, JS} Datei.
getServerSideSitemapIndexLegacy . getServerSideSitemap : Generiert Sitemap basierend auf Feldversicherungen und gibt application/xml -Antwort zurück. Unterstützt Next13+ Route. {TS, JS} Datei.
getServerSideSitemapLegacy .Hier ist ein Beispielskript zum Generieren von Index-Sitemap auf der Serverseite.
Erstellen Sie app/server-sitemap-index.xml/route.ts Datei.
// app/server-sitemap-index.xml/route.ts
import { getServerSideSitemapIndex } from 'next-sitemap'
export async function GET ( request : Request ) {
// Method to source urls from cms
// const urls = await fetch('https//example.com/api')
return getServerSideSitemapIndex ( [
'https://example.com/path-1.xml' ,
'https://example.com/path-2.xml' ,
] )
} pages/server-sitemap-index.xml/index.tsx Datei erstellen.
// pages/server-sitemap-index.xml/index.tsx
import { getServerSideSitemapIndexLegacy } from 'next-sitemap'
import { GetServerSideProps } from 'next'
export const getServerSideProps : GetServerSideProps = async ( ctx ) => {
// Method to source urls from cms
// const urls = await fetch('https//example.com/api')
return getServerSideSitemapIndexLegacy ( ctx , [
'https://example.com/path-1.xml' ,
'https://example.com/path-2.xml' ,
] )
}
// Default export to prevent next.js errors
export default function SitemapIndex ( ) { } Jetzt serviert next.js die dynamische Index-Sitemap von http://localhost:3000/server-sitemap-index.xml .
Listen Sie die dynamische Sitemap -Seite in robotsTxtOptions.additionalSitemaps auf und schließen Sie diesen Pfad aus der statischen Sitemap -Liste aus.
// next-sitemap.config.js
/** @type {import('next-sitemap').IConfig} */
module . exports = {
siteUrl : 'https://example.com' ,
generateRobotsTxt : true ,
exclude : [ '/server-sitemap-index.xml' ] , // <= exclude here
robotsTxtOptions : {
additionalSitemaps : [
'https://example.com/server-sitemap-index.xml' , // <==== Add here
] ,
} ,
} Auf diese Weise verwaltet next-sitemap die Sitemaps für alle Ihre statischen Seiten und Ihr dynamischer index-sitemap wird auf Robots.txt aufgeführt.
Hier ist ein Beispielskript, um Sitemaps auf der Serverseite zu generieren.
Erstellen Sie app/server-sitemap.xml/route.ts Datei.
// app/server-sitemap.xml/route.ts
import { getServerSideSitemap } from 'next-sitemap'
export async function GET ( request : Request ) {
// Method to source urls from cms
// const urls = await fetch('https//example.com/api')
return getServerSideSitemap ( [
{
loc : 'https://example.com' ,
lastmod : new Date ( ) . toISOString ( ) ,
// changefreq
// priority
} ,
{
loc : 'https://example.com/dynamic-path-2' ,
lastmod : new Date ( ) . toISOString ( ) ,
// changefreq
// priority
} ,
] )
} pages/server-sitemap.xml/index.tsx Datei erstellen.
// pages/server-sitemap.xml/index.tsx
import { getServerSideSitemapLegacy } from 'next-sitemap'
import { GetServerSideProps } from 'next'
export const getServerSideProps : GetServerSideProps = async ( ctx ) => {
// Method to source urls from cms
// const urls = await fetch('https//example.com/api')
const fields = [
{
loc : 'https://example.com' , // Absolute url
lastmod : new Date ( ) . toISOString ( ) ,
// changefreq
// priority
} ,
{
loc : 'https://example.com/dynamic-path-2' , // Absolute url
lastmod : new Date ( ) . toISOString ( ) ,
// changefreq
// priority
} ,
]
return getServerSideSitemapLegacy ( ctx , fields )
}
// Default export to prevent next.js errors
export default function Sitemap ( ) { } Jetzt serviert next.js die dynamische Sitemap von http://localhost:3000/server-sitemap.xml .
Listen Sie die dynamische Sitemap -Seite in robotsTxtOptions.additionalSitemaps auf und schließen Sie diesen Pfad aus der statischen Sitemap -Liste aus.
// next-sitemap.config.js
/** @type {import('next-sitemap').IConfig} */
module . exports = {
siteUrl : 'https://example.com' ,
generateRobotsTxt : true ,
exclude : [ '/server-sitemap.xml' ] , // <= exclude here
robotsTxtOptions : {
additionalSitemaps : [
'https://example.com/server-sitemap.xml' , // <==== Add here
] ,
} ,
} Auf diese Weise verwaltet next-sitemap die Sitemaps für alle Ihre statischen Seiten und Ihre dynamische Sitemap wird auf Robots.txt aufgeführt.
Fügen Sie die folgende Codezeile in Ihre next-sitemap.config.js hinzu, um eine nette Typ-Vervollständigung von Typecript zu erhalten! ?
/** @type {import('next-sitemap').IConfig} */
module . exports = {
// YOUR CONFIG
} 
Alle PRs sind willkommen :)