Новый способ сбора и кластеризации семантического ядра

Новый способ сбора и кластеризации семантического ядра

Схема парсинга

Через полтора месяца начинается марафон Спарта от Пузата. Я в деле, уже купил, есть море энергии и желания продолжать движуху из сайтами.

Во время Спарты нужно выбрать нишу, собрать для нее семантическое ядро, и опубликовать 110 сайтов меньше чем за 3 месяца. У меня уже есть налаженный конвейер по всем этапам — от составления ТЗ, до публикации готового текста на сайт.

Вопрос только в семантике. Ее можно собирать либо вручную, либо отдать на аутсорс. Вручную собирать я умею, но это долго. Причем основная проблема именно в разгруппировке. Сбор идет автоматически, а вот вручную разгруппировывать занимает кучу времени.

Аутсорс же стоит дорого. При средней цене 3 рубля/ключ ядро в 10 000 слов обойдется в 30 000 рублей. Это порядка 60 статей. Но у меня будет ядро намного больше, и стоять будет тоже в разы больше. Пока что отдавать ядро на аутсорс я не хочу.

Конкуренты наше все

Я начал думать, как же ускорить и автоматизировать сбор семантики. Я пообщался с Максимом Козловым, он поделился идеей сбора Title конкурентов. Мы собираем Title конкурентов, и по сути это темы статей. Дальше можно делать досбор, парсинг и т.д.

Это крутая идея, но есть проблемы.

  • У нас нет ключевых слов — только Title. Это значит, что, во первых, часть тем у нас будет просто неохвачена. Конкуренты могли что-то пропустить. Если бы у нас была полная семантика — мы бы вытянули эти темы, разгруппируя слова.
  • Поскольку у нас нет семантики, мы не можем снимать позиции статей, и понимать, есть ли какой-то рост, прогресс.
  • Если конкуренты слабые — этот способ плохо сработает.

Поэтому я думал, как же сделать все оптимально, но в то же время быстро. Ясно, что анализ конкурентов — это шаг в правильном направлении. Ведь они уже сделали много работы, повписывали ключевые слова в Title, в текст и т.д. Нужно только проанализировать эти данные.

И тут я понял. Нужно сначала собрать семантику, а потом разбросать ее по публикациям конкурентов. Часть запросов останется неразгруппированной — это да. Но большую часть работы сделает машина и конкуренты 🙂

Я собрал все свои наработки, добавил недостающие шаги, объединил все в одну схему.

Получилась почти научная публикация 🙂

Вот полная схема сбора ядра:

Схема парсинга

Пройдемся по шагам.

Парсинг и чистка ключевых слов в KeyCollector

Сначала нужно собрать и почистить семантику. Все, как обычно — берем вводные слова, парсим их, делаем чистку, делаем вторую итерацию парсинга. От этого никуда не уйти.

Альтернативный вариант — использовать сервис MOAB. Скорей всего, я его и использую. За пару тысяч рублей я соберу всю семантику с частоткой за пару часов. Учитывая цену прокси, антикапчи и собственного времени, получится недорого.

Сбор и парсинг узкотематических конкурентов

На самом деле, этот шаг уже частично будет сделан. Список конкурентов у нас будет после анализа ниши. Нужно будет только как-то пропарсить их.

Для этого я написал специальный софт. На вход даем домены, на выходе получаем все страницы этого сайта со всеми нужными данными — Title, H1, Description, текст. Выглядит примерно так:

Страницы проекта

Все это лежит в базе данных и доступно для дальнейшего анализа.

Первичная чистка страниц конкурентов

Под первичной чисткой я понимаю удаление служебных страниц, меню, карты сайта и прочих мусорных страниц, которые неизбежно появятся при парсинге.

То есть, нужно будет вручную просмотреть конкурентов, и поудалять мусорные страницы. Частично я отсекаю их при парсинге, но здесь будет немного ручной работы.

Удаление дублей страниц конкурентов

