После массового импорта контента в WordPress часто всплывает одна и та же проблема: часть slug выглядит нормально, а часть внезапно меняется не так, как ожидалось. Где-то кириллица превращается в латиницу, где-то отдельные слова подменяются по словарю, а где-то старые URL начинают расходиться с новыми. Если в проекте используется CyrtoLat, это обычно не баг «в целом», а следствие того, как именно настроена автоподмена слов и в какой момент она срабатывает.
Ниже разберём рабочий сценарий: как понять, что именно ломает slug после импорта, как безопасно проверить настройки CyrtoLat и как отладить поведение без риска массово переписать уже опубликованные адреса.
Когда проблема действительно в автоподмене CyrtoLat
Сначала стоит отделить проблему плагина от обычной WordPress-логики. WordPress сам по себе умеет транслитерировать slug, но если в проекте есть CyrtoLat, он может дополнительно применять правила подмены слов, чтобы сделать URL более читабельными. После импорта это особенно заметно, если источник данных содержит:
- смешанные заголовки на кириллице и латинице;
- повторяющиеся слова, которые есть в словаре подмены;
- старые slug из другой CMS;
- импорт через CSV, XML или сторонний плагин, который пересохраняет записи пачкой.
Типичные признаки
Проверьте, совпадает ли ваш случай хотя бы с одним пунктом:
- slug меняется не только при создании новой записи, но и после повторного сохранения уже импортированной;
- часть URL стала короче или, наоборот, неожиданно длиннее;
- в админке заголовок один, а permalink после сохранения другой;
- после импорта появились дубли, хотя исходные заголовки были разными;
- редиректы ведут на новый адрес, хотя вы ожидали сохранить старый.
Если проблема проявляется только у отдельных записей, чаще всего дело в словаре автоподмены или в том, что импортёр пересохраняет slug через стандартные фильтры WordPress. Если же изменились почти все URL, стоит проверить глобальные настройки CyrtoLat и порядок загрузки плагинов.
Диагностика: что проверить до изменения настроек
Перед правкой конфигурации важно зафиксировать исходное состояние. Иначе легко получить ситуацию, когда старые URL уже переписаны, а понять, какой именно механизм сработал, невозможно.
1. Сравните исходный заголовок и итоговый slug
Возьмите несколько проблемных записей и выпишите:
- оригинальный title;
- slug после импорта;
- slug после ручного повторного сохранения;
- есть ли редирект со старого адреса на новый.
Если slug меняется только после ручного сохранения в админке, значит, автоподмена срабатывает на этапе генерации permalink. Если же адрес меняется уже в процессе импорта, значит, импортёр передаёт данные так, что WordPress пересобирает slug повторно.
2. Проверьте, не включена ли автоподмена слов глобально
В CyrtoLat автоподмена слов может быть полезной для новых материалов, но опасной для миграций. Если вы переносите большой архив, лучше сначала понять, какие именно правила активны. В рабочем проекте я бы начал с временного отключения подмены слов для тестовой группы записей, а не для всего сайта.
3. Посмотрите, не конфликтует ли импортёр
Некоторые импортёры при сохранении записи вызывают стандартные функции WordPress так, будто запись создаётся впервые. В таком случае CyrtoLat честно применяет свои правила ещё раз. Это не ошибка плагина, но для вас результат выглядит как «сломанный slug».
Пошаговое решение: как отладить автоподмену без массовой поломки URL
Самый безопасный путь — не трогать сразу весь сайт, а сначала выделить тестовую группу записей. Это позволяет понять, где именно происходит подмена: в импорте, в сохранении записи или в редиректе.
Шаг 1. Зафиксируйте проблемные URL
Сохраните список из нескольких записей, где slug уже отличается от ожидаемого. Лучше брать разные типы контента: запись, страницу, кастомный тип записи. Так вы увидите, одинаково ли ведёт себя CyrtoLat в разных контекстах.
Шаг 2. Отключите автоподмену слов только для теста
Если в CyrtoLat есть настройка отключения автоподмены слов внутри slug, используйте её сначала на тестовом наборе. Это не то же самое, что отключить транслитерацию полностью: базовая конвертация кириллицы в латиницу обычно остаётся, а вот словарная подмена перестаёт вмешиваться.
Если у вас есть доступ к коду и нужно проверить поведение точечно, можно временно обойти генерацию slug через собственный фильтр WordPress. Ниже пример, который показывает принцип: для конкретного типа записи slug не переписывается повторно при сохранении.
add_filter('wp_insert_post_data', function ($data, $postarr) {
if (!empty($postarr['post_type']) && $postarr['post_type'] === 'post') {
// Оставляем slug как есть, если он уже был задан импортёром.
if (!empty($data['post_name'])) {
remove_filter('wp_insert_post_data', __FUNCTION__, 10);
}
}
return $data;
}, 10, 2);Этот пример не заменяет настройки CyrtoLat, а помогает проверить, где именно возникает повторная генерация slug. Если после такого обхода URL перестали меняться, значит, источник проблемы — повторное сохранение записи или импортёр.
Шаг 3. Проверьте одну запись вручную
Возьмите одну проблемную запись, откройте её в админке и сохраните без изменений. Если slug изменился, значит, автоподмена срабатывает на этапе обновления записи. Если не изменился — проблема чаще всего в импорте или в редиректах.
Шаг 4. Сравните старый и новый адрес
Если CyrtoLat настроен на редиректы, убедитесь, что старый URL не уводит на неожиданный новый адрес. Для миграций это критично: иногда редирект работает, но ведёт не на тот материал, который вы ожидали сохранить.
| Подход | Что делает | Когда использовать | Минус |
|---|---|---|---|
| Настройки CyrtoLat | Отключает или ограничивает автоподмену слов | Если нужно быстро стабилизировать slug после импорта | Требует проверки на части контента |
| Код через фильтры WordPress | Точечно блокирует повторную генерацию slug | Если импортёр пересохраняет записи неконтролируемо | Нужна аккуратность и тестовый стенд |
| Оставить как есть | Ничего не менять | Если URL уже опубликованы и не вызывают дублей | Риск накопления несогласованных адресов |
Как проверить, что решение сработало
Проверка должна быть не визуальной, а технической. Иначе легко пропустить скрытые редиректы или повторную подмену при следующем сохранении.
- Откройте несколько проблемных записей в админке и убедитесь, что slug не меняется после сохранения.
- Проверьте старый URL в браузере и через
curl -I, если есть доступ к консоли. - Сравните адрес в базе и адрес в permalink, если используете импорт из внешней системы.
- Посмотрите, не появились ли новые дубли в поиске по сайту или в sitemap.
Пример быстрой проверки редиректа через консоль:
curl -I https://example.com/staryj-url/В ответе важно увидеть ожидаемый код и целевой адрес. Если редирект уводит не туда, значит, проблема не только в slug, но и в логике перенаправления.
Частые ошибки и как их исправить
Импортёр пересохраняет записи после создания
Это самая частая причина повторной подмены. Внешне кажется, что CyrtoLat «сам» меняет slug, но на деле запись просто проходит через сохранение второй раз. Решение — проверить настройки импорта и по возможности отключить повторное обновление permalink после первичного создания записи.
Словарь автоподмены слишком агрессивный
Если одно и то же слово в slug постоянно заменяется на другой вариант, а вам нужен стабильный адрес, ограничьте словарную подмену только новыми материалами или отключите её для конкретного типа контента.
Редиректы включены вместе с массовой миграцией
При переносе большого архива редиректы удобны, но если старые и новые URL формируются слишком часто, можно получить цепочки перенаправлений. Для миграции лучше сначала стабилизировать slug, а уже потом включать редиректную логику.
Проверяют только главную страницу записи
Иногда slug выглядит корректно, но в архиве, в sitemap или в блоках связанных материалов используется уже другой адрес. Проверяйте не только открытие записи, но и все места, где URL выводится автоматически.
Безопасность и производительность при массовой правке slug
Если вы меняете правила генерации URL на живом сайте, не делайте это без бэкапа базы. Массовая смена slug может затронуть внутренние ссылки, sitemap и внешние переходы из поиска. На небольшом сайте это заметно сразу, на крупном — эффект может растянуться на несколько дней.
- сначала тестируйте на копии сайта или staging;
- не меняйте сразу и транслитерацию, и автоподмену слов, и редиректы;
- после правки очистите кеш страниц и объектный кеш, если он используется;
- проверьте sitemap и robots.txt, если они генерируются автоматически;
- если импорт большой, делайте его пакетами, а не одной длинной операцией.
Если вам нужен более широкий контроль над технической чисткой сайта, в экосистеме WPShop есть Clearfy Pro, но в контексте CyrtoLat это скорее вспомогательный инструмент для SEO-гигиены, чем замена настройкам slug. Сначала стабилизируйте адреса, потом уже чистите дубли и служебные элементы.
Когда лучше не отключать автоподмену полностью
Полное отключение словарной подмены — не универсальное решение. Если сайт регулярно публикует новые материалы и вам важна читаемость URL, лучше оставить автоподмену, но ограничить её для проблемных сценариев: импорта, миграции, отдельных типов записей или конкретных разделов.
Практически это означает простой принцип: для нового контента — удобные человекочитаемые slug, для переноса старого архива — стабильность и предсказуемость. Именно в этом месте CyrtoLat полезен, если не пытаться использовать одну и ту же схему для всех задач сразу.