ملف sitemap.xml

sitemap.(xml|js|ts) هو ملف خاص يتوافق مع تنسيق Sitemaps XML لمساعدة زواحف محركات البحث على فهرسة موقعك بكفاءة أكبر.

ملفات Sitemap (.xml)

للتطبيقات الصغيرة، يمكنك إنشاء ملف sitemap.xml ووضعه في جذر دليل app الخاص بك.

app/sitemap.xml
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://acme.com</loc>
    <lastmod>2023-04-06T15:02:24.021Z</lastmod>
    <changefreq>yearly</changefreq>
    <priority>1</priority>
  </url>
  <url>
    <loc>https://acme.com/about</loc>
    <lastmod>2023-04-06T15:02:24.021Z</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://acme.com/blog</loc>
    <lastmod>2023-04-06T15:02:24.021Z</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.5</priority>
  </url>
</urlset>

إنشاء Sitemap باستخدام الكود (.js, .ts)

يمكنك استخدام اصطلاح ملف sitemap.(js|ts) لإنشاء Sitemap برمجيًا عن طريق تصدير دالة افتراضية تُرجع مصفوفة من عناوين URL. إذا كنت تستخدم TypeScript، فإن نوع Sitemap متاح.

import { MetadataRoute } from 'next'

export default function sitemap(): MetadataRoute.Sitemap {
  return [
    {
      url: 'https://acme.com',
      lastModified: new Date(),
      changeFrequency: 'yearly',
      priority: 1,
    },
    {
      url: 'https://acme.com/about',
      lastModified: new Date(),
      changeFrequency: 'monthly',
      priority: 0.8,
    },
    {
      url: 'https://acme.com/blog',
      lastModified: new Date(),
      changeFrequency: 'weekly',
      priority: 0.5,
    },
  ]
}
export default function sitemap() {
  return [
    {
      url: 'https://acme.com',
      lastModified: new Date(),
      changeFrequency: 'yearly',
      priority: 1,
    },
    {
      url: 'https://acme.com/about',
      lastModified: new Date(),
      changeFrequency: 'monthly',
      priority: 0.8,
    },
    {
      url: 'https://acme.com/blog',
      lastModified: new Date(),
      changeFrequency: 'weekly',
      priority: 0.5,
    },
  ]
}

النتيجة:

acme.com/sitemap.xml
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://acme.com</loc>
    <lastmod>2023-04-06T15:02:24.021Z</lastmod>
    <changefreq>yearly</changefreq>
    <priority>1</priority>
  </url>
  <url>
    <loc>https://acme.com/about</loc>
    <lastmod>2023-04-06T15:02:24.021Z</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://acme.com/blog</loc>
    <lastmod>2023-04-06T15:02:24.021Z</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.5</priority>
  </url>
</urlset>

إنشاء Sitemap متعدد اللغات

import { MetadataRoute } from 'next'

export default function sitemap(): MetadataRoute.Sitemap {
  return [
    {
      url: 'https://acme.com',
      lastModified: new Date(),
      alternates: {
        languages: {
          es: 'https://acme.com/es',
          de: 'https://acme.com/de',
        },
      },
    },
    {
      url: 'https://acme.com/about',
      lastModified: new Date(),
      alternates: {
        languages: {
          es: 'https://acme.com/es/about',
          de: 'https://acme.com/de/about',
        },
      },
    },
    {
      url: 'https://acme.com/blog',
      lastModified: new Date(),
      alternates: {
        languages: {
          es: 'https://acme.com/es/blog',
          de: 'https://acme.com/de/blog',
        },
      },
    },
  ]
}

النتيجة:

