إضافة خريطة الموقع sitemap إلى مشروع nextjs

سليمان العثمان
سليمان العثمان
١٩ نوفمبر ٢٠٢٣
Cover Image for إضافة خريطة الموقع sitemap إلى مشروع nextjs

في هذه التدوينة سنأخذ نبذة عن فائدة ملف sitemap.xml و بماذا يفيدنا به مع المحركات البحث و في مقدمتهم Google، و كذلك كيفية إنشاء الملف و إضافته إلى مشروع Nextjs و ضبطه.

ما هو ملف sitemap.xml ؟

هو الملف الذي سيحمل خريطة موقعنا، روابط الصفحات الموجودة بموقعنا على سبيل المثال صفحة الرئيسية و صفحات الأقسام و غيرها من الصفحات التي نرغب بظهورها في محركات البحث و في مثالنا الذي سنطبق عليه روابط التدوينات، و السؤال التالي ما فائدته؟

فائدة sitemap

يساعد sitemap في فهرسة موقعنا لدى محركات البحث، بمعنى يسهّل على المحركات البحث إيجادنا بطريقة أسهل و فهرسة روابط موقعنا، مما يُمكّننا على الإنتشار أكثر و ظهور موقعنا في محركات البحث بطريقة أفضل، لذلك من المهم إضافته للمواقع التي نُنشئها، و الخطوة التالية هي إضافته لمشروع Nextjs.

تنويه :

سنطبّق على هيكلة المجلدات و الملفات App router الجديدة التي أتت مع الإصدار Nextjs 13 و أعلى، حيث يُنصح بإستخدامها من قبل فريق Next.

الطريقة الأولى : خريطة ثابتة Static sitemap

تستخدم هذه الطريقة في حالة كانت لدينا روابط معدودة و محددة و هي ثابتة، و من أجل ذلك ننشئ ملف sitemap.xml في المسار التالي :

app/sitemap.xml

ثم نضيف الروابط فيه، مثال على ملف خريطة ثابت :

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <url>
        <loc>https://ciphers.dev</loc>
        <lastmod>2023-11-18T20:11:38.961Z</lastmod>
    </url>
    <!-- Another urls -->
</urlset>

طبعًا مع إستبدال رابط الموجود في المثال السابق برابط موقعك و كذلك تحديث تاريخ الرابط، و من أجل الوصول إليه من خلال المتصفح يمكن كتابة رابط موقعك ثم sitemap.xml، مثال لشكل الرابط :

www.domainname.com/sitemap.xml

الطريقة الثانية : إنشاء ملف sitemap.xml برمجيًا

تستخدم هذه الطريقة في حالة كانت الروابط كثيرة، مثل المدونات و الأخبار و المواقع المليئة بالروابط.

في البداية سننشئ ملف sitemap.ts في المسار التالي :

app/sitemap.ts

ثم نُضيف الكود التالي ( شرح الكود موجود بالأسفل ):

import { getAllPosts } from "@/libs/posts";

export default async function sitemap() {
    const posts = await getAllPosts([
        'date',
        'slug',
        'draft'
    ]);

    const urls = posts.map((post) => ({
        url : `${process.env.NEXT_PUBLIC_URL}/posts/${post.slug}`,
        lastModified : post.date
    }));

    return [
        {
            url : process.env.NEXT_PUBLIC_URL,
            lastModified : new Date()
        },
        ... urls
    ]
}

تنويه

في الكود السابق سنجد process.env.NEXT_PUBLIC_URL و هو مجرد مفتاح يحمل قيمة رابط الموقع https://ciphers.dev في ملف .env.development، يمكن إستغناء عنه و استخدام رابط الموقع مُباشرة، أو العمل بنفس الطريقة.

في البداية تم إستيراد دالة ( Function ) تجلب التدوينات، ثم أنشئنا دالة تحمل اسم sitemap، و في داخل الدالة أستدعينا دالة getAllPosts و مررنا المفاتيح التي نحتاجها، ثم مررنا على كافة التدوينات من خلال map و أنشئنا مصفوفة تحتوي على كائنات ( objects ) و كل كائن منها يحمل قيمتين من كل تدوينة و هما :

{
    url : 'url',
    lastModified: 'date'
}

ثم أعدنا مصفوفة تحمل كائن لكل الروابط و من ضمنها رابط المدونة نفسها، و بذلك سينشئ ملف sitemap.xml تلقائيًا مع كل عملية بناء ( build ) للمشروع، و يمكن الوصول إليه من خلال كتابة رابط الموقع ثم كتابة sitemap.xml.

في الختام

في هذه التدوينة ركّزت على إضافة sitemap.xml بأبسط طريقة لمشروع nextjs مع تركيز على النقاط المهمة، و يمكنك معرفة أكثر من خلال قراءة المرجع الرسمي المرفق بالأسفل.

المرجع

Nextjs sitemap

تصميم@sulealothman