Как сделать поиск по сайту

Если набрать в поле «вопрос» и щелкнуть по кнопке «Найти», то адрес страницы изменится с «http://shpargalkablog.ru/2011/06/forma-poiska-po-saitu.html» на «http://shpargalkablog.ru/2011/06/forma-poiska-po-saitu.html?text=вопрос», как это происходит при нажатии на ссылку. При загрузке страницы, скрипт проверяет наличие заданных параметров в URL и при их обнаружении формирует и отображает результаты поиска по сайту.

<form>   <input type="search" name="text">   <input type="submit" value="Найти">  </form>

Но в целях увеличения скорости загрузки документа, скрипт, обрабатывающий запрос, как правило, помещают только на одну страницу сайта, на которую будет сделан переход, если её адрес прописать в атрибуте action: «http://shpargalkablog.ru/search/?text=вопрос».

<form action="http://shpargalkablog.ru/search/">   <input type="search" name="text">   <input type="submit" value="Найти">  </form>

Для работы скрипта могут понадобиться дополнительные параметры, которые указываются в <input type="hidden">. Это поле не отображается. Теперь форма будет вызывать «http://shpargalkablog.ru/search/?searchid=808327&text=вопрос».

<form action="http://shpargalkablog.ru/search/">   <input type="hidden" name="searchid" value="808327">   <input type="search" name="text">   <input type="submit" value="Найти">  </form>

Результат работы формы открыть в новой вкладке с помощью атрибута target

Содержание

<form action="http://shpargalkablog.ru/search/" target="_blank">   <input type="hidden" name="searchid" value="808327">   <input type="search" name="text">   <input type="submit" value="Найти">  </form>

Где взять скрипт поиска по сайту

Можно воспользоваться

  • предложенным специальными сервисами Яндекса и Google,
  • встроенным в используемую CMS (при наличии), например, на Blogger на «https://site.ru/search?q=вопрос», где «site.ru» заменить на свой адрес блога,
  • разработанным самостоятельно, например, на PHP.

Самый простой вариант — перенаправить запрос Google:

<form action="http://google.com/search" target="_blank">   <input type="search" name="q">   <input type="hidden" name="as_sitesearch" value="shpargalkablog.ru"> <!-- «shpargalkablog.ru» заменить на свой адрес сайта -->   <input type="submit" value="Найти">  </form>

Текст на кнопке: «Поиск», «Искать», «Найти»

Из слов-побудителей «Найти» имеет совершённый вид и подразумевает, что результат поиска будет обязательно положительным.

Значок лупы

Неактивная фоновая картинка CSS

<form action="/search/" target="_blank">   <input type="hidden" name="searchid" value="808327">   <input type="search" name="text" required placeholder="Поиск по сайту" style="  padding: 5px 2px 5px 25px;  background: url('http://3.bp.blogspot.com/-4w14hQHr5yQ/Tgm6u7KwUkI/AAAAAAAACAI/Hu2poBOPx3g/s25/search.png') no-repeat scroll 0 50%;  ">  </form>

Кликабельная кнопка-иконка

<style>  .form-search {   display: inline-block;   border-bottom: 1px solid;  }  .form-search input {   all: unset;  }  </style>    <form action="/search/" target="_blank" class="form-search">   <input type="hidden" name="searchid" value="808327">   <input type="search" name="text" required placeholder="Поиск по сайту">   <input type="submit" value="&#128269;">  </form>

Кликабельная картинка

<style>  .form-search { /* форма с boxtuffs.com */   position: relative;   display: inline-block;   border: 1px solid #747474;   border-radius: 3px;   box-shadow: inset 0 1px 1px #575555, 0 1px 0 #FFF;   background-image: linear-gradient(#BCBCBC, #EBEBEB);  }  .form-search:before { /* рамка вокруг формы */   position: absolute;   content: "";   top: -5px;   right: -5px;   bottom: -5px;   left: -5px;   z-index: -1;   border-radius: 5px;   background: linear-gradient(#D3D3D3, #CACACA 50%, #A9A9A9 50%, #9B9B9B);  }  .form-search:focus-within { /* изменение формы при фокусе */   box-shadow: inset 0 1px 1px #46575b, 0 1px 0 #FFF;   background: linear-gradient(#9CC2CA, #DFECEF);  }  .form-search input[type="search"] { /* поле поиска */   width: 60px;   height: 32px;   line-height: 32px;   border: none;   outline: none;   box-shadow: none;   padding: 0 0 0 6px;   background: transparent;   font: 13px Helvetica, Arial, sans-serif;   color: #6E7074;   text-shadow: 0 1px 0 #FFF;   transition: all .2s ease-out;  }  .form-search:focus-within input[type="search"], /* изменение поля поиска при фокусе */  .form-search input[type="search"]:focus {   width: 160px;   color: #25464D;  }  .form-search input[type="image"] { /* картинка лупы */   padding: 0;   vertical-align: bottom;  }  </style>    <form class="form-search" action="/search/" target="_blank">   <input type="hidden" name="searchid" value="808327">   <input type="search" name="text" required placeholder="поиск">   <input type="image" src="http://3.bp.blogspot.com/-4w14hQHr5yQ/Tgm6u7KwUkI/AAAAAAAACAI/Hu2poBOPx3g/s1600/search.png"/> <!-- вместо кнопки submit -->  </form>

shpargalkablog.ru

phprusearch Свои первые сайты я делал из физически лежащих на сервере страниц php. Такие сайты не имели базы данных MySQL. К слову говоря, некоторые считают такие сайты жутко неудобными в плане наполнения и администратирования, но каждому своё. Конечно, когда сайт работает на движке, всё быстрее и удобней, но с другой стороны, так и мозг может атрофироваться, когда за тебя всё делает движок :).
Сделав свои первые сайты, у меня появилась проблема: как сделать поиск на сайте без базы данных MySQL? Облазив весь интернет, мне долго не удавалось найти подходящий скрипт для организации поиска на своих сайтах.

