4 13, 2013 - Категория: Продвижение    Комментарии

Как быстро обработать большое ядро запросов

SEO-хак: как увеличить скорость обработки семантического ядра

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

Чтобы приступить к анализу такого ядра надо:

  • проверить запросы на дубликаты
  • классифицировать запросы и разбить их по семантическим группам

Первое что приходит в голову при работе с таким объемом данных - необходима автоматизация. И именно о том, как автоматизировать процесс первоначальной подготовки таблицы к дальнейшему анализу и пойдет речь в данной заметке.

Я буду рассказывать на примере Open Office.

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

Самым первым шагом в обработке таблицы будет проверка строк таблицы на дубликаты. Чтобы отфильтровать уникальные запросы, надо перейти в ДАННЫЕ - ФИЛЬТР - СТАНДАРТНЫЙ ФИЛЬТР 

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

и сделать там пару движений:

установить ЗНАЧЕНИЕ "не пусто" и поставить галочку "БЕЗ ПОВТОРЕНИЙ"

На этом скриншоте я показал стрелочками поля, которые надо изменять

удалить дубликаты строк в open office

Это действие просто скроет дублирующиеся строки в выделенном столбце, поэтому данные надо перенести на другой лист или в другой файл. Итак, первый этап обработки завершен и мы переходим к этапу 2.

Скрипт упрощения классификации запросов

Если удаление дубликатов можно было сделать и в экселе, то для быстрой обработки и классификации данных мы воспользуемся решением, описанным у Сергея Кокшарова тут

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

Ведь не всегда мы работаем только над информационными запросами — очень часто есть коммерческие ресурсы, главная задача которых — продажи. И если сидеть и руками/глазами фильтровать и сортировать даже 2 тысячи запросов, то на это уйдет полдня. К тому же человеческий фактор тут тоже сыграет роль и процент ошибок будет больше. Поэтому начинаем упрощать работу и искать какие-нибудь хаки, чтобы и работу качественно сделать, и времени потратить немного.

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

Сутью такой классификации будет сопоставление определенных меток (категорий) на основе вхождения в запросы. Не совсем внятно объяснил, поэтому постараюсь объяснить на примере ресурса, посвященного продукции Apple.

Я поделю все запросы на категории:

  • транзакционные (в статистике запросов будут встречаться слова «купить, заказать, цена, стоимость»),
  • информационные (в запросах очень часто встречаются характерные слова «где, как, почему»),
  • отзывы (отзыв, обзор, характеристика...)
  • и ряд других (аксессуары, город, название продукции, название фирмы и т. д.) - зависит только от вашей фантазии и необходимости подробной детализации

После того, как мы разделили все запросы на категории, нам надо описать характерные слова-признаки этой категории (или части слов). Например, заказ, почему, как, для, отзыв.

После составления слов-признаков, пора уже и автоматизироваться!

Создаем новый документ с 2 листами. Один называем «Ядро» (именно так, с большой буквы) и в столбик «А» со второй строки вставляем все наши запросы (Ячейку А1 можно обозвать «запрос», «фраза» или еще как-нибудь).

На втором листе «Карта» мы как раз и расписываем слова-признаки (см.скриншот)

点击查看原图

После того, как создали карту, запускаем макрос

Код макроса был честно взят сhttp://devaka.ru

