yarn add next-sitemap يتطلب next-sitemap ملف تكوين أساسي ( next-sitemap.config.js ) تحت جذر مشروعك
✅ سيقوم
next-sitemapبتحميل متغيرات البيئة من ملفات.envبشكل افتراضي.
/** @type {import('next-sitemap').IConfig} */
module . exports = {
siteUrl : process . env . SITE_URL || 'https://example.com' ,
generateRobotsTxt : true , // (optional)
// ...other options
}أضف sitemap next as your script
{
"build" : " next build " ,
"postbuild" : " next-sitemap "
} يمكنك أيضًا استخدام ملف تكوين مخصص بدلاً من next-sitemap.config.js . فقط تمرير- --config <your-config-file>.js لإنشاء الأمر (مثال: ملف Custom-Config)
{
"build" : " next build " ,
"postbuild" : " next-sitemap --config awesome.config.js "
} عند استخدام PNPM ، تحتاج إلى إنشاء ملف .npmrc في جذر مشروعك إذا كنت ترغب في استخدام خطوة ما بعد البناء:
//.npmrc
enable-pre-post-scripts=true
من next-sitemap v2.x فصاعدا ، سيكون sitemap.xml فهرس sitemap. سوف يحتوي على عناوين URL من جميع نقاط نهاية الخريطة الخريطة التي تم إنشاؤها الأخرى.
يمكن إيقاف تشغيل إنشاء فهرس Sitemap عن طريق إعداد generateIndexSitemap: false في ملف تكوين sitemap التالي. (هذا مفيد للمواقع الصغيرة/الهوايات التي لا تتطلب خريطة sitemap الفهرس) (مثال: لا توجد مؤشرات مؤشر).
حدد خاصية sitemapSize في next-sitemap.config.js لتقسيم خريطة sitemap الكبيرة إلى ملفات متعددة.
/** @type {import('next-sitemap').IConfig} */
module . exports = {
siteUrl : 'https://example.com' ,
generateRobotsTxt : true ,
sitemapSize : 7000 ,
} أعلاه هو الحد الأدنى من التكوين لتقسيم خريطة sitemap كبيرة. عندما يكون عدد عناوين URL في خريطة sitemap أكثر من 7000 ، فإن next-sitemap سيقوم بإنشاء ملفات sitemap (على سبيل المثال sitemap-0.xml ، sitemap-1.xml) والفهرس (eg sitemap.xml).
| ملكية | وصف | يكتب |
|---|---|---|
| موقع | عنوان URL الأساسي لموقع الويب الخاص بك | خيط |
| الإخراج (اختياري) | أوضاع الإخراج next.js. تحقق من الوثائق. | standalone ، export |
| ChangeFreq (اختياري) | تغيير التردد. الافتراضي daily | خيط |
| الأولوية (اختياري) | أولوية. الافتراضي 0.7 | رقم |
| sitemapbasefilename (اختياري) | اسم ملف sitemap الذي تم إنشاؤه قبل ملحق الملف. الافتراضي "sitemap" | خيط |
| always (اختياري) | تشير إلى دعم متعدد اللغات بواسطة عنوان URL الفريد. تقصير [] | Alternateref [] |
| Sitemapsize (اختياري) | تقسيم خريطة sitemap الكبيرة إلى ملفات متعددة عن طريق تحديد حجم sitemap. الافتراضي 5000 | رقم |
| AutolastMod (اختياري) | إضافة <lastmod/> . الافتراضي true | حقيقي |
| استبعاد (اختياري) | مجموعة من المسارات النسبية (نمط البطاقة البرية المدعومة) لاستبعاد من الإدراج على sitemap.xml أو sitemap-*.xml . على سبيل المثال: ['/page-0', '/page-*', '/private/*'] .بصرف النظر عن هذا الخيار ، يوفر next-sitemap أيضًا خيار transform مخصص يمكن استخدامه لاستبعاد عناوين URL التي تتطابق مع أنماط محددة | خيط[] |
| Sourcedir (اختياري) | Next.js البناء دليل. الافتراضي .next | خيط |
| Outsir (اختياري) | سيتم تصدير جميع الملفات التي تم إنشاؤها إلى هذا الدليل. public الافتراضي | خيط |
| التحويل (اختياري) | وظيفة التحول ، التي تعمل لكل relative-path في خريطة sitemap. سيؤدي إرجاع القيمة null من وظيفة التحويل إلى استبعاد هذا path المحدد من قائمة خريطة sitemap التي تم إنشاؤها. | وظيفة ASYNC |
| PoneyPaths (اختياري) | دالة ASYNC التي تُرجع قائمة بالمسارات الإضافية المراد إضافتها إلى قائمة Sitemap التي تم إنشاؤها. | وظيفة ASYNC |
| cenderateEndExSitemap | توليد فرار الفهرس. الافتراضي true | منطقية |
| ANDERATEROBOTSTXT (اختياري) | قم بإنشاء ملف robots.txt وسرد خرائط Sitemap التي تم إنشاؤها. الافتراضي false | منطقية |
| RobotStxtOptions.TransFormRobotStxt (اختياري) | مخصصة Robots.txt transformer وظيفة. (مثال: مخصصة Robots-TXT-TRANDFormer) الافتراضي: async(config, robotsTxt)=> robotsTxt | وظيفة ASYNC |
| RobotStxtOptions.policies (اختياري) | سياسات لتوليد robots.txt .تقصير: [{ userAgent: '*', allow: '/' }] | Irobotpolicy [] |
| robotstxtoptions.additionalsitemaps (اختياري) | خيارات لإضافة حالات Sitemap الإضافية إلى إدخال مضيف robots.txt | خيط[] |
| robotstxtoptions.includenonindexsitemaps (اختياري) | من V2.4x فصاعدًا ، لن يحتوي robots.txt الذي تم إنشاؤه على عنوان URL فقط من index sitemap ونقاط النهاية المقدمة مخصصة من robotsTxtOptions.additionalSitemaps .هذا لمنع تقديم عنوان URL المكرر (مرة واحدة من خلال الفهرس -sitemap -> sitemap -url ومرة واحدة من خلال robots.txt -> المضيف) اضبط هذا الخيار true لإضافة جميع نقاط نهاية Sitemap التي تم إنشاؤها إلى robots.txtfalse (موصى به) | منطقية |
يوفر التحول المخصص طريقة تمديد لإضافة أو إزالة أو استبعاد path أو properties من مجموعة عناوين URL. تعمل وظيفة التحويل لكل relative path في خريطة sitemap. واستخدم key : كائن value لإضافة خصائص في XML.
سيؤدي إرجاع القيمة null من وظيفة التحويل إلى استبعاد هذا relative-path المحدد من قائمة Sitemap التي تم إنشاؤها.
/** @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 كان لديك قائمة كبيرة من الصفحات ، لكنك لا ترغب في جعلها جميعًا واستخدام Fallback: True. ستتم إضافة نتيجة لتنفيذ هذه الوظيفة إلى القائمة العامة للمسارات ومعالجتها باستخدام sitemapSize . أنت حر في إضافة مسارات ديناميكية ، ولكن على عكس additionalSitemap ، لا تحتاج إلى تقسيم قائمة المسارات إلى ملفات مختلفة في حالة وجود الكثير من المسارات لملف واحد.
إذا أدت وظيفتك إلى إرجاع مسار موجود بالفعل ، فسيتم تحديثه ببساطة ، فلن يحدث التكرار.
/** @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 على خرائط Sitemaps التي حددتها Google. هذه هي Google News Sitemap أو Sitemap Image أو فيديو Sitemap. يمكنك إضافة القيم الخاصة بهذه الملفات المنتظمة عن طريق تحديث الإدخال في وظيفة transform أو إضافتها باستخدام additionalPaths . يجب عليك إرجاع إدخال Sitemap في كلتا الحالتين ، لذلك هو أفضل مكان لتحديث الإخراج. سيؤدي هذا المثال إلى إضافة صورة وعلامة أخبار إلى كل إدخال ، لكن IRL ستقوم بالطبع باستخدامها مع بعض الحالات أو ضمن نتيجة additionalPaths .
/** @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 إليك مثال على التكوين next-sitemap.config.js مع جميع الخيارات
/** @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' ,
] ,
} ,
} سيقوم التكوين أعلاه بإنشاء خرائط Sitemap بناءً على مشروعك و robots.txt مثل هذا.
# *
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 الآن اثنين من واجهات برمجة التطبيقات لإنشاء خروفات sitemap من جانب الخادم. سيساعد ذلك على إنشاء index-sitemap (خريطة) خريطة (خريطة) sitemap ديناميكي عن طريق تحديد مصادر البيانات من CMS أو المصدر المخصص.
getServerSideSitemapIndex : يقوم بإنشاء خروفات Sitems الفهرس بناءً على عناوين URL المقدمة وإرجاع استجابة application/xml . يدعم NEXT13+ Route. {TS ، JS}.
getServerSideSitemapIndexLegacy بدلاً من ذلك. getServerSideSitemap : يقوم بإنشاء خريطة Sitemap بناءً على إدخال الحقل وإرجاع استجابة application/xml . يدعم NEXT13+ Route. {TS ، JS}.
getServerSideSitemapLegacy بدلاً من ذلك.إليك نموذج نصي لإنشاء فهرس SITEMAP على جانب الخادم.
قم بإنشاء ملف app/server-sitemap-index.xml/route.ts .
// 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 ملف.
// 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 ( ) { } الآن ، تقدم next.js نظام الفهرس الديناميكي من http://localhost:3000/server-sitemap-index.xml .
اذكر صفحة sitemap الديناميكية في robotsTxtOptions.additionalSitemaps واستبعاد هذا المسار من قائمة خريطة sitemap الثابتة.
// 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
] ,
} ,
} وبهذه الطريقة ، ستقوم next-sitemap بإدارة حالات Sitemap لجميع صفحاتك الثابتة وسيتم إدراج index-sitemap الديناميكية على Robots.txt.
إليك نموذج نصي لإنشاء خرائط Sitemap على جانب الخادم.
قم بإنشاء ملف app/server-sitemap.xml/route.ts .
// 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 .
// 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 ( ) { } الآن ، تقدم next.js خريطة sitemap الديناميكية من http://localhost:3000/server-sitemap.xml .
اذكر صفحة sitemap الديناميكية في robotsTxtOptions.additionalSitemaps واستبعاد هذا المسار من قائمة خريطة sitemap الثابتة.
// 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
] ,
} ,
} وبهذه الطريقة ، ستقوم next-sitemap بإدارة حالات Sitemap لجميع صفحاتك الثابتة وسيتم إدراج خريطة الجلوس الديناميكية الخاصة بك على Robots.txt.
أضف السطر التالي من التعليمات البرمجية في next-sitemap.config.js من أجل الإكمال التلقائي typerycript لطيف! ؟
/** @type {import('next-sitemap').IConfig} */
module . exports = {
// YOUR CONFIG
} 
جميع العلاقات العامة مرحب بها :)