Установка кода SAPE на сайт с кириллическими урлами (UTF-8)

Статьи

Add comments

На одном из моих проектов на котором собираю аккорды для гитары используются кодировка 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: На странице из примера может не быть проданных ссылок.


Записи по теме:

Leave a Reply

Подписаться, не комментируя



SEO Office - Все что нужно для оптимизации сайта
Entries RSS Comments RSS Войти