Если пользователь попал во всплывающее окно через поисковый механизм или с
внешнего Web-сайта, то нужен какой-то способ навигации, который позволил бы пользователю перейти на родительскую страницу. Обычно всплывающие окна создаются без контекстных или навигационных элементов, так что налицо проблема.
Нужно обеспечить, по крайней мере, ссылку на главную страницу, а в идеале и на
какую-то более релевантную родительскую страницу. Иначе пользователь окажется в тупике и будет вынужден щелкнуть на кнопке "Назад".
Не всегда желательно, чтобы всплывающее окно было доступно поисковому механизму.
Учитывая тот факт, что всплывающие окна редко содержат существенную информацию, навигация может оказаться и не нужной. Если всплывающее окно не содержит существенной информации, мы рекомендуем полностью исключить его из поля зрения поисковых агентов.
Страницу, с которой пользователь попал во всплывающее окно, можно получить,
прочитав значение заголовка $_SERVER[HTTP_REFERER]. Эта информация позволяет показывать навигационные элементы, только если пользователь перешел с внешнего Web-сайта, например, с поискового.
Этот метод не на 100% надежен, поскольку некоторые брандмауэры блокируют информацию REFERER Кроме того, информация REFERER недоступна, если рефералъная страница защищена с помощью HTTPS. В приведенном ниже упражнении при отсутствии данных REFERER навигационные элементы на всякий случай выводятся.
Эту технику можно опробовать, выполнив небольшое упражнение.
1. Добавьте в сценарий catalog.php ссылку на файл с кодом всплывающего окна,
как показано в приведенном ниже фрагменте кода. Здесь предполагается, что
вы работаете с кодом, созданным в предыдущих главах. Если его у вас нет, обратитесь к загружаемому коду для этой книги.
<?php
// загрузка библиотеки генератора URL
require_once 1include/url_factory.inc.php' ;
?>
Friends' Shed: AJAX PHP Book
- Хатка друзей: Книга no AJAX PHP
ysHaiiTe больше о
Профессиональной поисковой оптимизации на РНР!
2. Загрузите страницу http: //seophp. example. com/catalog. html, чтобы проверить,
что этот сценарий правильно загружается и выводит новую ссылку, как
показано на рис. 6 . 1 . Учтите, что в данном упражнении предполагается, что вы
создали свой простой каталог так, как описано в главе 3.
3. Создайте в папке seophp новый файл с именем popup.php и введите в него следующий код:
<?php
// загрузка библиотеки программ работы со всплывающими окнами
require_once 'include/popup_utils.inc.php';
?>
<Ы>Профессиональная поисковая оптимизация на PHP: Оглавление
<?php
// вывод навигации во всплывающем окне только если посетитель пришел с SERP
display_popup_navigation();
?>
-
<И>Вы: программист и специалист по поисковому маркетингу
- UKL-aflpeca, оптимизированные для поиска
<11>Перемешекие контента и коды состояния HTTP - HTML и JavaScript, оптимизированные для поиска
<И>НеЬ-каналы и социальные эакладки
<И>Нечестная SEO - WordPres8: создание блога, оптимизированного для поиска
<И>Введение в регулярные выражания
<1хХ)сновы SEO
<1 сдублированный контент
<И>Карты сайтов
<1х>Приманивание ссылок
<И>Маскирование, региональная привязка и подмена по IP
<И>Зарубежная SECK/li>
<И>Разрешение технических BonpocoB
<И>Практическое занятие: создание магазина электронной коммерции
<И>Клиника для сайтов: так у вас уже есть Web-cauT?
4. Создайте в папке seophp/include новый файл с именем popup_utils. inc.php
и введите в него следующий код:
<?php
// включение конфигурационного файла
require_once 1config.inc.php1;
// вывод навигации во всплывавшем окне только если посетитель пришел с SERP
function display_popup_navigation()
{
// выводить навигацию?
$disp_nav = false;
.11 если нет REFERER (посетитель вошел в окно непосредственно), вывод навигации
if (!isset($_SERVER['HTTP_REFERER']))
{
$disp_nav = true ;
}
// если REFERER не ив этого домена, вывод навигации
else
{
// раэбор REFERER и локального сайта с помощью parse_url()
$parsed_referer = parse_url ($_SERVER[' HTTP_REFERER1 ]) ;
$parsed_local = parse_url(SITE_DOMAIN);
// извлечение домена реферального URL и локального сайта
$re£erer_host = $parsed_referer['host'];
$local_host = $parsed_local['host'];
// вывод навигаци, если реферальный URL не из этого домена
if ($referer host != $ local host)
$disp_nav = true ;
}
>
// вывод навигации, если нужно
if ($disp_nav = true)
{
echo 'noceTna?e нашу страницу с каталогом!' ;
}
}
?>
5. И вот самый ответственный момент. Загрузите страницу h t t p : //seophp.
example . com/catalog. html и щелкните на ссылке на всплывающее окно.
Навигационные элементы должны отсутствовать. Но если вы попадете на эту
страницу из Google, Yahoo! или MSN, либо непосредственно введете адрес
http://seophp. example. com/popup. php в адресную строку браузера, то навигационная ссылка должна быть видна (рис. 6.2).
6. А теперь очень удобно проверить работу подключаемого модуля RefControl для
FireFox, о котором было сказано еще в главе 2. Он позволяет вывести и изменить
информацию REFERER. Установите этот модуль и перейдите на адрес http://seophp.example.com/catalog.html. На открывшейся странице щелкните на
ссылке, которая открывает всплывающее окно, и посмотрите на информацию
REFERER, отображаемую в строке состояния (рис. 6.3). Вы увидите, что ссылка
на каталог не видна, если всплывающее окно открыто из вашего сайта.
Это был серьезный объем кода, но ведь как полезна полученная техника! Теперь,
при наличии библиотеки для работы с всплывающими окнами, уже нетрудно выводить навигационные ссылки только тогда, когда они нужны. Здесь было применено не настоящее всплывающее окно, но можно использовать и обычные всплывающие окна JavaScript с тем же результатом.
Если в какое-то всплывающее окно понадобится добавить еще одну навигационную ссылку, нужно будет выполнить лишь два шага. Вначале в сценарий этого окна необходимо включить сценарий popup_utils. inc.php. Это было сделано и в popup.php:
<?php
// загрузка библиотеки программ работы со всплывающими окнами
require_once 'include/popup_utiIs.inc.php';
?>
А затем в том месте, где нужно вставить навигационную ссылку, потребуется вставить вызов функции display_popup_navigation ( ) , определенной в файле рорup_utils.inc.php:
<?php
// вывод навигации во всплывающем окне только если посетитель пришел с SERP
display_popup_navigationО;
?>
Эта функция проверяет, указывает ли поле REFERER на локальный домен, и если
да, то не выводит навигационную ссылку. А если REFERER указывает на любой другой
домен или пусто, то навигационная ссылка выводится.
Работа функции начинается с проверки, имеет ли значение поле REFERER. Если
нет, во временную переменную $display_nav заносится true. По умолчанию эта переменная
имеет значение false. В конце функция проверяет это значение и определяет,
выводить ли навигационные ссылки:
// вывод навигации во всплывающем окне только если посетитель пришел с SERP
function display_popup_navigation()
{
// выводить навигацию?
$disp_nav = false;
// если нет REFERER (посетитель вошел в окно непосредственно), вывод навигации
if (!isset($_SERVER['HTTP_REFERER']))
{
$disp_nav = true;
}Если REFERER содержит значение, выполняется проверка, совпадает ли имя хоста
из REFERER с именем хоста из константы SITE_DOMAIN, которая определена в файле
conf ig. inc. php. Если эти имена хостов различны, то посетитель попал во всплывающее
окно с внешнего Web-сайта, и нужно вывести навигационную ссылку:
// если REFERER не из этого домена, вывод навигации
else
{
// раэбор REFERER и локального сайта с помощью parse_url()
$parsed_referer = parse_url($_SERVER['HTTP_REFERER']);
$parsed_local = parse_url(SITE_DOMAIN);
// извлечение домена реферального URL и локального сайта
$referer_host = $parsed_referer['host'];
$local_host = $parsed_local['host'];
// вывод навигаци, если реферальный URL не из этого домена
if ($referer host != $local host)
{
$disp_nav = true;
}
И в конце, если значение переменной $disp_nav равно true, выводится навигационная ссылка:
// вывод навигации, если нужно
if ($disp_nav == true)
{
echo 'noceTHTe нашу страницу с каталогом!';