انتقل إلى المحتوى الرئيسي

⁦Next.js⁩ 16 ⁦App Router⁩

تنفيذ صور ⁦OG⁩ والتحقق منها في تطبيق ⁦Next.js⁩

اختر ⁦metadata⁩ الثابت، أو ⁦generateMetadata⁩ أو ⁦opengraph-image⁩، واستخدم ⁦URLs⁩ المطلق العام وافحص النتيجة المنشورة.

اختر ⁦metadata⁩ المستند إلى الملف أو المستند إلى التعليمات البرمجية عمدًا

استخدم تصدير كائن ⁦metadata⁩ ثابتًا للقيم الثابتة و⁦generateMetadata⁩ عندما تغير بيانات المسار العنوان أو الوصف أو الصورة. ينتمي كلا المصدرين إلى ⁦Server Components.⁩

يمكن أن يوفر الملف المسمى ⁦opengraph-image metadata⁩ المستند إلى الملف. يمكن لـ ⁦opengraph-image.tsx⁩ الذي تم إنشاؤه إرجاع ⁦ImageResponse⁩ عندما تعتمد الصورة المرئية على بيانات المسار. لا تقم بتصدير ⁦metadata⁩ و⁦generateMetadata⁩ الثابت من نفس مقطع المسار.

ثابت ⁦metadata⁩ مع ⁦metadataBase⁩

يحل ⁦metadataBase⁩ عناوين ⁦metadata⁩ النسبية؛ ويسهّل ⁦URL⁩ العام المطلق مثل ⁦https://starterpackai.com/og/home.png⁩ التحقق من الصورة خارج التطبيق.

tsx
import type { Metadata } from 'next'

export const metadata: Metadata = {
  metadataBase: new URL('https://starterpackai.com'),
  title: 'A clear page title',
  description: 'A concise share description',
  openGraph: {
    images: ['https://starterpackai.com/og/home.png'],
  },
}

معرفة الطريق ⁦generateMetadata⁩ في ⁦Next.js⁩ 16

في ⁦App Router⁩ ضمن ⁦Next.js⁩ 16، تكون ⁦params⁩ من نوع ⁦Promise⁩؛ نفّذ ⁦await params⁩ قبل تحميل بيانات المسار وإرجاع ⁦generateMetadata.⁩

tsx
import type { Metadata } from 'next'

type Props = { params: Promise<{ slug: string }> }

export async function generateMetadata({ params }: Props): Promise<Metadata> {
  const { slug } = await params
  const post = await getPost(slug)

  return {
    title: post.title,
    openGraph: { images: [post.ogImageUrl] },
  }
}

ديناميكية ⁦opengraph-image⁩ مع ⁦ImageResponse⁩

في ملف ⁦opengraph-image.tsx⁩ على الخادم، نفّذ ⁦await params⁩ ثم أرجع ⁦ImageResponse⁩ بأبعاد محددة.

tsx
import { ImageResponse } from 'next/og'

export const size = { width: 1200, height: 630 }
export const contentType = 'image/png'

export default async function Image({
  params,
}: {
  params: Promise<{ slug: string }>
}) {
  const { slug } = await params
  return new ImageResponse(
    <div style={{ display: 'flex', padding: 80 }}>{slug}</div>,
    size
  )
}

قائمة التحقق من النشر

  • تأكد من تشغيل ⁦metadata⁩ أو ⁦generateMetadata⁩ في مقطع مسار مكون الخادم.
  • افتح ⁦HTML⁩ المنشورة وتحقق من قيم ⁦og:title⁩ و⁦og:description⁩ و⁦og:image⁩ النهائية.
  • افتح الصورة العامة المطلقة ⁦URL⁩ في جلسة منفصلة وتحقق من الاستجابة الناجحة للصورة.
  • تحقق من تركيبة ⁦1200×630⁩ المعروضة بحجم بطاقة الارتباط الصغير.
  • قم بتشغيل مدقق ⁦metadata⁩ العام، ثم استخدم مصححات الأخطاء الخاصة بالنظام الأساسي عندما تختلف ذاكرات التخزين المؤقت.

دليل ⁦Next.js⁩

أسئلة ⁦OG⁩ في ⁦Next.js⁩

أهم خيارات ⁦App Router⁩ للصفحات الثابتة والديناميكية.

هل أستخدم ⁦metadata⁩ أم ⁦generateMetadata⁩؟

استخدم ⁦metadata⁩ للقيم الثابتة و⁦generateMetadata⁩ عندما يعتمد المحتوى على بيانات المسار.

هل يمكن استخدام ملف ⁦opengraph-image⁩؟

نعم. يدعم ⁦App Router⁩ البيانات الوصفية القائمة على الملفات، وتوفر واجهات ⁦metadata⁩ تحكمًا صريحًا أو ديناميكيًا.

لماذا يجب أن يكون رابط الصورة مطلقًا؟

تجلب برامج الزحف الصورة خارج جلسة المتصفح؛ الرابط العام المطلق واضح ويمكن الوصول إليه مباشرة.

انشر الصورة والبيانات الوصفية معًا

أنشئ الأصل، وانسخ مقتطف ⁦Next.js⁩، وتحقق من نتيجة النشر.