Pull to refresh

MD Translate URL – SEO-плагин для перевода ярлыков Wordpress

Доброго времени суток, жители Хабра! Хочу рассказать вам о своем SEO-плагине – MD Translate URL. Изначально я разработал прототип для нужд портала MobiDevices, а уже потом я решил оформить свои наработки в плагин и выложить его для всех желающих. В своей первой статье на Хабре я подробно расскажу об истории создания, особенностях работы и сферы применения моего первого плагина для Wordpress.



Началось все с того момента, когда новый сеошник, посмотрел на оформление наших ссылок, заявил, что кириллические URL – это зло. Конечно, с этим мнением нельзя не согласится. Да, русские ярлыки записей обеспечивают точное вхождение ключевого слова из Title в адрес страницы, но такие URL, в отличии от обычных, набранных латиницей, кодируется в Unicode (как правило UTF-8) в последовательность из двух байт. Плохо это прежде всего тем, что такой формат превращает слово «привет мир» в такой непонятный набор символов как «%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82%20%D0%BC%D0%B8%D1%80». Хотя поисковики и понимают кириллические URL, однако в последствии адрес на страницу вместо 10 символов составляет аж 57! Те, кто хотя бы немножко знаком с SEO, отлично знают, что очень длинные URL негативно влияет на продвижение страницы. К тому, «великий» Internet Explorer так и не научился до сих пор понимать русские ссылки.

Поэтому было принято решение преобразовывать все новые ярлыки (или, как их еще называют, слаги) записей в латиницу. Для этого я написал скрипт транслитерации и добавил его в functions.php.

Но, как это часто случается, с решением одной проблемы возникла новая. Да, вместо «привет мир» теперь у нас «privet mir», но в поисковой выдаче наш транслитный URL не хотел подсвечивать ни Google, ни Яндекс. Это значит, что поисковики просто-напросто не понимают, что «привет мир» в Title статьи и «privet mir» в адресе страницы – это одно и то же.

Но я заметил и другую особенность – к примеру, если набрать в Google «привет мир», то «hello word» в URL будет подсвечиваться. Вывод здесь очевиден – нужно написать плагин перевода ярлыков. Здесь я попробую подробно объяснить работу моего плагина.

Начну с того, что MD Translate URL получает заголовок из вашей записи. После этого тот отправляется в Google Translate, возвращает переведенный текст, Wordpress его правильно форматирует и вставляет его в поле ярлыка записи. Функция запускается при вызове sanitize_title().



Тут некоторые из вас поинтересуются, как это плагин может использовать Google Translate, если официально Google прекратил поддержку API еще несколько лет назад? А все дело в том, что MD Translate URL не использует API, а эмулирует браузер обычного пользователя. Что я буду писать, вот функция, смотрите сами:

function md_url($title){
$url = $title;
$google = 'http://translate.google.ru/translate_a/t?client=t&text='.urlencode($title).'&hl=ru&sl=ru&tl=en&ie=UTF-8&oe=UTF-8&multires=1&oc=6&prev=btn&ssel=0&tsel=0&sc=1';
$args = array('User-Agent' => 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5','Referer' => 'http://translate.google.ru');
$http = new WP_Http();
$result = $http->get($google, $args);
if (isset($result['response']['code']) && $result['response']['code'] == 200 && isset($result['body']) && !empty($result['body'])) {
$body = $result['body'];
$body = str_replace('\\"', '', $body);
$body = explode('"', $body, 3);
$url = sanitize_user($body[1], true);
}
return $url;
}

Звучит и выглядит просто, да? Аналогично происходит и со страницами и рубриками. А вот для медиафайлов написана отдельная функция.

Сначала мы получаем название файла, но перед тем как отправить его на перевод, проводим с ним некоторые манипуляции. Дело в том, что если переводить «моя картинка.png», то Google Translate вернет нам «my kartinka.png». Происходит это из-за того, что Google воспринимает «картинка.png» как одно слово, поэтому не может найти его перевод и возвращает нам его транслит, что нам совсем не нужно. Поэтому сначала мы определим и уберем расширение нашего файла:

$file = substr(strrchr($title, '.'), 1); //Определяем расширение
$title = str_replace('.'.$file, '', $title); //Удаляем расширение

Теперь на перевод отправляется лишь «моя картинка» и на выходе мы получим «my picture». А дальше все так же. Только на выводе мы вернем расширение нашему файлу: $url = $text.'.'.$file; Да, и теперь наша функция цепляется на вызов sanitize_title_name() – то есть перевод работает только для новых медиафайлов при их добавлении.

Плагин не трогает старые адреса ваших материалов, а переводит только ярлыки для новых страниц или же при редактировании старых, которые были русскоязычными. Кстати, для последних WordPress сам поставит 301 редирект, однако это не сработает для страниц и рубрик (соответствующий редирект я планирую реализовать в следующей версии MD Translate URL).

На данный момент MD Translate URL доступен в версии 2.5. В следующих версиях нашего SEO-плагина будут реализованы редиректы на новые адреса рубрик и страниц. Кроме того, я планирую включить поддержку всех языков, даже китайского. На данный момент, если в настройках вашего блога указаны отличные от русского языки с кириллическими символами (к примеру украинский и белорусский), то плагин преобразует URL лишь в транслит. С языками не кириллических символов не произойдет ничего.

Надеюсь, вам понравился мой первый плагин. Если у вас остались вопросы и замечания по его работе, или же у вас появились идеи для новых версий плагина – пишите в комментарии, буду рад ответить.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.