Но всё же, мои поиски увенчались успехом, я нашёл отличный скрипт, который полностью соответствовал моим требованиям.

При помощи php-скрипта phprusearch можно с лёгкостью организовать поиск на сайте без базы данных MySQL. Скачать: phprusearch.
1. Скачиваем скрипт и разархивируем его.
2. Закачиваем папку /phprusearch/ в корневую дирректорию сайта (обычно это папка public_html, htdocs или www).
3. Ставим права доступа на файлы:
/phprusearch/sadmin/admin.php — 666
/phprusearch/sdata/search.php — 666
/phprusearch/sinc/query.php — 666
/phprusearch/sinc/sconfig.php – 666
4. В адресной строке браузера набираем: http://ваш сайт/phprusearch/sadmin/
5. Вводим логин: admin, пароль: pass. Сразу же в админке меняем логин и пароль на свои.
6. Выполняем желаемые настройки скрипта в админке и индексируем сайт.
7. На страницах сайта в том месте где желаете видеть поисковую форму вставляем следующий код:

8. Теперь копируйте всё содержимое файла /phprusearch/index.php, и вставляйте в Ваш шаблон, т.е. header, footer и т.д. будут Ваши, а основной код страницы поиска будет содержимое файла /phprusearch/index.php. Сохраняем так же под именем phprusearch/index.php.

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

vdblog.ru

Вариант 1: Добавить простую форму, которая будет пересылать запрос на страницу поисковой системы

Выглядит это примерно так:

<form action="http://google.com/search" name="search-form" target="_blank">  <input type="hidden" name="q" value="site:https://phpland.org" />  <input name="q" value="" />  <input type=submit value="Найти" /> </form> 

Посмотреть результат можно в песочнице «Codepen»: https://codepen.io/phpland/pen/BPXrJG

Мы заполняем форму (которая состоит из одного поля и кнопки отправить) на нашем сайте и отправляем её методом GET на сайт Google/Yandex, который принимает данные и показывает нам результаты, которые он нашел на странице поисковой системы. Благодаря скрытому input мы можем сказать поисковой системе, что искать нужно только на нашем сайте, а не по всему интернету. Такой вариант работает при условии, что поисковая система уже проиндексировала наш сайт и находит у себя наши страницы.


Вариант 2: Встроить поиск Yandex или Google на свой сайт

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

Для начало нам нужно перейти на сайт https://site.yandex.ru/searches/ (зарегистрироваться) и нажать кнопку «Добавить поиск».

