Делаем ссылки sape устойчивыми к GET-параметрам
На большинстве сайтов, адреса типа http://example.com/page.html и http://example.com/page.html?abra=cadabra имеют эквивалентное содержимое. Если поисковик увидит оба этих URL, то склеит их и будет считать одним и тем же ресусом. Sape различает все URL с разными GET-параметрами, так как некоторые GET-параметры существенно меняют содержимое страницы. В результате, если на странице http://example.com/page.html будет размещена ссылка sape, то на странице http://example.com/page.html?abra=cadabra ее не будет. Такое поведение нежелательно, так как может помешать корректной склейке эквивалентных страниц и может использоваться для обнаружения "продажных ссылок" на странице.Наша задача в том, чтобы ссылка присутствовала как вкопанная на всех страницах, эквивалентных по содержимому исходной странице. Один из способов достичь этого — исключить все эквивалентные страницы. Для этого достаточно отдавать код 404, если страница содержит неопознанный GET-параметр. Такой подход обычно не практикуется, так как небольшая ошибка может привести к недоступности нужных динамических страниц. Кроме того, "паразитные" GET-параметры часто бывают полезны, например, они используются системой контекстной рекламы для отслеживания ее эффективности через сторонние системы статистики (так называемые метки openstat).
Мы опишем другой подход: модифицируем код вызова sape так, чтобы одни и те же ссылки присутствовали на всех страницах, эквивалентных данной. При этом необходимо сохранить все GET-параметры, которые существенно меняют содержимое страницы. Для упрощения кода, будем считать, что полезные GET-параметры в URL (если их несколько) всегда следуют в одном и том же порядке. Решение приведем для php-кода sape. Sape позволяет при вызове указывать явно URL, для которого требуется получить код ссылки. Пусть код вызова sape выглядит так:
require_once($_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php');
$o['charset'] = 'UTF-8';
$sape = new SAPE_client($o);
Нам необходимо, чтобы sape оперировал URL, очищенным от всех лишних GET-параметров. Все разрешенные GET-параметры в порядке их следования, перечисленны в массиве $FRIENDLY_GET_PARAMS. Сформируем очищенный URL и передадим его sape с помощью опции 'request_uri'. Код вызова sape будет выглядеть так::
require_once($_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php');
$o['charset'] = 'UTF-8';
$FRIENDLY_GET_PARAMS = array('id','p', 'f');
$o['request_uri'] = reset(explode('?', $_SERVER['REQUEST_URI']));
$params = array();
foreach($FRIENDLY_GET_PARAMS as $k) {
if(isset($_GET[$k])) {
$params[] = urlencode($k) . '=' . urlencode($_GET[$k]);
}
}
if($params) {
$o['request_uri'] .= "?" . implode('&', $params);
}
$sape = new SAPE_client($o);
Внимание: Код протестирован на сайтах с минимальным количеством полезных GET-параметров. Если у вас GET-параметры используются интенсивно и принимают з3амысловатые значения, просим внимательно протестировать корректность отображения ссылок на таких страницах. Логику потребуется усложнить, если URL может содержать несколько полезных GET-параметров и порядок их следования не фиксирован.
В итоге, все эквивалентные страницы будут содержать одни и те же "продажные" ссылки, что сделает их технически неотличимыми от естественных ссылок. Тем не менее, это не решение всех проблем, так как поисковики обращают внимания и на другие факторы, такие как, частота изменения ссылок на странице и соответствие тематики размещенных ссылок тематике сайта.
Источник: www.internet-technologies.ru