AJAX: الأسئلة الشائعة

تجيب هذه الأسئلة الشائعة عن معظم الأسئلة الشائعة حول زحف AJAX.
متى يجب استخدام _escaped_fragment_ ومتى يجب استخدام #! في عناوين URL لتطبيق AJAX؟

يجب أن يستخدم الموقع بنية #! في عناوين URL جميعها التي استخدمت نظام زحف AJAX. لن يتبع Googlebot الروابط التشعبية بتنسيق _escaped_fragment_.

أين يمكنني الاطلاع على هذا النظام أثناء عمله؟

يمكنك الاطلاع على نموذج تطبيق AJAX على الموقع http://gwt.google.com/samples/Showcase/Showcase.html. وإذا نقرت على أي من الروابط على اليسار، فستشاهد أن عنوان URL سيتضمن جزء علامة التجزئة #!، وسينتقل التطبيق إلى الحالة المقابلة لجزء علامة التجزئة هذا. وإذا غيّرت #! (على سبيل المثال http://gwt.google.com/samples/Showcase/Showcase.html#!CwRadioButton) إلى ?_escaped_fragment_= (على سبيل المثال، http://gwt.google.com/samples/Showcase/Showcase.html?_escaped_fragment_=CwRadioButton)، فسيعرض الموقع لقطة HTML.

ماذا يحدث إذا اخترت عدم استخدام#! في موقع AJAX؟

في المدى القريب، ربما لا تظهر صفحاتك بشكل صحيح في صفحات نتائج بحث Google. ومع ذلك، نحن نعمل باستمرار على جعل برنامج Googlebot يعمل بشكل كبير مثل المتصفح. وعقب تنفيذ الميزات التي يتطلبها موقعك، ربما يبدأ Googlebot فهرسة صفحاتك بشكل صحيح بدون مساعدة. ومع ذلك يوفر نظام زحف AJAX هذا حلاً للمواقع التي تستخدم AJAX من قبل وتريد ضمان فهرسة المحتوى بشكل صحيح في الوقت الحالي. نتوقع أن يصبح حلاً جيدًا لكل شخص يمتلك لقطات HTML من قبل لصفحاته أو يختار استخدام متصفح بلا واجهة مستخدم للحصول على مثل لقطات HTML تلك.

ما معدل تحديث المحتويات الواجب اتباعه؟

تعتمد الإجابة عن هذا السؤال تمامًا على معدل تغيير محتوى التطبيق. إذا كانت التغييرات تتم بشكل متكرر، فيجب دومًا إنشاء لقطة HTML جديدة استجابة إلى طلب الزاحف. من ناحية أخرى، جرب أرشيف مكتبة لا يتغير مخزونه بشكل منتظم. للحيلولة دون تقديم الخادم للقطات HTML نفسها مرارًا وتكرارًا، يمكنك إنشاء لقطات HTML ذات الصلة جميعها مرة واحدة، وقد يكون هذا ممكناً في وضع عدم الاتصال، ثم حفظها كمرجع مستقبلي. ويمكنك أيضًا الاستجابة إلى Googlebot من خلال رمز الحالة HTTP 304 (لم يتم التعديل).

ماذا يحدث إذا كان تطبيقي لا يستخدم أجزاء علامة التجزئة؟

ربما يجب ذلك! يمكنك زيادة سرعة تطبيقك بشكل كبير من خلال استخدام أجزاء علامة تجزئة، حيث تتم معالجة أجزاء علامة التجزئة من خلال متصفح من جانب العميل ولا تسبب تحديث الصفحة بالكامل. بالإضافة إلى ذلك، ستتيح لك تشغيل ميزة السجل في تطبيقك ("زر الرجوع بالمتصفح" غير المعروف). تتيح العديد من إطارات عمل AJAX استخدام أجزاء علامة التجزئة. على سبيل المثال، اطلع على Really Simple History أو history plugin في jQuery أو history mechanism في Google Web Toolkit أو دعم ASP.NET AJAX لـ history management.

