Почему идет перевод на старый URL?

Вопрос или проблема

Необходимо, чтобы определенная страница открывалась по новому URL.

Вот URL:

https://example.com/my-page

открылся по этому URL:

https://example.com/1

Я пишу самый простой код перенаправления:

add_action( 'init', 's4132_pages_rewrite' );
function s4132_pages_rewrite() {
  add_rewrite_rule(
    '^1$',
    'index.php?post_type=page&name=my-page',
    'top'
  );
}

add_filter( 'post_type_link', 's4132_pages_permalink', 10, 4 );
function s4132_pages_permalink( $post_link , $post , $leavename , $sample ) {
  if ( $post->post_type === 'page' ) {
    if ( $post->post_name === 'my-page' ) {
      return home_url( '1' );
    }
  }

  return $post_link;
}

Само перенаправление срабатывает, страница открывается, но в строке браузера новый URL заменяется на старый.

Как это исправить?

Ответ или решение

Почему происходит возврат к старому URL?

При анализе вашей проблемы видно, что вы пытаетесь перенаправить старый URL страницы (https://example.com/my-page) на новый (https://example.com/1). Несмотря на то, что перенаправление работает и страница загружается по новому адресу, браузер при этом отображает старый URL. Причина этого поведения заключается в особенностях механизма перенаправлений и использовании функции WordPress.

1. Тип редиректа

Существует несколько типов редиректов (301, 302 и т.д.), и, в зависимости от того, какой из них используется, поведение браузера может отличаться. Если вы хотите, чтобы браузер действительно обновил адрес в строке адреса, необходимо использовать редирект типа 301 (постоянный редирект). В текущем коде не реализуется механизм отправки заголовка HTTP для редиректа, что и приводит к отображению старого URL.

2. Код редиректа

Для того чтобы исправить ситуацию, вам нужно добавить соответствующий редирект в код:

add_action('template_redirect', 's4132_redirect_old_url');
function s4132_redirect_old_url() {
    if (is_page('my-page')) {
        wp_redirect('https://example.com/1', 301);
        exit;
    }
}

Этот код будет проверять, если пользователь пытается открыть страницу “my-page”, и отправлять его на новый URL с кодом ответа 301. После выполнения редиректа важно вызвать exit, чтобы остановить выполнение скриптов WordPress на текущей странице.

3. Кэширование

Другой причиной, почему старый URL отображается в строке браузера, может быть кэширование. Если используете кэш-плагины или на сервере активированы какие-либо механизмы кэширования, они могут хранить старые версии страниц, что приведет к неправильному отображению. Рекомендуется очистить кэш после внесения изменений.

4. Другие аспекты SEO

Важно помнить, что постоянные редиректы (301) не только помогают корректно обновить URL в браузере, но также сообщают поисковым системам (таким как Google), что старая страница была перемещена на новый адрес. Это критически важно для сохранения SEO-рейтинга вашего сайта.

5. Подытожим

Для исправления ситуации с отображением старого URL в браузере, необходимо:

  1. Внедрить код редиректа 301 так, чтобы он выполнялся на уровне шаблона.
  2. Очистить кэш вашего сайта (если используется).
  3. Убедиться в правильной конфигурации редиректов во всех используемых плагинах и на веб-сервере.

Следуя этим шагам, вы сможете не только эффективно перенаправить пользователей на новый URL, но и улучшить общую SEO-оптимизацию вашего сайта.

Оцените материал
Добавить комментарий

Капча загружается...