راهنمای کامل استفاده از metadata و generateMetadata در Next.js

در نسخه‌های مدرن Next.js، مدیریت metadata صفحات بسیار قدرتمندتر و ساده‌تر شده است. metadata به‌صورت خودکار در تگ <head> صفحات تزریق می‌شود و نقش مهمی در SEO، اشتراک‌گذاری اجتماعی و تجربه کاربری دارد. این مقاله دو روش اصلی تعریف metadata را بررسی می‌کند: استفاده از آبجکت ثابت metadata و تابع داینامیک generateMetadata.

metadatagenerateMetadataSEOOpen Graph

~3 دقیقه مطالعه • بروزرسانی ۱۰ آبان ۱۴۰۴

۱. تعریف metadata ثابت با آبجکت metadata


اگر metadata صفحه شما وابسته به داده‌های زمان اجرا نیست، می‌توانید آن را به‌صورت مستقیم در فایل layout.tsx یا page.tsx تعریف کنید:

export const metadata: Metadata = {
  title: 'Home Page',
  description: 'A brief description of this page',
}

Next.js به‌صورت خودکار این اطلاعات را در تگ <head> صفحه قرار می‌دهد.


۲. تعریف metadata داینامیک با generateMetadata


اگر metadata شما وابسته به پارامترهای مسیر، APIهای خارجی یا metadata والد باشد، از تابع generateMetadata استفاده کنید:

export async function generateMetadata({ params }, parent) {
  const product = await fetch(`https://example.com/api/products/${params.id}`).then(res => res.json())
  const previousImages = (await parent).openGraph?.images || []

  return {
    title: product.title,
    openGraph: {
      images: ['/product-image.jpg', ...previousImages],
    },
  }
}

۳. نکات مهم


  • در هر segment فقط یکی از metadata یا generateMetadata قابل export است
  • generateMetadata فقط در Server Components پشتیبانی می‌شود
  • فراخوانی‌های fetch درون generateMetadata به‌صورت memoized انجام می‌شوند
  • اگر metadata شما داینامیک نیست، استفاده از آبجکت ثابت توصیه می‌شود

۴. فیلدهای پشتیبانی‌شده در metadata


  • title: عنوان صفحه
  • description: توضیحات متا برای موتورهای جستجو
  • openGraph: اطلاعات اشتراک‌گذاری اجتماعی
  • twitter: تنظیمات کارت توییتر
  • robots: قوانین ایندکس شدن
  • icons: آیکون‌ها و favicon
  • manifest: مسیر فایل manifest.json
  • verification: تأیید سایت برای گوگل، یاهو، یاندکس
  • appLinks: لینک‌های عمیق برای اپلیکیشن‌ها
  • alternates: لینک‌های canonical، نسخه‌های زبانی، RSS

۵. استفاده از metadataBase


برای تبدیل مسیرهای نسبی به URLهای کامل، از metadataBase استفاده کنید:

export const metadata: Metadata = {
  metadataBase: new URL('https://example.com'),
  openGraph: {
    images: '/og-image.png', // تبدیل به https://example.com/og-image.png
  },
}

۶. مثال ترکیبی کامل


export const metadata: Metadata = {
  title: {
    default: 'My Shop',
    template: '%s | My Shop',
  },
  description: 'Best products at the best prices',
  openGraph: {
    title: 'My Shop',
    description: 'Shop online with high quality',
    url: 'https://example.com',
    siteName: 'My Shop',
    images: [
      {
        url: 'https://example.com/og.png',
        width: 1200,
        height: 630,
      },
    ],
    type: 'website',
  },
  twitter: {
    card: 'summary_large_image',
    title: 'My Shop',
    description: 'Shop online with high quality',
    creator: '@myshop',
    images: ['https://example.com/og.png'],
  },
}

جمع‌بندی


  • برای metadata ثابت از metadata استفاده کنید
  • برای metadata داینامیک از generateMetadata استفاده کنید
  • metadata به‌صورت خودکار در <head> تزریق می‌شود
  • از metadataBase برای ساده‌سازی URLهای کامل استفاده کنید

نوشته و پژوهش شده توسط دکتر شاهین صیامی