Это может быть анекдотично, но я обнаружил, что отчеты Google Search Console становятся все более полными. Настолько, что я стал полагаться на него все больше и больше… особенно для выявления страниц, которых нет на сайте и которые могут негативно повлиять на рейтинг в поисковых системах.
Тема моего веб-сайта включает кликабельный подход для посетителей. Загрузи больше если они хотят видеть дополнительные сообщения для главной страницы, архивов категорий, архивов тегов или даже результатов поиска. Это улучшение пользовательского опыта (UX) предотвращает разбиение на страницы, когда пользователь (или поисковый робот) повторяет результаты страниц и сообщений в блоге.
Однако, несмотря на то, что эта функция включена на моем сайте, Google по-прежнему считает, что у меня есть страница и что сайт, на котором эти страницы больше не найдены, имеет ошибки. Если бы я зашел на одну из этих страниц в консоли поиска Google, я получил бы ошибку 404. Google думает, что с моим сайтом возникла проблема, хотя это не так.
Чтобы это исправить, мне пришлось создать собственное перенаправление в моей дочерней теме. functions.php
который принимает любой из этих /pages/# и перенаправляет его родительскому элементу. Единственным исключением, которое мне было нужно, был мой собственный тип сообщений для моих сокращений.
Сегодня я опубликовал эту настройку для своей дочерней темы, которая подходит для любого из вышеперечисленных сценариев:
-
/page/{number}
– Моя домашняя страница представляет собой архив моего блога, поэтому при загрузке дополнительных функций она генерирует ошибку 404. Теперь любая страница будет перенаправляться на мою домашнюю страницу. /tag/{tag-slug}/page/{number}
— Мои страницы тегов генерируют ошибку 404 с помощью моей функции загрузки. Любая страница теперь будет перенаправлена на родительскую./tag/{tag-slug}/
/category/{category-slug}/page/{number}
— Мои страницы категорий получили бы 404 с моей функцией загрузки. Любая страница категории теперь будет перенаправлена на родительскую./category/{category-slug}/
/{category-slug}/page/{number}
– Страницы моих категорий удалены./category/
и результат будет 404 с моей функцией загрузки. Любая страница категории теперь будет перенаправлена на родительскую./{category-slug}/
Однако мои страницы с акронимами по-прежнему индексируются:
/acronym/page/{number}
все еще существует, и его можно сканировать и индексировать.
Код дочерней темы
add_action('init', 'custom_redirect_with_exceptions');
function custom_redirect_with_exceptions() {
// Regular expression to match paths ending with /page/number
if (preg_match('/^(\/[^\/]+)\/page\/\d+/', $_SERVER['REQUEST_URI'], $matches)) {
$base_path = $matches[1]; // Capture the base path
// List of base paths to exclude from redirection (e.g., custom post types)
$exclusions = ['/acronyms']; // Replace with your actual base paths
// Check if the base path is not in the exclusions list
if (!in_array($base_path, $exclusions)) {
// Check for tag or general slug
if (preg_match('/^\/tag/', $_SERVER['REQUEST_URI'])) {
// Specific logic for tag redirection: remove '/tag' prefix
$redirect_base = str_replace('/tag', '', $base_path);
} else {
// General slug logic: use the base path as is
$redirect_base = $base_path;
}
// Construct the new URL to redirect to the base path without pagination
$new_url = home_url($redirect_base);
// Redirect to the new URL with a 301 permanent redirect status
wp_redirect($new_url, 301);
exit;
}
// No action is taken if the URL is in the exclusions list
}
// Check if the URL is just a paginated home URL
else if (preg_match('/^\/page\/\d+/', $_SERVER['REQUEST_URI'])) {
// Redirect paginated home URLs to the home page
wp_redirect(home_url(" 301);
exit;
}
}
Код сначала проверяет соответствие URL-адреса формату страницы, за исключением указанных путей. Если да, и это не исключенный путь, происходит перенаправление на невыгружаемую версию этого пути. Если URL-адрес является URL-адресом страницы, он перенаправляет на домашнюю страницу. Объяснение:
add_action('init', 'custom_redirect_with_exceptions');
: связывает функциюcustom_redirect_with_exceptions
WordPress находится в процессе инициализации.function custom_redirect_with_exceptions() { ... }
: определяет функцию, которая будет обрабатывать логику перенаправления.- Особенности внутри:
preg_match('/^(\/[^\/]+)\/page\/\d+/', $_SERVER['REQUEST_URI'], $matches)
: использует регулярное выражение, чтобы проверить, соответствует ли текущий URL-адрес шаблону базового пути, которому следует следовать./page/
и номер (например/category-name/page/2
). Если это так, базовый путь захватывается и сохраняется.$matches[1]
.$base_path = $matches[1];
: сохраняет захваченный базовый путь от URL-адреса до переменной$base_path
.$exclusions = ['/acronyms'];
: определяет массив базовых путей, которые не следует перенаправлять, если они соответствуют базовому пути текущего URL-адреса.if (!in_array($base_path, $exclusions)) { ... }
: проверяет, нет ли выбранного базового пути в списке исключений.- Внутри этого состояния:
if (preg_match('/^\/tag/', $_SERVER['REQUEST_URI'])) { ... }
: определяет, начинается ли URL-адрес с/tag/
указывая, что это URL-адрес тега.- Если правда:
$redirect_base = str_replace('/tag', '', $base_path);
: Удаляет/tag
из базового пути, подготавливая его для перенаправления на главную страницу тега. - Другой:
$redirect_base = $base_path;
: если это не URL-адрес тега, в качестве перенаправления используется базовый путь.
- Если правда:
$new_url = home_url($redirect_base);
: Создает новый URL-адрес для перенаправления, удаляя страницу, но сохраняя базовый путь.wp_redirect($new_url, 301);
: перенаправляет пользователя на созданный URL-адрес с кодом состояния 301 (перемещено навсегда).exit;
: Останавливает дальнейшую обработку, чтобы гарантировать, что перенаправление вступит в силу немедленно.
else if (preg_match('/^\/page\/\d+/', $_SERVER['REQUEST_URI'])) { ... }
: Проверяет, находится ли URL-адрес в формате URL-адреса домашней страницы, например/page/2
.- Внутри этого состояния:
wp_redirect(home_url(" 301);
: перенаправляет URL-адреса страниц обратно на домашнюю страницу.exit;
: Останавливает дальнейшую обработку, обеспечивая выполнение перенаправления.