acme.com/sitemap.xml
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <url>
    <loc>https://acme.com</loc>
    <xhtml:link
      rel="alternate"
      hreflang="es"
      href="https://acme.com/es"/>
    <xhtml:link
      rel="alternate"
      hreflang="de"
      href="https://acme.com/de"/>
    <lastmod>2023-04-06T15:02:24.021Z</lastmod>
  </url>
  <url>
    <loc>https://acme.com/about</loc>
    <xhtml:link
      rel="alternate"
      hreflang="es"
      href="https://acme.com/es/about"/>
    <xhtml:link
      rel="alternate"
      hreflang="de"
      href="https://acme.com/de/about"/>
    <lastmod>2023-04-06T15:02:24.021Z</lastmod>
  </url>
  <url>
    <loc>https://acme.com/blog</loc>
    <xhtml:link
      rel="alternate"
      hreflang="es"
      href="https://acme.com/es/blog"/>
    <xhtml:link
      rel="alternate"
      hreflang="de"
      href="https://acme.com/de/blog"/>
    <lastmod>2023-04-06T15:02:24.021Z</lastmod>
  </url>
</urlset>

إنشاء خرائط مواقع متعددة

بينما تعمل خريطة موقع واحدة لمعظم التطبيقات، قد تحتاج لتطبيقات الويب الكبيرة إلى تقسيم خريطة الموقع إلى ملفات متعددة.

هناك طريقتان لإنشاء خرائط مواقع متعددة:

  • عن طريق تداخل sitemap.(xml|js|ts) داخل أجزاء مسارات متعددة، مثل app/sitemap.xml و app/products/sitemap.xml.
  • باستخدام دالة generateSitemaps.

على سبيل المثال، لتقسيم خريطة موقع باستخدام generateSitemaps، قم بإرجاع مصفوفة من الكائنات تحتوي على id لخريطة الموقع. ثم استخدم id لإنشاء خرائط مواقع فريدة.

import { BASE_URL } from '@/app/lib/constants'

export async function generateSitemaps() {
  // جلب العدد الإجمالي للمنتجات وحساب عدد خرائط المواقع المطلوبة
  return [{ id: 0 }, { id: 1 }, { id: 2 }, { id: 3 }]
}

export default async function sitemap({
  id,
}: {
  id: number
}): Promise<MetadataRoute.Sitemap> {
  // الحد الأقصى لـ Google هو 50,000 عنوان URL لكل خريطة موقع
  const start = id * 50000
  const end = start + 50000
  const products = await getProducts(
    `SELECT id, date FROM products WHERE id BETWEEN ${start} AND ${end}`
  )
  return products.map((product) => ({
    url: `${BASE_URL}/product/${id}`,
    lastModified: product.date,
  }))
}
import { BASE_URL } from '@/app/lib/constants'

export async function generateSitemaps() {
  // جلب العدد الإجمالي للمنتجات وحساب عدد خرائط المواقع المطلوبة
  return [{ id: 0 }, { id: 1 }, { id: 2 }, { id: 3 }]
}

export default async function sitemap({ id }) {
  // الحد الأقصى لـ Google هو 50,000 عنوان URL لكل خريطة موقع
  const start = id * 50000
  const end = start + 50000
  const products = await getProducts(
    `SELECT id, date FROM products WHERE id BETWEEN ${start} AND ${end}`
  )
  return products.map((product) => ({
    url: `${BASE_URL}/product/${id}`,
    lastModified: product.date,
  }))
}

في بيئة الإنتاج، ستكون خرائط المواقع التي تم إنشاؤها متاحة على /.../sitemap/[id].xml. على سبيل المثال، /product/sitemap/1.xml.

في بيئة التطوير، يمكنك عرض خريطة الموقع التي تم إنشاؤها على /.../sitemap.xml/[id]. على سبيل المثال، /product/sitemap.xml/1. هذا الاختلاف مؤقت وسيتبع تنسيق الإنتاج.

راجع مرجع API لـ generateSitemaps لمزيد من المعلومات.

القيم المُرجعة

يجب أن تُرجع الدالة الافتراضية المصدرة من sitemap.(xml|ts|js) مصفوفة من الكائنات بالخصائص التالية:

type Sitemap = Array<{
  url: string
  lastModified?: string | Date
  changeFrequency?:
    | 'always'
    | 'hourly'
    | 'daily'
    | 'weekly'
    | 'monthly'
    | 'yearly'
    | 'never'
  priority?: number
  alternates?: {
    languages?: Languages<string>
  }
}>

سجل الإصدارات

الإصدارالتغييرات
v13.4.5إضافة سمات changeFrequency و priority إلى خرائط المواقع.
v13.3.0تقديم sitemap.