Владельцы русскоязычных сайтов на WordPress часто сталкиваются с проблемой: при создании страниц и записей в адресах URL автоматически появляются кириллические символы. Это может привести к проблемам с индексацией сайта, а также ухудшить читаемость и восприятие ссылок. Чтобы решить эту задачу, необходимо настроить автоматическую транслитерацию URL — преобразование кириллических символов в латинские.
Почему важна транслитерация URL в WordPress
Стандартные адреса страниц и постов в WordPress формируются из заголовков, которые могут содержать любые символы, включая кириллицу. В итоге, в адресной строке браузера появляются URL с русскими буквами, например, site.ru/%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80.
Такой URL выглядит громоздко и плохо воспринимается поисковыми системами. Кроме того, некоторые серверы и браузеры могут некорректно обрабатывать кириллические адреса, что снижает удобство пользователей и влияет на SEO.
Решение — преобразовать заголовки и названия страниц в латиницу при формировании URL, сохранив при этом их читаемость и семантику. Это называется транслитерацией.
Варианты реализации автоматической транслитерации URL в WordPress
Для реализации транслитерации можно использовать готовые плагины или написать собственный код, который будет срабатывать при сохранении записи и изменять слаг (slug) — уникальный идентификатор URL.
Использование плагинов для транслитерации
Среди популярных плагинов, которые позволяют транслитерировать русские URL, можно выделить:
- Rus-To-Lat — простой и эффективный плагин, который автоматически конвертирует кириллицу в латиницу при создании новых записей и страниц.
- Translitera — более продвинутый плагин с дополнительными настройками, позволяющими контролировать правила транслитерации и исключения.
- WP Cyrillic Permalinks — функция обеспечивает преобразование URL для всех типов записей и таксономий.
Преимущество плагинов — простота настройки, но они могут быть избыточными, если нужна только базовая транслитерация.
Собственная функция автоматической транслитерации на PHP
Если вы хотите реализовать транслитерацию без плагинов, можно добавить кастомный код в файл functions.php вашей темы или в собственный плагин. Ниже представлен пример такой функции с префиксом cyrtolat_, которая автоматически преобразует кириллический слаг в латиницу при сохранении записи.
function cyrtolat_transliterate($text) {
$converter = array(
'а' => 'a', 'б' => 'b', 'в' => 'v',
'г' => 'g', 'д' => 'd', 'е' => 'e',
'ё' => 'e', 'ж' => 'zh', 'з' => 'z',
'и' => 'i', 'й' => 'y', 'к' => 'k',
'л' => 'l', 'м' => 'm', 'н' => 'n',
'о' => 'o', 'п' => 'p', 'р' => 'r',
'с' => 's', 'т' => 't', 'у' => 'u',
'ф' => 'f', 'х' => 'h', 'ц' => 'c',
'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch',
'ь' => '', 'ы' => 'y', 'ъ' => '',
'э' => 'e', 'ю' => 'yu', 'я' => 'ya',
'А' => 'A', 'Б' => 'B', 'В' => 'V',
'Г' => 'G', 'Д' => 'D', 'Е' => 'E',
'Ё' => 'E', 'Ж' => 'Zh', 'З' => 'Z',
'И' => 'I', 'Й' => 'Y', 'К' => 'K',
'Л' => 'L', 'М' => 'M', 'Н' => 'N',
'О' => 'O', 'П' => 'P', 'Р' => 'R',
'С' => 'S', 'Т' => 'T', 'У' => 'U',
'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C',
'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sch',
'Ь' => '', 'Ы' => 'Y', 'Ъ' => '',
'Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya',
);
return strtr($text, $converter);
}
function cyrtolat_custom_slug_translit($slug, $post_ID, $post_status, $post_type) {
if ($post_type === 'post' || $post_type === 'page') {
$slug = cyrtolat_transliterate($slug);
// Дополнительно преобразуем в нижний регистр и заменяем пробелы на дефисы
$slug = strtolower($slug);
$slug = preg_replace('/[^a-z0-9-]/', '-', $slug);
$slug = preg_replace('/-+/', '-', $slug);
$slug = trim($slug, '-');
}
return $slug;
}
add_filter('wp_unique_post_slug', 'cyrtolat_custom_slug_translit', 10, 4);В этом коде функция cyrtolat_transliterate заменяет русские буквы на их латинские аналоги по заданным правилам. Фильтр wp_unique_post_slug применяется для изменения слага перед сохранением записи. В результате, если вы создадите запись с заголовком «Пример транслитерации», URL будет выглядеть как primer-transliteracii.
Особенности и рекомендации при использовании транслитерации URL
Перед внедрением автоматической транслитерации важно учесть несколько моментов:
- Уникальность URL: WordPress автоматически проверяет уникальность слага. Если транслитерированный слаг уже используется, к нему будет добавлено число, например
primer-transliteracii-2. - Совместимость с плагинами SEO: Многие SEO-плагины корректно работают с латинизированными URL, что положительно сказывается на продвижении.
- Обработка специальных символов: В коде примера все символы, кроме латинских букв, цифр и дефисов, заменяются на дефисы, чтобы избежать ошибок.
- Обновление старых URL: Если у вас уже есть страницы с кириллическими URL, их можно вручную изменить через редактирование слага в админке или с помощью специальных плагинов для массового переименования URL.
Как обновить URL существующих записей
Для массового обновления URL с кириллицы на латиницу можно использовать плагин Bulk Slug Translator или написать WP-CLI скрипт. Например, простой PHP-скрипт для обновления слагов всех постов:
$posts = get_posts(array('numberposts' => -1, 'post_type' => 'post'));
foreach ($posts as $post) {
$new_slug = cyrtolat_transliterate($post->post_name);
$new_slug = strtolower($new_slug);
$new_slug = preg_replace('/[^a-z0-9-]/', '-', $new_slug);
$new_slug = preg_replace('/-+/', '-', $new_slug);
$new_slug = trim($new_slug, '-');
if ($new_slug !== $post->post_name) {
wp_update_post(array(
'ID' => $post->ID,
'post_name' => $new_slug
));
}
}Этот скрипт можно запускать в админке через плагин Code Snippets или в консоли WP-CLI с адаптацией под ваш сайт.
Заключение
Автоматическая транслитерация URL в WordPress — это важный шаг к улучшению удобства сайта, SEO и совместимости с различными системами. Выбор между использованием плагинов и собственной реализацией зависит от ваших потребностей и навыков. Представленный код с префиксом cyrtolat_ — надежный и простой способ внедрить транслитерацию без излишних зависимостей.
Регулярно проверяйте корректность URL и следите за уникальностью слагов, чтобы избежать конфликтов и ошибок на сайте.