بناء أداة لمراقبة ترتيب الكلمات المفتاحية يومياً بدون أدوات مدفوعة

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

مقدمة

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

أفضل نقطة انطلاق هي استخدام بيانات Google Search Console API لأنها تمثل الانطباعات والنقرات ومتوسط الموضع من Google نفسه. وإذا كنت قد قرأت مقال ربط Google Search Console API لاستخراج آلاف الكلمات المفتاحية فستلاحظ أن مشروع اليوم هو امتداد منطقي يحول الاستخراج اليدوي إلى مراقبة آلية يومية.

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

لماذا هذه المقاربة أفضل من الاعتماد على أدوات مدفوعة بشكل كامل؟

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

هذه المقاربة تنسجم أيضاً مع فلسفة منطق البرمجة المعتمد على المهام (Task-Oriented Programming)، حيث يتم تقسيم النظام إلى خطوات واضحة: سحب البيانات، تنظيفها، تخزينها، ثم إرسال تنبيه أو تقرير.

المكونات الأساسية للأداة

1) مصدر البيانات

المصدر الأكثر أماناً واستدامة هو Google Search Console API. ستحتاج إلى تفعيل الوصول وإنشاء بيانات الاعتماد. إن لم تكن أتممت هذه الخطوة، راجع التعامل مع Google Cloud Console وإنشاء مفاتيح الـ API ومفهوم الـ API: كيف نطلب البيانات من Google وOpenAI.

2) بيئة التنفيذ

يمكن تشغيل السكربت عبر جهازك المحلي، أو على خادم بسيط، أو مجدول سحابي. لتجهيز البيئة البرمجية راجع تهيئة بيئة العمل: تثبيت Python والمكتبات الأساسية. المهم أن تتوفر لديك مكتبات مثل pandas وgoogleapiclient.

3) التخزين والعرض

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

المنطق العملي لتتبع الترتيب يومياً

بدلاً من البحث عن ترتيب كلمة من خلال محاكاة نتائج البحث بشكل عشوائي، نعتمد على averagePosition القادم من Search Console. صحيح أنه ليس نسخة حرفية من ترتيب يدوي ثابت، لكنه أدق للأعمال الحقيقية لأنه يعكس الأداء الفعلي عبر الانطباعات.

  1. تحديد الموقع siteUrl.
  2. اختيار تاريخ اليوم السابق لأن بيانات GSC لا تكون فورية تماماً.
  3. سحب الكلمات مع أبعاد query وpage.
  4. تنظيف البيانات واستبعاد الكلمات ذات الانطباعات الضعيفة جداً.
  5. تسجيل لقطة يومية مع التاريخ لمقارنة التغير عبر الزمن.

نصيحة هندسية مهمة: لا تعامل “متوسط الموضع” على أنه رقم مطلق نهائي، بل كإشارة اتجاهية. القيمة الحقيقية للأداة تظهر عندما تقارن التغير اليومي أو الأسبوعي للكلمة نفسها، وليس عندما تفسر كل رقم بشكل منفصل.

بناء السكربت الأساسي باستخدام Python

في المثال التالي سنبني سكربتاً يسحب بيانات يوم واحد، ثم يحفظها في ملف CSV. احرص على حفظ بيانات الاعتماد بشكل آمن، وراجع مقال الحماية والأمان: كيف تخفي مفاتيحك السرية في الكود؟ قبل وضع أي مفاتيح في بيئة الإنتاج.

from datetime import date, timedelta
import pandas as pd
from google.oauth2 import service_account
from googleapiclient.discovery import build

SCOPES = ["https://www.googleapis.com/auth/webmasters.readonly"]
SERVICE_ACCOUNT_FILE = "service-account.json"
SITE_URL = "https://example.com/"

def get_gsc_service():
    credentials = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE,
        scopes=SCOPES
    )
    return build("searchconsole", "v1", credentials=credentials)

def fetch_keyword_data(service, site_url, target_date):
    request = {
        "startDate": target_date,
        "endDate": target_date,
        "dimensions": ["query", "page"],
        "rowLimit": 25000
    }

    response = service.searchanalytics().query(
        siteUrl=site_url,
        body=request
    ).execute()

    rows = response.get("rows", [])
    data = []

    for row in rows:
        keys = row.get("keys", ["", ""])
        data.append({
            "date": target_date,
            "query": keys[0],
            "page": keys[1],
            "clicks": row.get("clicks", 0),
            "impressions": row.get("impressions", 0),
            "ctr": row.get("ctr", 0),
            "position": row.get("position", 0)
        })

    return pd.DataFrame(data)

def main():
    service = get_gsc_service()
    target_date = str(date.today() - timedelta(days=3))
    df = fetch_keyword_data(service, SITE_URL, target_date)

    if not df.empty:
        df = df[df["impressions"] >= 5]
        output_file = f"keyword_rank_snapshot_{target_date}.csv"
        df.to_csv(output_file, index=False, encoding="utf-8-sig")
        print(f"Saved {len(df)} rows to {output_file}")
    else:
        print("No data found for the selected date.")

if __name__ == "__main__":
    main()

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

كيف نحول السكربت إلى أداة مراقبة يومية حقيقية؟

إضافة أرشيف تراكمي

بدلاً من إنشاء ملف منفصل كل مرة، اجمع النتائج داخل جدول مركزي يحتوي على الأعمدة: date وquery وpage وposition. هذا يسمح ببناء رسوم بيانية، واكتشاف التراجع المفاجئ، وتحليل أثر تحديثات المحتوى.

إضافة المقارنة اليومية

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

إضافة الفلاتر الذكية

ليس كل تغير يستحق التنبيه. الأفضل إنشاء شروط مثل:

  • الكلمة حققت أكثر من 20 impressions.
  • التراجع أكبر من 3 positions.
  • الصفحة من الصفحات التجارية أو ذات الأولوية.

التشغيل التلقائي والجدولة

لكي تعمل الأداة يومياً بدون تدخل يدوي، استخدم cron على Linux أو Task Scheduler على Windows. ويمكنك أيضاً إنشاء واجهة خفيفة عبر Google Apps Script إذا كنت تريد سهولة أكبر في الربط مع الجداول، خصوصاً بعد قراءة مقدمة في Google Apps Script لغير المبرمجين.

أفضل وقت للتشغيل هو صباحاً مع سحب بيانات اليوم السابق أو قبل السابق بيومين إلى ثلاثة أيام، لأن بعض خصائص Search Console تتأخر في الاستقرار، خصوصاً في المواقع ذات التذبذب العالي.

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

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

خاتمة

إنشاء أداة مجانية لمراقبة ترتيب الكلمات المفتاحية يومياً ليس مجرد بديل اقتصادي عن الأدوات المدفوعة، بل خطوة ناضجة نحو امتلاك بياناتك وبناء نظام سيو قائم على الأتمتة والتحليل. عندما تجمع بين Google Search Console API وPython وGoogle Sheets، فأنت لا تبني تقريراً فقط، بل تبني بنية تشغيلية قابلة للتوسع.

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

3 comments

اترك تعليقاً

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