Идея в том, что если взять несколько сайтов одной тематики, у них будут темы статей, которые пересекаются или почти пересекаются. Это нормально.

Но мы же берем несколько конкурентов, чтобы охватить побольше тем, верно? Поэтому нам нужно удалить дубли страниц.

Вручную сравнивать сайты конкурентов — неблагодарное занятие. Поэтому выгружаем все Title списком, и сервисом фильтрации уникальных фраз получаем максимально непохожие Title.

Дальше используем сервис Списки. Из всех Title вычитаем максимально непохожие (уникальные) Title, и получаем список Title, которые нужно удалить. Удаляем их из базы данных.

На этом этапе у нас есть объединенные с нескольких конкурентов данные. Можно приступать к следующему шагу.

Автоматическая группировка

Это самый сок.

Идея в том, что для каждого ключевого слова можно найти максимально релевантную ему страницу конкурента.

Я использую для оценки релевантности скоринговую формулу. Если есть прямое вхождение ключевика в Title — я даю, условно, 3 балла. Если есть разбавочное вхождение в текст — 0.5 балла.

Я учитываю вхождения отдельно в Title, H1, Description, текст. За прямые вхождения идет больше баллов, чем за разбавочные.

Таким образом, я оцениваю каждую страницу конкурента для конкретного ключевого слова и выставляю определенный балл этой странице. Чем этот балл выше — тем слово релевантней для этой страницы.

Фактически, я сделал поисковый движок, который не интересуется ПФ, картинками и т.д, смотрит только на ключевые слова. И ищет этот движок только по узкому набору заданных конкурентов.

Вот пример того, о чем я говорю:

Оценка релевантности

Получается, для каждого ключевого слова мы можем выбрать наиболее релевантную ему страницу конкурента.

Остается еще немного.

Для каждого ключевого слова выбираем максимально релевантную ему страницу. Добавляем эту ключевую фразу в список фраз этой страницы. Выглядит примерно так:

Авторазгруппировка

Если какая-то фраза набрала слишком мало баллов, и нельзя с уверенностью отнести ее к какой-либо странице — добавляем ее в Нераспределенные слова.

После такой кластеризации видим следующее:

Результат кластеризации

Я взял один из сайтов, для которых у меня есть собранные ТЗ из семантикой на эти ТЗ. Добавил.

Результат получился многообещающим. Часть фраз не разгруппировалась (не набрала достаточно баллов), но примерно 80% фраз попали в правильные разделы.

Экспорт и доработка в KeyCollector

Последний этап — ручная доводка.

Во первых, у нас есть группа нераспределенных фраз. С ними надо что-то делать. Там может быть как мусор, так и вполне себе валидные фразы, которые автомат не смог распределить.

Во вторых, в уже разгруппированных группах могут быть глюки алгоритма. Вряд ли их будет много, но вручную просмотреть группы нужно будет.

Делать все это удобно в KeyCollector. Поэтому из своего софта я выгружаю это все в KeyCollector в формате Группа:Ключ. Трачу еще пару часов-полдня времени, и получаю собранную семантику.

Профит? Сэкономленное время. Можно сэкономить пару дней минимум на ядре. Куча нервов. Ну и бонусом будет база конкурентов, по которой можно много что сделать. Например, проверить как сильно они используют ключевики, в каком виде.

Чем это отличается от обычной автоматической разгруппировки?

Мы парсим не всю выдачу. В выдаче есть крупные, мелкие сайты. Есть узконишевые, нужные нам. А есть Википедия, которая нам ни к чему. Или Youtube. Или Яндекс журнал.

Мы ограничиваемся вручную отобранным пулом конкурентов, которые уже повписывали ключевые слова (если переспамили — вообще шикарно, алгоритму легче). И мы получаем не просто группы, а тему (Title), и группу ключевых слов для этого Title.

Результат получится в разы более качественный.

На какой это все стадии