После этого заполнить поле «Техническое название поиска» (например «phpland»), указать «Область поиска» (https://phpland.org).

Далее перейти в левом меню по ссылке «Результаты поиска» и выбрать «Показывать результаты на моей странице», здесь нужно указать страницу, на которой будет отображаться результат поиска, например /search.php.

Далее нужно перейти в левом меню по ссылки «Код для вставки на сайт» и скопировать код формы поиска и разместить его там, где вы хотите чтобы находился ваш поиск. Можно прям на странице /search.php.

Далее нужно скопировать код результатов поиска и вставить его в том месте, где вы хотите чтобы отображались результаты поиска, например на странице /search.php.

Теперь если мы перейдём на нашу страницу /search.php, то должны увидеть форму поиска и если мы введём какое не будь ключевое слово, то увидим ниже результаты поиска.

Посмотреть результат можно на нашем сайте сообщества, перейдя по ссылке https://phpland.org/search

При желание можно настроить внешний вид формы на сайте Яндекса и/или просто перезаписать CSS стили.

Примерно также работает и поиск Google: https://cse.google.com


Вариант 3: Написать свой поиск на PHP

Разобрать этот вариант в рамках одной статьи будет весьма сложно, поэтому оставим этот вариант на будущее, если будет интерес. В целом это работает примерно как вариант 1, только форма отправляется на наш сайт, где мы принимаем GET запрос и находим нужные данные например в базе данных и потом распечатываем результат поиска на экран.


Каждый из вариантов имеют свои плюсы и минусы.

Лично я не вижу смысла писать свой поиск на PHP для большинства случаев (если сайт индексируется поисковыми системами), хотя уже не раз приходилось делать это. Почему? Потому что написать хороший поиск, который будет не просто искать точное совпадение, но будет учитывать разные параметры (способы написания, синонимы, и т.д.) займёт у нас много времени, которое мы можем потратить на более важные вещи в жизни. Однако это хорошая задача, для тех, кто хочет научиться программировать на PHP и повысить свой скилл… 🙂

Для себя я выбрал второй вариант, так как он для меня подошел больше всего, а какой вариант выбрали вы?



Оставьте комментарий!

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий:

phpland.org

Признаки хорошего поиска на сайте

Существует несколько общих параметров, которые работают для каждого посетителя:

  1. Поиск по сайту должен быть видимым. Он должен располагаться в удобном месте на главной странице.
  2. Любому пользователю должно быть понятно, что на сайте есть форма поиска. Без добавления поля с опознавательными знаками и соответствующим заголовком сложно понять, что это поиск по сайту.

Что требуется от поиска на сайте

Настройка поиска по сайту предполагает реализацию нескольких функций в рамках определенного ресурса:

  • Поиск с учетом морфологии. Вне зависимости от окончания, падежа и прочих особенностей русского языка, система должна искать именно то, что нужно посетителю. Один из вариантов достижения необходимого результата – приведения всех слов из запроса и фраз контента сайта к нужной форме.
  • Формирование контекста поиска. Автономный выбор контекста сайта, в рамках которого функционирует поисковый алгоритм, а также определение значимости для всех таких рамок. Например, в интернет-магазине основным приоритетом формы поиска по сайту будут выступать наименования товаров. Второе приоритетное значение – подбор по свойствам продукции и т.д.
  • Индексация содержимого ресурса. Процедура осуществляется только после изменения или дополнения содержимого. Поиск ведется по индексу.
  • Механизм ранжирования. Ранжирование поисковых результатов – это их сортировка, которая осуществляется на основе анализа значимости собранных данных. Например, если идентичные слова содержатся в двух разных статьях, то приоритетным будет результат, где данное слово отображено в большем количестве.

В чем заключается настройка поиска на сайте

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

Принцип функционирования правильно настроенного поиска:

  1. Содержимое ресурса индексируется.
  2. Пользователь вводит запрос.
  3. Из запроса убираются служебные части предложения.
  4. Строка делится на массив слов, переведенных в базовый вариант.
  5. Поиск слов осуществляется в индексе.
  6. Результаты подлежат ранжированию. Они сортируются и направляются аудитории.

Как сделать поиск по сайту с помощью Google и Яндекс

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

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

Настройка поиска Яндекс

Настройка поиска по сайту осуществляется с помощью инструмента Яндекс.Вебмастер. Необходимо зайти в поиск Яндекса и нажать «Установить поиск». После этого нужно внести все данные, требуемые системой, в том числе название сайта, электронный адрес и параметры поиска. Далее осуществляется подбор внешнего вида функции, указывается, где именно будет располагаться страница поиска по сайту. Затем проводится проверка его работы. Если все в порядке, то функция добавляется на сайт с помощью копирования кода сервиса.

Особенности и настройка поиска Google

В отличие от Яндекса, Google – платный инструмент, но спрос на него очень высокий. Оплачивая около 100 долларов США в год, владелец ресурса получает:

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

Как сделать поиск по сайту с помощью Google? Требуется зайти в систему пользовательского поиска Google и заполнить специальную форму. Затем можно подобрать стили, шрифты, цвета для строки поиска и т.д. После завершения настроек нужно скопировать сгенерированный код в тело страницы, где будет отображаться функция.

Поиск по сайту – это обязательный инструмент любого ресурса, один из элементов лояльности пользователей к нему. Всем, кто не знает, как его сделать с помощью PHP и HTML, не имеет навыков в web-программировании, оптимальный вариант – применить скрипты от Яндекса и Google. Они максимально адаптированы под эту функцию, и реально помогают в продвижении сайта в топ выдачи.

semantica.in

Показатели качества

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

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

Также важно продумать параметры выдачи:

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

Еще одна хитрость: лучше закрывать страницы с поиском от индексации глобальными системами. Google считает, что качество ссылок в таком случае хуже, чем в ситуации с обычным текстовым блоком.

Google Search Console - UMI

Способы

Четыре главных метода, позволяющих эффективно организовать поисковый процесс:

  • установка аналогичных программ от Яндекс или Гугл;
  • прописывание скрипта для «чистого» HTML;
  • использование встроенных средств CMS;
  • конструктора сайтов со встроенным поиском.

Рассмотрим особенности каждого из них подробнее.

Сервисы от поисковых систем

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

Бесплатный инструмент подсказывает, как сделать поиск по сайту Яндекс. Он способен просто и удобно интегрировать все важные функции:

  • можно менять внешний вид;
  • автоматически предлагает список смысловых подсказок;
  • существует возможность добавить параметры и фильтры;
  • благодарность за установку — повышение рейтинга в выдачах Яндекса.

Соответствующий инструмент от Google платный, однако во многом оправдывает потраченные средства. Дополнительные возможности, которые предлагает конкурент:

  • персонализированное изменение внешнего вида строки для ввода;
  • неограниченное использование языков с автоматическим механизмом его определения;
  • применение графического контента;
  • отсутствие рекламных материалов;
  • каталог синонимов;
  • одновременное участие нескольких ресурсов.

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

Ручная работа

Если говорить о том, как сделать поиск по сайту HTML, стоит отметить, что в последнее время процессы программирования существенно упростились. Сегодня можно найти около десятка готовых форм кодов, которые просто копируют. Переписыванию в таком фрагменте подлежит только название площадки. Однако знания никогда не лишние — при помощи CSS можно создать необходимый размер, цвет, настроить анимации и другие особенности поля или кнопки. Соответствующие скрипты позволяют исчезать замещающему тексту, создавать динамично изменяющийся фон, менять толщину линий, создавать объемы.

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

Если же навыки программирования находятся еще не на должном уровне, то лучше не читать советы, как сделать поиск по сайту PHP, а выбрать более простой вариант. Так вы будете уверены в качестве собственных трудов.

Поиск в мобильной версии - UMI

Конструкторы и системы управления содержимым

На конструктореах сайтов поиск часто включен в функционал изначально. На конструкторе 1С-UMI поиск уже встроен в сайты, ничего устанавливать и подключать не нужно. Это значит, что создав сайт на этом конструкторе, вы сразу получите веб-ресурс с работающим поиском.

Многие сайты работают на CMS (движке) — специальной программе, предназначенные для управления сайтами. Они сложнее, чем конструкторы и предусматривает наличие базовых навыков, но если в CMS встроен готовый шаблон, то разобраться можно и без посторонней помощи. Рассмотрим в качестве примера работу с модулем «Поиск» на системе UMI.CMS. Как сделать поиск текста по сайту? Во все редакции системы включен модуль «Поиск», который позволяет:

  • находить контент с учетом морфологии или же отключить эту функцию;
  • искать по заголовкам, метатегам, и текстам;
  • определять, какие разделы будут индексироваться, при необходимости индексировать принудительно или исключать страницы из поиска;
  • смотреть данные о дате последнего обновления индекса, а также запустить его в ручном режиме;
  • использовать инструмент Sphinx, подходящий для работы фраз, состоящих менее чем из трех букв;
  • включить отбор по любому участку слова или фразы, нестандартного для обычных ситуаций;
  • оформить количество выводимых результатов, формат их отображения.

Модуль является ответом на вопрос о том, как сделать поиск слова по сайту.

umi.ru

Поиск по сайту как сделать

Наверное, многие когда-нибудь задумывались, как сделать поиск на сайте? Безусловно, для крупных сайтов с большим количеством контента поиск является просто незаменимой вещью. В большинстве случаев пользователь, впервые посетив Ваш сайт в поисках чего-либо важного, не станет разбираться в навигационных панелях, выпадающих меню и прочих элементах навигации, а в спешке попытается найти что-нибудь похожее на поисковую строку. И если такой роскоши на сайте не окажется, либо он не справится с поисковым запросом, то посетитель просто закроет вкладку. Но статья не о значении поиска для сайта и не о психологии посетителей. Я расскажу, как реализовать небольшой алгоритм полнотекстового поиска, который, надеюсь, избавит начинающих разработчиков от головной боли.

У читателя может возникнуть вопрос: зачем писать все с нуля, если все уже давно написано? Да, у крупных поисковиков есть API, есть такие клевые проекты, как Sphinx и Apache Solr. Но у каждого из этих решений есть свои преимущества и недостатки. Пользуясь услугами поисковиков, типа Google и Яндекс, Вы получите множество плюшек, таких как мощный морфологический анализ, исправление опечаток и ошибок в запросе, распознавание неверной раскладки клавиатуры, однако без ложки дегтя тут не обойдется. Во первых, такой поиск не интегрируется в структуру сайта — он внешний, и Вы не сможете указать ему, какие данные наиболее важны, а какие не очень. Во вторых, содержимое сайта индексируется только с определенным интервалом, который зависит от выбранного поисковика, так что если на сайте что-нибудь обновится, придется дожидаться момента, когда эти изменения попадут в индекс и станут доступными в поиске. У Sphinx и Apache Solr дела с интеграцией и индексированием гораздо лучше, но не каждый хостинг позволит из запустить.

Ничто не мешает написать поисковый механизм самостоятельно. Предполагается, что сайт работает на PHP в связке с каким-нибудь сервером баз данных, например MySQL. Давайте сначала определимся, что требуется от поиска на сайте?

  • Поиск с учетом языковой морфологии. Не зависимо от падежа, окончания и
    других прелестей великого и могучего языка поиск должен находить то, что нужно
    пользователю. Другими словами, «яблок», «яблока», «яблоки» — это формы одного и того
    же слова «яблоко», что нужно учитывать в поисковом алгоритме. Одним из способов
    достижения данной цели является приведение каждого слова поискового запроса и слов
    содержимого сайта к базовой форме.
  • Возможность указать контекст поиска. То есть, возможность самостоятельно выбрать
    контент сайта, в пределах которого будет работать поисковый алгоритм, а также определить
    значимость для каждого из пределов. Например, рассмотрим интернет-магазин. Предполагается,
    что поисковый запрос чаще всего будет содержать название искомой продукции, поэтому поиск по
    названиям товара будет иметь наивысший приоритет. В качестве следующего приоритета можно
    выбрать поиск по свойствам товаров, затем поиск по описанию.
  • Индексирование содержимого сайта. Представьте ситуацию: одновременно около 30 человек
    выполняют поисковые запросы. Сервер принимает каждое соединение, управление потоком
    передается интерпретатору PHP. При каждом запросе заново инициализируется поисковый
    движок, заново перерывается содержимое сайта… Сложно сказать, сколько времени и
    ресурсов потребуется, чтобы обработать все эти запросы. Именно для того, чтобы не
    делать одну и ту же работу по сто раз, была придумана технология индексирования.
    Индексирование выполняется только при изменении или добавлении содержимого сайта,
    а поиск выполняется уже по индексу, а не по содержимому.
  • Механизм ранжирования. Ранжирование результатов поиска — это сортировка результатов поиска, выполняемая на основе оценки значимости найденных данных. Например, в каком-нибудь блоге выполняется поисковый запрос «космос». Данное слово содержится в двух статьях: в первой 16 раз, во второй — 5 раз. Вероятнее всего, первая статья будет иметь большее значение для инициатора поиска. Также каждой разновидности содержимого сайта при индексировании задается определенный коэффициент, который будет влиять на его позиции в поисковой выдаче.

Теперь пару слов о том, что нам предстоит реализовать:

  • морфологический анализатор,
  • алгоритм ранжирования,
  • алгоритм индексирования,
  • алгоритм поиска.

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

Принцип работы

Со стороны бэкенда поиск работает так:

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

Подготовка

Задача поставлена, теперь можно перейти к делу. Я использую Linux в качестве рабочей ОС, однако постараюсь не использовать ее экзотических возможностей, чтобы любители Windows смогли «собрать» поисковый движок по аналогии. Все, что Вам нужно — это знание основ PHP и умение обращаться с MySQL. Поехали!

Наш проект будет состоять из ядра, где будут собраны все жизненно необходимые функции, а также модуля морфологического анализа и обработки текста. Для начала создадим корневую папку проекта firewind, а в ней создадим файл core.php — он и будет ядром.

$ mkdir firewind $ cd firewind $ touch core.php 

Теперь вооружаемся своим любимым текстовым редактором и подготавливаем каркас:

<?php 	class firewind { 		public $VERSION = "1.0.0";  		function __construct() { 			// Инициализатор // 		} 	} ?> 

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

Морфологический анализатор

Русский язык — довольно сложная штука, которая радует своим разнообразием и шокирует иностранцев конструкциями, типа «да нет, наверное». Научить машину понимать его, да и любой другой язык, — довольно непростая задача. Наиболее успешны в этом плане поисковые компании, типа Google и Яндекс, которые постоянно улучшают свои алгоритмы и держат их в секрете. Придется нам сделать что-то свое, попроще. К счастью, колесо изобретать не придется — все уже сделано за нас. Встречайте, phpMorphy — морфологический анализатор, поддерживающий русский, английский и немецкий языки. Более подробную информацию можно получить тут, однако нас интересуют только две его возможности: лемматизация, то есть получение базовой формы слова, и получение грамматической информации о слове (род, число, падеж, часть речи и т.д.).

Нужна библиотека и словарь для нее. Все это добро можно найти тут. Библиотека находится в одноименной папке «phpmorphy», словари расположены в «phpmorphy-dictionaries». Скачиваем последние версии в корневую папку проекта и распаковываем:

# Распаковываем библиотеку $ unzip phpmorphy-0.3.7.zip $ mv phpmorphy-0.3.7 phpmorphy  # Распаковываем словарь в phpmorphy/dicts $ unzip morphy-0.3.x-ru_RU-withjo-utf-8.zip -d phpmorphy/dicts/  # Удаляем исходные архивы $ rm phpmorphy-0.3.7.zip morphy-0.3.x-ru_RU-withjo-utf-8.zip 

Отлично! Библиотека готова к использованию. Пришло время написать «оболочку», которая абстрагирует работу с phpMorphy. Для этого создадим еще один файл morphyus.php в корневой директории:

<?php 	require_once __DIR__.'/phpmorphy/src/common.php';  	class morphyus { 		private $phpmorphy = null; 		private $regexp_word = '/([a-zа-я0-9]+)/ui'; 		private $regexp_entity = '/&([a-zA-Z0-9]+);/';  		function __construct() { 			$directory = __DIR__.'/phpmorphy/dicts'; 			$language = 'ru_RU'; 			$options[ 'storage' ] = PHPMORPHY_STORAGE_FILE;  			// Инициализация библиотеки // 			$this->phpmorphy = new phpMorphy( $directory, $language, $options ); 		}  		/** 		 * Разбивает текст на массив слов 		 * 		 * @param {string} content Исходный текст для выделения слов 		 * @param {boolean} filter Активирует фильтрацию HTML-тегов и сущностей 		 * @return {array} Результирующий массив 		 */ 		public function get_words( $content, $filter=true ) { 			// Фильтрация HTML-тегов и HTML-сущностей // 			if ( $filter ) { 				$content = strip_tags( $content ); 				$content = preg_replace( $this->regexp_entity, ' ', $content ); 			}  			// Перевод в верхний регистр // 			$content = mb_strtoupper( $content, 'UTF-8' );  			// Замена ё на е // 			$content = str_ireplace( 'Ё', 'Е', $content );  			// Выделение слов из контекста // 			preg_match_all( $this->regexp_word, $content, $words_src ); 			return $words_src[ 1 ]; 		}  		/** 		 * Находит леммы слова 		 *  		 * @param {string} word Исходное слово 		 * @param {array|boolean} Массив возможных лемм слова, либо false 		 */ 		public function lemmatize( $word ) { 			// Получение базовой формы слова // 			$lemmas = $this->phpmorphy->lemmatize( $word ); 			return $lemmas; 		} 	} ?> 

Пока реализовано только два метода. get_words разбивает текст на массив слов, фильтруя при этом HTML-теги и сущности типа "&nbsp;". Метод lemmatize возвращает массив лемм слова, либо false, если таковых не нашлось.

Механизм ранжирования на уровне морфологии

Давайте остановимся на такой единице языка, как предложение. Наиболее важной частью предложения является основа в виде подлежащего и/или сказуемого. Чаще всего подлежащее выражается существительным, а сказуемое глаголом. Второстепенные члены в основном употребляются для уточнения смысла основы. В разных предложениях одни и те же части речи порой имеют совершенно разное значение, и наиболее точно оценить это значение в контексте текста сегодня может только человек. Однако программно оценить значение какого-либо слова все-таки можно, хоть и не так точно. При этом алгоритм ранжирования должен опираться на так называемый профиль текста, который определяется его автором. Профиль представляет из себя ассоциативный массив, ключами которого являются части речи, а значениями соответственно ранг (или вес) каждой из них. Пример профиля я покажу в заключении, а пока попробуем перевести эти размышления на язык PHP, добавив еще один метод к классу morphyus:

<?php 	require_once __DIR__.'/phpmorphy/src/common.php';  	class morphyus { 		private $phpmorphy = null; 		private $regexp_word = '/([a-zа-я0-9]+)/ui'; 		private $regexp_entity = '/&([a-zA-Z0-9]+);/';  		// ... //  		/** 		 * Оценивает значимость слова 		 *  		 * @param {string} word Исходное слово 		 * @param {array} profile Профиль текста 		 * @return {integer} Оценка значимости от 0 до 5 		 */ 		public function weigh( $word, $profile=false ) { 			// Попытка определения части речи // 			$partsOfSpeech = $this->phpmorphy->getPartOfSpeech( $word );  			// Профиль по умолчанию // 			if ( !$profile ) { 				$profile = [ 					// Служебные части речи // 					'ПРЕДЛ' => 0, 					'СОЮЗ' => 0, 					'МЕЖД' => 0, 					'ВВОДН' => 0, 					'ЧАСТ' => 0, 					'МС' => 0,  					// Наиболее значимые части речи // 					'С' => 5, 					'Г' => 5, 					'П' => 3, 					'Н' => 3,  					// Остальные части речи // 					'DEFAULT' => 1 				]; 			}  			// Если не удалось определить возможные части речи // 			if ( !$partsOfSpeech ) { 				return $profile[ 'DEFAULT' ]; 			}  			// Определение ранга // 			for ( $i = 0; $i < count( $partsOfSpeech ); $i++ ) { 				if ( isset( $profile[ $partsOfSpeech[ $i ] ] ) ) { 					$range[] = $profile[ $partsOfSpeech[ $i ] ]; 				} else { 					$range[] = $profile[ 'DEFAULT' ]; 				} 			}  			return max( $range ); 		} 	} ?> 

Индексирование содержимого сайта

Поиск по сайту как сделать

Как уже говорилось выше, индексирование заметно ускоряет выполнение поискового запроса, так как поисковому движку не нужно обрабатывать контент каждый раз заново — поиск выполняется по индексу. Но что же все-таки происходит при индексировании? Если по порядку, то:

  • Сначала из текста формируется массив слов, и делается это с помощью метода get_words.
  • Согласно профилю, из текста отбрасываются незначимые части речи.
  • Значимые оцениваются по пятибальной шкале, с помощью метода weigh.
  • Для каждого сова выполняется поиск лемм, иначе говоря базовых форм.
  • Рассчитывается количество повторений каждого слова и суммарный ранг.
  • Все данные записываются в объект и в виде JSON записываются в базу данных.

В результате получается объект следующего формата:

{ 	"range" : "<коэффициент значимости индексируемых данных>", 	"words" : [ 		// Одно из слов // 		{ 			"source" : "<базовая версия слова>", 			"range" : "<суммарный ранг>", 			"count" : "<количество повторений данного слова в тексте>", 			"weight" : "<ранг на основе части речи>", 			"basic" : [ 				// Варианты лемм слова // 			] 		} 	] } 

Пишем инициализатор и первый метод ядра поискового движка:

<?php 	require_once 'morphyus.php';  	class firewind { 		public $VERSION = "1.0.0"; 		private $morphyus;  		function __construct() { 			$this->morphyus = new morphyus; 		}  		/** 		 * Выполняет индексирование текста 		 * 		 * @param {string} content Текст для индексирования 		 * @param {integer} [range] Коэффициент значимости индексируемых данных 		 * @return {object} Результат индексирования 		 */ 		public function make_index( $content, $range=1 ) { 			$index = new stdClass; 			$index->range = $range; 			$index->words = [];  			// Выделение слов из текста // 			$words = $this->morphyus->get_words( $content );  			foreach ( $words as $word ) { 				// Оценка значимости слова // 				$weight = $this->morphyus->weigh( $word );  				if ( $weight > 0 ) { 					// Количество слов в индексе // 					$length = count( $index->words );  					// Проверка существования исходного слова в индексе // 					for ( $i = 0; $i < $length; $i++ ) { 						if ( $index->words[ $i ]->source === $word ) { 							// Исходное слово уже есть в индексе // 							$index->words[ $i ]->count++; 							$index->words[ $i ]->range =  								$range * $index->words[ $i ]->count * $index->words[ $i ]->weight;  							// Обработка следующего слова // 							continue 2; 						} 					}  					// Если исходного слова еще нет в индексе // 					$lemma = $this->morphyus->lemmatize( $word );  					if ( $lemma ) { 						// Проверка наличия лемм в индексе // 						for ( $i = 0; $i < $length; $i++ ) { 							// Если у сравниваемого слова есть леммы // 							if ( $index->words[ $i ]->basic ) { 								$difference = count( 									array_diff( $lemma, $index->words[ $i ]->basic ) 								);  								// Если сравниваемое слово имеет менее двух отличных лемм // 								if ( $difference === 0 ) { 									$index->words[ $i ]->count++; 									$index->words[ $i ]->range =  										$range * $index->words[ $i ]->count * $index->words[ $i ]->weight;  									// Обработка следующего слова // 									continue 2; 								} 							} 						} 					}  					// Если в индексе нет ни лемм, ни исходного слова, // 					// значит пора добавить его // 					$node = new stdClass; 					$node->source = $word; 					$node->count = 1; 					$node->range = $range * $weight; 					$node->weight = $weight; 					$node->basic = $lemma;  					$index->words[] = $node; 				} 			}  			return $index; 		} 	} ?> 

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

<?php 	$range = <коэффициент значимости> * <ранг на основе части речи> * <количество повторений>;  	// В коде это выглядит так: // 	$index->words[ $i ]->range = $range * $index->words[ $i ]->count * $index->words[ $i ]->weight; ?> 

Хранение индексированных данных

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

Нерешенным остался лишь вопрос формата индексированного содержимого, ведь make_index возвращает объект, и так просто в базу данных или файл его не запишешь. Можно использовать JSON и хранить его в полях типа LONGTEXT, можно BSON или CBOR, используя тип данных LONGBLOB. Два последних формата позволяют представлять данные в более компактном виде, чем первый.

Как говорится, «хозяин — барин», так-что решать, где и как все будет храниться, Вам.

Benchmark

Давайте проверим, что у нас получилось. Я взял текст своей любимой статьи «Темная материя интернета», а именно содержимое узла #content html_format и сохранил его в отдельный файл.

<?php 	require_once '../src/core.php'; 	$firewind = new firewind;  	// Читаем исходный текст // 	$source = file_get_contents( './source.html' );  	// Засекаем время начала // 	$begin_time = microtime( true ); 	echo "Indexing started: $begin_timen";  	// Индексирование // 	$index = $firewind->make_index( $source );  	// Засекаем время конца // 	$finish_time = microtime( true ); 	echo "Indexing finished: $finish_timen";  	// Результаты // 	$total_time = $finish_time - $begin_time; 	echo "Total time: $total_timen"; ?> 

На моей машине с конфигурацией:
CPU: Intel Core i7-4510U @ 2.00GHz, 4M Cache
RAM: 2×4096 Mb
OS: Ubuntu 14.04.1 LTS, x64
PHP: 5.5.9-1ubuntu4.5

Индексирование заняло около секунды:

$ php benchmark.php Indexing started: 1417343592.3094 Indexing finished: 1417343593.5604 Total time: 1.2510349750519 

Думаю, вполне неплохой результат.

Реализация поиска

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

<?php 	require_once 'morphyus.php';  	class firewind { 		public $VERSION = "1.0.0"; 		private $morphyus;  		// ... //  		/** 		 * Выполняет поиск слов одного индексного объекта в другом 		 * 		 * @param {object} target Искомые данные 		 * @param {object} source Данные, в которых выполняется поиск 		 * @return {integer} Суммарный ранг на основе найденных данных 		 */ 		public function search( $target, $index ) { 			$total_range = 0;  			// Перебор слов запроса // 			foreach ( $target->words as $target_word ) { 				// Перебор слов индекса // 				foreach ( $index->words as $index_word ) { 					if ( $index_word->source === $target_word->source ) { 						$total_range += $index_word->range; 					} else if ( $index_word->basic && $target_word->basic ) { 						// Если у искомого и индексированного слов есть леммы // 						$index_count = count( $index_word ->basic ); 						$target_count = count( $target_word ->basic );  						for ( $i = 0; $i < $target_count; $i++ ) { 							for ( $j = 0; $j < $index_count; $j++ ) { 								if ( $index_word->basic[ $j ] === $target_word->basic[ $i ] ) { 									$total_range += $index_word->range; 									continue 2; 								} 							} 						} 					} 				} 			}  			return $total_range; 		} 	} ?> 

Все! Поисковый движок готов к использованию. Но есть одно но… На самом деле это не джин-волшебник, и просто закинув его на свой сайт Вы не получите ничего. Его нужно интегрировать, причем этот процесс во многом зависит от архитектуры Вашего сайта. Рассмотрим этот процесс на примере небольшого интернет магазина.

Реализация поиска на примере интернет-магазина

Допустим, информация о продаваемой продукции хранится в таблице production:

CREATE TABLE `production` ( 	`uid` INT NOT NULL AUTO_INCREMENT, -- Уникальный идентификатор 	`name` VARCHAR(45) NOT NULL, -- Название продукта 	`manufacturer` VARCHAR(45) NOT NULL, -- Производитель 	`price` INT NOT NULL, -- Стоимость продукта 	`keywords` TEXT NULL, -- Индекс ключевых слов 	PRIMARY KEY ( `uid` ) );  SHOW COLUMNS FROM `production`; +--------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+-------+ | uid | int(11) | NO | PRI | NULL | | | name | varchar(45) | NO | | NULL | | | manufacturer | varchar(45) | NO | | NULL | | | price | int(11) | NO | | NULL | | | keywords | text | YES | | NULL | | +--------------+-------------+------+-----+---------+-------+ 

А описание в таблице description:

CREATE TABLE `description` ( 	`uid` INT NOT NULL AUTO_INCREMENT, -- Уникальный идентификатор 	`fid` INT NOT NULL, -- Внешний ключ для привязки описания к продукту 	`description` LONGTEXT NOT NULL, -- Само описание 	`index` TEXT NULL, -- Индексированное описание 	PRIMARY KEY ( `uid` ) );  SHOW COLUMNS FROM `description`; +-------------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+----------+------+-----+---------+-------+ | uid | int(11) | NO | PRI | NULL | | | fid | int(11) | NO | | NULL | | | description | longtext | NO | | NULL | | | index | text | YES | | NULL | | +-------------+----------+------+-----+---------+-------+ 

Поле production.keywords будет содержать индекс ключевых слов продукта, description.index будет содержать индексированное описание. И все это будут храниться в формате JSON.

Вот пример функции добавления нового продукта:

<?php 	require_once 'firewind/core.php'; 	$firewind = new firewind;  	$connection = new mysqli( 'host', 'user', 'password', 'database' ); 	if ( $connection->connect_error ) { 		die( 'Cannot connect to database.' ); 	}  	$connection->set_charset( 'UTF8' );  	function add_product( $name, $manufacturer, $price, $description, $keywords ) { 		global $firewind, $connection;  		// Индексирование описания продукта // 		$description_index = $firewind->make_index( $description ); 		$description_index = json_encode( $description_index );  		// Индексирование ключевых слов // 		$keywords_index = $firewind->make_index( $keywords, 2 ); 		$keywords_index = json_encode( $keywords_index );  		// Подготовка запросов // 		$production_query = $connection->prepare( 			"INSERT INTO `production` ( `name`, `manufacturer`, `price`, `keywords` ) 			 VALUES ( ?, ?, ?, ? )" 		);  		$description_query = $connection->prepare( 			"INSERT INTO `description` ( `fid`, `description`, `index` ) 			 VALUES ( LAST_INSERT_ID(), ?, ? )" 		);  		if ( !$production_query || !$description_query ) { 			die( "Cannot prepare requests!n" ); 		}  		if ( 			// Биндинг параметров // 			$production_query -> bind_param( 'ssis', $name, $manufacturer, $price, $keywords_index ) && 			$description_query -> bind_param( 'ss', $description, $description_index ) &&  			// Выполнение запросов // 			$production_query -> execute() && 			$description_query -> execute() 		) { 			// Если запросы выполнились успешно // 			echo( "Product successfully added!n" );  			// Завершение запросов // 			$production_query -> close(); 			$description_query -> close();  			return true; 		} else { 			die( "An error occurred while executing query...n" ); 		} 	} ?> 

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

<?php 	require_once '../src/core.php'; 	$firewind = new firewind;  	$connection = new mysqli( 'host', 'user', 'password', 'database' ); 	if ( $connection->connect_error ) { 		die( 'Cannot connect to database.' ); 	}  	$connection->set_charset( 'UTF8' );  	// Поисковый запрос // 	$query = isset( $_GET[ 'query' ] ) ? trim( $_GET[ 'query' ] ) : false;  	if ( $query ) { 		// Обработка поискового запроса // 		$query_index = $firewind->make_index( $query );  		// Получение данных // 		$production = $connection->query(" 			SELECT p.`uid`, p.`name`, p.`keywords`, d.`index`  			FROM `production` p, `description` d  			WHERE p.`uid` = d.`uid` 		");  		if ( !$production ) { 			die( "Cannot get production info.n" ); 		}  		// Выполнение поиска // 		while ( $product = $production->fetch_assoc() ) { 			// Распаковка индекса // 			$keywords = json_decode( $product[ 'keywords' ] ); 			$index = json_decode( $product[ 'index' ] );  			$range = $firewind->search( $query_index, $keywords ); 			$range += $firewind->search( $query_index, $index );  			if ( $range > 0 ) { 				$result[ $product[ 'uid' ] ] = $range;  			} 		}  		// Если что-нибудь нашлось // 		if ( isset( $result ) ) { 			// Сортировка по убыванию // 			arsort( $result );  			// Вывод результатов // 			$i = 1;  			foreach ( $result as $uid => $range ) { 				printf( 					"#%d. Found product with id %d and range %d.n", 					$i++, 					$uid, 					$range 				); 			} 		} else { 			echo( "Sorry, no results found.n" ); 		} 	} else { 		echo( "Query cannot be empty. Try again.n" ); 	} ?> 

Данный сценарий принимает поисковый запрос в виде GET-параметра query и выполняет поиск. В результате выводятся найденные продукты магазина.

Заключение

В статье был описан один из вариантов реализации поиска для сайта. Это самая первая его версия, поэтому буду только рад узнать Ваши замечания, мнения и пожелания. Присоединяйтесь к моему проекту на Github: https://github.com/axilirator/firewind. В планах добавить туда еще кучу всяких возможностей, вроде кэширования поисковых запросов, подсказок при вводе поискового запроса и алгоритма побуквенного сравнения, который поможет бороться с опечатками.

Всем спасибо за внимание, ну и с днем информационной безопасности!

habr.com

Обратимся к готовым формам

Как сделать поиск по сайту быстро и без особых усилий? Этот вопрос часто задают себе владельцы сайтов, не знающие язык html настолько глубоко, чтобы написать скрипт поиска самостоятельно. Специально для них известные поисковые системы предусмотрели простую установку стандартизированных поисковых форм. Имеются в виду функции внутреннего поиска от Яндекс и Гугл. Давайте рассмотрим, как их установить.

Для инсталлирования поиска от Яндекс необходимо зайти на «Яндекс-сайт» и кликнуть на ссылку «Установить поиск» в шапке страницы.

1-500x91 Как сделать поиск по сайту

Зарегистрировавшись (если еще нет аккаунта в Яндексе) или введя логин и пароль, пользователь попадает на страницу пошаговой установки поиска по сайту.

2 Как сделать поиск по сайту

В поле «Название поиска» нужно будет объяснить предназначение установки формы. Особой роли это не играет, и на процесс поиска не повлияет, но система сделала заполнение этого поля обязательной процедурой. Кликнув на ссылку «Добавить сайты», следует внести адрес своего ресурса. Кроме того, система попросит пользователя ввести электронный адрес. На него будут приходить сервисные сообщения от Яндекс, статистика и прочая информация. Если в этом поле указать почтовый ящик, созданный не в Yandex, на него придет ссылка для подтверждения работоспособности.

Второй этап — определение внешнего вида поискового модуля.

3 Как сделать поиск по сайту

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

На третьем этапе пользователю необходимо настроить отображение результатов поиска.

4 Как сделать поиск по сайту

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

52 Как сделать поиск по сайту

Для этого нужно ввести в поисковую строку любой запрос и нажать «Найти». После этого загрузится страница с результатами поиска. Если появились вопросы — пользователь сможет вернуться назад и изменить настройки. Если все удовлетворило — можно переходить на последний этап установки.

62 Как сделать поиск по сайту

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

Установить поисковую форму от Google еще проще. Но для этого обязательно необходимо зарегистрировать собственный аккаунт в этой системе.

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

72 Как сделать поиск по сайту

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

82 Как сделать поиск по сайту

Те, кто заходят получать дополнительный доход, должны учесть, что пользователи их сайтов при выводе результатов поискового запроса сначала увидят рекламные ссылки от Google и лишь ниже — результаты поиска по сайту.

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

93 Как сделать поиск по сайту

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

103 Как сделать поиск по сайту

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

Самостоятельная установка скрипта для поиска

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

wildo.ru

Еще по теме:   Как продвинуть сайт в регионах?
Поделиться:
Нет комментариев

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

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

×
Рекомендуем посмотреть
Adblock
detector