دليل سيو Next.js: اختيار SSG أو SSR أو ISR، وضبط البيانات الوصفية والروابط الأساسية، وإنشاء sitemap.xml، وتغذية مدونة عبر webhook، وإتاحة المحتوى للذكاء الاصطناعي.

باختصار
يُعد Next.js من أفضل أطر React لتحسين محركات البحث، لأنه يرسل إلى الزواحف صفحة HTML كاملة بدل هيكل فارغ. لتحسين الترتيب، اعرض صفحات المحتوى مسبقًا (التوليد الثابت أو ISR)، وحدّد العناوين والأوصاف والروابط الأساسية عبر Metadata API، وأنشئ sitemap.xml وrobots.txt من مجلد app، واستخدم روابط حقيقية ورموز حالة صحيحة، وأبقِ المحتوى الرئيسي خارج الشيفرة التي تعمل في المتصفح فقط، لأن معظم زواحف الذكاء الاصطناعي لا تنفّذ JavaScript.
هل تريد التعمق أكثر؟ اسأل
اختبار سريع
هل السيو مناسب لك، وكيف تبدأ؟
4 أسئلة سريعة لترى إن كان Google قادرًا على جلب العملاء لك.
نصيحتنا لك
Sorank هو الحل المناسب لك
الناس يبحثون عمّا تبيعه ويمكنك الانتظار بضعة أشهر: يجد Sorank عمليات البحث المناسبة، ويكتب المقالات وينشرها، ويحصل لك على روابط.
Sorank يناسب إجاباتك
جرّبه 3 أيام على موقعك، أو ابدأ بتدقيق مجاني لتعرف أين تقف.
3 أيام مجانًا، ثم توقف متى شئت. ضمان استرداد الأموال لمدة 90 يومًا.
يقوم سيو Next.js أساسًا على اتخاذ القرار الصحيح في كل مسار: ما الذي يُعرض على الخادم، وما الذي يُخزَّن مؤقتًا، وما الذي يصل إلى HTML قبل تشغيل أي سكربت. تشرح Google في أساسيات تحسين محركات البحث لـ JavaScript أنها تعالج تطبيقات JavaScript على ثلاث مراحل (الزحف والعرض والفهرسة)، وأن العرض من جهة الخادم أو العرض المسبق "لا يزال فكرة ممتازة". وهذا ما يفعله Next.js افتراضيًا. يغطي هذا الدليل App Router (من Next.js 13 فما بعد)، مع ملاحظات حول Pages Router القديم.
نعم. يرسل تطبيق React التقليدي المعروض من جهة العميل ملف HTML شبه فارغ ويبني الصفحة في المتصفح؛ على محركات البحث أن تعرضه، وكثير من الروبوتات لا تفعل ذلك أبدًا. أما Next.js فيعرض React على الخادم، فتحتوي استجابة HTML مسبقًا على العناوين والنص والروابط والبيانات الوصفية. يشرح دليلنا حول سيو JavaScript سبب أهمية هذا الفرق للفهرسة.
في App Router، تكون المكوّنات Server Components افتراضيًا. وحتى المكوّنات الموسومة بـ 'use client' تُعرض مسبقًا إلى HTML على الخادم. نقطة الضعف هي البيانات: كل ما تجلبه داخل useEffect، أو بعد نقرة فقط، يغيب عن HTML الأولي. اجلب المحتوى داخل Server Components، واحتفظ بمكوّنات العميل للتفاعل.
يتيح Next.js المزج بين الأوضاع مسارًا بمسار. ويؤثر الاختيار في حداثة المحتوى والسرعة وما تتلقاه الزواحف.
| الوضع | متى يُبنى HTML | الحكم من ناحية السيو | مناسب لـ |
|---|---|---|---|
| التوليد الثابت (SSG) | وقت البناء | الأفضل: HTML كامل وسريع جدًا | صفحات الهبوط والتوثيق والمقالات الدائمة |
| التجديد الثابت التدريجي (ISR) | وقت البناء، ثم يُحدَّث في الخلفية أو عند الطلب | الأفضل للمواقع الكبيرة أو المتغيرة | المدونات وكتالوجات المنتجات وصفحات أنظمة إدارة المحتوى |
| العرض من جهة الخادم (SSR) | عند كل طلب | جيد: HTML كامل، ويعتمد على سرعة الخادم | الصفحات المخصصة أو الآنية |
| العرض من جهة العميل (CSR) | في المتصفح | ضعيف: المحتوى غير مرئي لمعظم الروبوتات | لوحات التحكم خلف تسجيل الدخول |
تعدّد وثائق Next.js حول ISR فوائده: تحديث المحتوى الثابت "دون إعادة بناء الموقع بالكامل"، والتعامل مع أعداد كبيرة من الصفحات دون أوقات بناء طويلة. يُعاد توليد المسار الذي يحتوي على export const revalidate = 3600 مرة واحدة في الساعة على الأكثر؛ وللتحكم الدقيق، استدعِ revalidatePath أو revalidateTag عند تغيّر المحتوى. لا يعمل ISR مع التصدير الثابت (output: 'export'). وللتطبيقات التي يجب أن تبقى معروضة من جهة العميل، يعرض دليلنا حول سيو تطبيقات الصفحة الواحدة الحلول الممكنة.
نصيحة
تحقّق مما تتلقاه الروبوتات لا مما يعرضه متصفحك: شغّل curl على الرابط أو افتح view-source وابحث عن جملة من المقال. إن لم تجدها في HTML الخام، فهي تعتمد على JavaScript.
تحل Metadata API محل next/head في App Router. ووفق وثائق Next.js حول البيانات الوصفية، تصدّر كائن metadata ثابتًا من ملف layout أو صفحة، أو دالة generateMetadata حين تعتمد القيم على البيانات، فيولّد Next.js وسوم head. ولا يُدعم الاثنان إلا في Server Components.
export async function generateMetadata({ params }) {
const { slug } = await params
const post = await getPost(slug)
return {
title: post.title,
description: post.excerpt,
alternates: { canonical: `/blog/${slug}` },
openGraph: { images: [post.cover] },
}
}خمس قواعد تمنع معظم المشكلات:
في الصفحات الديناميكية، يبث Next.js البيانات الوصفية بعد البايتات الأولى لتسريع العرض. وتوضح الوثائق أن البث معطّل للروبوتات التي تتوقع البيانات الوصفية داخل head، والتي تُكتشف عبر user agent (من الأمثلة Bingbot وTwitterbot وSlackbot)، وأن خيار htmlLimitedBots يتيح تعديل القائمة. إن غاب عنها زاحف يهمك، فأضفه. وفي Pages Router، المكافئ هو مكوّن Head من next/head، مع خاصية key لتجنب الوسوم المكررة.
كلاهما ملف خاص في مجلد app. يتحول ملف sitemap.ts الذي يصدّر دالة تعيد الروابط إلى /sitemap.xml، ويتحول ملف robots.ts إلى /robots.txt. ويشير مرجع خريطة الموقع إلى أن الملف يُخزَّن مؤقتًا افتراضيًا، وأن حد Google هو 50,000 رابط لكل خريطة موقع؛ وفوق ذلك تقسّمها generateSitemaps إلى عدة ملفات.
import type { MetadataRoute } from 'next'
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const posts = await getPosts()
return posts.map((p) => ({
url: `https://example.com/blog/${p.slug}`,
lastModified: p.updatedAt,
}))
}لا تُدرج إلا الروابط الأساسية القابلة للفهرسة التي تعيد 200، مع تاريخ التحديث الحقيقي في lastModified. وتقبل خريطة الموقع أيضًا alternates.languages للمواقع متعددة اللغات. وفي robots.ts، أشر إلى خريطة الموقع وحدّد أي روبوتات ذكاء اصطناعي يُسمح لها بالزحف؛ يسردها مقالنا حول robots.txt لزواحف الذكاء الاصطناعي. وتجد المزيد عن الصيغة في مدخلنا حول خريطة موقع XML.
| المشكلة | ما يحدث | الحل |
|---|---|---|
| التنقل عبر onClick وrouter.push | لا تتبع Google إلا عناصر a التي تحمل href | استخدام مكوّن Link من next/link الذي يولّد رابطًا حقيقيًا |
| محتوى غير موجود يُقدَّم كصفحة 200 | "Soft 404" في Search Console | استدعاء notFound() ليعيد المسار الحالة 404 |
| إعادة توجيه مؤقتة لصفحات منقولة | ترسل redirect() الرمز 307 | استخدام permanentRedirect() أو permanent: true في next.config (308) |
| خلط الشرطة المائلة في نهاية الروابط | رابطان للصفحة نفسها | اختيار صيغة واحدة عبر خيار trailingSlash والحفاظ على اتساق الروابط الأساسية |
| فهرسة نسخ المعاينة أو الاختبار | نسخ مكررة من الموقع في Google | إرسال noindex على النطاقات غير الإنتاجية |
| محتوى تبويبات يُحمَّل عند النقر | النص غائب عن HTML | عرض كل المحتوى على الخادم وإخفاؤه بـ CSS عند الحاجة |
كل هذه المشكلات تقلّل قابلية الزحف: يجب أن يتمكن الزاحف من اكتشاف كل رابط عبر الروابط وأن يحصل على رمز حالة سليم.
توصي وثائق Next.js بعرض JSON-LD داخل وسم script من نوع application/ld+json مباشرة في مكوّن الصفحة أو layout، انطلاقًا من بيانات الصفحة نفسها، مع تهريب الحرف < في JSON المسلسل لمنع الحقن. ولأنه يُعرض على الخادم، تراه Google وزواحف الذكاء الاصطناعي في HTML الخام. استخدم Article (أو BlogPosting) للمقالات، وOrganization في layout الجذر، وBreadcrumbList للصفحات العميقة، وProduct للتجارة الإلكترونية. يمنحك مولّد schema كتلة صالحة للبدء، ثم تحقّق من الصفحة باختبار النتائج المنسّقة من Google.
يوفر Next.js مكوّنات تعالج الأسباب المعتادة لضعف Core Web Vitals:
قِس البيانات الميدانية لا نتيجة المختبر فقط: يوضح دليلنا حول PageSpeed Insights كيفية قراءة الاثنين.
تأخذ مدونة Next.js عادة أحد ثلاثة أشكال: ملفات MDX أو Markdown في المستودع (بسيطة، لكن كل مقال يتطلب commit ونشرًا)، أو نظام إدارة محتوى منفصل الواجهة (Sanity وContentful وStrapi وPayload) يُستعلم عنه داخل Server Components، أو webhook للنشر يستقبل المقالات من أداة خارجية. وفي الحالات الثلاث، نمط السيو واحد: مسار ديناميكي app/blog/[slug] مع generateStaticParams وgenerateMetadata وISR، وخريطة موقع تتغذى من المصدر نفسه، وصفحة فهرس ترتبط بكل المقالات.
يفصل الـ webhook النشر عن دورة الإطلاق. يستقبل Route Handler المقال ويحفظه ثم يعيد التحقق من الصفحات المعنية:
// app/api/publish/route.ts
import { revalidatePath } from 'next/cache'
export async function POST(request) {
if (request.headers.get('authorization') !== `Bearer ${process.env.PUBLISH_SECRET}`) {
return new Response('Unauthorized', { status: 401 })
}
const article = await request.json()
await savePost(article)
revalidatePath('/blog')
revalidatePath(`/blog/${article.slug}`)
return Response.json({ ok: true })
}تنبيه
احمِ نقطة الاستقبال بسرّ، وأعد التحقق من المسار العام الدقيق. تحذّر وثائق ISR من أنه مع عدة نسخ من الخادم والتخزين المؤقت الافتراضي على الملفات، لا تمسح إعادة التحقق عند الطلب إلا النسخة التي تستقبل الطلب؛ استخدم معالج تخزين مؤقت مشتركًا.
العرض على الخادم هو الشرط الأول لـ GEO (التحسين للمحركات التوليدية). وجد تحليل Vercel الصادر في ديسمبر 2024، The rise of the AI crawler، أن "أيًّا من زواحف الذكاء الاصطناعي الكبرى لا يعرض JavaScript حاليًا"، وذكر GPTBot وChatGPT-User وOAI-SearchBot وClaudeBot وPerplexityBot، وأحصى 569 مليون طلب من GPTBot و370 مليونًا من Claude على شبكته خلال شهر واحد. صفحة Next.js التي تعرض نصها وعناوينها وJSON-LD مسبقًا قابلة للقراءة لديها جميعًا؛ أما الصفحة المعروضة من جهة العميل فلا.
الشرط الثاني محتوى يستحق الاستشهاد: مقالات تجيب عن سؤال واحد في كل قسم، مع مصادر وأرقام وتعريفات واضحة، تُنشر بانتظام. هذا هو الجزء الذي تؤتمته Sorank، منتجنا. Sorank برنامج سيو وGEO يعمل بنظام autopilot: يجد كلماتك المفتاحية، ويكتب مولّد مقالات المدونة فيه 20 أو 60 أو 120 مقالًا شهريًا مع مصادر وروابط داخلية وصور. وعلى موقع Next.js، يتصل عبر الـ webhook المخصص الموضح في صفحة التثبيت: يستقبل Route Handler لديك كل مقال ويحفظه ويعيد التحقق من المدونة. ثم يتحقق تتبّع الإشارات في الذكاء الاصطناعي كل أسبوع مما إذا كانت ChatGPT وClaude وGemini تستشهد بعلامتك.

