Осторожно, двери открываютсяНиколай Байбородин (baiborodin@gmail.com) Хакер, номер #113, стр. 113-110-1 Собираем недешевый дорген на C#Продолжаем серию статей о самостоятельном создании SEO-софта. Сегодня мы пересечем зыбкую грань, разделяющую белую и черную оптимизации. Оставив в стороне моральную сторону вопроса и возможные санкции со стороны поисковиков, сосредоточим внимание на технических вопросах создания главного инструмента черных оптимизаторов — генератора дорвеев или доргена. Введение для чайниковОчень кратко о генерации дорвеев для тех, кто еще не в теме. Итак, дорвей (doorway) или просто дор. Это веб страница, через которую можно попасть на другие страницы этого же или другого сайта. Если читатель застал зарождение Рунета, он наверняка помнит, что большинство веб сайтов открывались со страницы, не содержащей ничего, кроме заголовка, фуфлыжной картинки и иногда ссылок на различные версии сайта под разные кодировки. В те времена поддержка нескольких кодировок в рамках одного браузера была большой проблемой, не говоря уже об автоматическом определении кодировки. Эта страница и есть doorway. КПД был ниже уровня плинтуса. Для чего она тогда? А ни для чего :). Просто, так было модно, тенденции веб-дизайна, знаете ли. А каким боком здесь поисковая оптимизация? Подогнать под особенности конкретного поискового движка только одну страницу и вывести ее в топ гораздо проще, чем выводить весь ресурс. А заполучив страницу в топах по определенным запросам, можно направлять с нее пользователей на другие страницы ресурса. Продолжим фантазировать. Выведя в топ такую страницу по очень популярному среди юзверей запросу, можно поиметь неслабый трафик. И опять-таки переправить по ссылкам на другие страницы своего ресурса. Или не переправить, а продать, разместив в дорвее ссылки на проплаченные ресурсы. Так мы постепенно превращаемся из веб дизайнера-бессребреника в матерого продавца поискового трафика. Продавать трафик можно либо самостоятельно, либо через посредников, что гораздо выгоднее. Но выбиться в топ по высокочастотному запросу и, тем более, удержаться там — задача не из тривиальных. Куда проще занять верхние позиции по низкочастотным запросам. Увы, по такому запросу и посетителей к нам придет гораздо меньше. Следовательно, на продаже трафика мы срубим меньше капусты. Выход? Окучивать как можно больше низкочастотных запросов, создавая под каждый из них свой дор и выводя его в топ SERPa. Чем больше доров, тем больше лавэ – зависимость прямая, как трамвайная шпала. Есть, правда, один вопрос, который может не давать спокойно спать будущему сетевому олигарху. «А что, если пользователь, зайдя на doorway, сбежит оттуда, не перейдя ни по одной ссылке?». Правильный вопрос, потому что юзверь сейчас пошел тертый, пуганый и куда попало, его не заманишь. Да и не надо. Потому что у нас есть такое чудо, как автоматический редирект (исполненный чаще всего в виде сценария на языке JavaScript), перекидывающий пользователя к клиенту, проплатившему трафик еще до того, как браузер успеет показать содержимое дора. Вот такая незамысловатая технология. Однако здесь, как и в любом другом деле, не обойтись без нюансов. Их мы и обсудим в следующей части статьи. Achtung! Грабли!Первое, что необходимо знать начинающему заводчику доров – эта технология всеми поисковыми системами относится к так называемой «черной оптимизации». То есть к методам, которые расцениваются как нарушение правил игры и безжалостно караются системой модерации поисковиков. Если твой дор спалили, то он навсегда вылетает не только из топа, но и заносится в черный список поискового индекса, зарабатывая пожизненный бан. Надо сказать, что поисковики весьма преуспели в борьбе с дорвеями и валят их пачками. Отсюда безрадостный вывод – мало того, что для приемлемого дохода необходимо иметь не один дорвей, а целую их сеть, так еще и процедура создания дорвеев представляет собой непрерывный процесс. Короче, сизифов труд. Взамен попавших в бан приходится постоянно создавать и выводить в топ новые доры. Вторая проблема заключается в том, что, несмотря на заявления некоторых безответственных товарищей, редирект, даже выполненный в виде JavaScript сценария, успешно палится практически всеми поисковиками, и страница с редиректом опять-таки летит в бан. Одно из решений проблемы – шифрование редиректа. Алгоритмы составления поискового индекса постоянно обновляются, в том числе и совершенствуя методы борьбы с черной оптимизацией. Следовательно, приемы редиректа также нуждаются в постоянном обновлении. И тут появляюсь я – весь такой в красномКонечно же, читатель догадался, кто у нас сегодня в роли супермена. Это – дорген, программа, основное назначение которой заключается в автоматизации рутинного и однообразного труда оптимизатора по быстрому и эффективному созданию дорвеев с учетом особенностей поисковых алгоритмов. Каким требованиям должен удовлетворять дорген? Что он должен уметь делать обязательно, а что является всего лишь данью моде? Ответы на эти вопросы должен знать не только тот, кто собрался написать собственный дорген, но и тот, кто решился на его покупку. Ниже автор постарался привести наиболее полный список возможностей доргена. Тем не менее, не стоит думать, что это исчерпывающий список. Как и не стоит пытаться реализовать сразу все опции. Наиболее эффективный подход – выбрать важный (на данный момент данному пользователю) функционал и его реализовать. В последующих версиях можно будет наращивать возможности. Итак, список функциональных возможностей профессионального доргена включает в себя:
Список, как видишь, впечатляет. Дорген, обладающий подобной функциональностью стоит не один килограмм зелени. У тебя же, при условии прямых рук, есть реальная маза сделать его самостоятельно. А там уже, как говорится: «Хочешь, ешь морковку, хочешь по-другому используй» (© Фаина Раневская). Хочешь – доры клепай, хочешь – доргеном своим барыжничай. Если смысл некоторых из перечисленных функций тебе не понятен – это лишний шанс углубить свои познания в области поисковой оптимизации. Ссылки интересных ресурсов я тебе накидал (смотри врезки). С чего начать?Именно такой вопрос задает себе большинство тех, кто решил написать свой собственный приватный мега рулезный дорген. Вопрос часто не находит ответа, а дорген так и остается ненаписанным. Сейчас мы вместе преодолеем этот психологический барьер. Прежде всего, определяйся с той минимальной функциональностью, которая тебе нужна в будущей проге. Не увлекайся и выбери действительно критический минимум, который и будет отличать будущий софт от, скажем, блокнота или CD Ejector'a :). Навороты можно добавлять постепенно, имея на руках уже функционирующий дорген и используя его в своих грязных и не очень делишках. Короче, кури методологии итерационной разработки ПО. Функциональность для первого раза будет минимальной – выбор ключевых фраз, шаблона, исходного текста, частоты ключевиков и количество страниц, генерируемых под каждую ключевую фразу. Интерфейс можешь построить, как у меня – или придумать свой вариант. Список ключевых фраз будет храниться в обычном текстовом файле. В качестве разделителя – перевод строки (одна строка – одна ключевая фраза). Если не вдаваться в детали, алгоритм работы нашего доргена будут следующим. Пользователь предварительно готовит файл с ключевыми фразами и файл с шаблоном HTML-верстки. Затем в окне доргена указывает все необходимые параметры (путь к файлу с ключевиками, путь к файлу с шаблоном, количество страниц в одном доре, плотность ключевых слов, каталог для сохранения результата). Начинается главное действо. Прога перебирает список ключевиков, считает общее количество слов в заготовленном текстовом материале, рассчитывает количество вхождений ключевика в текст на основе заданного показателя плотности и в случайном либо заданном порядке помещает ключевые фразы в исходный текст. Вставляем получившийся текст в HTML шаблон в соответствии с заранее подготовленной разметкой. Добавляем теги <title>, <head> и сохраняем получившийся файл. Повторяем для каждой ключевой фразы заданное количество раз. Финт №1. Когда дело дойдет до сохранения на винте готового дорвея, разумным шагом будет назначить ключевую фразу, под которую оптимизировалась страница в качестве имени файла. Это прибавит ей вес при оценке релевантности. Финт №2. Сохраняя файл с дором, заточенным под ключевую фразу из двух и более слов, в названии файла эти слова лучше разделять с помощью дефиса, а не нижнего подчеркивания, как привыкли многие кодеры. Причина проста: поисковики расценивают две лексемы, объединенные с помощью нижнего подчеркивания как одно слово (которое может оказаться поисковику неизвестным), в то время как составное слово с использованием дефиса прекрасно распознается как два отдельных слова. Теперь о шаблоне. Это обычный шаблон HTML-документа, каких в сети до фига и больше. Можешь выбрать тот, что тебе нравится. Автору приходилось сталкиваться с двумя подходами к организации HTML-шаблонов в доргене. Первый – шаблоны, жестко прописанные в доргене. Выбор фиксирован и невелик. Второй – возможность использовать любые HTML-файлы в качестве шаблона (с предварительным добавлением туда специальной разметки). Разметка представляет собой набор известных доргену ключей, по которым он в процессе разбора шаблона узнает, какой элемент нужно вставить в этом месте. Например:
И так далее. Кстати, пример разметки взят с сайта www.klikforum.com, где ты можешь расширить свои знания по теории дороводства. Недостаток подхода в том, что мы привязываем логику работы доргена к конкретному шаблону, жестко прописывая, где и что должно находиться. Я советую тебе поступить иначе: обозначить в шаблоне основные его секции, а что в какой секции размещать – пусть решает программа с помощью заложенных в нее алгоритмов. В простейшем шаблоне секций будет не так много – заголовок, текст, навигация, подвал. В более сложном можно расширить список. Нюансы мы обсудили. Пора приниматься за работу. Муки творчестваНачнем с загрузки списка ключевых фраз. Для этого хорошо подойдет элемент управления checkedListBox. От простого списка он отличается возможностью выбора элементов с помощью чекбоксов. Заполняться список будет при нажатии соответствующей кнопки. Обработчик, я бы сказал, не прост, а тривиален: DialogResult result = fileChooser.ShowDialog(); String fileName; if (result == DialogResult.Cancel)return; fileName = fileChooser.FileName; if (fileName == "" || fileName == null) MessageBox.Show("Ошибка выбора файла", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); else { input = new StreamReader(fileName); makeKeyList(); } Смысл написанного выше – вывести диалог открытия файла, корректно обработать возможные ситуации и передать управление функции makeKeyList(). private void makeKeyList() { String a = null; while (!input.EndOfStream) { a = input.ReadLine(); if (a != null) checkedListBox1.Items.Add(a); } input.Close(); } Другими словами, читаем файл до одурения (до EndOfStream) и подсовываем строчки компоненту checkedListBox. Аналогичным образом обрабатываем ввод остальных параметров (подробности смотри в исходниках на диске). После того, как в листбокс загружен список ключевых фраз, нужно реализовать механизм выбора отдельных ключевиков, для которых будут создаваться страницы: private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) { String item = checkedListBox1.SelectedItem.ToString(); if (e.NewValue == CheckState.Checked)addKey(item); else remKey(item); } private void addKey(String val) { if (keyList == null) keyList = new ArrayList(1); keyList.Add(val); } private void remKey(String val) { keyList.Remove(val); } Думаю, все понятно – ключевики, выбранные для дальнейшего использования храним в списке keyList. Реагируем на действия пользователя через событие NewValue. Поскольку дикий юзверь непредсказуем и может жать на чекбокс не только с целью выбрать ключевую фразу, но и отменить свой выбор, предусмотрена реакция на оба действия – методы addKey()и remKey(). Обработав все элементы пользовательского интерфейса, дорген находится, что называется, на взводе и готов выстрелить. Создание дорвеев представляет собой последовательный процесс. Ниже я перечислил его основные этапы: 1. Читаем в текстовую переменную HTML шаблон; 2. Читаем в текстовую переменную текст дора; 3. Читаем в текстовую переменную текст редиректа; 4. Перебираем в цикле ключевики;
Исходный текст этого алгоритма слишком объемен, чтобы его публиковать в журнале, поэтому изучай исходник, выложенный на диске. Остановимся на реализации основных моментов. Для формирования содержимого дора необходимо исходный текст разделить на отдельные лексемы (слова) и посчитать их общее количество. Исходя из заданной пользователем плотности, рассчитываем количество повторов ключевой фразы или слова. Теперь, зная количество повторов фразы в тексте, нужно ее там разместить. Будет уместным использовать алгоритм, позволяющий получить текст, наиболее точно соответствующий естественному. Не будем ничего усложнять – наша цель освоить общую концепцию создания доргенов. Обойдемся обычным равномерным распределением по тексту. String[] lex = content.Split(); int lexCount = lex.Length; int keyTotalAmount = (int)(numericUpDown2.Value / 100 * lexCount); if (keyTotalAmount != 0) { int step = (int)(lexCount / keyTotalAmount); for (int k = 0; k <= keyTotalAmount; k++) { if (step <= lex.Length) { lex[step] = (String)keyList[i]; step += step; } } } Несколько комментариев. Для разделения строки на отдельные лексемы используется метод Split(), возвращающий массив лексем. Вычисляя количество вхождений ключевика в текст, не забудь привести результат к целочисленному значению. Как только текст будущего дорвея сформирован (кстати, на этом этапе неплохо дополнительно предусмотреть вставку тегов <h>, <i>, <b>), работаем с ключевой фразой для повышения значимости ключевика. Думаю, ты справишься самостоятельно. Чтобы вставить в соответствующие позиции шаблона нужные элементы, можно прикрутить стандартную функцию Replace(), которая заменяет один фрагмент текста другим: template = templ.Replace("#title", (String)keyList[i]); template = template.Replace("#header", header); template = template.Replace("#redirect", redir); String newText = ""; for(int k = 0; k < lex.Length; k++) newText = newText + " " + lex[k]; template = template.Replace("#text", newText); Все, дор готов. Осталось записать его в отдельный файл, повторить перечисленное выше н-ное количество раз в соответствии с количеством страниц дорвея, указанным пользователем, и перейти к следующей ключевой фразе. Не забудь присвоить каждому файлу уникальное имя, правильное с точки зрения поисковой оптимизации (включающее в себя ключевую фразу). Гонка вооруженийРассмотренный в статье дорген – всего лишь демонстрация концепции. Ты можешь совершенствовать его практически бесконечно, оттачивая навыки создания софта для поисковой оптимизации. Еще раз посмотри на список того, что должен уметь идеальный дорген. Постарайся оценить его с позиции разработчика и начинай действовать. Советую начать с добавления механизма навигации и линковки доров. Затем можешь усовершенствовать алгоритм распределения ключевых фраз по тексту. Реализуй контроль объема текстовой информации, использование различных словарей (синонимов, опечаток и т.д.) и обработку исходного текста с помощью генератора цепей Маркова. И, самое главное, начни сам пользоваться своим доргеном. Тогда ты точно будешь знать, какая функциональность ему действительно необходима. Дорогу осилит идущий. Много вопросов вызывает перелинковка страниц дорвея и создание сети из нескольких дорвеев. На этот счет не существует однозначного мнения. Используют как простенькие элементарные схемы, так и сложные, основанные на математическом аппарате, использующие динамическую или кольцевую перелинковку. Первое время можно отталкиваться от идеи оформления связей в виде навигационного блока. При выборе плотности ключевых слов на странице важно соблюдать золотую середину. Заниженная плотность сделает ключевик невидимым – понизит релевантность страницы по запросам, в которые он входит. Слишком высокая плотность – прямой риск попасть под категорию «поисковый спам» и заработать бан от поисковика. Устанавливай наиболее эффективную плотность опытным путем, ориентируясь на показатель 6-8%. Одна из серьезных проблем – контент для наполнения дора. Самый простой способ: позаимствовать с родственного ресурса. Он же и самый неэффективный. Дело в том, что поисковики уже давно научились распознавать и фильтровать дубли, склеивая результаты выдачи. Выход – использовать системы автоматического перевода (прогнать текст «туда – обратно»). Или придать ему уникальности с помощью генератора текста на основе цепей Маркова. CDТебе легче вкурить тему ковыряясь в исходниках, чем читая описание алгоритмов и принципов работы программы? Нет проблем – на диске тебя ждет дорген из статьи в виде проекта для Visual Studio 2008. WWWХочешь знать все тонкости сколачивания капитала с помощью дорвеев? Тогда бегом сюда: Если тебя интересуют технологии, лежащие в основе поисковой оптимизации, посети блог, посвященный вопросам вычислительной лингвистики Здесь можно пообщаться с себе подобными :) WARNINGПомни, что использование дорвеев всеми без исключения поисковиками относится к методам черной оптимизации и жестоко карается исключением из индекса с одновременным внесением в black list. |