Разработка системы моделирования поисковой оптимизации веб-сайта
Содержание
Введение
.
Ранжирование сайтов поисковыми системами
.1
Сущность ранжирования
.2
Внутренние факторы ранжирования
.3
Внешние факторы ранжирования
.4
Поисковые машины. Алгоритм работы
.
Процессы изменения состояния популярности сайта
.1
Графы состояний рейтинга сайта, виды состояний, вероятности состояний.
.2
Описание процесса изменения рейтинга сайта, математическая модель
.
Описание работы программы: описание функциональных возможностей скрипта,
описание подпрограмм, алгоритмов и принципа работы
Заключение
Список
использованных источников
Приложение
Введение
Актуальность исследования данной работы
обусловлена тем обстоятельством, что расширение применения индивидуального
подхода к потребителям, определяемое общей тенденцией поиска частных решений в
удовлетворении потребностей, все активнее воздействует на процесс
преобразования характера отношений между производителями и потребителями.
Факторами, оказавшими наибольшее влияние на
переход отношений в новое качество, являются повсеместное внедрение
компьютерных технологий, программного обеспечения, а также интернет-технологий;
возможность автоматизации всех процедур взаимодействия с потребителями и
последующего автоматического анализа и использования полученной информации;
возможность персонализации процедур взаимодействия с клиентами; решение проблем
дефицита времени потребителей и нехватки информации для принятия ими решения о
покупке; возможность приобретения и оплаты товаров прямо через Интернет.
Появление и развитие Интернета прибавило целый
ряд инструментов, чья функция состоит в достижении цели продвижения товаров, а
также несколько дополнительных задач, связанных с использованием Сети - к ним
относятся создание и продвижение собственного web-сайта и формирование
собственного уникального имиджа в Интернете. сайт компании обычно выступает
центральным элементом коммуникативной политики, проводимой в Интернете. Поэтому
так важна задача его продвижения, от успешной реализации которой в значительной
степени зависит эффективность всей коммуникативной политики.
Целью данной работы является изучение некоторых
методов продвижения, построение математической модели поисковой оптимизации и
дальнейшая разработка системы моделирования поисковой оптимизации web-сайта в
Интернете. Данная цель предполагает раскрытие через комплекс задач: рассмотреть
теоретические подходы к обоснованию проблемы поисковой оптимизации и
ранжирования web-сайтов, уяснить сущность поисковой оптимизации и ранжирования
как предметов исследования, охарактеризовать факторы ранжирования, исследовать
специфику работы современных поисковых машин.
Методы исследования: сравнение, анализ и синтез
данных, комплексный и системный подход к изучению проблемы поисковой
оптимизации.
Теоретическая и практическая значимость
исследования состоит в том, что положения и выводы данного исследования могут
быть использованы в научно-исследовательской деятельности, а также в работе и в
учебном процессе.
1. Ранжирование сайтов поисковыми
системами
.1 Сущность ранжирования
Ранжирование представляет собой сортировку
(расстановку) сайтов в выдаче поисковых систем, которая происходит на основе
наибольшего их соответствия конкретному запросу.
Процесс ранжирования сайтов происходит следующим
образом:
поисковая система принимает запрос от
интернет-пользователя;
подбирает наиболее релевантные страницы
(документы) по данному запросу из своего индекса;
выстраивает сайты, содержащие релевантные
страницы, по наибольшему соответствию конкретному запросу - то есть ранжирует
их.
Позиция сайта по тому или иному поисковому запросу
зависит от алгоритма ранжирования поисковой системы. При этом важно учитывать
положительные и отрицательные факторы, которые смогут более точно отразить
объективные результаты.
Ранжирование происходит постоянно, при каждом
запросе пользователя при обращении к поисковой системе. При ранжировании,
расположение сайта на той или иной позиции обусловлено многими факторами,
которые учитывают поисковые машины.
Согласно тому, что разные поисковые машины,
имеют разные алгоритмы работы, то и ранжирование сайтов в них будет выполняться
по разному. Каждая поисковая система имеет собственный закрытый набор факторов
ранжирования и алгоритмы их обработки. При этом идет постоянная корректировка
алгоритма с целью улучшения результатов выдачи. Тем не менее, аналитически установлен
ряд факторов, безусловно, оказывающих влияние на ранжирование сайтов поисковыми
системами, как внешних, так и внутренних.
К внутренним факторам ранжирования, на которые
владелец сайта может влиять самостоятельно, можно отнести:
хорошо составленные заголовки;
правильно подобранные ключевые фразы;
грамотный (с точки зрения SEO) текст;
правильный код страницы;
заполненные мета-теги;
правильная внутренняя перелинковка;
возраст домена;
название домена;
зона домена;
названия страниц сайта;
регион сайта;
обновляемость сайта;
количество внешних ссылок сайта;
и т.д.
К внешним факторам ранжирования относятся:
ВИЦ сайта;сайта;сайта;ссылающихся
сайтов;ссылающихся сайтов;
ТИЦ ссылающихся сайтов;
ссылочная масса сайта;
якоря ссылок;
наличие в трастовых каталогах;
и т.д.
1.2 Внутренние факторы ранжирования
Хорошо составленные заголовки. Title является
важнейшим элементом страницы с точки зрения поисковой оптимизации. Грамотно
составить тег заголовка достаточно трудная задача, ведь необходимо соблюсти
баланс между наполнением его ключевыми словами и сохранением читабельности,
ведь именно он будет отображаться пользователю в результатах поиска, да к тому
же еще допустимая длинна составляет всего 68 символов, включая пробелы (это
означает, что заголовки большей длинны не будут индексироваться дальше 68-го
символа).
Правильно подобранные ключевые фразы. Очень
важным фактором является правильное составление семантического ядра сайта
(ключевых слов). Это является самым важным шагом в оптимизации сайта, ведь
грамотно подобранные ключевые фразы позволят попасть на хорошие позиции в
выдаче даже в очень конкурентных областях.
Грамотный (с точки зрения SEO) текст. Текст
должен обязательно иметь включения ключевых слов, тегов эмоционального
выделения ( <strong> и <em> ), но немаловажно соблюсти тонкий
баланс между нехваткой и перенасыщенностью, ведь по обе стороны лежат
опасности, с одной - не релевантность, а с другой - санкции за поисковый спам.
Правильный код страницы. HTML и CSS коды страниц
должны быть валидны. Код должен быть правильным с точки зрения SEO (заполнены
атрибуты alt и title тегов img, наиболее важная информация как можно выше на
странице и т.д.).
Заполненные мета-теги. Многие уже не обращают
внимания на теги описания страницы description и keywords, хотя при грамотном
составлении они могут оказать влияние на поисковую выдачу.
Правильная внутренняя перелинковка. Текст
страницы должен быть не просто текстом, а именно гипертекстом, составленным по
канонам SEO.
Возраст домена. Прямым образом влияет на
ранжирование сайтов.
Название домена. Ключевое слово в названии
домена позволяет увеличить релевантность продвигаемой страницы.
Зона домена. Оказывает некоторое влияние на
индексацию сайтов
Названия страниц сайта. Ключевое слово,
использованное в названии страницы сайта, позволяет получить некоторый бонус
релевантности продвигаемому запросу.
Регион сайта. Влияет на выдачу. В разных
регионах разные результаты поиска. Например, в Москве и Санкт-Петербурге на
один и тот же запрос вы получите две совершенно разных поисковых выдачи.
Обновляемость сайта. Поисковые роботы любят
сайты, которые обновляются.
Количество внешних ссылок сайта. Чем меньше, тем
лучше.
1.3 Внешние факторы ранжирования
ВИЦ сайта. Взвешенный индекс цитирования -
показатель авторитетности ресурса для Yandex.сайта. Ранг Пейджа (один из
создателей алгоритма Google) - показатель ранжирования Google.сайта. Уровень
надежности ресурса. Сильно влияет на выдачу и на вес, передаваемый внешним
ссылкам. Молодому сайту получить практически невозможно.ссылающихся сайтов. Чем
выше PR ссылающегося сайта, тем больший вес передается ссылке. ссылающихся
сайтов. Аналогично.
ТИЦ ссылающихся сайтов. Тематический индекс
цитирования Yandex’a - не влияет на выдачу, но влияет на вес, передаваемый
внешними ссылками.
Ссылочная масса сайта. Количество и качество
ссылок, которые имеет сайт. К примеру множество ссылок со спамовых ресурсов
могут нанести вред, в то время как одна единственная ссылка с трастового
ресурса может сильно повлиять на позиции сайта в самом хорошем смысле.
Якоря ссылок. Необходимо для определения
релевантности сайта. Вполне возможно сделать сайт релевантным определенному
запросу засчет одних лишь внешних ссылок (то есть само ключевое слово не будет
встречаться в тексте вообще).
Наличие в трастовых каталогах. Наличие в таких
каталогах, как ЯК или DMOZ может сильно повлиять на ранжирование сайта.
Ранжирование сайта - одна из причин,
заставляющих учитывать web-мастеров все эти факторы. Если правильно выполнить
все условия, которые учитывают в своей работе поисковые машины, то при
ранжировании сайтов, они будут поднимать Ваш ресурс на верхние позиции и может
быть в скором времени он войдет в десятку сайтов на первой странице поисковика.
Выполнять оптимизацию и учитывать факторы ранжирования лучше поисковой системой
Yandex - он дает большую часть трафика по сравнению с другими поисковыми
машинами.
1.4 Поисковые машины. Алгоритм
работы
Как на самом деле работает поисковая машина, и
принцип работы ее алгоритмов на 100% не знает никто, даже создатели поисковых
систем. Однако некоторые постулаты алгоритма работы поисковых машин все-таки
известны, на которые нужно опираться в первую очередь при выполнении поисковой
оптимизации сайта.
Вся работа поисковых машин направлена на
упрощение поиска информации в Интернете, которую запрашивает пользователь, и
выдачу сайтов содержащих данную информацию, наиболее релевантную запросу. То
есть другими словами алгоритмы работы поисковых машин, созданы не для самих
поисковиков, а для подачи качественной информации пользователям системы. Это
правило нужно учитывать всегда и не пытаться заниматься обманом поисковых
машин, при создании web-сайтов.
Работа поисковой машины в целом выполняется
набором определенного вида программ. У каждой программы "машины
ищейки", есть своя определенная задача, которую она должна выполнять.
Давайте рассмотрим, как работает поисковая машина, разбирая по отдельности ее
компоненты.
Паук (спайдер) - является поисковым роботом,
который перемещается по страницам сайтов и занимается скачиванием новых сайтов
или их обновлений, в базу поисковой машины. Паук не различает и не читает
графику, флеш и скрипты, которые использую web-мастера при создании сайтов.
Поисковый робот видит только код страниц, соответственно наполняя страницы
баннерами и анимацией, Вы тем самым ухудшаете ее индексацию.
Путешествующий паук (краулер) - название говорит
само за себя, путешествуя по сети, выполняет функцию ищейки. Отслеживает
появление новых сайтов и страниц и сообщает пауку-спайдеру о появлении нового
документа, который необходимо занести в базу поисковой системы. Играет одну из
важных ролей в работе поисковой машины. Для того, чтобы краулер нашел Ваш сайт,
необходимо сообщить ему о нем. Сообщить можно, либо путем регистрации в
поисковике, либо установкой ссылки ведущей на Ваш сайт на проиндексированном
ресурсе - подойдет каталог сайтов.
Индексатор - специальная программа, играющая
также немалую роль в работе поисковой машины. Путем анализа страниц, определяет
релевантность и тематическое соответствие содержания страницы, некоторым
поисковым запросам. Алгоритмы работы индексатора в каждой поисковой машине
отличаются друг от друга, но цель у них одна.
Архив или база поисковой машины - здесь
размещаются все страницы сайтов, которые были проиндексированы и найдены
пауками. Работа поисковой машины сводится к выявлению из этой общей базы
данных, наиболее релевантного запросу сайта.
Сервер поисковой машины - тут надо понимать, что
поисковая машина работает одновременно с несколькими тысячами запросами и
сайтами, ежедневно перелопачивая невиданные объемы информации. Соответственно
поисковики располагаются на мощнейшем сервере, который позволяет за доли
секунды выполнять запросы нескольких тысяч пользователей одновременно. Такие
сервера обеспечивают стабильную работу поисковой машины.
Алгоритм работы поисковой машины заключается в
следующем.
Вы задаете слово или фразу в поисковую форму на
сайте поисковика, не важно, на каком из них Rambler’e, Yandex’e или др., тем
самым, давая команду поисковой машине на обработку запроса.
Поисковик в свою очередь сравнивает совпадение
запроса с ключевыми словами, которые заключены в мета-теги страниц, а также
совпадение названия страниц с заданным запросом.
Поисковая машина, сделав выборку наиболее
релевантных сайтов, выдает их список пользователю. Выполняет ранжирование
сайтов или другими словами распределение позиций, согласно соответствию и
ценности информационного содержимого страниц, заданному пользователем запросу.
Скорость работы поисковой машины, зависит от
количества обрабатываемой информации. Чем больше она будет загружена, тем
дольше Вам придется ждать индексации сайта. Период между нахождением сайта
поисковой машиной и занесением его в свою базу данных, составляет от двух дней
до нескольких месяцев.
После того как сайта будет обнаружен и поисковая
машина выполнит индексацию страниц Вашего сайта, он появится в базе каталога, и
будет занимать позиции при выдаче пользователю согласно своей релевантности
запросу.
Для того, чтобы работа поисковой машины
соответствовала тому ради чего она была сделана, ей приходится постоянно
претерпевать изменения алгоритмов. Разработчики постоянно вносят обновления для
изменения тех или иных параметров работы поисковика, что в свою очередь создает
дополнительные трудности вweb-мастерам. Когда меняется алгоритм работы
поисковой системы, неизвестно на какие позиции улетит Ваш сайта, на верхние или
же опустится ниже. Поэтому web-мастерам при изменении алгоритма работы
поисковика, приходится менять содержимое и структуру сайта, тем самым,
подстраиваясь под эти обновления.
2. Процессы изменения состояния
популярности сайта
.1 Графы состояний рейтинга сайта,
виды состояний, вероятности состояний
Для описания процессов изменения состояния
популярности сайта мы будем пользоваться теорией случайных процессов, а точнее
Марковскими процессами с дискретными состояниями.
Строго говоря, в природе не существует
совершенно не случайных, в точности детерминированных процессов, но есть
процессы, на ход которых случайные факторы влияют так слабо, что при изучении
явления ими можно пренебречь. Существуют и такие процессы, где случайность
играет основную роль. Между этими двумя крайними случаями лежит целый спектр
процессов, в которых случайность играет большую или меньшую роль. Учитывать
(или не учитывать) случайность процесса зависит также и от того, какую
практическую задачу мы решаем.
Случайный процесс, протекающий в любой
физической системе S, представляет собой случайные переходы системы из
состояния в состояние. Состояние системы может быть охарактеризовано с помощью
каких-то численных переменных; в простейшем случае - одной, а в более сложных -
нескольких.
Рассмотрим физическую систему S, в которой
протекает случайный процесс с дискретными состояниями:
, s2, … si, …,(2.1.1)
число которых конечно (или счетно). Состояния
si, s2,... могут быть качественными (т. е. описываться словами) или же каждое
из них характеризуется случайной величиной (либо случайным вектором).
Прежде всего, рассмотрим множество состояний
(2.1.1) с точки зрения его структуры - возможности системы S переходить из
состояния si в данное состояние sj непосредственно или через другие состояния.
Для этого удобно пользоваться наглядной схемой, так называемым графом
состояний.
Имеется две основные разновидности графов:
неориентированные и ориентированные. Неориентированный граф - совокупность
точек (вершин графа) с соединяющими некоторые из них отрезками (ребрами графа).
Ориентированный граф - это совокупность точек (вершин) с соединяющими некоторые
из них ориентированными отрезками (стрелками).
В дальнейшем мы будем пользоваться только
ориентированными графами.
Вершины графа будут соответствовать состояниям
системы. Вершину будем изображать прямоугольником, в который вписано
обозначение состояния; стрелка, ведущая из вершины si в вершину sj, будет
обозначать возможность перехода системы S из состояния si в состояние sj
непосредственно, минуя другие состояния. Стрелки графа могут изображаться не
только прямолинейными, но и криволинейными отрезками.
Если привязывать вышеназванную систему к
поисковой оптимизации сайта, то можно получить следующую картину: система S
будет представлять собой собственно сайт, а его возможные состояния s1, s2, …
si, … это нахождение сайта в каком-либо «топе популярности», например топ 5,
топ 10, топ 50 и т.д. Граф состояний показан на рисунке 2.1.1. Будем считать
далее, что переход системы S из состояния si в состояние sj осуществляется
мгновенно и что в любой момент времени система может находиться только в одном
из своих состояний.
Рис. 2.1
Проведем некоторую необходимую для дальнейшего
классификацию состояний.
Состояние si называется источником, если система
S может выйти из этого состояния, но попасть в него обратно уже не может, т.е.
на графе состояний в состояние si не ведет ни одна стрелка. На рисунке 2.2
состояния s1 и s2 являются источниками.
Рис. 2.2 Рис.
2.3
Состояние si называется концевым (или
поглощающим), если система S может попасть в это состояние, но выйти из него
уже не может. Для графа состояний это означает, что из состояния si не ведет ни
одна стрелка (для графа, изображенного на рис. 2.3, состояния s4 и s7 -
поглощающие; для графа состояний сайта, изображенного на рис. 2.1, поглощающих
состояний нет; у графа, построенного на рис. 2.2, поглощающие состояния также
отсутствуют).
Если система S может непосредственно перейти из
состояния si в состояние sj, то состояние sj называется соседним по отношению к
состоянию si. Если система S может непосредственно перейти из состояния si в
состояние sj и из состояния sj в состояние si, то состояния si, sj называются
соседними. На графе состояний нашего сайта все состояния можно считать
соседними, т.к. сайт может переместиться, например, из «топа 50» и в «топ 10»,
и в «топ 5» или стать непопулярным сайтом.
Состояние si называется транзитивным, если
система S может войти в это состояние и выйти из него, т. е. на графе состояний
есть хотя бы одна стрелка, ведущая в si, и хотя бы одна стрелка, ведущая из si.
На рис. 2.1 все состояния являются транзитивными; на рис. 2.3 все состояния,
кроме источников s1, s5 и поглощающих s4, s7, транзитивны.
При анализе случайных процессов, протекающих в
системах с дискретными состояниями, важную роль играют вероятности состояний.
Обозначим S(t) состояние системы S в момент t.
Вероятностью i-го состояния в момент t
называется вероятность события, состоящего в том, что в момент t система S
будет в состоянии si; обозначим ее pi(t):
(t) = P{S (t) = si},(2.1.2)
где S(t) - случайное состояние системы S в момент
t.
Очевидно, что для системы с дискретными
состояниями s1, s2,.... si,... в любой момент t сумма вероятностей состояний
равна единице:
(2.1.3)
как сумма вероятностей полной группы несовместных
событий.
В ряде задач практики нас интересует так
называемый установившийся или стационарный режим работы системы, который в ней
устанавливается, когда от начала процесса прошло достаточно большое время.
В некоторых случайных процессах по прошествии
достаточно большого времени устанавливается стационарный режим, во время
которого состояния системы хотя и меняются случайным образом, но их вероятности
pi(t) (i=1,2,...) остаются постоянными.
Обозначим эти постоянные вероятности рi:
(2.1.4)
Вероятности pi (i=l, 2,...), если они
существуют, называются финальными (предельными) вероятностями состояний.
Финальную вероятность pi можно истолковать как среднюю долю времени, которую в
стационарном режиме проводит система S в состоянии si.
Введем очень важное для дальнейшего понятие
марковского случайного процесса.
Случайный процесс, протекающий в системе S с
дискретными состояниями s1, s2,..., si,..., называется марковским, если для
любого момента времени t0 вероятность каждого из состояний системы в будущем
(при t > t0) зависит только от ее состояния в настоящем (при t = t0) и не
зависит от того, когда и как она пришла в это состояние; т. е. не зависит от ее
поведения в прошлом (при t<t0). Не надо понимать марковское свойство
случайного процесса как полную независимость «будущего» от «прошлого»; нет, в
общем случае «будущее» зависит от «настоящего», т. е. вероятности pi(t) при t
> t0 зависят от того, в каком состоянии si находится система в настоящем
(при t = t0); само же это «настоящее» зависит от «прошлого», от того, как вела
себя система S при t<t0. Это можно сформулировать следующим образом: для
марковского случайного процесса «будущее» зависит от «прошлого» только через
«настоящее». При фиксированном «настоящем» условные вероятности всех состояний
системы в «будущем» не зависят от предыстории процесса, т.е. от того, когда и
как система S к моменту t0 пришла в состояние si.
Марковские процессы с дискретными состояниями и
дискретным временем имеют сравнительно мало приложений, так как довольно редко
на практике моменты возможных переходов системы S из состояния в состояние
заранее известны и фиксированы. Гораздо типичнее случай, когда переходы системы
из состояния в состояние могут происходить не в фиксированные моменты t0, t1,
t2…, а в случайные моменты.
На практике довольно редко встречаются
марковские процессы в чистом виде, но довольно часто - процессы, которые с тем
или иным приближением можно считать марковскими.
Для дальнейших рассуждений нам нужно такие
понятия, как поток событий, интенсивность потока и поток событий без
последействия. Потоком событий называется последовательность однородных
событий, появляющихся одно за другим в случайные моменты времени. Поток событий
называется потоком без последействия, если вероятность попадания любого числа
событий на один из участков времени не зависит от того, сколько их попало на
другие.
Интенсивностью (плотностью) потока событий в
момент t называется следующая величина:
программа ранжирование сайт скрипт
,(2.1.5)
где X(t,∆t) - случайное число событий,
попадающих на элементарный участок (t, t+∆t);- математическое ожидание.
Физический смысл интенсивности λ(t)
потока
событий - это среднее число событий, приходящееся на единицу времени, для
элементарного участка ∆t, примыкающего к t.
Нам будет удобно считать, что переходы
(«перескоки») системы S из состояния в состояние происходят под воздействием
каких-то потоков событий. Как только произошло первое после момента t0 событие,
переход из состояния в состояние осуществляется (последующие события потока не
учитываются никак). Отсутствие последействия в пуассоновском потоке позволит
нам при фиксированном настоящем (состояние si системы в момент t) не заботиться
о том, когда и как система оказалась в этом состоянии. Вероятность перехода
системы S из состояния si, в котором она находилась в момент t, в состояние sj
за элементарный промежуток времени ∆t, непосредственно примыкающий к t,
приближенно равна λij(t)∆t,
где λij(t)-
интенсивность пуассоновского потока событий, переводящего систему из si в sj.
Если все потоки событий, переводящие систему из состояния в состояние,-
пуассоновские и независимые, то процесс, протекающий в системе S, будет
марковским. Если известны все интенсивности пуассоновских потоков событий,
переводящих систему из состояния в состояние, то можно составить
дифференциальные уравнения для вероятностей состояний. Об этом и пойдёт речь в
следующей части.
2.2 Описание процесса изменения
рейтинга сайта, математическая модель
Рассмотрим систему S, имеющую n возможных
состояний: s1,s2,…si,...sj,…sn. Пусть для любой пары состояний si, sj известна
интенсивность λij(t) пуассоновского
потока событий, переводящего систему S из любого состояния si в любое другое
состояние sj(i≠j); будем полагать эту интенсивность равной нулю, если
непосредственный переход из состояния si в состояние sj невозможен. Обозначим
pi(t)-вероятность того, что в момент t система находится в состоянии si (i=l,2,...,
n). Теперь придадим t приращение ∆t и найдем вероятность рi (t + ∆t)
того, что в момент t+∆t система будет находиться в состоянии si.
Обозначим это событие A:A={S(t+∆t)=si}.
Это событие может произойти двумя способами:
либо произойдет событие В, состоящее в том, что в момент t система уже была в
состоянии si и за время ∆t не вышла из этого состояния; либо произойдет
событие С, состоящее в том, что в момент t система была в одном из соседних
состояний sj, из которых возможен переход в si(λij(t)≠0),
и за время ∆t перешла из состояния sj в si.
Очевидно, А = В + С. Найдем вероятности событий
В и С. Согласно правилу умножения вероятностей вероятность события В равна
вероятности pi(t) того, что система в момент t была в состоянии si, умноженной
на условную вероятность того, что за время ∆t она не выйдет из этого
состояния, т. е. в суммарном потоке событий, выводящих систему из состояния si,
не появится ни одного события. Так как суммарный поток событий, выводящий
систему из состояния si, как и все его слагаемые - пуассоновский с
интенсивностью, равной сумме интенсивностей слагаемых потоков:
то условная вероятность того, что на участке
времени ∆t появится хотя бы одно событие, равна (приближенно)
а условная вероятность противоположного события
равна .
Таким образом,
(2.2.1)
Найдем теперь вероятность события С. Представим
его в виде суммы несовместных вариантов
(2.2.2)
где суммирование распространяется на все
состояния sj, из которых возможен непосредственный переход в si (т. е. для
которых λij(t)≠0).
События Сj, в силу ординарности потоков, можно считать несовместными.
По правилу сложения вероятностей
(2.2.3)
По правилу умножения вероятностей
(2.2.4)
Таким образом,
(2.2.5)
Вычитая из (3.1.5) pi(t) получим приращение
функции на участке (t, t+∆t)
;
деля приращение функции на приращение аргумента ∆t
и устремляя ∆t к нулю, получим в пределе производную функции pi(t):
(2.2.6)
Первая сумма в правой части формулы (2.2.6)
распространяется на те значения j, для которых возможен непосредственный
переход из состояния sj в si (т.е. для которых λji≠0),
а вторая - на те значения j, для которых возможен непосредственный переход из
si в sj (т. е. λij(t)≠0.
Таким образом, мы получили для вероятностей
pi(t) систему обыкновенных дифференциальных уравнений (2.2.6) с переменными (в
общем случае) коэффициентами. Эти уравнения называются уравнениями Колмогорова
(по имени академика А. Н. Колмогорова, предложившего такой метод анализа
марковских процессов с дискретными состояниями и непрерывным временем).
Систему дифференциальных уравнений (2.2.6)
решают при начальных условиях, задающих вероятности состояний в начальный
момент при t=0
(2.2.7)
причем для любого момента времени t выполняется
нормировочное условие
(2.2.8)
Это следует из того, что в любой момент t
события
образуют полную группу несовместных событий. Нормировочное
условие (2.2.8) можно использовать вместо одного (любого) из дифференциальных
уравнений (2.2.6).
При составлении системы дифференциальных
уравнений (2.2.6) удобно пользоваться размеченным графом состояний системы, где
возле каждой стрелки, ведущей из состояния si в состояние sj, стоит
интенсивность λij(t) пуассоновского
потока событий, переводящего систему из состояния si в sj. Если λij(t)
= 0, ни стрелка, ни соответствующая интенсивность на размеченном графе не
ставятся.
Для определения констант необходимо собрать
статистические данные и необходимо разработать программу, собирающую и
обрабатывающую эти данные.
3. Описание работы программы:
описание функциональных возможностей скрипта, описание подпрограмм, алгоритмов
и принципа работы
Ниже приведен общий принцип решения задачи сбора
и обработки статистических данных, отвечающих за популярность сайта, с
подробными комментариями к листингу программы, описанием функциональных
возможностей скрипта, а также описанием подпрограмм и алгоритмов.
Проверка версии PHP и установка кодировки
страницы происходит согласно строчкам 1-6 пункта 1 приложения А. Кодировка
utf-8 выбрана по причине её популярности в среде web-программистов. Следствие
из этого - отсутствие конфликтов в работе большинства внутренних функций PHP,
обрабатывающих строки. Как известно, в любой работе следует придерживаться
установленным стандартам, и выбор кодировки utf-8 для исходного кода - это
отличный способ избежать ненужных проблем и трудностей в работе скрипта. Для
ясности следует заметить, что кодировка базы данных также utf-8, именно поэтому
при запросе данных из базы, нам не нужно производить дополнительных действий
над текстом.
Подключение файлов config.php, mysql.php,
a.charset.php, а также подключение базы данных описаны в строчках 7-10 п.1
приложения А.
Внутренний синтаксис PHP для работы с базами
данных хоть и является одним из самых простых среди всевозможных языков, всё же
для оптимизации процесса программирования следует использовать дополнительные
классы. Это позволит сократить время на разработку программ и в конечном итоге
поможет избежать нежелательных ошибок.
Генерирование последних позиций по всем запросам
для главной страницы происходит с помощью функции generateLastStatList в
строчках 12-21 п.1 приложения А. Это несложная функция, состоящая из двух
внутренних SQL-запросов, логику которых можно описать двумя пунктами:
) получаем последнюю дату для записей статистики
в базе данных;
) получаем все записи из базы для выбранной нами
даты.
И если первый запрос реализуются с помощью
примитивного синтаксиса, то для второго запроса приходится использовать сложные
JOIN запросы, объединяющие записи из двух различных таблиц.
Вычисление плотности ключевых слов описано в
функции keyWords (23-85 строки п.1 приложения А). В строках 25-30 находятся
регулярные выражения для получения списка ключевых слов со страницы сайта, в
строке 25 используется функция charset_x_win, которая любую кодировку переводит
в cp1251 и функция iconv, которая переводит cp1251 в utf-8; 37-83 строки
отвечают за удаление лишних символов из HTML кода, замену HTML-сущностей и
подсчёт общего количества слов, а также за подсчёт плотности ключевых слов.
Следует тщательнее разобрать этот алгоритм. Как известно, любая HTML страница
представляет собой сочетание тегов и всевозможные слова, несущие информационную
нагрузку. Для подсчета плотности ключевых слов, нам необходимо отделить
ненужные теги от слов, поэтому мы удаляем всевозможные HTML сущности и
оставляем только текст. Для наглядности можно пояснить - результирующий текст
совпадает с текстом, который мы могли бы получить просто выделив весь текст в
браузере и скопировав его в текстовый документ. Именно в этом тексте мы находим
количество вхождений ключевого слова, и полученный результат делим на общее
количество слов. В результате и получается интересующая нас величина -
плотность ключевого слова.
Функция v_stat (87-121 строки п.1 приложения А)
отвечает за статистику конкретного URL’а, историю последних двадцати позиций и
запрос ключевых слов из функции keyWords, описанной на 23-85 строках. В этом же
блоке осуществляется вывод данных в браузер. Как известно, для качественного
анализа страниц необходимо вести подробную статистику за определенный период
времени. Функция v_stat как раз работает с собранными данными из базы данных.
Для наглядности эти данные можно представить как массив соотношений позиция -
адрес страницы. Получив эти данные для заданного URL, можно доверить скрипту их
анализ. Конкретно для нашей задачи скрипт анализирует последние 20 позиций и
выдает их пользователю в удобном виде, пригодном для уже ручного анализа
эффективности продвижения в поисковых системах. Для того чтобы пользователь мог
составить полную картину работы сайта, необходимо вывести так же плотность
ключевых слов, обработка которых была описана выше.
На строках 123-141 п.1 приложения А описана
функция v_back, отвечающая за получение списка беков (сайтов, ссылающихся на
конкретный URL). Подробнее: 127 строка - это запрос списка беков в файле от
Yahoo; 128-139 строки - разбор файла, вывод данных в браузер. Вообще сервис
получения списка беков от Yahoo - это очень удобный способ анализа ссылаемых
сайтов. Скрипт делает простой запрос к системе и на выходе принимается поток
текста, представленный в CSV формате, который просто обработать и вывести
пользователю для ручного анализа.
На этом описание основных функций заканчивается
и мы приступаем к разбору кода, непосредственно обрабатывающего запросы от
пользователя.
Строка 142 п.1 приложения А отвечает за вывод в
браузер HTML заголовков. Строка 144 - это разбор пути запрошенной страницы,
выбор исполняющей функции. Строки 168-190 отвечают за вывод содержимого главной
страницы. В строках 192-193 описано закрытие открытой базы и HTML теги.
Хранение конфигурационных строк базы данных в
отдельном файле это не только правило хорошего тона, но и удобная
необходимость. При использовании базы многими файлами, достаточно одного файла
конфигурации и при случае изменения этих данных, нет необходимости
редактировать каждый файл, использующий базу. В пункте 2 приложения А описано
содержимое конфигурационного файла config.php с переменными: сервер БД - 2
строка; пользователь БД - 3 строка; пароль БД - 4 строка; таблица БД - 5
строка.
Рассмотрим теперь содержимое файла
requestStat.php, описанное в пункте 3 приложения А.
В строке 1 задаём бесконечное время выполнения
скрипта (это необходимо для успешного завершения получения и обработки данных).
В коде скрипта содержится большое количество необходимых sleep-функций, поэтому
время выполнения может достигать нескольких минут. Стандартных 60 секунд
выполнения скрипта в этом случае может не хватить, и работа будет совершаться
«вхолостую».
В строках 2-5 происходит проверка версии PHP.
Строка 7 отвечает за кодировку страницы. В 9-10 строках происходит подключение
файлов. Строка 12 задаёт значение региона (по параметрам Yandex). Строка 14
отвечает за подключение БД. Строки 16-17 описывают получение из базы последней
даты обновления статистики (причем если обновления уже были сегодня, то нам
следует завершить работу скрипта). В строке 20 получаем список запросов из БД
простым sql запросом. В строках 22-24 генерируем запросы к поисковым системам
по известному шаблону.
Строки 35-53 описывают, каким образом мы
запрашиваем страницу Yandex’а, получаем результат и записываем в БД. Подробнее:
в 41 строке запрашиваем страницу с результатом поиска; в 42 строке с помощью
регулярного выражения получаем в массив позиции, заголовки и URL страниц;
страницы 44-50 отвечают за запись результатов в БД; строка 51 отвечает за то,
чтобы перед выполнением следующего запроса проходило 5 секунд (это делается для
того, чтобы поисковая система нас не забанила).
Заключение
В данной работе подробно рассмотрены не только
некоторые методы продвижения и дальнейшего построения математической модели
поисковой оптимизации web-сайта в Интернете, но и через комплекс задач раскрыта
тема рассмотрения теоретических подходов к обоснованию проблемы поисковой
оптимизации и ранжирования web-сайтов, уяснена сущность ранжирования,
охарактеризованы факторы ранжирования, исследована специфика работы современных
поисковых машин, а также построена математическая модель поисковой оптимизации
web-сайта и разработано приложение для сбора и обработки статистических данных
с помощью сравнения, анализа и синтеза данных, комплексного и системного
подхода к изучению проблемы поисковой оптимизации и ранжирования.
Список использованных источников
1. Вентцель
Е.С., Овчаров Л.А. Теория случайных процессов и ее инженерные приложения: Учеб.
пособие для втузов. / Вентцель Е.С. - 2-е изд., стер. - М.: Высш. шк., 2000. -
383 с.
2. Вентцель
А.Д. Курс теории случайных процессов: учеб. пособие для вузов / Вентцель А.Д. -
2-е изд., доп. - М.: Наука. Физматлит, 1996. - 397 с.
. Миллер
Б.М., Панков А.Р. Теория случайных процессов в примерах и задачах. / Миллер Б.
М. - М.: Физматлит, 2002. - 320 с.
. Султанов
И.И. Стратегия поиска в автоматизированных информационно-поисковых системах:
вступительный реферат / Султанов И.И., 2004.
. WMZ
portal [Электронный ресурс] // Факторы ранжирования сайтов поисковыми
системами. - Режим доступа: <http://wmz-portal.ru>
. Подробное
руководство по созданию сайтов [Электронный ресурс] // Основные факторы
ранжирования сайтов. - Режим доступа: <http://www.eltisbook.ru/>
Приложение
Листинг кода файла Index.php
1
|
if
(version_compare(phpversion(), '5.1.0', '<') == true)
|
2
|
{
|
3
|
die
('PHP Old');
|
4
|
}
|
5
|
|
6
|
header("content-type:
text/html; charset=UTF-8");
|
7
|
include_once('config.php');
|
8
|
include_once('mysql.php');
|
9
|
include_once('a.charset.php');
|
10
|
$sql
= new IDatabase($db_host,$db_user,$db_password,$db_name);
|
11
|
|
12
|
function
generateLastStatList()
|
13
|
{
|
14
|
global
$sql;
|
15
|
$sub
= $sql->sql2array("select date from stat order by date desc limit
1");
|
16
|
if
($sub['0']['date'])
|
17
|
{
|
18
|
$r
= $sql->sql2array("select A.*, B.q from stat A left join queries B on
(B.id = A.qid) where A.date =
'".mysql_real_escape_string($sub['0']['date'])."' order by B.q,
A.ya");
|
19
|
}
|
20
|
if
($r['0']['id']) return $r; else return 0;
|
21
|
}
|
22
|
|
23
|
function
keyWords($url)
|
24
|
{
|
25
|
$data
= iconv('cp1251','utf-8',charset_x_win(file_get_contents($url)));
|
26
|
preg_match_all('/<meta.*?keywords.*?content="(.*?)"/',$data,$res1);
|
27
|
preg_match_all('/<META.*?KEYWORDS.*?CONTENT="(.*?)"/',$data,$res2);
|
28
|
preg_match_all('/<meta.*?Keywords.*?content="(.*?)"/',$data,$res3);
|
29
|
preg_match_all('/<meta.*?content="(.*?)"keywords/',$data,$res4);
|
30
|
preg_match_all('/<META.*?Keywords.*?CONTENT="(.*?)"/',$data,$res5);
|
31
|
if
($res1['1']['0']) { $keys = explode(",",$res1['1']['0']); }
|
32
|
if
($res2['1']['0']) { $keys = explode(",",$res2['1']['0']); }
|
33
|
if
($res3['1']['0']) { $keys = explode(",",$res3['1']['0']); }
|
34
|
if
($res4['1']['0']) { $keys = explode(",",$res4['1']['0']); }
|
35
|
if
($res5['1']['0']) { $keys = explode(",",$res5['1']['0']); }
|
36
|
|
37
|
$t
= substr($data,strpos($t,'body'));
|
38
|
if
(!$t)
|
39
|
$t
= substr($data,strpos($t,'BODY'));
|
40
|
|
41
|
if
($keys['0']['id'])
|
42
|
{
|
43
|
$search
= array ("'<script[^>]*?>.*?</script>'si",
|
44
|
"'<[\/\!]*?[^<>]*?>'si",
|
45
|
"'([\r\n])[\s]+'",
|
46
|
"'&(quot|#34);'i",
|
47
|
"'&(amp|#38);'i",
|
48
|
"'&(lt|#60);'i",
|
49
|
"'&(gt|#62);'i",
|
50
|
"'&(nbsp|#160);'i",
|
51
|
"'&(iexcl|#161);'i",
|
52
|
"'&(cent|#162);'i",
|
53
|
"'&(pound|#163);'i",
|
54
|
"'&(copy|#169);'i",
|
55
|
"'&#(\d+);'e");
|
56
|
|
57
|
$replace
= array ("",
|
58
|
"",
|
59
|
"\\1",
|
60
|
"\"",
|
61
|
"&",
|
62
|
"<",
|
63
|
">",
|
64
|
"
",
|
65
|
chr(161),
|
66
|
chr(162),
|
67
|
chr(163),
|
68
|
chr(169),
|
69
|
"chr(\\1)");
|
70
|
|
71
|
$text
= preg_replace($search, $replace, $t);
|
72
|
|
73
|
foreach
($keys as $k=>$v)
|
74
|
{
|
75
|
$keys[$k]
= trim($keys[$k]);
|
76
|
|
77
|
|
78
|
|
79
|
$tempData['countSub']
= substr_count($t,$keys[$k]) / str_word_count($text);
|
80
|
$tempData['keyword']
= $keys[$k];
|
$returnData[]
= $tempData;
|
82
|
}
|
83
|
}
|
84
|
if
($keys[0]) return $returnData; else return 0;
|
85
|
}
|
86
|
|
87
|
function
v_stat()
|
88
|
{
|
89
|
global
$sql;
|
90
|
if
($_GET['url'])
|
91
|
{
|
92
|
$r
= $sql->sql2array("select A.*, B.q from stat A left join queries B on
(B.id = A.qid) where A.url like
'%".mysql_real_escape_string($_GET['url'])."%' and A.qid =
".intval($_GET['q'])." order by A.date desc limit 20");
|
93
|
if
($r['0']['id'])
|
94
|
{
|
95
|
echo
"<ul>
|
96
|
echo
"<b>История позиций (последние 20): </b><br />";
|
97
|
foreach
($r as $k=>$urlStat)
|
98
|
{
|
99
|
if
($k%2===0 ) $color = 'background:#D0D0D0'; else $color = '';
|
100
|
echo
"<li
>
|
101
|
}
|
102
|
echo
"</ul>";
|
103
|
$kWords
= keyWords($_GET['url']);
|
104
|
if
($kWords['0']['keyword'])
|
105
|
{
|
106
|
echo
"<ul>
|
107
|
echo
"<b>Плотность ключевых слов: </b><br />";
|
108
|
foreach
($kWords as $k=>$word)
|
109
|
{
|
110
|
echo
"<li>".$word['keyword']."<div>
|
111
|
}
|
112
|
echo
"</ul>";
|
113
|
}
else
|
114
|
{
|
115
|
echo
"<div>
|
116
|
}
|
117
|
|
118
|
echo
"<div>
|
119
|
}
else echo "Позиции не найдены";
|
120
|
}
|
121
|
}
|
122
|
|
123
|
function
v_back()
|
124
|
{
|
125
|
if
($_GET['url'])
|
126
|
{
|
127
|
$r = file_get_contents
("http://siteexplorer.search.yahoo.com/export?
p=".$_GET['url']."&bwm =i&bwmf =s&bwmo=d");
|
128
|
$rr = explode("\n",$r);
|
129
|
echo "Анализ страницы
".$_GET['url']." <br />";
|
130
|
echo "<table
border=1px><tr><td>Title</td><td>URL</td><td>Размер
страницы</td></tr>";
|
131
|
foreach
($rr as $k=>$v)
|
132
|
{
|
133
|
if
($k>1)
|
134
|
{
|
135
|
$vv
= explode("\t",$v);
|
136
|
echo
"<tr><td>".$vv['0']."</td><td>".$vv['1']."</td><td>".$vv['2']."</td></tr>";
|
137
|
}
|
138
|
}
|
139
|
echo
"</table>";
|
140
|
}
|
141
|
}
|
142
|
echo
"<html><head><meta http-equiv='content-type'
content='text/html; charset=utf-8' /><link rel='stylesheet' type='text/css'
href='/res/style.css' /></head><body><div
id='header'><a
href='index.php'>Стартовая</a></div>";
|
143
|
|
144
|
if
(isset($_GET['m'])) // m var in query string, f.e index.php?m=stat
|
145
|
{
|
146
|
switch
($_GET['m'])
|
147
|
{
|
148
|
case
'stat':
|
149
|
{
|
150
|
v_stat();
|
151
|
break;
|
152
|
}
|
153
|
|
154
|
case
'words':
|
155
|
{
|
156
|
v_words();
|
157
|
break;
|
158
|
}
|
159
|
|
160
|
case
'back':
|
161
|
{
|
162
|
v_back();
|
163
|
break;
|
164
|
}
|
165
|
}
|
166
|
}
else
|
167
|
{
|
168
|
$statList
= generateLastStatList();
|
169
|
echo
"<span>
|
170
|
if
($statList['0']['id'])
|
171
|
{
|
172
|
$lstQuery
= "";
|
173
|
foreach
($statList as $k=>$statValue)
|
174
|
{
|
175
|
if
($lstQuery != $statValue['q'])
|
176
|
{
|
177
|
if
($lstQuery!='') echo "</ul>";
|
178
|
echo "<ul
>Запрос:
".$statValue['q']."</li>";
|
179
|
echo
"<li><span
>
|
180
|
echo
"<li>
|
181
|
$lstQuery
= $statValue['q'];
|
182
|
}
else
|
183
|
{
|
184
|
echo
"<li><span
>
|
185
|
echo
"<li>
|
186
|
}
|
187
|
}
|
188
|
echo
"</ul>";
|
189
|
}
|
190
|
}
|
191
|
|
192
|
echo
"<div id='footer'>
|
193
|
mysql_close();
|
Листинг кода файла Config.php
<?
$db_host = 'localhost';
$db_user = 'root';
$db_password = '';
$db_name = 'ya';
?>
Листинг кода файла RequestStat.php
0
|
<?
|
1
|
@set_time_limit(0);
|
2
|
if
(version_compare(phpversion(), '5.1.0', '<') == true)
|
3
|
{
|
4
|
die
('PHP Old');
|
5
|
}
|
6
|
|
7
|
header("content-type:
text/html; charset=UTF-8");
|
8
|
|
9
|
include_once('config.php');
|
10
|
include_once('mysql.php');
|
11
|
|
12
|
$lr
= 1;
|
13
|
|
14
|
$sql
= new IDatabase($db_host,$db_user,$db_password,$db_name);
|
15
|
|
16
|
$r
= $sql->sql2array("select id from stat WHERE `date` = DATE(NOW())
limit 1");
|
17
|
if
($r['0']['id']) { die('start tomorrow');}
|
18
|
|
19
|
|
20
|
$queries
= $sql->sql2array("select * from queries");
|
21
|
|
22
|
if
($queries['0']['id'])
|
23
|
{
|
24
|
foreach
($queries as $k=>$v)
|
25
|
{
|
26
|
unset($tmpreq);
|
27
|
$tmpreq['url']
=
"http://yandex.ru/yandsearch?p=0&text=".urlencode($v['q'])."&lr=".$lr;
|
28
|
$tmpreq['gurl']
= "http://www.google.ru/search?q=".$v['q'];
|
29
|
$tmpreq['id']
= $v['id'];
|
30
|
$tmpreq['q']
= $v['q'];
|
31
|
$tmpreq['answer']
= 0;
|
32
|
$requests[]
= $tmpreq;
|
33
|
}
|
34
|
}
|
35
|
if
($requests['0']['id'])
|
36
|
{
|
37
|
foreach
($requests as $k=>$v)
|
38
|
{
|
39
|
unset($res);
|
40
|
unset($data);
|
41
|
$data
= file_get_contents($v['url']);
|
42
|
preg_match_all('/<a
>
|
43
|
|
44
|
if
($res['1']['0'] and $res['2']['0'])
|
45
|
{
|
46
|
foreach
($res['1'] as $kk=>$vv)
|
47
|
{
|
48
|
$sql->query("insert
into stat values
(null,".$v['id'].",'".mysql_real_escape_string($vv)."','".mysql_real_escape_string($res['2'][$kk])."',
".($kk+1).",0,now())");
|
49
|
}
|
50
|
}
else echo "error answer from yandex. query: ".$v['url'];
|
51
|
sleep(5);
|
52
|
echo
"success";
|