Прежде всего, я хочу дать понять, что знаю, что лучше всего подходит для обработки ошибок 404. Однако у меня есть этот конкретный случай, когда мне может понадобиться индивидуальный подход.
Я занимаюсь газетным сайтом с архивными архивами на срок более 10 лет, с 150 кбайтом + с жестким содержанием контента и множеством ссылок, которые по-прежнему просматриваются. Он также пережил множество неприятностей: 3 разных CMS до WP, каждая с собственной структурой ссылок и unproper перенаправлением на каждое изменение. Итак, теперь архивы практически не потеряны с точки зрения SEO.
С более чем 90% -ым содержанием, неуместным, показывая классический 404, на самом деле не вариант. Экстренный выход состоял в том, чтобы перенаправить слова в URL-адресе на поисковый запрос (после фильтрации констант) и надеяться на лучшее. В большинстве случаев соответствующий результат отображается вверху, но не всегда. По этой причине я полагаю, что неправильно делать вид, что 404 просто не существует.
Другим подходом, о котором я думал, было следующее: сохранить URL-адрес дословно, отправить статус 404, но использовать шаблон 404, чтобы показать поисковый запрос (WP_query
с параметром s) в соответствующих словах.
Это имеет то преимущество, что в сильных матчах (те, которые почти наверняка являются "мне повезло" ), я могу решить принудительно перенаправить 301. Это не всегда так, хотя: иногда действительно требуемая статья очень далека от списка. Тем не менее, он будет работать почти нормально, за исключением того, что по какой-то причине разбиение на страницы не работает на 404-х. Итак, теперь я думаю, что нужно сделать одну из двух вещей:
-
Простое решение, если только возможно: каким-то образом сделать разбивку на страницы на шаблон 404 - так как я понятия не имею, почему этого еще нет, я не знаю, можно ли это сделать или как. (Обновление: скорее всего, это потому, что запрос pagination var/slug рассматривается как часть поиска)
-
Сложное решение, если только возможно: используйте сам шаблон поиска. Путь поиска можно полностью удалить, подключившись к правилам перезаписи с помощью
$wp_rewrite->search_base = '';
. Это теоретически превращает почти любой url, брошенный в него в поиск. Огромная проблема заключается в том, что он также делает это для postnames и всего остального, кроме категорий и тегов. Так что я получаю от этого следующее: Всякий раз, когда есть URL-запрос, Wordpress будет выглядеть, если есть соответствие категории, затем тег, затем он будет выполнять поиск. Только после этого он будет искать подходящих авторов, архивов, сообщений и т.д. Если бы я мог каким-то образом подключиться к внутренним правилам Wordpress, касающимся приоритета разбора URL-адресов, и переместить объект поиска в конец списка, проблема будет решена.
Я должен признать, что я не пытался использовать какой-либо реальный код. Я не знаю, с чего начать, я не знаю точно, что искать, а также, похоже, мало документации для того, что я хочу. Все, что я смог сделать до сих пор, было слепое испытание, как описано выше.
Итак, вопрос заключается в том, есть ли способ сделать одно из приведенного выше и как.