На одном из моих проектов на котором собираю аккорды для гитары используются кодировка UTF-8 и кириллические урлы а-ля Википедия. У такого подхода есть как плюсы, таки и минусы.
Как оказалось, биржа ссылок Sape не умеет правильно обрабатывать кириллические урлы. Переписка со службой поддержки проблемы не решила, посоветовали переделывать кодировку адресов страниц. Если бы сайт был маленький и был бы не проиндексирован поисковиками, возможно, такой вариант и подошел. Но не в данном случае, когда поисковыми системами проиндексировано 1000 страниц и на сайт идет поисковый трафик.
Чтобы запустить продажу ссылок на сайте пришлось доработать код вызова Sape.
Указание кодировки ссылок
Чтобы ссылки выводились в правильной кодировке нужно сообщить sape в какой кодировке хранить ссылки в файле базы ссылок. Для этого в файл .htaccess добавил следующую строку:
AddDefaultCharset UTF-8.
Обычно этого хватает. После внесения изменений в .htaccess нужно удалить файл links.db
Если предыдущий способ не привел к желаемому результату можно прописать кодировку забираемых ссылок с помощью кода из хелпа sape http://help.sape.ru/sape/faq/228
$o['charset'] = 'UTF-8';
$sape = new SAPE_client($o);
unset($o);
После внесения изменений в php код нужно удалить файл links.db
Теперь разберемся с выводом ссылок.
Т.к. на сайте используется mod_rewrite sape не всегда верно определяет урл страницы. Будем сообщать урл открытой страницы следующим кодом:
$o['request_uri'] = $_SERVER['REDIRECT_URL'];
$sape = new SAPE_client($o);
Можно посмотреть, что передается в переменную сделав вывод:
echo($o['request_uri']);
Тут то и обнаруживаются различия в адресах страниц хранимых в проекте сайта в sape и адреса страницы на котором вызывается код.
Урл страниц сайта в кодировке UTF-8.
На страницах урл которых без UTF-8 ссылки выводятся нормально, например http://dodiez.ru/map/5/
На странице http://dodiez.ru/music/%D0%9A%D0%BE%D1%80%D0%BE%D0%BB%D1%8C%20%D0%B8%20%D1%88%D1%83%D1%82/%D0%92%D0%B0%D0%BB%D0%B5%D1%82%20%D0%B8%20%D0%94%D0%B0%D0%BC%D0%B0/
что аналогично http://dodiez.ru/music/Король и шут/Валет и дама/
ссылки не отображаются и имеют статус ERROR.
Смотрим как сохранен урл страницы в sape:
http://dodiez.ru/music/%D0%9A%D0%BE%D1%80%D0%BE%D0%BB%D1%8C%20%D0%B8%20%D1%88%D1%83%D1%82/%D0%92%D0%B0%D0%BB%D0%B5%D1%82%20%D0%B8%20%D0%94%D0%B0%D0%BC%D0%B0/
Смотрим что передается через переменную $_SERVER['REDIRECT_URL']
/music/Король и шут/Валет и Дама/
Получается, что при выводе ссылок sape пытается показать код на нужной странице, однако в базе ссылка храниться в урлкодированном виде. Сделаем преобразование изменив код:
$o['request_uri'] = urlencode($_SERVER['REDIRECT_URL']);
$sape = new SAPE_client($o);echo($o['request_uri']);
Посмотрим, что получилось:
%2Fmusic%2F%D0%9A%D0%BE%D1%80%D0%BE%D0%BB%D1%8C+%D0%B8+%D1%88%D1%83%D1%82%2F%D0%92%D0%B0%D0%BB%D0%B5%D1%82+%D0%B8+%D0%94%D0%B0%D0%BC%D0%B0%2F
Опять различия, символ косой черты и пробел преобразовался в %2F и + соответственно. Необходимо это исправить. Делаем автозамену:
$o['request_uri'] = str_replace ("%2F", "/", urlencode($_SERVER['REDIRECT_URL']));
$o['request_uri'] = str_replace ("+", "%20", $o['request_uri']);echo($o['request_uri']);
Проверяем, что получилось:
/music/%D0%9A%D0%BE%D1%80%D0%BE%D0%BB%D1%8C%20%D0%B8%20%D1%88%D1%83%D1%82/%D0%92%D0%B0%D0%BB%D0%B5%D1%82%20%D0%B8%20%D0%94%D0%B0%D0%BC%D0%B0/
Теперь все верно, адрес страницы сохраненный в бирже и передаваемый коду показа ссылок одинаков. Ссылки стали выводится на странице. Остается дождаться когда система перепроверит размещенные ссылки и поставит по ним статус Ok.
PS: Уверен, что в блоке автозамены учтены не все случаи, когда будут различия в урлкодировании sape и функции php urlencode, поэтому при выпадении ссылки в статус Error необходимо будет внести правки в код автозамены.
PPS: На странице из примера может не быть проданных ссылок.
Теги: PHP, SAPE, биржа ссылок, ссылки
Записи по теме:
- Проверка большого количества ссылок из SAPE в Yandex Webmaster
- Seomachines Linkmaster Pro — Проверка списка ссылок на непот-фильтр и индексацию, работает с SAPE
- Новый устав SAPE, что делать вебмастеру?
- Полезные ресурсы
- Бесплатный сервис для анализа и управления внешней ссылочной массой. Оптимизация ссылочного бюджета


Декабрь 22nd, 2010 at 16:49
спасибо за информацию
Январь 23rd, 2011 at 15:04
Отличная статья!
Май 4th, 2011 at 13:06
Спасибо большое за статью. Очень помогла.
Только в Вашем коде, наверно, ошибка.
У Вас строка:
$o['request_uri'] = str_replace («+», «%20″, $o['request_uri']);
А надо:
$o['request_uri'] = str_replace («%2B», «+», $o['request_uri']);
Август 21st, 2011 at 22:27
спасибо за инструкцию, она сейчас актуальна