Иногда возникает необходимость изменить URL конкретной страницы или записи в WordPress без создания редиректа 301 или 302, чтобы не потерять текущий трафик и при этом получить новый адрес. В стандартной админке WordPress изменение постоянной ссылки обычно приводит к автоматическому созданию редиректа или к необходимости вручную настраивать редиректы через плагины или сервер. В этой статье мы разберём, как реализовать смену URL страницы программно, без редиректов, сохраняя при этом доступ к контенту по новому адресу.
Почему важно менять URL без редиректов
Редиректы нужны, чтобы сохранить SEO-ценность старых ссылок и не создать ошибку 404 для посетителей. Однако в некоторых случаях редиректы нежелательны:
- Когда вы хотите полностью заменить старый URL и не хотите, чтобы поисковики учитывали старый адрес.
- Для тестирования или временного изменения адреса без влияния на SEO.
- При миграции контента с одного формата URL на другой без сохранения истории.
В таких случаях можно изменить URL страницы напрямую в базе и настроить WordPress так, чтобы он корректно обрабатывал новый адрес без создания редиректов.
Как WordPress обрабатывает URL страниц
URL страницы в WordPress формируется на основе поля post_name в таблице wp_posts. Это слаг (slug) записи или страницы. При запросе система ищет запись с подходящим слагом и типом, а затем отображает соответствующий контент.
При изменении слага в админке WordPress автоматически создаёт редиректы (например, с помощью плагинов SEO или встроенных функций), чтобы обеспечить поддержку старых ссылок.
Чтобы отключить это поведение, нам нужно вручную изменить URL и контролировать правила перезаписи (rewrite rules).
Практический пример: программное изменение URL страницы без редиректа
Для этого можно написать простую функцию, которая изменит слаг страницы напрямую в базе данных, после чего обновит правила перезаписи. Рассмотрим пример функции с префиксом wpload:
function wpload_change_page_slug_no_redirect($page_id, $new_slug) {
// Проверяем, что страница существует
$page = get_post($page_id);
if (!$page || $page->post_type !== 'page') {
return new WP_Error('invalid_page', 'Страница не найдена или неверный тип записи');
}
// Обновляем post_name напрямую
global $wpdb;
$wpdb->update(
$wpdb->posts,
['post_name' => $new_slug],
['ID' => $page_id],
['%s'],
['%d']
);
// Очищаем кэш перезаписи и обновляем правила
flush_rewrite_rules();
return true;
}
Использование функции:
$result = wpload_change_page_slug_no_redirect(123, 'novyj-url-stranicy');
if (is_wp_error($result)) {
echo 'Ошибка: ' . $result->get_error_message();
} else {
echo 'URL страницы успешно изменён без редиректа';
}
Данная функция изменит только слаг страницы без создания редиректа. После вызова обновятся правила адресации, и WordPress начнёт отдавать эту страницу по новому URL.
Настройка постоянных ссылок и перезапись правил
Иногда после изменения URL страницы может понадобиться вручную обновить структуру постоянных ссылок. Это можно сделать в админке: Настройки > Постоянные ссылки — нажмите «Сохранить изменения», чтобы сбросить правила перезаписи.
Если URL не работает, убедитесь, что сервер поддерживает mod_rewrite (Apache) или аналог для Nginx и что файл .htaccess корректно настроен.
Как избежать создания редиректов плагинами SEO
Если у вас установлены SEO-плагины (Yoast SEO, Rank Math, Clearfy Pro и др.), они могут автоматически создавать редиректы при смене URL. Чтобы избежать этого, можно временно отключить функцию редиректов в настройках плагина или использовать фильтры для предотвращения создания редиректов.
Пример фильтра для отключения редиректов Yoast SEO
add_filter('wpseo_remove_old_slug_redirect', '__return_false');
Этот код отключит автоматические редиректы Yoast при смене URL.
Как проверить, что старый URL перестал работать
После смены URL без редиректа попробуйте обратиться к старому адресу. Если сервер возвращает ошибку 404 — значит редиректы нет, и новый адрес работает как основной. Это важно проверить, чтобы не было конфликта и дублирования контента.
Дополнительные советы и рекомендации
- Перед изменением URL сделайте полную резервную копию базы данных.
- Если на сайте много пользователей, предупредите их о возможных изменениях ссылок.
- Проверяйте работу внутренних ссылок — возможно, потребуется обновить ссылки на страницах вручную.
- Для массового изменения URL можно расширить функцию, добавив цикл и логику проверки уникальности слага.
Заключение
Изменение URL страницы в WordPress без редиректа — задача выполнимая и полезная в ряде случаев. Приведённый пример функции wpload_change_page_slug_no_redirect позволяет напрямую поменять слаг страницы, при этом WordPress корректно обработает новый адрес. Важно помнить о настройках SEO-плагинов и правилах перезаписи, чтобы избежать конфликтов и ошибок.
Если хотите глубже оптимизировать работу сайта и управление SEO, рекомендую посмотреть плагины от WPSHOP, например Clearfy Pro для управления редиректами и оптимизации.