أول مشروع: كود بسيط لجلب حالة أي رابط (Status Code) إلى Sheet

دقائق القراءة: 5

أول مشروع عملي لفهم أتمتة فحص الروابط

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

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

لماذا فحص Status Code مهم في السيو والأتمتة؟

عندما يزور محرك البحث أو المستخدم أي صفحة، فإن الخادم يعيد كود حالة يحدد نتيجة الطلب. الكود 200 يعني نجاح الوصول، بينما 404 يدل على صفحة مفقودة، و301 أو 302 يشيران إلى إعادة توجيه.

من منظور احترافي، تتبع هذه القيم يساعدك على:

  • اكتشاف الصفحات المعطلة قبل أن تضر تجربة المستخدم.
  • تحليل سلوك التحويلات Redirects داخل الموقع.
  • إنشاء تقارير دورية لفريق المحتوى أو التطوير.
  • تغذية أنظمة أوسع لاحقاً مثل تتبع Canonical أو فحص الخرائط Sitemaps.

لماذا نستخدم Google Apps Script مع Google Sheets؟

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

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

هيكل الجدول المقترح

أنشئ ورقة عمل بسيطة تحتوي على الأعمدة التالية:

  1. العمود A: الرابط.
  2. العمود B: كود الحالة.
  3. العمود C: ملاحظة أو رسالة الخطأ.

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

الكود الأساسي لجلب حالة الرابط

في Apps Script اللغة الفعلية هي JavaScript، لكن بما أن كثيراً من محترفي الأتمتة يفضلون قراءة المنطق بصيغة بايثونية تعليمية، فإليك أولاً نسخة مفاهيمية بلغة Python توضح طريقة العمل:

import requests

def get_status_code(url):
    try:
        response = requests.get(url, timeout=10, allow_redirects=True)
        return response.status_code, "OK"
    except requests.exceptions.RequestException as e:
        return None, str(e)

أما النسخة العملية التي ستضعها داخل محرر Google Apps Script فهي كالتالي:

function checkStatusCodes() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lastRow = sheet.getLastRow();

  for (var i = 2; i <= lastRow; i++) {
    var url = sheet.getRange(i, 1).getValue();

    if (!url) {
      sheet.getRange(i, 2).setValue("");
      sheet.getRange(i, 3).setValue("No URL");
      continue;
    }

    try {
      var response = UrlFetchApp.fetch(url, {
        muteHttpExceptions: true,
        followRedirects: true
      });

      var statusCode = response.getResponseCode();
      sheet.getRange(i, 2).setValue(statusCode);
      sheet.getRange(i, 3).setValue("OK");
    } catch (error) {
      sheet.getRange(i, 2).setValue("");
      sheet.getRange(i, 3).setValue(error.message);
    }
  }
}

شرح منطق الكود خطوة بخطوة

1) قراءة الصفوف من الجدول

الدالة getLastRow() تحدد آخر صف يحتوي على بيانات. بعد ذلك نبدأ من الصف الثاني لأن الصف الأول مخصص عادة للعناوين.

2) التقاط الرابط من العمود الأول

نستخدم getRange(i, 1).getValue() لقراءة الرابط. إذا كانت الخلية فارغة، نضع ملاحظة واضحة بدلاً من محاولة إرسال طلب غير صالح.

3) إرسال الطلب عبر UrlFetchApp.fetch()

هذا هو قلب المشروع. الخيار muteHttpExceptions: true مهم جداً لأنه يمنع السكربت من التوقف عند الروابط التي تعيد أكواد خطأ مثل 404. أما followRedirects: true فيجعل السكربت يتبع التحويلات تلقائياً.

4) كتابة النتيجة في الجدول

بعد استلام الرد، نستخدم getResponseCode() لالتقاط الحالة، ثم نكتبها في العمود الثاني. هذا يجعل الجدول أداة تشخيص فورية وسهلة التصفية والتحليل.

أفضل تحسينات احترافية على هذا المشروع

بعد تشغيل النسخة الأساسية، يمكنك تطويرها بسرعة إلى أداة أكثر نضجاً. هذه أبرز التحسينات العملية:

  • إضافة عمود لتسجيل الوقت باستخدام new Date().
  • تمييز الأكواد بالألوان عبر Conditional Formatting.
  • إنشاء Trigger يومي لتشغيل الفحص تلقائياً.
  • تقييد عدد الصفوف في كل تشغيل لتجنب حدود التنفيذ في Apps Script.

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

أخطاء شائعة يجب الانتباه لها

أشهر خطأ يقع فيه المبتدئون هو الاعتقاد أن كل رابط غير راجع 200 يعني خللاً كارثياً. عملياً، قد تكون بعض التحويلات مقصودة، وقد تمنع بعض الخوادم الطلبات الآلية أو تتطلب User-Agent خاصاً.

كما أن بعض المواقع قد تعيد صفحة خطأ فعلية لكن بكود 200، لذلك فحص Status Code هو طبقة أولى ممتازة، لكنه ليس نهاية سلسلة التدقيق التقني.

كيف يرتبط هذا المشروع بمستوى أتمتة أعلى؟

هذا المثال الصغير يعكس بوضوح مبدأ منطق البرمجة المعتمد على المهام (Task-Oriented Programming): مهمة واحدة واضحة، مدخلات معروفة، ومخرجات قابلة للقياس. وعندما تتقن هذا النموذج، يصبح من السهل إضافة مراحل أخرى مثل قراءة بيانات JSON من خدمات خارجية، وهو ما يرتبط بما تم شرحه في أساسيات التعامل مع ملفات JSON (لغة التفاهم بين الأنظمة) ومفهوم الـ API: كيف نطلب البيانات من Google وOpenAI.

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

خاتمة

إذا أردت مشروعاً عملياً سريعاً يجمع بين الأتمتة والسيو والتحليل التقني، فإن جلب Status Code إلى Sheet هو أفضل نقطة انطلاق. الكود بسيط، لكن أثره التشغيلي كبير، لأنه يمنحك رؤية سريعة عن سلامة الروابط وقابلية الموقع للوصول والفهرسة. ومع كل تحسين تضيفه لاحقاً، ستنتقل من مشروع تعليمي صغير إلى أداة تشغيل حقيقية يعتمد عليها فريقك يومياً.

4 comments

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *