ما هو ملف robots.txt و طريقة إضافته لمشروع Nextjs

سليمان العثمان
سليمان العثمان
٢٣ نوفمبر ٢٠٢٣
Cover Image for ما هو ملف robots.txt و طريقة إضافته لمشروع Nextjs

نستطيع أن نقول بأن ملف robots.txt بأنه المسئول عن إخبار برامج التتبع crawlers "أو كما يُطلق عليها برامج الزحف" التابعة لمحركات البحث عن الصفحات التي يمكن طلبها و فهرستها، و في الغالب يُستخدم لتجنّب تحميل عبء زائد على الموقع الإلكتروني من خلال طلبات الزحف، و لا يمكن إعتبارها آلية لإخفاء صفحات ويب من محركات البحث.

قواعد أساسية لـ robots.txt

في البداية يجب أن يكون ملف robots.txt موجود في الجذر الرئيسي للموقع، بمعنى الوصول إليه من خلال كتابة رابط موقعك ثم اسم الملف، مثال على ذلك :

www.example.com/robots.txt
User-Agent

يمكن من خلال User-Agent تحديد بوت محدد التي تُطبّق عليه قاعدة Disallow أو Allow، و يمكن كذلك تحديد كافة البرامج الزحف من خلال علامة نجمة *، و يصبح السطر كالتالي :

User-Agent : *
Allow

يمكن من خلال قاعدة Allow تحديد مسار أو صفحة يمكن لبرامج الزحف الوصول إليها، و بشكل إفتراضي و في الغالب يتم السماح لتلك البرامج من الوصول لكافة الموقع و استخدام قاعدة Disallow لمنع بعض الصفحات أو المسارات من الوصول إليها، و القاعدة الإفتراضية لـ Allow هي :

User-Agent : *
Allow : /
Disallow

من خلال قاعدة Disallow نستطيع تحديد المسار أو الصفحة التي نرغب بمنع برامج الزحف من الوصول إليها، و بل يمكن كذلك تحديد نوع من الملفات التي لا نرغب بوصولهم إليها، في البداية سأضع مثال على تحديد صفحة :

User-Agent : *
Disallow : /privacy.html

مثال على تحديد مجلد كامل :

User-Agent : *
Disallow : /assets/images/

مثال على تحديد نوع محدد من الملفات :

User-Agent : *
Disallow : /*.mp4$
Sitemap ( إختياري )

كذلك يمكن تحديد رابط الخريطة من خلال :

Sitemap : https://www.example.com/sitemap.xml
يمكنك وضع أكثر من قاعدة

يمكنك وضع أكثر من قاعدة و ليس فقط قاعدة لـ Allow و قاعدة لـ Disallow، و هنا سأضع مثال على دمج أكثر من قاعدة :

User-Agent : *
Allow : /

Disallow : /privacy.html
Disallow : /assets/
Disallow : /*.mp4$
Disallow : /*.gif$

إعداد ملف ثابت لـ robots.txt في Nextjs

في البداية ننشئ ملف robots.txt في مجلد app ليصبح كالتالي :

/app/robots.txt

ثم نضيف القواعد فيه و هنا مثال للقواعد :

User-Agent: *
Allow: /
Disallow: /privacy

Sitemap: https://example.com/sitemap.xml

و بذلك يصبح لدينا ملف robots.txt جاهز و يمكن الوصول إليه من خلال الرابط، مثال على الرابط :

https://example.com/robots.txt

إنشاء ملف robots.txt ديناميكيًا من خلال Nextjs

من أجل إنشاء ملف robots.txt ديناميكيًا، في البداية ننشئ ملف robots.tsx في مجلد app ليصبح كالتالي :

/app/robots.tsx

ثم نضيف الكود التالي :

import { MetadataRoute } from 'next'
 
export default function robots(): MetadataRoute.Robots {
  return {
    rules: {
      userAgent: '*',
      allow: '/',
      disallow: '/privacy',
    },
    sitemap: 'https://example.com/sitemap.xml',
  }
}

كما نلاحظ فإن مفاتيح الكائن هي نفسها مفاتيح الموجودة في ملف robots.txt السابق الذي أعددناه، و يجدر أن ننوه بأن هذه المفاتيح userAgent - allow - disallow يمكن أن تستقبل مصفوفة و ليس فقط نص string و هنا مثال على تمرير مصفوفة لـ disallow :

import { MetadataRoute } from 'next'
 
export default function robots(): MetadataRoute.Robots {
  return {
    rules: {
      userAgent: '*',
      allow: '/',
      disallow: ['/privacy', '/*.mp4$'],
    },
    sitemap: 'https://example.com/sitemap.xml',
  }
}

و بالطبع سينتج لنا ملف robots.txt و يمكن التأكد من ذلك من خلال فتح رابط موقعك مع إضافة اسم الملف :

www.domainname.com/robots.txt

و ستجد القواعد التي وضعتها بنفسك، يجدر الإشارة لـ نوع البيانات لكائن robots :

type Robots = {
  rules:
    | {
        userAgent?: string | string[]
        allow?: string | string[]
        disallow?: string | string[]
        crawlDelay?: number
      }
    | Array<{
        userAgent: string | string[]
        allow?: string | string[]
        disallow?: string | string[]
        crawlDelay?: number
      }>
  sitemap?: string | string[]
  host?: string
}

الختام

في هذه التدوينة وضعت القواعد الأساسية و نبذة الرئيسية من ملف robots.txt، و قد أرفقت في نهاية التدوينة المصادر التي أعتمدت عليها في كتابة تدوينتي هذه.

المصادر و المراجع

مقدّمة ودليل عن ملف robots.txt | Google for Developers

إنشاء ملف robots.txt | Google for Developers

Metadata Files: robots.txt | Nextjs

What is a robots.txt File? - Crawling and Indexing | Learn Next.js

تصميم@sulealothman