كود لتصنيف الكلمات المفتاحية حسب نية البحث (Search Intent)

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

كود لتصنيف الكلمات المفتاحية حسب نية البحث Search Intent

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

الهدف من هذا المقال هو بناء سكربت عملي بلغة Python لتصنيف الكلمات المفتاحية تلقائياً إلى فئات نية بحث واضحة. هذا النوع من الأتمتة يختصر ساعات طويلة من العمل اليدوي، ويمنح فرق المحتوى والسيو إطاراً موضوعياً لاتخاذ القرار، خصوصاً عند دمجه مع استخدام مكتبة Pandas لتحليل بيانات الـ SEO الضخمة.

لماذا تصنيف نية البحث مهم في الأتمتة الحديثة؟

الكلمات المفتاحية لا تُقرأ فقط من حيث حجم البحث أو صعوبة المنافسة، بل من حيث الغرض الحقيقي وراء الاستعلام. كلمة مثل best seo tools تختلف جذرياً عن buy seo tool subscription رغم تشابه المجال.

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

أشهر فئات نية البحث

  • معلوماتية: المستخدم يريد شرحاً أو معرفة أو دليلاً.
  • ملاحية: المستخدم يريد الوصول إلى موقع أو علامة أو صفحة محددة.
  • تجارية: المستخدم في مرحلة مقارنة ومراجعة قبل الشراء.
  • معاملاتية: المستخدم قريب من تنفيذ عملية شراء أو تسجيل أو تحميل.

المنهجية البرمجية لتصنيف الكلمات المفتاحية

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

السكربت التالي يقرأ ملف CSV يحتوي على عمود للكلمات المفتاحية، ثم يطبّق قواعد تصنيف مرنة. إذا لم تكن جهزت البيئة بعد، فراجع تهيئة بيئة العمل: تثبيت Python والمكتبات الأساسية، كما يفيدك فهم بنية البيانات من مقال أساسيات التعامل مع ملفات JSON (لغة التفاهم بين الأنظمة) عند التوسع لاحقاً نحو الـ APIs.

فكرة التصنيف في هذا السكربت

  1. تنظيف الكلمة المفتاحية وتحويلها إلى حروف صغيرة.
  2. مطابقة أنماط دلالية مرتبطة بكل نية.
  3. إرجاع الفئة الأعلى احتمالاً.
  4. توليد ملف نهائي يمكن استخدامه في التخطيط التحريري أو لوحات المتابعة.

كود بايثون لتصنيف الكلمات المفتاحية حسب نية البحث

import pandas as pd
import re

INFORMATIONAL_PATTERNS = [
    r"\bhow\b", r"\bwhat\b", r"\bwhy\b", r"\bguide\b", r"\btutorial\b",
    r"\bmeaning\b", r"\bexamples\b", r"\bشرح\b", r"\bما هو\b", r"\bكيفية\b",
    r"\bلماذا\b", r"\bدليل\b", r"\bمقارنة\b"
]

NAVIGATIONAL_PATTERNS = [
    r"\blogin\b", r"\bofficial\b", r"\bwebsite\b", r"\bcontact\b",
    r"\bيوتيوب\b", r"\bفيسبوك\b", r"\bتويتر\b", r"\bالموقع الرسمي\b",
    r"\bدخول\b", r"\bتسجيل الدخول\b"
]

COMMERCIAL_PATTERNS = [
    r"\bbest\b", r"\breview\b", r"\bvs\b", r"\bcompare\b", r"\btop\b",
    r"\bأفضل\b", r"\bمراجعة\b", r"\bمقارنة\b", r"\bسعر\b", r"\bاسعار\b"
]

TRANSACTIONAL_PATTERNS = [
    r"\bbuy\b", r"\bdiscount\b", r"\bprice\b", r"\bpricing\b", r"\btrial\b",
    r"\bdownload\b", r"\bsubscribe\b", r"\border\b", r"\bشراء\b", r"\bاشترك\b",
    r"\bتحميل\b", r"\bاطلب\b", r"\bكوبون\b"
]

def normalize_keyword(keyword):
    keyword = str(keyword).strip().lower()
    keyword = re.sub(r"\s+", " ", keyword)
    return keyword