На стадии Proof Of Concept. Все скриншоты реальны, программа работает, парсит конкурентов. Но есть нюансы.

Парсинг пока неидеальный. Нужно допилить, чтобы захватывал поменьше мусора. Я отфильтровываю ссылки на картинки, pdf и т.д., но еще есть куда работать.

Нужно допилить нюансы вроде массового удаления страниц по Title.

Система скоринга неидеальна. Я планирую еще разбивать ключевые фразы на отдельные слова, и искать по ним тоже, давая за это небольшие баллы. Это повысит точность в сложных случаях.

Нужно сделать экспорт в KeyCollector. Час работы, но его еще нет.

По моим оценкам, нужно потратить примерно день или два, чтобы довести программу до юзабельного состояния.

Будет ли в паблике?

Вряд ли.

Во первых, это частично ручная работа. Это сэкономит кучу времени, но только понимающему человеку. Это не полностью автоматический сбор семантики, ручная работа остается.

Во вторых, это жрет кучу ресурсов. Разгруппировка 30 ключевых фраз на 300 страницах заняла 10 секунд на моем i7 с 8 ГБ оперативной памяти. Это порядка 9 000 условных операций определения релевантности — примерно 900 операций/секунда.

Я собираюсь разгруппировывать блоки по 3-10 тыс. ключевых слов на выборке конкурентов в 500-1000 страниц. Это порядка 1 млн. операций, и может занять до 24 и больше часов. Это на мощной машине. Аренда VPS такой мощности будет стоять неоправданно дорого.

Возможно, я буду рассматривать варианты индивидуальных заказов, но это неточно, и нескоро.

Зачем я это все рассказываю?

Знаниями нужно делиться. Возможно, этой статьей я натолкну кого-то на хорошую мысль, и через пару месяцев появится сервис, который по нажатию кнопки Семантика будет выдавать разгруппированное ядро по стоимости 100 рублей/штука.

Второй момент — я хочу показать, что к созданию информационных сайтов можно подходить как к интересному занятию, в котором еще много чего неоткрыто, неавтоматизировано. Сюда еще не пришли большие дяди — Google, Yandex (пытается), множества крутых инструментов и подходов еще просто нет.

По этой же причине я сделал ERP Textmania — на рынке почти нет конкурентов. По этой же причине я делаю и рассказываю о текущем инструменте. Я не знаю сервисов-аналогов, которые делают то, что делаю я. Возможно, в каком-то закрытом обществе что-то есть, но в паблике — я не знаю.

Есть еще куча областей для инфосайтов, где можно сделать лучше. Та же монетизация. Realbig крутые парни, я пользуюсь ими. Но в далеких планах у меня разработка своей системы монетизации. Основная фишка — это автоматическое тестирование и выбор лучших блоков, без ручного вмешательства. Но это будет еще нескоро.

Пишите ваши предложения по улучшениям, что вы думаете в общем про описанную систему сбора семантики.

Вам также может понравиться

Об авторе ivan_melnichuk

Программист и вебмастер. Делаю сайты, обучаю людей программированию.

