اختبار الروابط والتنقل

اختبار التنقل (Navigation testing) يتحقق من أن الناس يستطيعون التنقل في الموقع والوصول إلى حيث يتوقعون: الروابط تقود إلى المكان الصحيح، والقوائم ومسار التنقل (Breadcrumb) تُظهر أين يقف المستخدم، وزر الرجوع (Back) يعيده إلى العرض السابق، وعنوان URL الملصوق في علامة تبويب جديدة يفتح الصفحة نفسها، والعنوان المكتوب خطأً ينتهي بصفحة «غير موجودة» مفيدة.

ففي صفحة منتج مثلاً، يجب أن ينقلك رابط «التوصيل» إلى قسم التوصيل، وأن يعيدك زر الرجوع إلى الصفحة ⁦2⁩ من النتائج مع بقاء عوامل التصفية.

لماذا يهم

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

والروابط تتعطل أيضاً دون أن يعدّل أحد الصفحة: يُحذف منتج، أو تُعاد تسمية قسم. لذلك فالتنقل خطر انحدار (Regression) في كل إصدار، وعيوبه سهلة الإبلاغ: صفحة واحدة، ورابط واحد، ووجهة خاطئة واحدة.

مثال تطبيقي: فئة أُعيدت تسميتها في إصدار

ملاحظة الإصدار: «تصبح فئة الهواتف (Phones) فئة الجوالات (Mobiles). تنتقل العناوين من /phones/... إلى /mobiles/...، ويُعاد توجيه العناوين القديمة توجيهاً دائماً». وهذه فحوص المختبِر؛ وقد فشلت الحالة NAV-03 على Staging كما يسجّل تقرير الخطأ.

  • NAV-01: بند القائمة «الجوالات» يفتح /mobiles ويكون مميَّزاً فيها.
  • NAV-02: /phones ← 301 ← /mobiles ← 200، في قفزة واحدة.
  • NAV-03: /phones/nova-12 ← 301 ← /mobiles/nova-12، أي المنتج نفسه لا الفئة.
  • NAV-04: /phones?page=2 ← الصفحة ⁦2⁩ من الجوالات.
  • NAV-05: مسار التنقل في صفحة Nova 12 هو «الرئيسية › الجوالات › Nova 12»، وروابطه تعمل.
  • NAV-06: صفِّ بحثاً، وانتقل إلى الصفحة ⁦2⁩، وافتح منتجاً، ثم اضغط زر الرجوع ← الصفحة ⁦2⁩ مع بقاء عامل التصفية.
  • NAV-07: العنوان /mobiles/nova-12 في نافذة خاصة يفتح المنتج، و/mobiles/no-such-phone يعيد 404.
Title:    عناوين المنتجات القديمة يُعاد توجيهها إلى فئة الجوالات بدلاً من المنتج
URL:      https://staging.shop.example.com/phones/nova-12
Build:    web 3.8.0 on staging
Actual:   301 -> /mobiles -> 200 (صفحة الفئة)
Expected: 301 -> /mobiles/nova-12 -> 200 (صفحة المنتج Nova 12)
Impact:   الإشارات المرجعية والروابط المشارَكة ونتائج البحث لكل منتج

أخطاء شائعة

  • التأكد من أن الرابط لا يعيد خطأً، دون التحقق من أنه يفتح الصفحة التي يعد بها نصه.
  • الثقة بالرمز 200: فصفحة Soft 404 تنجح في كل فحص لرمز الحالة.
  • اختبار التنقل بالنقر من الصفحة الرئيسية فقط، دون لصق عنوان URL أو إعادة التحميل أو الضغط على زر الرجوع.
  • افتراض أن الروابط داخل الصفحة تعمل لأن الصفحة تُحمَّل؛ فالمتصفح وحده يُظهر إن كان #section يجد وجهته.
  • الإبلاغ عن «رابط معطّل» دون ذكر صفحته ونصه وقيمة href ورمز الحالة.
  • فحص الروابط مرة واحدة، مع أن المحتوى المحذوف والمواقع الخارجية تعطّلها لاحقاً.