def count_pattern_matches(keyword, patterns):
    score = 0
    for pattern in patterns:
        if re.search(pattern, keyword):
            score += 1
    return score

def classify_intent(keyword):
    keyword = normalize_keyword(keyword)

    scores = {
        "Informational": count_pattern_matches(keyword, INFORMATIONAL_PATTERNS),
        "Navigational": count_pattern_matches(keyword, NAVIGATIONAL_PATTERNS),
        "Commercial": count_pattern_matches(keyword, COMMERCIAL_PATTERNS),
        "Transactional": count_pattern_matches(keyword, TRANSACTIONAL_PATTERNS),
    }

    max_score = max(scores.values())

    if max_score == 0:
        return "Unclear"

    top_intents = [intent for intent, score in scores.items() if score == max_score]

    if len(top_intents) == 1:
        return top_intents[0]

    priority = ["Transactional", "Commercial", "Navigational", "Informational"]
    for intent in priority:
        if intent in top_intents:
            return intent

def process_keywords_file(input_file, output_file, keyword_column="keyword"):
    df = pd.read_csv(input_file)

    if keyword_column not in df.columns:
        raise ValueError(f"Column '{keyword_column}' not found in file.")

    df["search_intent"] = df[keyword_column].apply(classify_intent)
    df.to_csv(output_file, index=False, encoding="utf-8-sig")

    summary = df["search_intent"].value_counts(dropna=False)
    print("Classification completed successfully.")
    print(summary)

if __name__ == "__main__":
    process_keywords_file(
        input_file="keywords.csv",
        output_file="keywords_classified.csv",
        keyword_column="keyword"
    )

كيف يعمل السكربت عملياً؟

يعتمد الكود على دالة classify_intent()، وهي قلب النظام. هذه الدالة تحسب عدد الإشارات الموجودة في كل كلمة مفتاحية لكل فئة، ثم تختار الفئة ذات النقاط الأعلى. وعند التعادل، يتم تطبيق أولوية منطقية لأن الكلمات ذات النية الشرائية غالباً أكثر حساسية تجارياً.

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

شكل ملف الإدخال

أنشئ ملفاً باسم keywords.csv ويحتوي على عمود واحد على الأقل اسمه keyword. مثال بسيط:

  • how to audit seo site
  • best rank tracker tools
  • buy seo reporting tool
  • semrush login

كيف تطور هذا النموذج إلى مستوى احترافي؟

النسخة السابقة ممتازة كبداية، لكنها ليست نهاية الطريق. في البيئات الاحترافية، من الأفضل ربط التصنيف مع بيانات إضافية مثل الصفحة المقصودة الحالية، معدل النقر، ومتوسط الموضع. هنا تظهر قوة الدمج مع مفهوم الـ API: كيف نطلب البيانات من Google وOpenAI، لأنك تستطيع سحب البيانات، تصنيفها، ثم إرسال النتائج إلى لوحة متابعة أو ملف مركزي.

كما يمكن توسيع النظام بإحدى الطرق التالية:

  • إضافة قاموس مصطلحات خاص بمجالك أو سوقك.
  • تحليل صفحة نتائج البحث SERP لتأكيد النية الفعلية.
  • استخدام نموذج ذكاء اصطناعي لتفسير الكلمات الغامضة.
  • تصدير النتائج إلى Google Sheets عبر سكربتات مخصصة مثل كيفية ربط Google Sheets بالعالم الخارجي عبر Script.

إذا أردت استخدام الذكاء الاصطناعي لتدقيق التصنيف، فابنِ الأمر بحيث يطلب من النموذج إرجاع فئة واحدة فقط من بين: Informational أو Navigational أو Commercial أو Transactional مع تبرير قصير جداً. هذا يقلل التشتت ويرفع اتساق المخرجات.

الجوانب الأمنية والتشغيلية

إذا قررت لاحقاً دمج السكربت مع خدمات خارجية أو مفاتيح وصول، فلا تضع أي API keys داخل الكود مباشرة. الأفضل استخدام متغيرات البيئة أو ملفات إعدادات محمية، كما شرحنا في الحماية والأمان: كيف تخفي مفاتيحك السرية في الكود؟.

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

خاتمة عملية

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

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

2 comments

اترك تعليقاً

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