الخلاصة: اعرض مسبقًا كل صفحة تريد أن يُعثر عليها، وحدّد البيانات الوصفية على الخادم، وغذِّ خريطة الموقع من مصدر المحتوى نفسه. يقدّم Next.js الأدوات، أما الترتيب والاستشهادات في الذكاء الاصطناعي فتأتي مما تنشره بها. لتغذية مدونة Next.js بالمقالات باستمرار، اطّلع على خطط Sorank، بدءًا من 49$ شهريًا مع تجربة مجانية لمدة 3 أيام.
Next.js مبني على React، لذلك فالمقارنة بين طريقتين في العرض. تطبيق React أحادي الصفحة الافتراضي يُعرض في المتصفح ويرسل HTML شبه فارغ، بينما يعرض Next.js الصفحات مسبقًا على الخادم أو وقت البناء. وتتلقى الزواحف، بما فيها روبوتات الذكاء الاصطناعي التي لا تنفّذ JavaScript، المحتوى كاملًا مع Next.js دون إعداد إضافي.
ليس من تلقاء نفسه. في App Router تضيف إلى مجلد app ملف sitemap.ts يعيد روابطك، فيقدّمه Next.js على العنوان /sitemap.xml. وفي المواقع الكبيرة، تقسّم generateSitemaps القائمة إلى عدة ملفات، لأن Google تقبل حتى 50,000 رابط لكل خريطة موقع.
يمكن لكليهما تحقيق ترتيب جيد لأن كليهما يعرض HTML مسبقًا. App Router هو الخيار الموصى به للمشاريع الجديدة: تقلل Server Components شيفرة JavaScript على جهة العميل، وتتولى Metadata API وsitemap.ts وrobots.ts ملفات السيو بشكل مدمج. أما في موقع قائم على Pages Router، فنادرًا ما يستحق الانتقال العناء من أجل السيو وحده.
لقد جربوا SORANK قبلك
