SEO

Меняем приоритет имен страниц в Вордпресс

Меня уже неоднократно спрашивали, как победить конфликт URL между страницами и архивами типов данных (post type) в Вордпресс. Решение есть, о нем сегодня и поговорим.

Чтобы было проще понять о чем речь, возьмем конкретный случай.

Допустим, имеется сайт на Вордпресс, размещенный по адресу domain.local. На сайте имеется некая страница Книги, URL которой выглядит таким образом:

  • http://domain.test/books/

Теперь представим, что в какой-то момент времени на сайте появляется тип данных Книги, зарегистрированный как books. Неважно, последовательность появления может быть и другой. Смысл в том, что URL архива записей этого типа данных будет выглядеть так же как и ссылка на страницу о которой говорилось выше:

  • http://domain.test/books/

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

Но бывают такие ситуации, когда страницы уже давно в индексе, и их переименование может повлечь серьезные проблемы. То же самое касается и архивов записей. Ведь сложно не согласиться с тем, насколько правильна с точки зрения SEO такая структура URL. В нашем случае конечный URL всех книг будет иметь самую понятную и очевидную структуру из всех возможных:

  • http://domain.test/books/book1.htm
  • http://domain.test/books/book2.htm

Для таких тяжелых случае имеется небольшое решение, которое сохранит URL записей проблемного типа данных, а вместо URL его архива будет открываться одноименная страница. Код традиционно помещаем в файл функций активной темы.

add_filter('page_rewrite_rules', 'dnln_collect_page_rewrite_rules');
function dnln_collect_page_rewrite_rules($page_rewrite_rules)
{
  $GLOBALS['dnln_page_rewrite_rules'] = $page_rewrite_rules;
  return array();
}
add_filter('rewrite_rules_array', 'dnln_prepend_page_rewrite_rules');
function dnln_prepend_page_rewrite_rules($rewrite_rules)
{
  return $GLOBALS['dnln_page_rewrite_rules'] + $rewrite_rules;
}

В заключение

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

Иван Данилин
Автор Иван Данилин

Делаю сайты на Вордпресс с 2008 года, в том числе уникальные инструменты для решения сложных бизнес‑задач.

Подробнее
Добавить комментарий