تجميع وتصنيف الكلمات المفتاحية في مجموعات (Keyword Clustering)


تجميع وتصنيف الكلمات المفتاحية في مجموعات (Keyword Clustering)

يا هلا بالجميع! اليوم بنتكلم عن موضوع مهم جداً لأي واحد يشتغل في الـ SEO أو صناعة المحتوى: تجميع الكلمات المفتاحية في مجموعات. بصراحة، الشغل على الكلمات المفتاحية وحدة وحدة متعب وممكن يخليك تضيع. الفكرة هنا إنك تجمع الكلمات اللي لها علاقة ببعض أو اللي تجاوب على نفس نية البحث (Search Intent) في مجموعة وحدة.

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

ليش نسوي Keyword Clustering أصلاً؟

  • تنظيم المحتوى: بدال ما يكون عندك 1000 كلمة مفتاحية متفرقة، بيصير عندك 50-100 مجموعة، وكل مجموعة تمثل موضوع رئيسي تقدر تكتب عنه مقال شامل.
  • تحسين أداء SEO: جوجل تحب المحتوى المتعمق والشامل. لما تجمع الكلمات اللي لها علاقة بموضوع واحد في صفحة وحدة، أنت كأنك تقول لجوجل: "هذي الصفحة هي المرجع لكل شيء يخص الموضوع الفلاني".
  • فهم نية المستخدم: الكلمات اللي تتجمع سوا غالباً تشترك في نفس نية البحث. هالشيء يساعدك تكتب محتوى يجاوب على أسئلة المستخدمين بدقة.
  • توفير الوقت والجهد: بدال ما تسوي بحث لكل كلمة مفتاحية على حدة، تسوي بحث للمجموعة كاملة وتطلع بأفكار لمحتوى يغطي كل الجوانب.

كيف نسوي تجميع للكلمات المفتاحية؟

فيه طرق كثيرة، بعضها يدوي وبعضها آلي. اليدوي ينفع للكميات الصغيرة، لكن لو عندك آلاف الكلمات، لازم تستخدم أدوات أو برمجة.

الطريقة اليدوية (للمبتدئين أو الكميات القليلة):

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

الطريقة الآلية (هي الأفضل والاحترافية):

هنا ندخل في الجد. أغلب الأدوات الاحترافية والبرامج تستخدم خوارزميات عشان تجمع الكلمات. فيه طريقتين مشهورتين:

  1. التشابه اللغوي (Semantic Similarity): تعتمد على مدى تشابه الكلمات نفسها. مثلاً، "شراء سيارة" و "شراء مركبة" ممكن تتجمع سوا.
  2. تداخل نتائج البحث (SERP Overlap): هذي هي الطريقة الأكثر شيوعاً وفعالية في الـ SEO. الفكرة إنك تجيب أول 10 أو 20 نتيجة بحث (URLs) لكل كلمة مفتاحية. إذا كلمتين مفتاحيتين تتشاركان عدد كبير من نفس نتائج البحث، هذا يعني إن جوجل تشوفهم مرتبطين ببعض، ويستاهلون يكونون في نفس المجموعة.

الملاحظة الثانية: طريقة SERP Overlap هي الأقوى لأنها تعتمد على بيانات حقيقية من جوجل نفسها، مو مجرد تخمينات لغوية.

مثال برمجي بسيط لتجميع الكلمات المفتاحية (باستخدام SERP Overlap):

طبعاً، عشان نسويها صح، نحتاج نستخدم APIs لجمع بيانات الـ SERP (مثل SerpApi أو BrightData). لكن هنا بنسوي مثال توضيحي بسيط يوريك الفكرة.

أول شيء، نحتاج مكتبات زي requests عشان نسوي طلبات الـ HTTP (لو كنا بنجيب البيانات من API حقيقي) وممكن pandas للتعامل مع البيانات. نفترض إن عندنا دالة وهمية get_serp_urls(keyword) ترجع لنا قائمة بالـ URLs لأول 10 نتائج.

import requests
from collections import defaultdict

# هذه دالة وهمية فقط لتوضيح الفكرة.
# في الواقع، ستحتاج لاستخدام API حقيقي مثل SerpApi أو BrightData للحصول على بيانات SERP.
def get_serp_urls(keyword):
    """
    دالة وهمية ترجع قائمة بـ URLs لنتائج البحث لأول 10 نتائج.
    للتطبيق الحقيقي، ستحتاج لاستبدال هذا باستدعاء API حقيقي.
    """
    # مثال بسيط جداً لتوضيح الفكرة
    mock_serp_data = {
        "أفضل مطاعم الرياض": ["restaurant-a.com", "restaurant-b.com", "best-riyadh-restaurants.com", "food-blog.com/riyadh", "riyadh-eats.com"],
        "مطاعم فطور الرياض": ["restaurant-b.com", "cafe-c.com", "best-riyadh-restaurants.com", "breakfast-spots.com", "riyadh-eats.com"],
        "مطاعم عشاء الرياض": ["restaurant-a.com", "fine-dining.com", "best-riyadh-restaurants.com", "dinner-ideas.com", "riyadh-eats.com"],
        "أماكن سياحية في الرياض": ["tourism-riyadh.com", "visit-ksa.com", "riyadh-attractions.com", "travel-blog.com/riyadh", "explore-riyadh.com"],
        "فنادق الرياض": ["hotel-d.com", "booking-riyadh.com", "riyadh-hotels.com", "travel-guide.com/riyadh-hotels", "explore-riyadh.com"],
        "أفضل كافيهات الرياض": ["cafe-c.com", "coffee-shops.com", "riyadh-cafes.com", "food-blog.com/riyadh", "riyadh-eats.com"],
        "مقهى الرياض": ["cafe-c.com", "coffee-shops.com", "riyadh-cafes.com", "local-coffee.com", "riyadh-eats.com"],
        "شقق فندقية في الرياض": ["serviced-apartments-riyadh.com", "booking-riyadh.com", "riyadh-hotels.com", "stay-riyadh.com", "explore-riyadh.com"]
    }
    return mock_serp_data.get(keyword, [])