من منظور ضمان الجودة

تبدأ فحوص التنقل حين تضيف قصة مستخدم صفحة أو تنقلها: اسأل أين تظهر في القوائم، وما عنوان URL الخاص بها، وهل يجب أن يُعاد توجيه عنوان قديم وإلى أين، وما الذي يربط بها. فتغيير العنوان دون خطة لإعادة التوجيه فجوة في المتطلبات؛ اطرحها قبل الإصدار.

احتفظ بقائمة فحص قصيرة للتنقل في اختبار الانحدار (القوائم، ومسار التنقل، والرجوع من النتائج، ورابط عميق دون تسجيل دخول، وصفحة ⁦404⁩)، واترك مئات الروابط لفحص آلي. وأبلغ عن الرابط المعطّل مع صفحته المصدر ونصه وقيمة href ورمز الحالة والعنوان النهائي، ومع قائمة القفزات في إعادة التوجيه.

تمرين عملي

خطّط اختبارات التنقل لمركز مساعدة نُقل

المطلوب

تنقل شركة مركز المساعدة من /support/... إلى /help/...، وتضيف مسار تنقل وبنداً في القائمة باسم «المساعدة». تقول ملاحظة الإصدار: «يُعاد توجيه عناوين الدعم القديمة إلى الجديدة. وفي كل مقالة جدول محتويات يربط بأقسامها». اكتب ثمانية فحوص للتنقل على الأقل مع نتائجها المتوقعة.

ثم اقرأ تتبع Staging أدناه: أيّ فحوصك يجيب عنها، وماذا ستُبلغ؟

المادة
Link on page:  https://example.com/support/returns#refund-time

GET https://example.com/support/returns
    302 Found      Location: https://example.com/help
GET https://example.com/help
    200 OK         page title: "Help centre"
الخطوات
  1. اكتب روابط القوائم ومسار التنقل والمحتوى التي يمسّها التغيير.
  2. أضف فحوص إعادة التوجيه للعناوين القديمة وسلاسل الاستعلام والأجزاء (Fragments).
  3. أضف فحوصاً للرجوع ولرابط عميق ولصفحة ⁦404⁩.
  4. قارن التتبع بنتائجك المتوقعة.
إظهار الإجابة النموذجية
الإجابة النموذجية

فحوص على سبيل المثال: بند «المساعدة» يفتح /help ويكون مميَّزاً فيها؛ ومسار التنقل في المقالة «الرئيسية › المساعدة › الإرجاع» وروابطه تعمل؛ وروابط جدول المحتويات تنقل إلى أقسامها؛ والعناوين القديمة يُعاد توجيهها في قفزة واحدة إلى المقالة المطابقة وتحتفظ بالجزء #section؛ وعنوان بحث قديم مثل /support/search?q=refund يحتفظ بسلسلة الاستعلام؛ وروابط المقالات تشير مباشرةً إلى /help/...؛ وعنوان المقالة يفتحها في نافذة خاصة؛ والرجوع يعيد إلى نتائج البحث؛ و/help/no-such-article يعيد 404.

التتبع يحقق توقعاً واحداً، هو القفزة الواحدة، ويُخلّ بثلاثة: 302 Found إعادة توجيه مؤقتة لانتقال دائم (المتوقع 301 أو 308؛ أكّد ذلك مع الفريق)؛ وينتهي في الصفحة الرئيسية للمساعدة لا في /help/returns؛ ولأن المتصفح يحتفظ بالجزء حين لا يحمل Location جزءاً (RFC 9110)، يصل المستخدم إلى /help#refund-time، وهو قسم غير موجود هناك.

