ماذا سنبني اليوم؟
في مشروعنا الأول، سنقوم ببناء أداة بسيطة لكنها قوية باستخدام Google Apps Script لجلب أكواد حالة HTTP (Status Codes) لمجموعة من الروابط مباشرةً إلى جدول بيانات Google Sheet. هذه الأداة مفيدة جداً لخبراء الـ SEO والمسوقين الرقميين لتدقيق الروابط بسرعة، تحديد الروابط المعطلة (404)، أو التحقق من عمليات إعادة التوجيه (301/302).
المتطلبات الأساسية
- حساب Google (للوصول إلى Google Sheets و Google Apps Script).
- متصفح ويب.
- لا حاجة لخبرة برمجية مسبقة، فقط الرغبة في التعلم!
ملاحظة تقنية: Google Apps Script هو منصة تطوير تعتمد على JavaScript وتتيح لك أتمتة المهام عبر منتجات Google مثل Sheets وDocs وGmail. إنه مثالي لمثل هذه المشاريع التي تتطلب التفاعل المباشر مع جداول البيانات.
الخطوات العملية
إنشاء جدول بيانات Google Sheet جديد
افتح متصفحك وانتقل إلى sheets.new لإنشاء جدول بيانات جديد. سمِ الورقة الأولى (Sheet1) "الروابط".
في العمود A، ابدأ بإدخال الروابط التي ترغب في فحصها، رابط واحد لكل صف. مثلاً:
https://www.example.comhttps://www.google.com/nonexistent-pagehttps://www.wikipedia.org
فتح محرر النصوص البرمجية (Script Editor)
من قائمة جدول البيانات، اذهب إلى Extensions (الإضافات) > Apps Script (برمجة التطبيقات). سيفتح هذا علامة تبويب جديدة في متصفحك تحتوي على محرر نصوص برمجية.
كتابة الكود
في محرر النصوص البرمجية، ستجد ملفاً باسم
Code.gs. امسح أي كود موجود بداخله والصق الكود الذي سنقدمه لك. سنشرح الكود خطوة بخطوة.
الكود الكامل لجلب حالة الروابط
هذا هو الكود الذي ستقوم بلصقه في ملف Code.gs.
function getUrlStatusCodes() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("الروابط"); // تأكد أن اسم الورقة هو "الروابط"
if (!sheet) {
Logger.log("لم يتم العثور على ورقة باسم 'الروابط'. يرجى التأكد من اسم الورقة.");
Browser.msgBox("خطأ", "لم يتم العثور على ورقة باسم 'الروابط'. يرجى التأكد من اسم الورقة.", Browser.Buttons.OK);
return;
}
var lastRow = sheet.getLastRow();
var urlsRange = sheet.getRange("A2:A" + lastRow); // نفترض أن الروابط تبدأ من الصف الثاني (A2) لتجنب رأس العمود
var urls = urlsRange.getValues();
var statusCodes = [];
for (var i = 0; i < urls.length; i++) {
var url = urls[i][0]; // الرابط موجود في العمود الأول من كل صف
if (url && url.toString().trim() !== "") { // تحقق من أن الرابط ليس فارغاً
try {
var response = UrlFetchApp.fetch(url.toString().trim(), {
muteHttpExceptions: true, // لا ترمي استثناء على أخطاء HTTP (مثل 404)
followRedirects: false // لا تتبع عمليات إعادة التوجيه
});
var code = response.getResponseCode();
statusCodes.push([code]); // أضف الكود إلى مصفوفة النتائج
} catch (e) {
Logger.log("خطأ في جلب الرابط " + url + ": " + e.toString());
statusCodes.push(["خطأ: " + e.toString()]); // سجل الخطأ بدلاً من الكود
}
} else {
statusCodes.push([""]); // إذا كان الرابط فارغاً، اترك الخلية فارغة
}
}
// اكتب أكواد الحالة في العمود B، بدءاً من الصف الثاني (B2)
if (statusCodes.length > 0) {
sheet.getRange(2, 2, statusCodes.length, 1).setValues(statusCodes);
}
Browser.msgBox("اكتملت العملية", "تم جلب أكواد حالة الروابط بنجاح!", Browser.Buttons.OK);
}
شرح الكود
function getUrlStatusCodes() { ... }هذه هي الدالة الرئيسية التي تحتوي على كل منطق الكود. عند تشغيلها، ستقوم بتنفيذ جميع الخطوات بداخلها.
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("الروابط");يحصل هذا السطر على ورقة العمل النشطة (التي فتحت منها محرر النصوص البرمجية) ثم يحدد الورقة التي تحمل اسم "الروابط". تأكد من أن اسم ورقتك مطابق.
var lastRow = sheet.getLastRow();يحدد هذا السطر آخر صف يحتوي على بيانات في الورقة، مما يضمن أننا نلتقط جميع الروابط.
var urlsRange = sheet.getRange("A2:A" + lastRow);وvar urls = urlsRange.getValues();نقوم هنا بتحديد النطاق الذي يحتوي على الروابط (من A2 حتى آخر صف في العمود A) ثم نجلب جميع القيم من هذا النطاق في مصفوفة.
حلقة التكرار
for (var i = 0; i < urls.length; i++) { ... }تتكرر هذه الحلقة على كل رابط في مصفوفة
urls.UrlFetchApp.fetch(url.toString().trim(), { muteHttpExceptions: true, followRedirects: false });هذا هو الجزء الأهم. تستخدم خدمة
UrlFetchAppلإجراء طلب HTTP إلى الرابط.muteHttpExceptions: true: يمنع الكود من التوقف عند مواجهة أخطاء HTTP (مثل 404 أو 500)، مما يسمح لنا بالتقاط رمز الحالة بدلاً من الخطأ.followRedirects: false: يمنع الخدمة من اتباع عمليات إعادة التوجيه (مثل 301 أو 302). هذا مهم إذا كنت تريد معرفة رمز الحالة الأصلي للرابط قبل إعادة التوجيه.
var code = response.getResponseCode();بعد جلب الاستجابة، نحصل على رمز حالة HTTP (مثل 200، 404، 301).
statusCodes.push([code]);نضيف رمز الحالة الذي تم الحصول عليه إلى مصفوفة
statusCodes.sheet.getRange(2, 2, statusCodes.length, 1).setValues(statusCodes);بعد الانتهاء من فحص جميع الروابط، يقوم هذا السطر بكتابة جميع أكواد الحالة المجمعة مرة واحدة في العمود B، بدءاً من الصف الثاني (B2).
Browser.msgBox("اكتملت العملية", "تم جلب أكواد حالة الروابط بنجاح!", Browser.Buttons.OK);يعرض مربع رسالة يؤكد اكتمال العملية.
نصيحة SEO: أكواد الحالة 200 تعني "موافق" (الرابط يعمل). أكواد 3xx تعني "إعادة توجيه" (الرابط ينقل إلى مكان آخر). أكواد 4xx تعني "خطأ العميل" (مثل 404 "غير موجود"). وأكواد 5xx تعني "خطأ الخادم". مراقبة هذه الأكواد ضرورية لصحة موقعك.
كيفية التشغيل
حفظ الكود: في محرر النصوص البرمجية، انقر على أيقونة الحفظ (شكل قرص مرن) أو اضغط
Ctrl + S(أوCmd + Sعلى Mac). قد يطلب منك تسمية المشروع، سمّه "مدقق حالة الروابط" مثلاً.اختيار الدالة: من القائمة المنسدلة أعلى محرر الكود (التي قد تظهر
(No function)أوgetUrlStatusCodes)، تأكد من تحديدgetUrlStatusCodes.تشغيل الكود: انقر على أيقونة التشغيل (شكل المثلث) الموجودة بجانب القائمة المنسدلة.
مراجعة الأذونات: في المرة الأولى التي تقوم فيها بتشغيل الكود، سيطلب منك Google مراجعة الأذونات.
- انقر على "مراجعة الأذونات".
- اختر حساب Google الخاص بك.
- سترى تحذيراً بأن التطبيق "غير آمن" أو "غير موثق" (لأنه تطبيقك الخاص). انقر على "Advanced" (خيارات متقدمة) ثم "Go to مدقق حالة الروابط (unsafe)" (الانتقال إلى مدقق حالة الروابط (غير آمن)).
- انقر على "Allow" (سماح) لمنح الكود الأذونات اللازمة (مثل قراءة وكتابة جداول البيانات والاتصال بخدمات خارجية).
بعد منح الأذونات، سيعمل الكود وستظهر النتائج في جدول البيانات.
النتيجة النهائية المتوقعة
بعد تشغيل الكود بنجاح، ستعود إلى جدول بيانات Google Sheet الخاص بك. ستلاحظ أن العمود B (المجاور للعمود A الذي يحتوي على الروابط) قد امتلأ بأكواد حالة HTTP المقابلة لكل رابط. على سبيل المثال:
| الرابط (العمود A) | حالة الرابط (العمود B) |
|---|---|
https://www.example.com | 200 |
https://www.google.com/nonexistent-page | 404 |
https://www.wikipedia.org | 200 |
https://www.old-domain.com/page | 301 |
إذا كان هناك أي خطأ في جلب رابط معين، فستظهر رسالة خطأ في العمود B بدلاً من رمز الحالة.