15 comments

  1. Олег says:

    Я хз чего вы тут велосипеды придумываете, когда есть кластеризация в overlead по 20 копеек за ключ. Бьют нейросетей, я доволен.

  2. Анастасия says:

    первый мой сайт (ему лет 5-6)сделан по тайтлам одного раздела крупного портала , тьфу тьфу сайт жив , его не берут фильтры, хотя статьи я заказывала по 5р/1000симв, масимальное кол-во траф в сутки было 2к, сейчас он постепенно упал до 1.2-1.5к не обновляю , ядро РЕАЛЬНО было написано в тетрадке

    но на эти 300 статей реально получить раз в 5 больше трафа. имхо сейчас ооооч сложно найти дешевые тексты (дешевые тексты затратны), поэтому стоит проработать ядро, нет смысла писать по тайтлу (без конвеера), когда затраты на контент (текст+оформление)большие, мне оч интересно будет ли сейчас жить такой сайт , если он будет с 0 в наше время

    что касается идеи , то стоит обратить внимание , что конкурент выкладывает не все статьи разом (я тоже раскидываю ключи по статьям конкурентов), даже самый полный конкурент это максимум 70% охвата полного ядра (если брать по тайтлам), минус ключи которые мы недополучили от него по кей со(например)по нескольким причинам (не все статьи конкурента в топе, тк у конкурентов тоже есть брак), еще минус 20%

    итого приходим к выводу :чтобы сдирать тайтлы надо дешевый контент

    нужен полный план (собирать н2, н3 недостаточно, например в женской тематике есть сайты в неконкурентных нишах- подзаголовки выделяют жирным! ), при заказе на аутсерс исполнители идут по меньшему сопротивлению =》задача: нужен контроль качества составления плана

    есть план пишем тексты без ключей, возникает след задача: проверка читаемости, редакторы пролистывают тексты , нужно какое то тех решение контроля за редакторами (даже после проверки через орфограммку, главред, тургенев и др)текст может быть не читаем и это вселенская печалька

    со стремным оформлением можно пережить, делала тест (2 сайта по 1 ядру), 400 статей: хорошие тексты, 1 картинка, пара видео заходят также как и с фул обвесом , разница в 10 -15сек просмотра страницы, да и речь не о пф, пс сьедают тексты и это факт

    мой итог: у меня живет сайт по тайтлам и приносит свои 10к,

    проблема ядра по тайтлам в дешевых текстах

    1. ivan_melnichuk ( User Karma: 0 ) says:

      Крутой коммент, спасибо!

      Если вкратце ответить, то отвечу так. После первичной раскидки по тайтлам еще останется блок неразгрупированных ключей. Вот из них и можно будет довытащить нужные темы.

      1. Анастасия says:

        Иван, правильно понимаю - по тайтлам вычленяем вводные слова и парсим через КК + моаб ?

        а кейсо используйте?

        уже есть наработки или только на марафене делать собираетесь ?

        ПС есть идеи как можно дернуть ключи ПРЯМО из статьи?

        по сути - текст грузим в адвего симант анализ - убираем стоп слова-остается сухой остаток, в адвего это 《семантич ядро》 - берем все похожие слова на клавный ключ , что только делать с синонимами (например: 1. амниотомия 2. прокол плодного пузыря)

        конечно же не руками делать это все

        1. ivan_melnichuk ( User Karma: 0 ) says:

          По ключам, как дернуть их из статьи — да, идеи есть, это называется «keyword mining», я находил англоязычные статьи на эту тему. Но пока я ничего такого не реализовал, хотя возможность есть.

  3. joy says:

    Там у Экселя новая фишка будет — парсинг сайтов, уже анонсировали. Еще проще будет.

    1. ivan_melnichuk ( User Karma: 0 ) says:

      Ну, в Google Docs давно уже есть, я даже пользовался. Ограниченная в общем штука, захочешь парсить Яндекс Вордстат или что-то в этом роде — все равно вернешься к КейКоллектору. Ну а парочку тайтлов и сейчас можешь в Google таблицах спарсить.

  4. Анатолий says:

    Тоже мне Америку открыл. Проблема найти хороших узкопрофильных конкурентов, а если они и есть, то в нише ловить нечего.

    1. Максим says:

      1. Найти узконишевых конкурентов — абсолютно не проблема. Сегодня сервисы позволяют находить одномоментно до 70-80% всех конкурентов.
      2.Если конкурентов нет — то в 95% случаев в ниши делать нечего, так как она не прибыльна. Исключение — 5% под малостраничники.

      Поэтому, ни единый ваш довод не актуальныйю

  5. Максим says:

    Ваня, это именно то, о чем я тебе вчера говорил )))
    Возможно, можно будет уменьшить нагрузку на машину в секунду, удлинив немного время кластеризации. В общем, ты точно что-то придумаешь )))

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *