JavaScript وزواحف الذكاء الاصطناعي: لماذا قد يرى ChatGPT صفحتك فارغة
الإجابة المختصرة: في موضوع JavaScript وزواحف الذكاء الاصطناعي القاعدة بسيطة: الروبوت الذي لا ينفذ السكربتات لا يرى إلا HTML الذي يرسله خادمك. فإذا كانت صفحتك تبني نصها داخل المتصفح فقد يكون هذا HTML هيكلا فارغا. وفي قياس أجرته Vercel وMERJ في ديسمبر 2024 لم ينفذ أي من زواحف الذكاء الاصطناعي الكبرى شيفرة JavaScript، بينما نفذها زاحف Google وAppleBot. وهذه لقطة من عام 2024، فاختبر صفحاتك بنفسك، وضع المحتوى الرئيس في HTML ذاته، بتصييره على الخادم أو بتوليده مسبقا.
كيف يحصل الزاحف على صفحتك؟
كل عملية جلب تبدأ بالطريقة نفسها: طلب إلى خادمك يرد عليه بـ HTML. وما يحدث بعد ذلك هو الذي يحدد كم من صفحتك يصل.
يحمل المتصفح السكربتات التي يشير إليها HTML، وينفذها، ويعرض النتيجة. أما الزاحف فقد يتوقف عند هذه النقطة ويكتفي بأول HTML. أو يقوم بالتصيير (rendering): فينفذ السكربتات، وينتظر قليلا، ولا يقرأ إلا بعد ذلك.
وإذا أرسل الخادم النص مع الصفحة فلا فرق بين الطريقتين، لأنهما تنتهيان إلى المحتوى نفسه. أما إذا كانت الصفحة تتجمع داخل المتصفح فلن تجد في أول HTML إلا القليل. وتسمي وثائق Google هذا نموذج «app shell»، أي الهيكل الذي يملأ لاحقا. والروبوت الذي لا ينفذ JavaScript يتلقى عندئذ شيئا قريبا من هذا:
<body>
<div id="root"></div>
<script src="/app.js"></script>
</body>
العنوان الرئيس والنص وقائمة المنتجات والروابط لا تظهر إلا بعد تشغيل الملف app.js. وليس كل زاحف يشغله، وهنا تكمن المشكلة كلها.
ماذا تفعل Google مع JavaScript
حالة Google هي الحالة السهلة. ففي وثائقها عن أساسيات JavaScript SEO ما يلي:
- يشغل بحث Google شيفرة JavaScript بنسخة «evergreen» من Chromium، أي نسخة تبقى محدثة دائما.
- تمر الصفحة بثلاث مراحل: الزحف، ثم التصيير، ثم الفهرسة.
- الصفحة ذات الحالة 200 توضع في طابور للتصيير، وقد يستغرق ذلك ثواني أو أكثر. أما الصفحة ذات الحالة غير 200، مثل 404، فقد يتخطى تصييرها.
- يجوز ضبط العنوان (title) والوصف التعريفي (meta description) ورابط canonical بواسطة JavaScript.
والصفحة نفسها تعطي السبب الذي من أجله نكتب هذا المقال. فهي تقول إن التصيير من جهة الخادم أو التصيير المسبق ما زال فكرة جيدة، لأنه يجعل الصفحة أسرع للمستخدمين وللزواحف، ولأن ليس كل الروبوتات قادرة على تنفيذ JavaScript. وعليه فعبارة «Google تفهرس صفحتي» لا تعني أن كل روبوت يستطيع قراءتها.
JavaScript وزواحف الذكاء الاصطناعي: ما الثابت منه
أشهر قياس في هذا الباب صدر عن Vercel وMERJ في ديسمبر 2024 بعنوان The rise of the AI crawler. ونتيجته أن أيا من زواحف الذكاء الاصطناعي (AI crawlers) الكبرى لم ينفذ JavaScript. وتذكر الدراسة من بينها GPTBot وOAI-SearchBot وChatGPT-User وClaudeBot. أما Googlebot (المدرج في الدراسة لأجل Gemini) وAppleBot فقد صيرا JavaScript.
ويلزم تحفظان بجوار هذه النتيجة. الأول أنها لقطة من عام 2024، ولا نملك قياسا أحدث نستشهد به. والزواحف تتغير، فخذ النتيجة تحذيرا لا قانونا. والثاني أنها تخبرك بما يقرؤه الروبوت، لا بما إذا كانت الصفحة ستذكر في إجابة. فلا أحد يستطيع أن يعد بالاستشهاد بموقعك، سواء كان فيه JavaScript أم لا.
وللروبوتات مهام مختلفة. وهذا ما تقوله الجهات المشغلة عنها:
| الجهة المشغلة | الروبوت | الغرض بحسب الجهة المشغلة |
|---|---|---|
| OpenAI | GPTBot | تدريب النماذج التوليدية الأساسية |
| OpenAI | OAI-SearchBot | البحث داخل ChatGPT |
| OpenAI | ChatGPT-User | عمليات جلب بطلب من مستخدم، مثل سؤال في ChatGPT |
| Anthropic | ClaudeBot | يجمع محتوى الويب الذي قد يسهم في التدريب |
| Anthropic | Claude-SearchBot | يحسن جودة نتائج البحث |
| Anthropic | Claude-User | عمليات جلب حين يسأل مستخدم Claude سؤالا |
| Perplexity | PerplexityBot | يعرض المواقع في نتائج البحث داخل Perplexity ويربط بها |
والمصادر هي OpenAI وAnthropic وPerplexity. ولدى Perplexity أيضا روبوت منفصل لعمليات الجلب بطلب من المستخدم. فإذا كانت الروبوتات التي تقف وراء إجابات البحث بالذكاء الاصطناعي لا تقرأ إلا HTML، فلن تجد في صفحة هيكلها فارغ ما تستشهد به. وأي الروبوتات ينفذ السكربتات هو بالضبط ما قاسته دراسة 2024، وما ينبغي أن تفحصه على صفحاتك أنت.
من يتأثر بالمشكلة؟
تتأثر إذا كان نص صفحاتك أو روابطها غير موجودة في HTML الذي يرسله خادمك:
- الصفحات التي تبنى كلها داخل المتصفح. يرد الخادم بهيكل وحزمة سكربتات، ثم يكتب السكربت العنوان والنص والتنقل.
- المحتوى الذي تحمله السكربتات لاحقا. قوائم المنتجات والأسعار والتقييمات والتبويبات وأقسام «تحميل المزيد» التي تأتي من استدعاء API بعد تحميل الصفحة.
- الروابط التي لا توجد إلا بعد تشغيل السكربتات. الزاحف الذي لا ينفذ JavaScript لا يتبع إلا الروابط الموجودة في HTML. وزحف SEOgrinder للموقع يصطدم بذلك أيضا: فهو يدون أن الروابط التي لا تنشأ إلا في المتصفح لا يمكن تتبعها.
- العنوان والوصف وcanonical ووسوم Open Graph التي يضبطها سكربت. تقبل Google ذلك. لكن الروبوت الذي يتخطى السكربتات لا يراها أبدا.
ولا تتأثر إذا كان الخادم يرسل النص أصلا. فالإضافات التفاعلية، مثل القائمة أو الرسم البياني أو الآلة الحاسبة، يمكن أن تبقى تبنى في المتصفح. ويبلغ SEOgrinder عن الصفحات التي لا توجد إلا في المتصفح بعبارة «الصفحة لا تُبنى إلا داخل المتصفح»، لأن كثيرا من زواحف الذكاء الاصطناعي لا تنفذ JavaScript ولذلك ترى هناك صفحة شبه فارغة.
ثلاثة اختبارات في دقيقة واحدة
لا تحتاج إلى أداة لتعرف. فالاختبارات الثلاثة كلها تجيب عن سؤال واحد: هل نصي موجود في HTML الذي يرسله الخادم؟
- اعرض مصدر الصفحة. افتح صفحتك واختر «عرض مصدر الصفحة» (View page source)، أو اضغط Ctrl+U (وفي نظام Mac اضغط Cmd+Option+U). لا تستخدم «فحص» (Inspect)، لأن أدوات المطور (DevTools) تعرض الصفحة بعد أن تعمل السكربتات. ثم ابحث في المصدر عن جملة تستطيع قراءتها في الصفحة.
- اجلب الصفحة بأمر curl. في الطرفية (terminal) نفذ الأمر
curl -sL https://example.com/your-page | grep -io "a short phrase from your page"، مستبدلا العبارة بعبارة قصيرة من صفحتك أنت. فإذا ظهرت العبارة في الناتج فهي موجودة في HTML، إلا إذا وردت داخل عنصرscriptفقط، فهذا لا يعتد به. وإذا لم يظهر شيء فتحقق أولا من الإملاء والرموز الخاصة؛ وإلا فهي غير موجودة في HTML. - أوقف JavaScript. افتح أدوات المطور، وافتح قائمة الأوامر بالضغط على Ctrl+Shift+P (وفي نظام Mac اضغط Cmd+Shift+P)، واكتب
Disable JavaScript، واختر الأمر، ثم أعد تحميل الصفحة. فإن اختفى المحتوى الرئيس فهذا ما يراه الروبوت الذي لا ينفذ JavaScript.
وهكذا تقرأ النتيجة:
| ما تراه | معناه |
|---|---|
| العبارة موجودة في المصدر وفي ناتج curl | النص موجود في HTML المرسل. هذا الجزء سليم. |
| العبارة غائبة عن المصدر لكنها ظاهرة في المتصفح | الصفحة تبنى في المتصفح. الروبوتات التي تتخطى السكربتات لا ترى نصا. |
وهناك حدان: curl يريك ما يرسله خادمك إلى curl، لا ما يرسله إلى روبوت بعينه، كأن يعامل جدار الحماية الروبوتات معاملة مختلفة. ولكي ترى ما صيرته Google فعلا استخدم أداة فحص عنوان URL (URL Inspection) في Google Search Console.
كيف تعالج المشكلة: ضع المحتوى في HTML
الهدف أن تظهر العناوين والنص الأساسي والروابط الداخلية في المصدر. وهناك طريقتان شائعتان للوصول إلى ذلك:
- التصيير من جهة الخادم (SSR). يبني الخادم HTML الجاهز لكل طلب.
- التصيير المسبق، ويسمى أيضا التوليد الثابت (SSG). يجري توليد الصفحات سلفا، مثلا عند بناء الموقع، ويكتفي الخادم بتسليم الملفات.
وكلتاهما تضع المحتوى في الاستجابة الأولى. وإضافة إلى ذلك:
- ابدأ بالصفحات المهمة. نادرا ما تحتاج إلى إعادة بناء كاملة. ابدأ بالصفحات التي تريد أن تتصدر النتائج أو يستشهد بها.
- ضع الأساسيات في أول HTML. ويشمل ذلك العنوان والوصف التعريفي ورابط canonical ووسوم Open Graph والنص الرئيس وروابط التنقل بوصفها عناصر
aحقيقية تحمل السمةhref. - أعط الزواحف والزوار المحتوى نفسه. تذكر Google «dynamic rendering»، حيث تتلقى الروبوتات نسخة مبنية مسبقا، على أنه حل مؤقت فقط. وإظهار شيء مختلف للزواحف عما يراه الزوار هو إخفاء (cloaking).
- تحقق من النتيجة في المصدر. أعد الاختبارات الثلاثة بعد التعديل.
لا شيء من هذا ضمان للترتيب. إنك تزيل عائقا تقنيا، لا أكثر.
كيف يكتشف SEOgrinder الصفحات التي لا تبنى إلا داخل المتصفح
يفحص SEOgrinder الـ HTML الذي يسلمه خادمك، لا ما يصنعه المتصفح منه. أدخل عنوانا وابدأ التحليل، فتظهر المهام في تبويب المهام مرتبة بحسب الأثر. وثلاث نتائج تخص هذا الموضوع:
- «الصفحة لا تُبنى إلا داخل المتصفح». تذكر النتيجة كم كلمة وعنوانا ورابطا داخليا يحتويها HTML المرسل، وتشير إلى أن Google تصير هذه الصفحات بتأخير، وأن كثيرا من زواحف الذكاء الاصطناعي ترى صفحة شبه فارغة.
- «N صفحة لا تُبنى إلا داخل المتصفح». يعرض زحف الموقع كم من الصفحات التي شملها الزحف تسلم هيكل HTML شبه فارغ. ولا تحتسب الصفحات المضبوطة على noindex ولا صفحات تسجيل الدخول والتسجيل.
- «N صفحة تسجيل دخول أو تسجيل تُبنى في المتصفح فقط». هذا مقبول في الغالب، لأن مثل هذه الصفحات تعمل للزوار دون تصيير من جهة الخادم. وإن كان يراد لإحداها أن تتصدر النتائج فصيرها على الخادم.
وبعد الإصلاح اضغط إعادة التحقق: تبقى التقارير محفوظة مؤقتا حتى 24 ساعة، وهذا الزر يفرض فحصا جديدا (بضع مرات في الساعة). أما تسليم إلى الذكاء الاصطناعي فيحول التقرير إلى أمر عمل بصيغة Markdown لوكيل برمجة مثل Claude Code أو Cursor أو GitHub Copilot، مع شرط هدف واحد قابل للتحقق لكل نتيجة.
وما لا يفعله SEOgrinder: لا يقيس هل يذكر ChatGPT أو Gemini أو Perplexity علامتك التجارية فعلا. إنه يفحص الأساس التقني، أي هل يمكن قراءة المحتوى أصلا.
الأخطاء الشائعة
- الاختبار بـ «فحص» (Inspect) بدل «عرض مصدر الصفحة». يعرض الفحص النتيجة بعد تشغيل السكربتات، وهذا بالضبط ما لا يصل إلى الروبوت الذي لا ينفذ JavaScript.
- الاستنتاج «Google تفهرسها، إذن كل روبوت يقرؤها». Google تنفذ JavaScript، وتقول وثائقها نفسها إن ليس كل الروبوتات تفعل ذلك.
- ضبط العنوان والوسوم الوصفية بسكربت فقط. تسمح Google بذلك، لكن الروبوت الذي لا ينفذ السكربتات لا يراها أبدا. ضعها في أول HTML.
- روابط ليست إلا معالجات نقر (click handlers). استخدم روابط
aحقيقية بالسمةhrefكي يتبعها الزاحف دون تشغيل سكربتات. - جعل dynamic rendering خطة دائمة. تصفه Google بأنه حل مؤقت.
- الرد على كل عنوان مجهول بالهيكل نفسه وبالحالة 200. تفعل ذلك التطبيقات المصيرة في جهة العميل كثيرا، وقد يعد محرك البحث هذه الصفحات من نوع soft 404، أي صفحة تبدو ناجحة لكنها بلا محتوى حقيقي. والحل أن يرد الخادم بالحالة 404 على العناوين غير الموجودة.
- السماح للروبوتات في robots.txt ثم صدها عند جدار الحماية. النص موجود، لكن الروبوت يتلقى خطأ. وفي SEOgrinder نتيجة خاصة لهذه الحالة: «زواحف الذكاء الاصطناعي مسموح بها لكن الخادم يرفضها — يلزم الفحص». واقرأ أيضا مقالنا ملف robots.txt لزواحف الذكاء الاصطناعي.
الأسئلة الشائعة
هل ترى Google صفحتي المبنية بـ JavaScript؟
في الغالب نعم، لكن لاحقا. تشغل Google شيفرة JavaScript بمتصفح Chromium محدث دائما، وتنتظر الصفحات ذات الحالة 200 في طابور للتصيير. والفهرسة غير مضمونة أبدا. وأداة فحص عنوان URL في Google Search Console تعرض ما يراه Googlebot.
هل تكفي خريطة الموقع؟
لا. تخبر خريطة الموقع الزواحف بالعناوين الموجودة. لكنها لا تضع نصا في HTML هذه الصفحات.
هل ينفذ ChatGPT وClaude شيفرة JavaScript؟
في قياس Vercel وMERJ لعام 2024 لم تفعل ذلك زواحف OpenAI وAnthropic المذكورة فيه. ولا نملك قياسا أحدث نذكره. لذا اختبر صفحاتك أنت بدل أن تعتمد على إحدى الإجابتين.
هل يجب أن أعيد بناء موقعي كله؟
ليس بالضرورة. الخطوة الأولى المعتادة هي التصيير من جهة الخادم أو التصيير المسبق للصفحات التي تريد لها الظهور في النتائج أو الاستشهاد بها. أما الأجزاء التفاعلية فيمكن أن تبقى في المتصفح.
هل ستذكرني مساعدات الذكاء الاصطناعي إذا صيرت الصفحات على الخادم؟
لا أحد يستطيع أن يعد بذلك. أنت بهذا تتأكد من أن النص يمكن قراءته أصلا، وهذا شرط لكل ما بعده.
خطوتك التالية
اختر صفحة مهمة ونفذ الاختبارات الثلاثة. فإن كان النص غائبا عن المصدر فشغل الفحص المجاني في SEOgrinder وافتح تبويب المهام. وعالج الصفحات الأهم بتصييرها على الخادم أو توليدها مسبقا، ثم اضغط إعادة التحقق.