На більшості сайтів, адреси типу 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-параметрів і порядок їх проходження не фіксований.

У підсумку, всі еквівалентні сторінки будуть містити одні і ті ж «продажні» посилання, що зробить їх технічно відрізнятись від природних посилань. Тим не менш, це не вирішення всіх проблем, так як пошукові системи звертають уваги і інші фактори, такі як, частота зміни посилань на сторінці і відповідність тематики розміщених посилань тематиці сайту.