Часто возникает необходимость изменить структуру URL адресов постов в WordPress, например, убрать дату из адреса или изменить категорию в ссылке. Однако стандартные способы изменения постоянных ссылок (Permalinks) автоматически создают перенаправления с прежних URL на новые, что не всегда нужно и может замедлять сайт или вызывать лишние запросы. В этой статье разберём, как изменить URL адрес постов в WordPress без создания перенаправлений, сохраняя при этом корректную работу сайта и SEO.
Почему нужно менять URL без перенаправлений
По умолчанию WordPress при смене структуры постоянных ссылок автоматически генерирует 301 редиректы с устаревших адресов на новые. Это удобно при изменении структуры сайта, но иногда нежелательно:
- Если сайт новый и URL ещё не индексировались, перенаправления не нужны.
- При тестировании новых схем URL без влияния на текущие адреса.
- Если вы хотите вручную контролировать перенаправления через плагины или сервер.
Понимание, как WordPress формирует URL и как избежать автоматических редиректов, поможет гибко управлять ссылками.
Как WordPress формирует URL постов и обрабатывает запросы
Структура URL задаётся в Настройки > Постоянные ссылки. WordPress парсит URL через rewrite правила, записанные в базе данных и файле .htaccess. При изменении структуры WP создаёт внутренние правила и автоматически добавляет редиректы, чтобы не потерять пользователей и поисковый трафик.
Редиректы обрабатываются в функции wp_redirect_canonical(), которая проверяет текущий URL и если он отличается от канонического, делает 301 редирект.
Отключение автоматических редиректов canonical
Чтобы отключить эти автоматические перенаправления, нужно перехватить работу функции wp_redirect_canonical. Это делается через фильтр redirect_canonical. Давайте создадим функцию с префиксом wp_pro_ для вашего сайта wp-pro.ru:
function wp_pro_disable_canonical_redirect( $redirect_url, $requested_url ) {
// Отключаем редиректы для постов
if ( is_singular('post') ) {
return false; // Не делать перенаправление
}
return $redirect_url; // Для остальных оставить как есть
}
add_filter( 'redirect_canonical', 'wp_pro_disable_canonical_redirect', 10, 2 );
Этот код нужно добавить в файл functions.php вашей темы или в кастомный плагин. Он отключит canonical редиректы только для постов, позволяя свободно менять URL без автоматических перенаправлений.
Изменение структуры URL постов
Для изменения структуры URL перейдите в Настройки > Постоянные ссылки. Например, чтобы убрать дату из URL, выберите «Произвольно» и введите:
/blog/%postname%/
Или настроить URL с категорией:
/%category%/%postname%/
После сохранения структуры WP изменит адреса постов, но с нашим фильтром автоматические редиректы не будут работать.
Проверка и исправление битых ссылок
Если вы отключили canonical редиректы, при переходе по старым ссылкам может возникать ошибка 404. Чтобы этого избежать, можно реализовать собственные перенаправления через плагин Redirection или написать функцию, которая будет анализировать URL и делать перенаправление вручную.
Пример кода, который перенаправляет со старой структуры с датой на новую без даты:
function wp_pro_custom_redirect_old_post_urls() {
if ( is_404() ) {
$request_uri = $_SERVER['REQUEST_URI'];
if ( preg_match('#/\d{4}/\d{2}/\d{2}/([^/]+)/?$#', $request_uri, $matches) ) {
$new_url = home_url( '/blog/' . $matches[1] . '/' );
wp_redirect( $new_url, 301 );
exit;
}
}
}
add_action( 'template_redirect', 'wp_pro_custom_redirect_old_post_urls' );
Этот код ловит запросы к URL с датой и делает 301 редирект на новый адрес с /blog/ и без даты.
Использование плагинов для управления URL и редиректами
Если вы хотите более гибко управлять URL и редиректами, рекомендуем обратить внимание на следующие плагины:
- Redirection — мощный инструмент для создания и управления редиректами.
- Clearfy Pro — оптимизация и тонкая настройка SEO, включая управление каноническими URL.
Эти инструменты помогут вам избежать ошибок 404 и контролировать адреса сайта без необходимости отключать автоматические редиректы.
Проверка и очистка кэша после изменений URL
После изменения структуры URL и отключения редиректов важно очистить кэш сайта и браузера, чтобы увидеть изменения. Если вы используете кэш-плагины (например, WP Rocket, W3 Total Cache), выполните полную очистку кэша. Это предотвратит проблемы с загрузкой старых URL и обеспечит корректную работу новых адресов.
Итоговые рекомендации
Изменение URL постов в WordPress без перенаправлений — задача, требующая аккуратности. Отключение canonical редиректов позволяет контролировать процесс, но требует ручного управления старыми ссылками, чтобы избежать 404 ошибок. Используйте фильтр redirect_canonical для отключения, дополняйте кодом для перенаправлений при необходимости и не забывайте про кэш и SEO-проверки.
Таким образом, вы получите чистую и понятную структуру URL без лишних автоматических редиректов, что полезно для разработчиков и оптимизаторов.