Доброго времени суток, жители Хабра! Хочу рассказать вам о своем 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, а эмулирует браузер обычного пользователя. Что я буду писать, вот функция, смотрите сами:
Звучит и выглядит просто, да? Аналогично происходит и со страницами и рубриками. А вот для медиафайлов написана отдельная функция.
Сначала мы получаем название файла, но перед тем как отправить его на перевод, проводим с ним некоторые манипуляции. Дело в том, что если переводить «моя картинка.png», то Google Translate вернет нам «my kartinka.png». Происходит это из-за того, что Google воспринимает «картинка.png» как одно слово, поэтому не может найти его перевод и возвращает нам его транслит, что нам совсем не нужно. Поэтому сначала мы определим и уберем расширение нашего файла:
Теперь на перевод отправляется лишь «моя картинка» и на выходе мы получим «my picture». А дальше все так же. Только на выводе мы вернем расширение нашему файлу: $url = $text.'.'.$file; Да, и теперь наша функция цепляется на вызов sanitize_title_name() – то есть перевод работает только для новых медиафайлов при их добавлении.
Плагин не трогает старые адреса ваших материалов, а переводит только ярлыки для новых страниц или же при редактировании старых, которые были русскоязычными. Кстати, для последних WordPress сам поставит 301 редирект, однако это не сработает для страниц и рубрик (соответствующий редирект я планирую реализовать в следующей версии MD Translate URL).
На данный момент MD Translate URL доступен в версии 2.5. В следующих версиях нашего SEO-плагина будут реализованы редиректы на новые адреса рубрик и страниц. Кроме того, я планирую включить поддержку всех языков, даже китайского. На данный момент, если в настройках вашего блога указаны отличные от русского языки с кириллическими символами (к примеру украинский и белорусский), то плагин преобразует URL лишь в транслит. С языками не кириллических символов не произойдет ничего.
Надеюсь, вам понравился мой первый плагин. Если у вас остались вопросы и замечания по его работе, или же у вас появились идеи для новых версий плагина – пишите в комментарии, буду рад ответить.

Началось все с того момента, когда новый сеошник, посмотрел на оформление наших ссылок, заявил, что кириллические 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 лишь в транслит. С языками не кириллических символов не произойдет ничего.
Надеюсь, вам понравился мой первый плагин. Если у вас остались вопросы и замечания по его работе, или же у вас появились идеи для новых версий плагина – пишите в комментарии, буду рад ответить.