ما تفحصه قبل أن تصدق أن الوكيل بناه

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

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

القياس ليس نظراً

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

كتابات

تريد هذا على موقعك؟

احجز مكالمة

المقصوص ليس فائضاً

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

البناء هو الأثر لا المصدر

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

نص لا يجده الوكيل بـgrep

البحث في المصدر عن سلسلة هو كيف يفحص الوكيل هل تغيّر النص، وفي إطار مكوّنات يفشل بانتظام. فجملة مقسومة بين تعبيرَي JSX، أو تسمية مبنية من حرفية قالب، أو سلسلة في ملف ترجمة مفتاحها غير ذي صلة، كلها تعيد لا تطابق والنص ظاهر في الصفحة. والوكيل الذي يبحث فلا يجد ويستنتج غياب النص سيضيف بعدها نسخة ثانية منه بكل سرور.

الأصول المستبدلة في مكانها

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

اليمين إلى اليسار تخطيط لا ترجمة

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

كيف تبدو حلقة تحقق صالحة

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

وتغليف هذا شيئاً تشغّله لا شيئاً تتذكره هو ما وُجدت له المهارات، والنصف الخاص بالبحث من القائمة في قائمة فحص السيو لموقع بناه وكيل.

حركة متوقفة مؤقتاً لا مكسورة

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

اقرأ الاستجابة لا رمز الحالة

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

الوصولية مشكلة تحقق أيضاً

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

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

دع الأداة تذكر حدودها

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

من حيث تأتي الإجابة المرجعية

كل فحص أعلاه بقدر التعريف الذي يسنده، وفي القابل للقياس منها يكون التعريف منشوراً. وسرعة الصفحة أوضح حالة: فحدود Core Web Vitals ثابتة وتُقاس على الزيارات الحقيقية، وLighthouse يقول صريحاً إنه أداة مخبر، وPageSpeed Insights يعرض الميدان والمخبر جنباً إلى جنب لتراهما يختلفان. وفي أي شيء تريد تأكيده عن الخَرْج المعروض لا عن المصدر، يمنحك مُشغّل متصفّح حقيقي مثل Playwright فحصاً يمكنك إيداعه، وهذا هو الفرق بين تحقّق وانطباع.

والمقالان المرافقان يمضيان بهذا في اتّجاهين متقابلين. الـhooks التي تُحكِم مستودع موقع تحوّل هذه الفحوص إلى ما يعمل بلا تذكّر، وCore Web Vitals في موقع بناه وكيل يغطّي صنف العيوب الوحيد الذي لا يراه أي فحص في هذه الصفحة، لأنه غير مرئي بعد أن تستقرّ الصفحة.

لنبنِ الموقع الذي يستحقه عملك.

أرسل ما لديك الآن وإلى أين تريد الوصول. ستحصل على إجابة صريحة حول النطاق والجدول الزمني والتكلفة، عادة خلال ساعة.

نعمل عبر أمريكا الشمالية وأوروبا والشرق الأوسط.