< P > В этом практическом руководстве используется сравнение SERP и Python с групповыми ключевыми словами по намерениям, более быстрой и более интуитивной.
< IMG width = "1600" height = "840" src = "https://www.searchenginejournal.com/wp-content/uploads/2025/04/data-217.png" size-full wp-post-image "alt =" Как автомат в seo ware-gate-gate alebusting alte alebuster wyty alebuster wyfuster wyfusting wyty-gate gate alebuster "FetchPriority =" high "decoding =" async "scset =" "https://www.searchenginejournal.com/wp-content/uploads/2025/04/data-217.png 1600w ,,,, https://www.searchenginejournal.com/wp-content/uploads/2025/04/data-217-480x252.png 480w, https://www.searchenginejournal.com/wp-content/uploads/2025/04/data-217.com 680W, https://www.searchenginejournal.com/wp-content/uploads/2025/04/data-217-384x202.png 384w, https://www.searchenginejournal.com/wp-content/uploads/2025/04/data-217-768x403.png 768w, https://www.searchenginejournal.com/wp-content/uploads/2025/04/data-2174-1024-1024-1024-1024-1024-1024-1024-1024-1024-1024-1024-1024-1024-1024-1024-1024-1024-1024-1024. 1024W "Размеры =" (максимальная ширина: 1600px) 100VW, 1600px "/~ 62 < P > Есть то, что вам нужно знать о намерении поиска, от использования глубокого обучения до завершения намерения поиска путем классификации текста и уничтожения заголовков SERP с использованием методов обработки естественного языка (NLP) для кластеризации на основе семантической значимости, с объясненными преимуществами.
< p >Мы не только знаем преимущества расшифровки поиска, но у нас также есть ряд методов для нашего распоряжения и автоматизации.
< p > Итак, зачем нам нужна еще одна статья об автоматизации поиска ? 0 ~/p > < p > Намерения поиска все более важны, когда прибыл поиск ИИ.
< p >, тогда как больше, как правило, в 10 синих поисковых цепях, напротив, отвечает за технологию поиска искусственного интеллекта, поскольку эти платформы имеют тенденцию к минимуму затраты на вычислительные средства (по FLOP) для предоставления услуги.
< H2 > Serp по -прежнему содержит лучшие идеи о намерениях поиска < p >Методы по -прежнему включают в себя выполнение вашего собственного искусственного интеллекта, то есть получение целой копии из заголовков содержимого рейтинга для данного ключевого слова, а затем отправить ее в модель нейронной сети (которую вы должны строить и проверить) или использовать NLP для кластера ключевых слов.
< iframe class = "sej-iframe-bata-heawe-hea-heae-a-afer-hea-hea-aaihta-ahaeaeahrate" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "Му "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "https://www.searchenginejournal.com/wp-json/sscats/v2/tk/midle_post_text" < p > Что делать, если у вас нет времени; < p > Хотя сходство косинуса было объявлено как ответ на помощь специалистов SEO, чтобы сосредоточиться на разграничении тем для таксономии и структур сайта, я все еще утверждаю, что поиск SERP является гораздо большим методом.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ < p > that & Rsquo; S, потому что ИИ очень стремится заземлить свои результаты на SERP и по уважительной причине & ndash; Это & Rsquo; S моделируется поведением пользователя.
< p >Есть еще один способ, которым Google является собственным ИИ, чтобы выполнить работу для вас, вам не нужно выпрыгивать все полное содержание SERP и создавать модель ИИ.
< P > Let & Rsquo; Отсюда следует, что если намерение для двух ключевых слов одинаково, то SERP, вероятно, будет похожим.
< P > В течение многих лет многие специалисты SEO сравнивали результаты SERP для ключевых слов, чтобы сделать вывод о совместном (или общем) поиске, намерении оставаться в верхней части основных обновлений, так что в этом нет ничего нового.
< P > Значение-добавление здесь-автомация и масштабирование этого сравнения, предлагая как скорость, так и большую точность.
< H2 > Как ключевые слова кластера с использованием намерения в намерении Python (с кодом)
~ ~ ~ ~ ~ < p >Предполагая, что у вас есть SERPS, что приводит к загрузке CSV, Allow & Rsquo; S импортируйте его в свой Python Naptop.
< H3 > 1. Импортировать список в свой Python < p > Импортированные панды в виде PD импортировать Numpy как NP serps_input = pd.read_csv (' data/sej_serps_input.csv ') Del serps_input [' без имени: 0 '] serps_input < P > Под файлом SERP теперь импортируется в Pandas DataFrame.
< Img decoding = "async" src = "https://www.searchenginejournal.com/wp-content/uploads/2025/04/image1-612.png" alt = "" wp-image-55 srcset = "https://www.searchenginejournal.com/wp-content/uploads/2025/04/image1-612.png 1330W, https://www.searchenginejournallannal.com/wp-content/uploads/2025/04/image1-612-48019. https://www.searchenginejournal.com/wp-content/uploads/2025/04/image1-612-680x409.png 680w, https://www.searchenginejournal.com/wp-content/uploads/2025/04/image112388.com/wp-content/uploads/2025/04/image11238-n. 384W, https://www.searchenginejournal.com/wp-content/uploads/2025/04/image1-612-768x462.png 768w, https://www.searchenginejournal.com/wp-content/uploads/2025/04/image1-612-1024x616.png 1024W "Размеры =" (максимальная ширина: 1330px) 100 В, 1330px " < h3 > 2. Данные фильтра для страницы 1
< P > Мы хотим сравнить результаты страницы 1 Каждая SERP между ключевыми словами.
< P > We & Rsquo; LL Разделите кадр данных на мини -циркулярные данные для запуска функции фильтрации перед рекомбинией в единый кадр данных, потому что мы хотим фильтровать на уровне ключевых слов:
< p ># Расколоть serps_grpby_keyword = serps_input.groupby (“Ключевое слово”) K_URLS = 15 # Применить комбинацию Def filter_k_urls (group_df): Filtered_df = Group_df.loc [group_df [' URL ']. notnull ()] Filtered_df = filtreed_df.loc lt; = k_urls] Возврат is filtreed_df Filtered_serps = serps_grpby_keyword.apply (filter_k_urls) # Объединить ## Добавить префикс к именам столбцов #normed = normed.add_prefix (' normed_ ') # Ob &# 39; подключен к начальному кадре данных Filtered_serps_df = pd.concat ([filetred_serps], axis = 0) Del filtred_serps_df [' Ключевое слово '] Filtreed_serps_df = filtreed_serps_df.reset_index () Del filtred_serps_df [' level_1 '] Filtered_serps_df < Decoding = "async" class = "wp-image-413762 size-full" src = "https://www.searchenginejournal.com/wp-content/uploads/2021/07/1_serps_import-60f4192d0f125-sej.paM.PAMPRAMPAMPREMPREPTIRMPORT-60F4192D0F125-SEJ. "https://www.searchenginejournal.com/wp-content/uploads/2021/07/1_serps_import-60f4192d0f125-sej.png 1246w ,,,, https://www.searchenginejournal.com/wp-content/uploads/2021/07/1_serps_import-60f4192d0f125-sej-480x302.png 480w, https://www.searchenginejournal.com/wp-content/uploads/2021/07/1_serps_import-60f4192d0f125-sej-680x428.png 680w, https://www.searchenginejournal.com/wp-content/uploads/2021/07/1_serps_import-60f4192d0f125-sej-768x483.png 768w, https://www.searchenginejournal.com/wp-content/uploads/2021/07/07/1_serps_import-60f4192d0f125-sej-1024x644 от автора, апрель 2025 < p > < H3 > 3. Преобразовать URL -разрывы в линию
< p >Поскольку существует больше результатов SERP URL -адресов, чем ключевые слова, нам нужно сжать эти URL -адреса в одну строку, чтобы представить SERP ключевого слова.
< P > ЗДЕСЬ & Rsquo; s Как:
< p ># Результаты в строки с использованием разделенной комбинации FILSERPS_GRPBY_KEYWORD = FILTERED_SERPS_DF.GROUPBY (“Ключевое слово”) Def string_serps (df): DF [' Serp_string '] = ' ' .Join (df [' url ']) Вернуть df # combine strung_serps = filtserps_grpby_keyword.apply (string_serps) # Ob &# 39; подключено к начальной раме данных и очистке Strung_serps = pd.concat ([strung_serps], axis = 0) strung_serps = strung_serps [[' Ключевое слово ', ' Serp_string ']]#. Голова (30) strung_serps = strung_serps.drop_duplicates () Strung_serps < p >Следующее показано, что SERP сжимается в одной строке для каждого ключевого слова.
< Decoding = "async" class = "wp-image-413763 size-full" src = "https://www.searchenginejournal.com/wp-content/uploads/2021/07/07/2_serp_strung-60f41930648be-sej.sej.sej.sej.sehj.sej. Srcset = "https://www.searchenginejournal.com/wp-content/uploads/2021/07/2_serp_strung-60f41930648be-sej.png 1118w, https://www.searchenginejournal.com/wp-content/uploads/2021/07/2_serp_strung-60f41930648be-sej-480x404.png 480w, https://www.searchenginejournal.com/wp-content/uploads/2021/07/2_serp_strung-60f41930648be-sej-680x573.png 680w, https://www.searchenginejournal.com/wp-content/uploads/2021/07/2_serp_strung-60f41930648be-sej-768x647.png 768w, https://www.searchenginejournal.com/wp-content/uploads/2021/07/07/2_serp_strung-60f419306488be-sej--1024x863.png 1024w "Автор, апрель 2025 < h3 > 4. Сравните Serp расстояния
< p > для сравнения, нам теперь нужна каждая комбинация ключевых слов в сочетании с другими парами:
< p ># Выровнять SERP DEFER_ALIGN (K, DF): prime_df = df.loc [df.keyword == k] Prime_df = prime_df.rename (columns = {“serp_string”: “serp_string_a”, “Keyword”: “Key Word”}) comp_df = df.loc [df.keyword! = k] .reset_index (drop = true) Prime_df = prime_df.loc [prime_df.index.repeat (len (comp_df.inde)). 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”, “serp_string_a”: “serp_string”, “Keyword_a”: Поверните prime_df Columns = [' Ключевое слово ', ' Serp_string ', ' ключевой word_b ', ' Serp_string_b & matched_serps = pd.dataframe (Columns = Columns) matched_serps = matched_serps.fillna (0) Queries = strung_serps.keyword.to_list () для Q в запросах: Temp_df = serps_align (q, strung_serps) matched_serps = matched_serps.aaaappnd (temp_df) matched_serps < p > < p >< Decoding = "async" class = "aligncenter wp-image-413764 size-full" src = "https://www.searchenginejournal.com/wp-content/uploads/2021/07/07/3_serps_aligned-60f41934333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333н. "https://www.searchenginejournal.com/wp-content/uploads/2021/07/3_serps_aligned-60f419348333be-sej.png 1940w ,,, https://www.searchenginejournal.com/wp-content/uploads/2021/07/3_serps_aligned-60f419348333be-sej-480x196.png 480w, https://www.searchenginejournal.com/wp-content/uploads/2021/07/3_serps_aligned-60f419348333be-sej-680x278.png 680w, https://www.searchenginejournal.com/wp-content/uploads/2021/07/07/3_serps_aligned-60f419348333be-sej-768x314.png 768w, https://www.searchenginejournal.com/wp-content/uploads/2021/07/3_serps_aligned-60f419348333be-sej-1024x419.png 1024w, https://www.searchenginejournal.com/wp-content/uploads/2021/07/3_serps_aligned-60f419348333be-ssej-1600x655 = "lazy" >~ 60 > < p > Вышеупомянутые показывают все комбинации даже ключевых слов, что делает его готовым для сравнения линейного SERP.
< p >Нет библиотеки открытого кода, которая сравнивает OB ' Пользовательский список, поэтому функция написана ниже.
< p > function & ldquo; Serp_compare & Rdquo; Сравнивает перекрытие сайтов и порядок этих участков между SERP.
< p >Импорт py_stringmatching как sm ws_tok = sm.whitespacetokenizer () # Сравните только верхние результаты K_URLS Defers_simility (serps_str1, serps_str2, k = 15): Дан = K+1 Norms = sum ([2*(1/i – 1,0/(dan) для i в диапазоне (1, Дан)]))))) #USE TOKENIZE URL -адреса ws_tok = sm.whitespacetokenizer () #Соответствует только первым K URL -Addresses Serps_1 = ws_tok.tokenize (serps_str1) [: k] Serps_2 = ws_tok.tokenize (serps_str2) [: k] #Матчей матчей Match = лямбда A, B: [B.Index (x) +1, если x in b on no для x в] #positions of form [(pos_1, pos_2), …] Pos_interresessions = [(i+1, j) для i, j в повторномейрию (match (serps_1, serps_2), если j ничего]] POS_IN1_NOT_IN2 = [I+1 для i, j в Reumenite (Match (serps_1, serps_2), если J не является] POS_IN2_NOT_IN1 = [I+1 для i, j в повторном плане (Match (serps_2, serps_1), если J не является] A_sum = sum ([abs (1/i -1/j) для i, j in pos_intersections])))) b_sum = sum ([abs (1/i -1/denom) для i в pos_in1_not_in2])))))) c_sum = sum ([abs (1/i -1/denom) для i в pos_in2_not_in1])))))) Intent_prime = a_sum + b_sum + c_sum Intent_dist = 1 – (intent_prime/norm) turn intent_dist # Применить функцию matched_serps [' si_simi '] = matched_serps.apply (lambda x: serps_simility (x..serp_string, x.serp_string_b), axis = 1) # Это то, что вы получаете matched_serps [[' Ключевое слово ', ' ключевой word_b ', ' si_simi ']]]]] < p > < p >< Decoding = "async" class = "aligncenter wp-image-413766 size-full" src = "https://www.searchenginejournal.com/wp-content/uploads/2021/07/5_serps_map-60f4193cd19d4-17/5_serps_map-60f4193cd19d4-seplass сайты и порядок этих сайтов между SERP ». width = "782" height = "800" srcset = "https://www.searchenginejournal.com/wp-content/uploads/2021/07/5_serps_map-60f4193cd19d4-sej.png.png.png.png.png. https://www.searchenginejournal.com/wp-content/uploads/2021/07/5_serps_map-60f4193cd19d4-sej-480x491.png 480w, https://www.searchenginejournal.com/wp-content/uploads/2021/07/5_serps_map-60f4193cd19d4-sej-680x696.png 680w, https://www.searchenginejournal.com/wp-content/uploads/2021/07/5/5_serps_map-60f4193cd19d4-sej-768x786.png Загрузка = "ленивый" >
< p > Теперь, когда проводятся сравнения, мы можем начать кластеризацию ключевых слов.
< P > Мы будем рассматривать любые ключевые слова, которые имеют взвешенное сходство 40% или более.
< p ># Ключевые слова группы с целью поиска SIMI_LIM = 0,4 # Присоединяйтесь к тому поиска Keysv_df = serps_input [[' Ключевое слово ', ' search_volume ']]. drop_duplyates () keysv_df.head () # Добавление темы Vols Keywords_crossed_vols = serps_compared.merge (keysv_df, on = ' Keyword ', How = ' Left ') Keywords_crossed_vols = Keywords_crossed_vols.rename (Columns = {' Keyword ': ' Topic ' Word ' ,,,, ' search_volume ' ;: ' TOMA_VOLUME '}) # Sim si_simi Keywords_crossed_vols.sort_values (' toma_volume ', ascending = false) # стричь Нэн Keywords_filtered_nonnan = Keywords_crossed_vols.dropna () Keywords_filtered_nonnan < P > Теперь у нас есть потенциальное имя темы, сходство серп -слова и объем поиска всех. < br >~< Img decoding = "async" class = "aligncenter wp-image-413767 size-full" src = "https://www.searchenginejournal.com/wp-content/uploads/2021/07/6_topic_keywords-60f4193f69848-sepic_kewords-60f4193f69398484848484844448" 982 ". = "https://www.searchenginejournal.com/wp-content/uploads/2021/07/6_topic_keywords-60f4193f6984848-sej.png.png.png.png.png.png https://www.searchenginejournal.com/wp-content/uploads/2021/07/6_topic_keywords-60f4193f69848-sej-480x344.png 480w, https://www.searchenginejournal.com/wp-content/uploads/2021/07/6_topic_keywords-60f4193f69848-680x487.png 680w, https://www.searchenginejournal.com/wp-content/uploads/2021/07/6_topic_keywords-60f4193f69848-768x55 982px "Загрузка =" Lazy ">
< p >Вы & Rsquo; LL отмечает, что ключевое слово и ключ Word_B были переименованы в тему и ключевое слово соответственно.
< p > Теперь мы & Rsquo; Повторите ITE по столбцам в данных, используя метод Lambda.
< p > Техника Liambda – это эффективный способ запуска строк в Data Pandam, поскольку он преобразует строки в список, в отличие от функции .itrows ()
< p > Здесь идет:
< p >Queries_in_df = list (set (matched_serps [' Keyword ']. to_list ()))) TOMA_GROUPS = {} Def dict_key (dicto, keyo): Поверните Keyo в Dicto Def dict_values (dicto, vala): Вернуть любой (вал в валу для val в dicto.values ()) Def Whaty_key (dicto, vala): для k, v in dicto.items (): Если вал в V: повернуть K. Def find_topics (si, keyw, topc): if (si & gt; = simi_lim): if (не dict_key (sim_topic_groups, keyw)) и (не dict_key (sim_topic_groups, topc)): if (не dict_values (sim_topic_groups, keyw)) и (не dict_values (sim_topic_groups, topc)): sim_topic_groups [keyw] = [keyw] Sim_topic_grups [keyw] = [topc] Если dict_key (non_sim_topic_groups, keyw): non_sim_topic_groups.pop (keyw) Если dict_key (non_sim_topic_groups, topc): non_sim_topic_groups.pop (topc) if (dict_values (sim_topic_groups, keyw)) и (не dict_values (sim_topic_groups, topc)): D_key = whet_key (sim_topic_grups, keyw) sim_topic_groups [d_key] .aappind (topc) Если dict_key (non_sim_topic_groups, keyw): non_sim_topic_groups.pop (keyw) Если dict_key (non_sim_topic_groups, topc): non_sim_topic_groups.pop (topc) if (не dict_values (sim_topic_groups, keyw)) и (dict_values (sim_topic_groups, topc)): D_key = whet_key (sim_topic_grups, topc) sim_topic_groups [d_key] .aaappind (keyw) Если dict_key (non_sim_topic_groups, keyw): non_sim_topic_groups.pop (keyw) Если dict_key (non_sim_topic_groups, topc): non_sim_topic_groups.pop (topc) Elif (keyw в sim_topic_grups) и (не Topc в sim_topic_grups): Sim_topic_grups [keyw] .apend (topc) sim_topic_groups [keyw] .aappind (keyw) Если keyw в non_sim_topic_groups: non_sim_topic_groups.pop (keyw) Если Topc в non_sim_topic_groups: non_sim_topic_groups.pop (topc) Elif (не Keyw в sim_topic_grups) и (topc в sim_topic_grups): Sim_topic_grups [topc] .apend (keyw) Sim_topic_grups [topc] .apend (topc) Если keyw в non_sim_topic_groups: non_sim_topic_groups.pop (keyw) Если Topc в non_sim_topic_groups: non_sim_topic_groups.pop (topc) Elif (keyw в sim_topic_grups) и (topc в sim_topic_grups): Если len (sim_topic_groups [keyw]) & GT; Len (sim_topic_grups [topc]): Sim_topic_grups [keyw] .apend (topc) Полем Sim_topic_grups.pop (topc) elif len (sim_topic_groups [keyw]) & LT; Len (sim_topic_grups [topc]): Sim_topic_grups [topc] .apend (keyw) Полем Sim_topic_grups.pop (keyw) Elif len (sim_topic_groups [keyw]) == len (sim_topic_groups [topc]): Если sim_topic_grups [keyw] == topc и sim_topic_groups [topc] == keyw: Sim_topic_grups.pop (keyw) Elif si & LT; SIMI_LIM: if (не dict_key (non_sim_topic_groups, keyw)))) и (не dict_key (sim_topic_groups, keyww)) и (не dict_values (sim_topic_groups, keyw)))):: не dict_values (sim_topic_groups, keyw))):):::: не dict_values (sim_topic_groups, keyw)))):):):):):):):: не dict_values (sim_topic_groups, keyw)))))) non_sim_topic_groups [keyw] = [keyw] if (не dict_key (non_sim_topic_groups, topc)) и (не dict_key (sim_topic_groups, topc))) и (не dict_values (sim_topic_groups, topc)): не dict_values (sim_topic_groups, topc)): non_sim_topic_groups [topc] = [topc] < p > ниже показывает словарь, содержащий все кластеры ключевых слов в намерении поиска в пронумерованных группах:
< p >{1: [' фиксированная скорость ISA ' ,, ' ISA заявки ' ,, ,,,,, ' Процентные ставки ISA ' ,,,,, «Лучшие – тарифы ISA», ' Денежные средства Иса и № 39; ,, “Кассир Иса”], 2: [«Сберегательный счет», «Сберегательный счет»], 3: [' Сберегательный счет ' ,,,, «Процентная ставка сберегательного счета», «Запреты на сбережения», «Экономия фиксированной ставки», “Простой доступ к сохранению”, «Фиксированные облигации ставок», “Online -Savings Account”, «Легкий сберегательный счет», ' Сберегательные счета в Великобритании '], 4: [' Учетная запись isa ' ' ISA ', ' isa eanssing ']}}} < P > Let & Rsquo; S нажал к кадре данных:
< p >TOMA_GROUPS_LST = [] для k, l в tome_groups_numbered.items (): для V в L: Touma_groups_lst.adpend ([k, v]) tome_groups_dictdf = pd.dataframe (tome_groups_lst, columns = [' tome_group_no ', ' Ключевое слово ']) TOMA_GROUPS_DICTDF < Decoding = "async" class = "wp-image-413768 size-full" src = "https://www.searchenginejournal.com/wp-content/uploads/2021/07/07/7_keywords_cluster-60f41941c9baa" 67/71_keywords_cluster-60f41941c9baa ". "https://www.searchenginejournal.com/wp-content/uploads/2021/07/7/7_keywords_clustel-60f41941c9baa-sej.png.png 672w. https://www.searchenginejournal.com/wp-content/uploads/2021/07/7/7_keywords_clustel-60f41941c9baa-sej-480x881.png 480W «Размеры». < P > Integlies В поисках выше, показывают хороший подход ключевых слов внутри них, который, вероятно, достигнет SEO -Expert.
< P > Хотя мы использовали только небольшой набор ключевых слов, метод, очевидно, может быть масштабирован до тысяч (если не больше).
< H2 > Активация выхода, чтобы сделать ваш поиск лучше
< p > Конечно, вышеупомянутое можно взять с помощью нейронных сетей, обрабатывая содержание рейтинга для более точных кластеров и кластеров именования, как уже это делают коммерческие продукты.
< p > На данный момент, с этим выходом, вы можете:
< ul > < li > Включите это в свою собственную информационную панель SEO, чтобы сделать ваши тенденции, а SEO сообщали более значительными.
< li > Создайте лучшие платные поисковые кампании, структурируя свои учетные записи Google, используя поиск более высокого качества.
< li > ob ' Комбинация избытка для поиска E -Commerce.
< li > Структура покупки в системе сайта в соответствии с намерением поиска вместо типичного каталога продуктов.
< p > i & Rsquo; Я уверен, что есть больше приложений, я предполагаю, что это упомянуто & ndash; Не стесняйтесь комментировать любое важное, что я не упоминал.
< P > В любом случае, изучение ключевого слова SEO стало немного более масштабированным, точным и быстрее!
< P > Загрузите полный код здесь для вашего собственного использования.