def keyword_clusterer(keywords, min_overlap=3):
    """
    يقوم بتجميع الكلمات المفتاحية بناءً على تداخل نتائج البحث (SERP Overlap).
    """
    keyword_serps = {}
    for kw in keywords:
        print(f"جاري جلب نتائج البحث لـ: {kw}")
        keyword_serps[kw] = set(get_serp_urls(kw)) # نستخدم set لسرعة المقارنة وإزالة المكررات

    clusters = []
    processed_keywords = set()

    for kw1 in keywords:
        if kw1 in processed_keywords:
            continue

        current_cluster = {kw1}
        processed_keywords.add(kw1)

        # توسيع المجموعة بشكل متكرر لضمان تجميع الكلمات المترابطة بشكل كامل
        newly_added_to_cluster = True
        while newly_added_to_cluster:
            newly_added_to_cluster = False
            keywords_to_add_in_this_iteration = set()
            
            # نمر على الكلمات الموجودة حالياً في المجموعة
            for existing_kw_in_cluster in list(current_cluster): # نستخدم list لتجنب تعديل المجموعة أثناء التكرار
                # ونقارنها مع الكلمات التي لم تتم معالجتها بعد
                for potential_kw_to_add in keywords:
                    if potential_kw_to_add not in processed_keywords and potential_kw_to_add not in current_cluster:
                        overlap_count = len(keyword_serps[existing_kw_in_cluster].intersection(keyword_serps[potential_kw_to_add]))
                        if overlap_count >= min_overlap:
                            keywords_to_add_in_this_iteration.add(potential_kw_to_add)
                            processed_keywords.add(potential_kw_to_add)
                            newly_added_to_cluster = True
            
            current_cluster.update(keywords_to_add_in_this_iteration)

        if current_cluster:
            clusters.append(list(current_cluster))
            
    return clusters

# الكلمات المفتاحية اللي نبي نجمعها
my_keywords = [
    "أفضل مطاعم الرياض",
    "مطاعم فطور الرياض",
    "مطاعم عشاء الرياض",
    "أماكن سياحية في الرياض",
    "فنادق الرياض",
    "أفضل كافيهات الرياض",
    "مقهى الرياض",
    "شقق فندقية في الرياض"
]

# تجميع الكلمات
# غيرت الحد الأدنى لـ 2 عشان يتجمعون أكثر في هذا المثال الوهمي
keyword_groups = keyword_clusterer(my_keywords, min_overlap=2) 

print("\nالكلمات المفتاحية المجمعة:")
for i, cluster in enumerate(keyword_groups):
    print(f"المجموعة {i+1}: {', '.join(cluster)}")

في الكود اللي فوق، سوينا دالة get_serp_urls وهمية (لأن جلب بيانات الـ SERP الحقيقية يتطلب API واشتراك). بعدين دالة keyword_clusterer اللي تمر على كل الكلمات، تجيب نتائج البحث لها، وتقارن بينها. إذا كان فيه عدد كافي من الـ URLs المشتركة (مثلاً، 2 أو أكثر في مثالنا هذا)، نعتبر الكلمتين مرتبطتين ونحطهم في نفس المجموعة. لاحظ أننا استخدمنا حلقة while لتوسيع المجموعة بشكل متكرر، بحيث إذا كانت الكلمة (أ) مرتبطة بالكلمة (ب)، و(ب) مرتبطة بالكلمة (ج)، فكلها ستكون في نفس المجموعة.

نصائح أخيرة:

  • لا تبالغ في عدد الكلمات: ابدأ بكمية معقولة من الكلمات المفتاحية (مثلاً 100-500) قبل ما تنتقل للآلاف.
  • ضبط حد التداخل (Overlap Threshold): قيمة min_overlap مهمة جداً. إذا كانت عالية جداً، بتطلع لك مجموعات صغيرة جداً أو كلمات مفتاحية بدون مجموعة. وإذا كانت منخفضة جداً، بتطلع لك مجموعات كبيرة جداً وغير دقيقة. جرب قيم مختلفة لين توصل للأفضل.
  • التحليل البشري: حتى بعد التجميع الآلي، دائماً راجع المجموعات بنفسك. ممكن تلاقي كلمات ما انجمعت صح أو كلمات تحتاج تنفصل.
  • استخدم أدوات جاهزة: فيه أدوات كثيرة تسوي هالشيء بشكل احترافي مثل Surfer SEO، Keyword Insights، أو حتى بعض أدوات الـ SEO الكبيرة زي Ahrefs و Semrush عندها أدوات مساعدة. لكن فهمك للمبدأ بيخليك تستفيد منها أكثر.

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