Sub Categorize  Dim Cursor As Object, Map As Object, Range As Object  Dim NumColumns As long, Col As long, NumRows As long  Dim Head As String  Map = ThisComponent.Sheets.getByName("Карта")  Cursor = Map.createCursor  Cursor.gotoEndOfUsedArea(True)  NumColumns = Cursor.Columns.Count  For Col = 0 To NumColumns - 1 Step 2  Head = Map.getCellByPosition(Col, 0).String  If Head <> "" Then  NumRows = LastRowWithData(Col) + 1  ParseMap(Head, Col, NumRows)  End If  Next Col    MsgBox "Обработка ядра завершена. Теперь можно посетить http://devaka.ru/ :) и почитать http://ekbseo.ru/ ;)" End Sub Sub ParseMap (ByVal Head as String, ByVal Col as long, ByVal NumMarks as long)  Dim Names(1 To NumMarks) As String, Keys(1 To NumMarks) As String  Dim Core As Object, Map As Object, Cell As Object, Source As Object, Cursor As Object  Dim I, J, NumRows, CellIndex    CellIndex = GetCellByName(Head)  Core = ThisComponent.Sheets.getByName("Ядро")  Map = ThisComponent.Sheets.getByName("Карта")  For I = 1 To NumMarks  Keys(I) = Map.getCellByPosition(Col, I-1).String  Names(I) = Map.getCellByPosition(Col + 1, I-1).String  Next I  Cursor = Core.createCursor  Cursor.gotoEndOfUsedArea(True)  NumRows = Cursor.Rows.Count    For I = 1 To NumRows  Source = Core.getCellByPosition(0, I)  Cell = Core.getCellByPosition(CellIndex, I)  For J = 1 To NumMarks  If InStr(LCase(Source.String), LCase(Keys(J))) > 0 Then  Cell.String = Names(J)  End If  Next J  Next I End Sub Function GetCellByName (Head as String)  Dim Core As Object, Cursor As Object  Dim J    Core = ThisComponent.Sheets.getByName("Ядро")  Cursor = Core.createCursor  Cursor.gotoEndOfUsedArea(True)  NumColumns = Cursor.Columns.Count    For J = 1 To NumColumns  If Core.getCellByPosition(J - 1, 0).String = Head Then  GetCellByName = J - 1  Exit Function  End If  Next    Core.Columns.insertByIndex(1, 1)  Core.getCellByPosition(1, 0).String = Head  GetCellByName = 1 End Function Function LastRowWithData (ColumnIndex as long) as long  Dim Cursor As Object, Range As Object, Map As Object  Dim LastRowOfUsedArea as long, R as long  Dim RangeData  Map = ThisComponent.Sheets.getByName("Карта")  Cursor = Map.createCursor  Cursor.gotoEndOfUsedArea(False)  LastRowOfUsedArea = Cursor.RangeAddress.EndRow  Range = Map.getCellRangeByPosition(ColumnIndex, 0, ColumnIndex, LastRowOfUsedArea)  Cursor = Map.createCursorByRange(Range)  RangeData = Cursor.getDataArray  For R = UBound(RangeData) To LBound(RangeData) Step - 1  If RangeData(R)(0) <> "" then  LastRowWithData = R  Exit Function  End If  Next End Function

Скрипт работает не моментально, так что наберитесь терпения. У меня 12 тысяч запросов обработалось примерно за 3 минуты, в результате на листе «Ядро» появляется несколько новых столбиков. Ну а это уже позволяет работать с отфильтрованными по категориям запросами («данные-фильтр-автофильтр») - чистить от мусорных запросов, расставлять схему перелинковки — в общем, продолжать работу seo дальше.

Сколько можно сэкономить времени при автоматизации seo-работ

Теперь считаем трудозатраты (время — тоже своего рода труд)

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

2. На фильтрацию дублей — минута (руками — минимум 4 часа)

3. На составление слов-признаков: полчаса (руками — не делаем)

4. На классификацию: 3 минуты (руками — минимум 4 часа). Итого сэкономлено минимум 7.5 часов (или почти полный рабочий день).

Итого, при автоматизации только на этом этапе мы экономим почти 8 часов рабочего времени
Буду очень признателен за активную ссылку на источник при копировании, а также за нажатия кнопок соцсетей 

Читайте также про:

Идеальная спам-ссылка

Shopify

Как раскрутить интернет-магазин

Создание сайта турагентства

3 Комментарий

  • Спасибо, даже блондинка поняла. Облегчает жизнь  такой скрипт, это точно

  • Что-то код скрипта не работает

      • @Лёха:да, оригинальный код берите у автора

Есть что сказать? Добавьте комментарий!