Делаем ссылки 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-параметров и порядок их следования не фиксирован.

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

Взято с http://www.internet-technologies.ru/articles/article_1352.html


Ведете ли вы блог?

Да
Нет
Планирую


Результаты опроса

Новостной блок