در مورد قصد جستجو می توان چیزهای زیادی دانست ، از استفاده از یادگیری عمیق برای استنباط هدف جستجو با طبقه بندی متن و تجزیه عناوین SERP با استفاده از تکنیک های پردازش زبان طبیعی (NLP) ، تا خوشه بندی براساس ارتباط معنایی با مزایای توضیح داده شده.
ما نه تنها از مزایای رمزگشایی قصد جستجو اطلاع داریم ، بلکه تعدادی تکنیک برای مقیاس و اتوماسیون نیز در اختیار داریم.
اما اغلب ، این موارد شامل ایجاد هوش مصنوعی خود شما است. اگر وقت و دانش لازم برای آن را نداشته باشید ، چه می کنید؟
در این ستون ، شما یک فرایند گام به گام برای خودکار کردن خوشه بندی کلمات کلیدی با هدف جستجو با استفاده از Python خواهید آموخت.
تبلیغات
ادامه مطلب را در زیر بخوانید
SERP ها حاوی بینش هایی برای هدف جستجو هستند
برخی از روش ها مستلزم این است که شما همه نسخه های عنوان محتوای رتبه بندی را برای یک کلمه کلیدی مشخص دریافت کنید ، سپس آن را به یک مدل شبکه عصبی (که سپس باید آن را بسازید و آزمایش کنید) تغذیه کنید ، یا شاید شما از NLP برای خوشه بندی کلمات کلیدی استفاده می کنید .
روش دیگری وجود دارد که به شما امکان می دهد از هوش مصنوعی خود گوگل برای انجام کار برای شما استفاده کنید ، بدون این که مجبور باشید تمام محتویات SERP را خراشیده و یک مدل هوش مصنوعی بسازید.
بیایید فرض کنیم که Google URL های سایت را با توجه به محتوای مطابق با درخواست کاربر به ترتیب نزولی رتبه بندی می کند. از این رو نتیجه می شود که اگر قصد دو کلمه کلیدی یکسان باشد ، احتمالاً SERP ها مشابه هستند.
تبلیغات
ادامه مطلب را در زیر بخوانید
برای سالها ، بسیاری از متخصصان جستجوگرها نتایج SERP را برای کلمات کلیدی مقایسه کردند تا هدف جستجوی مشترک (یا اشتراکی) را برای ماندن در بالای به روزرسانی های اصلی بخوانند ، بنابراین این چیز جدیدی نیست.
ارزش افزوده در اینجا خودکارسازی و مقیاس بندی این مقایسه است که هم سرعت و هم دقت بیشتری را ارائه می دهد.
چگونه کلمات کلیدی را با هدف جستجو در مقیاس با استفاده از Python (با کد) خوشه بندی کنیم
با نتایج SERP خود در بارگیری CSV شروع کنید.
1. لیست را به دفترچه یادداشت پایتون وارد کنید.
import pandas as pd import numpy as np serps_input = pd.read_csv('data/sej_serps_input.csv') del serps_input['Unnamed: 0'] serps_input
در زیر فایل SERP وجود دارد که اکنون به یک داده داده Pandas وارد شده است.
2. داده ها را برای صفحه 1 فیلتر کنید
ما می خواهیم نتایج صفحه 1 هر SERP را بین کلمات کلیدی مقایسه کنیم.
ما برای اجرای عملکرد فیلتر کردن قبل از ترکیب مجدد در یک فریم داده ، dataframe را به داده های کوچک keyword dataframes تقسیم خواهیم کرد ، زیرا می خواهیم در سطح کلمه کلیدی فیلتر کنیم:
# Split serps_grpby_keyword = serps_input.groupby("keyword") k_urls = 15 # Apply Combine def filter_k_urls(group_df): filtered_df = group_df.loc[group_df['url'].notnull()] filtered_df = filtered_df.loc[filtered_df['rank'] <= k_urls] return filtered_df filtered_serps = serps_grpby_keyword.apply(filter_k_urls) # Combine ## Add prefix to column names #normed = normed.add_prefix('normed_') # Concatenate with initial data frame filtered_serps_df = pd.concat([filtered_serps],axis=0) del filtered_serps_df['keyword'] filtered_serps_df = filtered_serps_df.reset_index() del filtered_serps_df['level_1'] filtered_serps_df
3. تبدیل URL های رتبه بندی به یک رشته
از آنجا که URL های نتیجه SERP بیشتر از کلمات کلیدی است ، ما باید این URL ها را در یک خط فشرده کنیم تا SERP کلمه کلیدی را نشان دهیم.
نحوه کار:
# convert results to strings using Split Apply Combine filtserps_grpby_keyword = filtered_serps_df.groupby("keyword") def string_serps(df): df['serp_string'] = ''.join(df['url']) return df # Combine strung_serps = filtserps_grpby_keyword.apply(string_serps) # Concatenate with initial data frame and clean strung_serps = pd.concat([strung_serps],axis=0) strung_serps = strung_serps[['keyword', 'serp_string']]#.head(30) strung_serps = strung_serps.drop_duplicates() strung_serps
در زیر SERP برای هر کلمه کلیدی به یک خط فشرده نشان داده شده است.
4. مقایسه SERP شباهت
برای انجام مقایسه ، اکنون به هر ترکیبی از کلمه کلیدی SERP مرتبط با جفت های دیگر نیاز داریم:
تبلیغات
ادامه مطلب را در زیر بخوانید
# align serps def serps_align(k, df): prime_df = df.loc[df.keyword == k] prime_df = prime_df.rename(columns = {"serp_string" : "serp_string_a", 'keyword': 'keyword_a'}) comp_df = df.loc[df.keyword != k].reset_index(drop=True) prime_df = prime_df.loc[prime_df.index.repeat(len(comp_df.index))].reset_index(drop=True) prime_df = pd.concat([prime_df, comp_df], axis=1) prime_df = prime_df.rename(columns = {"serp_string" : "serp_string_b", 'keyword': 'keyword_b', "serp_string_a" : "serp_string", 'keyword_a': 'keyword'}) return prime_df columns = ['keyword', 'serp_string', 'keyword_b', 'serp_string_b'] matched_serps = pd.DataFrame(columns=columns) matched_serps = matched_serps.fillna(0) queries = strung_serps.keyword.to_list() for q in queries: temp_df = serps_align(q, strung_serps) matched_serps = matched_serps.append(temp_df) matched_serps
موارد بالا تمام ترکیبات جفت کلمه کلیدی SERP را نشان می دهد ، و آن را برای مقایسه رشته SERP آماده می کند.
هیچ کتابخانه منبع باز وجود ندارد که اشیاء لیست را به ترتیب مقایسه کند ، بنابراین تابع در زیر برای شما نوشته شده است.
تبلیغات
ادامه مطلب را در زیر بخوانید
تابع ‘serp_compare’ همپوشانی سایت ها و ترتیب آن سایت ها را بین SERP مقایسه می کند.
import py_stringmatching as sm ws_tok = sm.WhitespaceTokenizer() # Only compare the top k_urls results def serps_similarity(serps_str1, serps_str2, k=15): denom = k+1 norm = sum([2*(1/i - 1.0/(denom)) for i in range(1, denom)]) ws_tok = sm.WhitespaceTokenizer() serps_1 = ws_tok.tokenize(serps_str1)[:k] serps_2 = ws_tok.tokenize(serps_str2)[:k] match = lambda a, b: [b.index(x)+1 if x in b else None for x in a] pos_intersections = [(i+1,j) for i,j in enumerate(match(serps_1, serps_2)) if j is not None] pos_in1_not_in2 = [i+1 for i,j in enumerate(match(serps_1, serps_2)) if j is None] pos_in2_not_in1 = [i+1 for i,j in enumerate(match(serps_2, serps_1)) if j is None] a_sum = sum([abs(1/i -1/j) for i,j in pos_intersections]) b_sum = sum([abs(1/i -1/denom) for i in pos_in1_not_in2]) c_sum = sum([abs(1/i -1/denom) for i in pos_in2_not_in1]) intent_prime = a_sum + b_sum + c_sum intent_dist = 1 - (intent_prime/norm) return intent_dist # Apply the function matched_serps['si_simi'] = matched_serps.apply(lambda x: serps_similarity(x.serp_string, x.serp_string_b), axis=1) matched_serps[["keyword", "keyword_b", "si_simi"]]
اکنون که مقایسه ها انجام شده است ، می توانیم کلمات کلیدی را خوشه بندی کنیم.
تبلیغات
ادامه مطلب را در زیر بخوانید
ما هر کلمه کلیدی را که دارای شباهت وزنی 40٪ یا بیشتر باشد ، درمان خواهیم کرد.
# group keywords by search intent simi_lim = 0.4 # join search volume keysv_df = serps_input[['keyword', 'search_volume']].drop_duplicates() keysv_df.head() # append topic vols keywords_crossed_vols = serps_compared.merge(keysv_df, on = 'keyword', how = 'left') keywords_crossed_vols = keywords_crossed_vols.rename(columns = {'keyword': 'topic', 'keyword_b': 'keyword', 'search_volume': 'topic_volume'}) # sim si_simi keywords_crossed_vols.sort_values('topic_volume', ascending = False) # strip NANs keywords_filtered_nonnan = keywords_crossed_vols.dropna() keywords_filtered_nonnan
اکنون نام موضوعی بالقوه ، شباهت کلمات کلیدی SERP و حجم جستجوی هر یک را داریم.
توجه خواهید کرد که کلمه کلیدی و keyword_b به ترتیب به موضوع و کلمه کلیدی تغییر نام داده اند.
تبلیغات
ادامه مطلب را در زیر بخوانید
حالا ما می خواهیم با استفاده از روش lamdas ستون های موجود در داده را تکرار کنیم.
تکنیک lamdas یک روش کارآمد برای تکرار بیش از سطرها در یک فریم داده Pandas است زیرا ردیف ها را به یک تابع (.iterrows () تبدیل می کند به یک لیست.
اینجا می آید:
queries_in_df = list(set(keywords_filtered_nonnan.topic.to_list())) topic_groups_numbered = {} topics_added = [] def find_topics(si, keyw, topc): i = latest_index(topic_groups_numbered) if (si >= simi_lim) and (not keyw in topics_added) and (not topc in topics_added): i += 1 topics_added.append(keyw) topics_added.append(topc) topic_groups_numbered[i] = [keyw, topc] elif si >= simi_lim and (keyw in topics_added) and (not topc in topics_added): j = [key for key, value in topic_groups_numbered.items() if keyw in value] topics_added.append(topc) topic_groups_numbered[j[0]].append(topc) elif si >= simi_lim and (not keyw in topics_added) and (topc in topics_added): j = [key for key, value in topic_groups_numbered.items() if topc in value] topics_added.append(keyw) topic_groups_numbered[j[0]].append(keyw) def apply_impl_ft(df): return df.apply( lambda row: find_topics(row.si_simi, row.keyword, row.topic), axis=1) apply_impl_ft(keywords_filtered_nonnan) topic_groups_numbered = {k:list(set(v)) for k, v in topic_groups_numbered.items()} topic_groups_numbered
در زیر یک فرهنگ لغت را نشان می دهد که شامل همه کلمات کلیدی است که بر اساس هدف جستجو در گروه های شماره گذاری شده دسته بندی شده اند:
{1: ['fixed rate isa', 'isa rates', 'isa interest rates', 'best isa rates', 'cash isa', 'cash isa rates'], 2: ['child savings account', 'kids savings account'], 3: ['savings account', 'savings account interest rate', 'savings rates', 'fixed rate savings', 'easy access savings', 'fixed rate bonds', 'online savings account', 'easy access savings account', 'savings accounts uk'], 4: ['isa account', 'isa', 'isa savings']}
بیایید این را در یک داده قرار دهیم:
topic_groups_lst = [] for k, l in topic_groups_numbered.items(): for v in l: topic_groups_lst.append([k, v]) topic_groups_dictdf = pd.DataFrame(topic_groups_lst, columns=['topic_group_no', 'keyword']) topic_groups_dictdf
گروه های قصد جستجو در بالا تقریب مناسبی از کلمات کلیدی درون آنها را نشان می دهد ، چیزی که احتمالاً یک متخصص سئو به آن دست خواهد یافت.
تبلیغات
ادامه مطلب را در زیر بخوانید
اگرچه ما فقط از مجموعه کوچکی از کلمات کلیدی استفاده کردیم ، اما روش را می توان به هزاران (اگر نه بیشتر) افزایش داد.
خروجی ها را فعال کنید تا جستجوی شما بهتر شود
البته ، موارد فوق را می توان با استفاده از شبکه های عصبی که محتوای رتبه بندی را برای خوشه های دقیق تر و نامگذاری گروه های خوشه پردازش می کنند ، همانطور که برخی از محصولات تجاری موجود در آنجا انجام می شود ، بیشتر مورد استفاده قرار داد.
در حال حاضر ، با این خروجی می توانید:
- این را در سیستم داشبورد SEO خود قرار دهید تا روند و گزارش سئو شما معنی دارتر شود.
- با ساختن حساب های Google Ads خود با هدف جستجوی یک امتیاز عالی ، کمپین های جستجوی پولی بهتر بسازید.
- URL های جستجوی تجارت الکترونیکی وجهه اضافی را ادغام کنید.
- ساختار طبقه بندی یک سایت خرید را با توجه به هدف جستجو به جای کاتالوگ محصول معمولی ، ساختار دهید.
تبلیغات
ادامه مطلب را در زیر بخوانید
من مطمئن هستم که برنامه های بیشتری وجود دارد که من آنها را ذکر نکرده ام – در صورت تمایل در مورد مهمترین مواردی که قبلاً ذکر نکردم نظر دهید
در هر صورت ، تحقیقات کلمات کلیدی SEO شما کمی مقیاس پذیرتر ، دقیق تر و سریعتر است!
منابع بیشتر:
اعتبار تصویر
تصویر شاخص: Astibuag/Shutterstock.com
همه اسکرین شات های گرفته شده توسط نویسنده ، ژوئیه 2021
تبلیغات
ادامه مطلب را در زیر بخوانید