В крупных WordPress-проектах часто возникает проблема: после удаления или переноса страниц остаются старые URL (слуги), которые настроены на постоянный редирект (301). Если их не очищать, поисковые системы продолжают индексировать устаревшие адреса, что ухудшает SEO и нагрузку на сервер. В этой статье разберём, как автоматически выявлять такие слуги с 301 редиректом, удалять их из WordPress и оперативно сообщать об этом поисковым системам через протокол IndexNow.
Почему важно удалять слуги с 301 редиректом и обновлять индекс
Постоянный редирект (301) информирует поисковики, что страница окончательно перемещена по новому адресу. Однако если старые URL остаются в базе или sitemap, поисковые системы тратят ресурсы на обход неактуальных ссылок. Это ведёт к падению скорости индексации новых страниц и может негативно сказаться на ранжировании.
Использование IndexNow позволяет максимально быстро уведомлять поисковики о том, что старые URL удалены и их нужно исключить из индекса. Это снижает количество «мертвых» ссылок в выдаче и улучшает SEO.
Как определить слуги с постоянным редиректом в WordPress
Самый простой способ — проверять статус ответа сервера для каждого URL, который ранее использовался на сайте. Для этого можно использовать PHP с cURL или wp_remote_get(). Пример функции для проверки:
function indexnow_su_check_redirect_status($url) {
$response = wp_remote_head($url);
if (is_wp_error($response)) {
return false;
}
$status_code = wp_remote_retrieve_response_code($response);
return $status_code === 301 || $status_code === 308;
}
Эта функция возвращает true, если URL отвечает статусом 301 или 308 (постоянный редирект).
Далее нужно собрать все устаревшие URL. Например, можно хранить их в отдельной пользовательской таблице или использовать мета-поля постов, если слуги не удалены, а просто изменены.
Автоматическое удаление и отправка уведомления в IndexNow
Удаление слуг зависит от способа их хранения. Если это записи (посты), достаточно вызвать wp_delete_post(). Для остальных URL, например, записанных как пользовательские ссылки, нужно реализовать удаление вручную.
После удаления URL нужно уведомить поисковики через IndexNow. Для этого отправим POST-запрос с массивом удалённых URL и ключом API.
Пример функции для отправки в IndexNow
function indexnow_su_send_urls_to_indexnow(array $urls) {
$api_key = 'ВАШ_API_КЛЮЧ';
$endpoint = 'https://api.indexnow.org/indexnow?url='.urlencode(reset($urls)).'&key='.$api_key.'&keyLocation=https://'.$_SERVER['HTTP_HOST'].'/indexnow-key.txt';
$body = json_encode(['host' => $_SERVER['HTTP_HOST'], 'key' => $api_key, 'keyLocation' => '/indexnow-key.txt', 'urlList' => $urls]);
$response = wp_remote_post('https://api.indexnow.org/indexnow', [
'headers' => ['Content-Type' => 'application/json'],
'body' => $body,
'timeout' => 10,
]);
return !is_wp_error($response) && wp_remote_retrieve_response_code($response) === 200;
}
Полный пример автоматизации на Cron
Чтобы регулярно проверять устаревшие URL, удалять их и отправлять уведомления, создадим задачу Cron.
add_action('indexnow_su_cron_cleanup', 'indexnow_su_cleanup_old_redirects');
function indexnow_su_cleanup_old_redirects() {
$old_urls = get_option('indexnow_su_old_redirect_urls', []);
$urls_to_delete = [];
foreach ($old_urls as $key => $url) {
if (indexnow_su_check_redirect_status($url)) {
// Здесь логика удаления записи или URL из базы
// Например, если это пост:
$post_id = url_to_postid($url);
if ($post_id) {
wp_delete_post($post_id, true);
}
unset($old_urls[$key]);
$urls_to_delete[] = $url;
}
}
update_option('indexnow_su_old_redirect_urls', $old_urls);
if (!empty($urls_to_delete)) {
indexnow_su_send_urls_to_indexnow($urls_to_delete);
}
}
if (!wp_next_scheduled('indexnow_su_cron_cleanup')) {
wp_schedule_event(time(), 'hourly', 'indexnow_su_cron_cleanup');
}
Этот код раз в час проверяет список старых URL, удаляет те, что отвечают 301, и отправляет их в IndexNow для удаления из индекса поисковиков.
Рекомендации по хранению и учёту устаревших URL
Чтобы ваш механизм работал эффективно, придерживайтесь следующих советов:
- Храните устаревшие URL в отдельной опции или таблице для быстрого доступа без перебора всей базы.
- Обновляйте список URL сразу при смене слуг или удалении страниц.
- Используйте транзиенты или кэширование, чтобы не перегружать сервер постоянными запросами.
- Ведите лог успешных и неудачных попыток отправки в IndexNow для отладки.
Заключение и полезные плагины для автоматизации
Автоматизация удаления слуг с 301 редиректом и оперативное обновление поискового индекса через IndexNow позволит поддерживать сайт чистым и оптимизированным для поисковиков. Для комфортной работы можно использовать плагины, например Clearfy Pro, который поможет контролировать редиректы и чистить неактуальные ссылки, а также использовать WPRemark для расширенного управления URL.
Таким образом, вы получите комплексное решение для поддержки актуальности URL и быстрой индексации сайта WordPress.