التقرير: «عناوين مقالات الدعم القديمة يُعاد توجيهها مؤقتاً إلى الصفحة الرئيسية للمساعدة بدلاً من المقالة»، مع الرابط المصدر والقفزات، والمتوقع 301 ← /help/returns ← 200، والأثر على الإشارات المرجعية ونتائج البحث. والتتبع يجيب عن فحوص إعادة التوجيه وحدها؛ أما البقية فتحتاج إلى المتصفح.

أسئلة شائعة

ما الفرق بين الرابط المعطّل والرابط المعطّل داخل الصفحة؟

الرابط المعطّل يشير إلى عنوان URL لا يستطيع الخادم تقديمه، ويُظهر ذلك رمز الحالة (404 أو 410). أما الرابط المعطّل داخل الصفحة فيشير إلى #fragment لا يقابله id في الصفحة: تُحمَّل الصفحة بالرمز 200 ولا يحدث تمرير فحسب، فلا تكتشفه إلا في المتصفح.

هل إعادة التوجيه عيب؟

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

هل يجب أن يُفتح كل رابط في علامة تبويب جديدة؟

لا. الافتراضي، أي علامة التبويب نفسها، يُبقي زر الرجوع عاملاً ويترك للمستخدم أن يفتح علامة تبويب جديدة بنفسه. وعادةً تخصص الفرق علامات التبويب الجديدة لحالات مثل المواقع الخارجية أو مستند يُفتح أثناء ملء نموذج، ويجب أن يذكر هذا الرابط أنه يفتح علامة تبويب جديدة. افحص وفق قاعدة الفريق لا وفق تفضيلك.

هل يمكن أتمتة فحص الروابط؟

نعم، ويجب ذلك في المواقع الكبيرة: فأداة زحف (Crawler) أو سكربت اختبار يستطيع طلب كل رابط والإبلاغ عن رموز الحالة. لكنه لا يحكم على مطابقة الوجهة لنص الرابط، ولا يكتشف صفحات Soft 404 بشكل موثوق، ولا يختبر الرجوع والروابط العميقة في سياقها، فأبقِ جولة يدوية قصيرة لهذه.

المراجع

  • RFC 9110: HTTP SemanticsIETF · 2022معاني أساليب HTTP وحقول الترويسات ورموز الحالة والتفاوض على المحتوى، بغضّ النظر عن إصدار البروتوكول.
  • HTML Living StandardWHATWGلغة HTML، بما فيها مراجع المحارف المسماة (الكيانات) وقواعد التحليل التي تتبعها المتصفحات.
  • Web Content Accessibility Guidelines (WCAG) 2.2W3C · 2024توصية W3C التي تحدد معايير النجاح القابلة للاختبار لإتاحة محتوى الويب، مرتّبةً تحت أربعة مبادئ وثلاثة مستويات مطابقة (A وAA وAAA).
  • Accessible Rich Internet Applications (WAI-ARIA) 1.2W3C · 2023توصية W3C التي تعرّف أدوار ARIA وحالاتها وخصائصها — أي كيف تُعلن عناصر الواجهة المخصّصة معناها للتقنيات المساعدة.

تدرّب بأدوات متقن

تتبّع سلاسل إعادة التوجيه (301/302/307/308) وعرض كل قفزة وحالتها وعنوان URL النهائي.

الويب

ابحث عن أي رمز حالة HTTP لمعرفة معناه ومرجعه في RFC ومتى يُستخدم.

الويب

تفكيك عنوان URL إلى البروتوكول والمضيف والمنفذ والمسار ومعاملات الاستعلام والجزء (fragment) وبيانات الاعتماد.

الويب

فكّ ترميز عناوين URL وسلاسل الاستعلام المرمَّزة بالنسبة المئوية وإعادتها إلى نص مقروء.

الترميز

تحليل سلاسل الاستعلام وبناؤها، بما في ذلك المفاتيح المكرّرة وترميز المصفوفات بالأقواس المربعة.

الويب

للتعمّق أكثر

تقدّمك في هذا الموضوع

جزء من مسار تعلم ضمان الجودة