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

На одному з моїх проектів на якому збираю використовуються кодування 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/Король і шут/Валет і дама /

посилання не відображаються і мають статус ERROR.

Дивимося як збережений урл сторінки в sape:

Дивимося що передається через змінну $ _SERVER ['REDIRECT_URL']

/ music/Король і шут/Валет і Дама /

Виходить, що при виводі посилань sape намагається показати код на потрібній сторінці, проте в базі посилання зберігатися в урлкодірованном вигляді. Зробимо перетворення змінивши код:

$ o ['request_uri'] = urlencode ($ _SERVER ['REDIRECT_URL']);
$ Sape = new SAPE_client ($ o);

echo ($ o ['request_uri']);

Подивимося, що вийшло:

Знову відмінності, символ косою риси і пробіл перетворився в% 2F і + відповідно. Необхідно це виправити. Робимо автозаміну:

$ o ['request_uri'] = str_replace ("% 2F", "/", urlencode ($ _SERVER ['REDIRECT_URL']));
$ O ['request_uri'] = str_replace ("+", "% 20", $ o ['request_uri']);

echo ($ o ['request_uri']);

Перевіряємо, що вийшло:

Тепер все вірно, адреса сторінки збережений в біржі і передаваний коду показу посилань однаковий. Посилання стали виводиться на сторінці. Залишається дочекатися коли система перевірить ще розміщені посилання і поставить по ним статус Ok.

PS: Упевнений, що в блоці автозаміни враховані не всі випадки, коли будуть відмінності в урлкодірованіі sape і функції php urlencode, тому при випаданні посилання в статус Error необхідно буде внести правки в код автозаміни.

PPS: На сторінці з прикладу може не бути проданих посилань.


Опубліковано: 18/08/10 @ 11:10
Розділ seo

Рекомендуємо:

Секрети контекстної реклами в новій книзі « Контекстна реклама » від професіоналів - практиків
Ефективне просування сайтів в Яндексі . Михайло Райцин , Олексій Кураков . Електронна книга .
$ 50 від американців за російську пошук по німецькій статті в польському журналі з французьким прононсом та англійськими корінням .
Дайджест : продаж ThinkGrid , Computer Science в Khan Academy , міфи про індійський аутсорсингу , корпоративна культура Dropbox
Інтерв'ю - Вадим Сахнік , автор блогу wildo.ru