ولكن إذا لم يكن ممكنًا تركيب التطبيق بحيث يستخدم أجزاء علامة التجزئة، يمكنك تنفيذ الاستخدام التالي لرمز مميز خاص في أجزاء علامة التجزئة (كل ما يظهر بعد علامة # في عنوان URL). يجب أن تبدأ أجزاء علامة التجزئة التي تمثل حالات الصفحة الفريدة بعلامة تعجب. على سبيل المثال، إذا كان تطبيق AJAX يحتوي على عنوان URL مثل:

www.example.com/ajax.html#mystate

فيجب أن يصبح الآن هكذا:

www.example.com/ajax.html#!mystate

عندما يستخدم الموقع النظام، سيتم اعتبار أن موقعك "يتضمن محتوى AJAX قابلاً للزحف." ويعني هذا إمكانية تعرف الزاحف على محتويات التطبيق إذا كان الموقع يوفر لقطات HTML.

هل ستؤدي هذه الطريقة إلى انتشار عناوين URL "التي تتضمن المقطع" _escaped_fragment_ ؟

تُعد بنية _escaped_fragment_ الخاصة بعناوين URL بنية مؤقتة لعنوان URL والتي يجب ألا يشاهدها المستخدم على الإطلاق. في السياقات جميعها التي تظهر للمستخدم، يجب استخدام عنوان URL (الذي يحتوي على #! بدلاً من _escaped_fragment_): في التفاعل الطبيعي للتطبيق وفي ملفات Sitemap وفي الروابط التشعبية وفي عمليات إعادة التوجيه وفي أي موقع آخر قد يشاهد فيه المستخدم عنوان URL. وللسبب ذاته، فإن نتائج البحث تفضل عناوين URL التي تتضمن علامة ! في أول جزء علامة التجزئة بدلاً من عناوين URL التي تتضمن المقطع.

هل يفتح هذا النظام الباب لإخفاء الهوية؟

يوفر الإخفاء محتوى مختلفًا للمستخدمين عن المحتوى المتوفر لمحركات البحث. يتم إجراء ذلك عادة بهدف تحسين ترتيب إحدى النتائج في نتائج البحث. لقد كان إخفاء الهوية دائمًا (وسيظل دائمًا) مشكلة ذات أهمية بالنسبة إلى محركات البحث، ومن الأهمية بمكان أن تلاحظ أن جعل تطبيقات AJAX قابلة للزحف لا يعني بأي حال من الأحوال الدعوة لتسهيل إخفاء الهوية. ولهذا السبب، يجب أن تحتوي لقطة HTML على المحتوى نفسه الذي سيشاهده المستخدم في المتصفح. إذا لم يكن الأمر كذلك، فربما يُعد ذلك إخفاءً للهوية. اطلع على هذه الإجابة للتعرف على مزيد من التفاصيل.

هل يمكنني استخدام هذا النظام للمساعدة في جعل ملفات Flash أو غيرها من ملفات الوسائط المتعددة التفاعلية أكثر قابلية للزحف؟

يفهرس محرك بحث Google العديد من أنواع ملفات الوسائط المتعددة التفاعلية، ونعمل باستمرار على تحسين الزحف والفهرسة. ومع ذلك، ربما لا يمكن لبرنامج Googlebot رؤية جميع محتويات تطبيق Flash أو الوسائط المتعددة التفاعلية الأخرى (تمامًا مثل تعذر زحفه إلى المحتوى المتغير جميعه بالموقع)، لذا يمكن أن يكون استخدام هذا النظام لتزويد Googlebot بمحتوى إضافي أمرًا مفيدًا. مرة أخرى، يجب أن تحتوي لقطة HTML على المحتوى نفسه الذي سيراه المستخدم في المتصفح. تحتفظ شركة Google بحق استبعاد المواقع من الفهرس، والتي تعتبر مواقع تعتمد أسلوب إخفاء الهوية.

ماذا إذا كان موقعي يتضمن بعض عناوين URL ذات أجزاء علامة التجزئة التي يجب عدم الزحف إليها؟

إذا كان موقعك يستخدم نظام زحف AJAX، فسيزحف زاحف Google إلى كل عنوان URL يواجهه يكون محتويًا على جزء علامة تجزئة. إذا كانت لديك عناوين URL ذات أجزاء علامة تجزئة يجب عدم الزحف إليها، فنقترح إضافة أمر بذلك من خلال وضع تعبير عادي في ملف robots.txt. على سبيل المثال، يمكنك استخدام اصطلاح في أجزاء علامة التجزئة التي لا يجب الزحف إليها، ثم استبعاد عناوين URL جميعها التي تطابقه في ملف robots.txt. لنفرض ان جميع الحالات غير القابلة للفهرسة هي من الصيغة #DONOTCRAWLmyfragment. يمكنك بعد ذلك منع Googlebot من الزحف إلى هذه الصفحات من خلال إضافة التالي إلى ملف robots.txt:

عدم السماح: /*_escaped_fragment_=DONOTCRAWL
ماذا عن الاستخدامات الحالية لـ #! في أجزاء علامة التجزئة؟

#! هو رمز مميز يستخدم بشكل غير متكرر في أجزاء علامة التجزئة الحالية، ومع ذلك، فهو محظور من خلال مواصفة عنوان URL. ماذا يحدث في حالة استخدام التطبيق لـ #! ولكن لا يريد استخدام نظام زحف AJAX الجديد؟ من بين الطرق الممكنة إضافة أمر في ملف robots.txt لتوضيح ذلك إلى الزاحف.

Disallow: /*_escaped_fragment_

الرجاء ملاحظة أن هذا يعني أنه في حالة احتواء تطبيقك على عنوان URL هذا فقط: www.example.com/index.html#!mystate، فلن يتم الزحف إلى عنوان URL هذا. وإذا كان تطبيقك يحتوي بالإضافة إلى ذلك على عنوان URL الصريح www.example.com/ajax.html، فإن عنوان URL هذا سيتم الزحف إليه.

ماذا بشأن إمكانية الوصول؟

أحد الآثار الجانبية للممارسة الحالية لتوفير محتوى ثابت لمحركات البحث هي توفير مشرفي المواقع إمكانية الوصول إلى تطبيقاتهم بشكل كبير للمستخدمين ذوي الإعاقات. ترقى هذه الاتفاقية الجديدة بإمكانية الوصول إلى مستوى جديد: فبدون تدخل يدوي، يمكن لمشرفي المواقع استخدام متصفح بلا واجهة مستخدم لإنشاء لقطات HTML، والتي تحتوي على جميع المحتويات ذات الصلة والقابلة للاستخدام من خلال برامج قراءة الشاشة. وهذا يعني أنه أصبح الآن من السهل الاحتفاظ بالمحتوى الثابت محدّثًا، حتى يتطلب الأمر عملاً يدويًا اقل. بمعنى آخر، يمتلك مشرفو المواقع الآن حافزًا أكبر لجعل تطبيقاتهم في متناول المستخدمين ذوي الإعاقات.

كيف يجب استخدام rel="canonical"؟

استخدم <link rel="canonical" href="http://example.com/ajax.html#!foo=123" /> (لا تستخدم <link rel="canonical" href="http://example.com/ajax.html?_escaped_fragment_=foo=123" />.

أي عناوين URL يجب تضمينها في ملف Sitemap؟

يجب أن يتضمن ملف Sitemap الإصدار الذي تفضل عرضه في نتائج البحث، لذا يجب أن يكون http://example.com/ajax.html#!foo=123.

كيف ستؤثر عناوين URL التي تتضمن #! في خلاصات المنتج؟

من المعتاد أن تريد المواقع عناوين URL نفسها لكل من Product Search وبحث الويب. وبوجه عام، يجب معاملة إصدار #! من عنوان URL كإصدار "أساسي" والذي يجب استخدامه في السياقات جميعها. ويُعد عنوان URL _escaped_fragment_ عنوان URL مؤقتًا يجب عدم اطلاع المستخدمين عليه إطلاقًا. لا يجب يشاهده المستخدمين على الإطلاق.

أستخدم HtmlUnit كمتصفح بلا واجهة مستخدم رسومية، ولكنه لا يعمل. لماذا؟

إذا كنت تقصد بالعبارة "لا يعمل" أن HtmlUnit لا يعرض اللقطة التي تتوقع ظهورها، فمن المحتمل أن سبب المشكلة هو أنك لم تمنحه الوقت الكافي لتنفيذ طلبات جافا سكريبت و/أو XHR. لإصلاح هذه المشكلة، حاول إجراء أي من الخطوات التالية أو جميعها:

  • استخدم NicelyResynchronizingAJAXController. سيؤدي هذا إلى انتظار HtmlUnit لأي اتصالات XHR المعلقة.
  • زد من وقت انتظار waitForBackgroundJavaScript و/أو waitForBackgroundJavaScriptStartingBefore.
من المحتمل أن يؤدي ذلك بشكل كبير إلى حل مشكلتك. وإذا لم يتم حل المشكلة، يمكنك أيضًا تجربة الأسئلة الشائعة بشأن HtmlUnit هنا: http://htmlunit.sourceforge.net/faq.html. ويتضمن HtmlUnit أيضًا منتدى للمستخدمين.

 

هل كان ذلك مفيدًا؟
كيف يمكننا تحسينها؟