Диагностика проблемы: почему редиректы остаются в индексе
При использовании IndexNow для отправки URL на индексацию может возникнуть ситуация, когда URL, настроенные на постоянные 301 или 302 редиректы, остаются в поисковом индексе вместо удаления или обновления. Это приводит к снижению качества индексации и ухудшению SEO, так как поисковики продолжают показывать старые URL, которые перенаправляют пользователя.
Основные причины такой проблемы:
- Отсутствие автоматического отслеживания редиректов в WordPress и передачи их в IndexNow.
- Отправка в IndexNow устаревших URL без учета их текущего статуса (редирект, 404, 200).
- Некорректная интеграция с плагинами кэширования или SEO, мешающая обновлению индекса.
Как настроить автоматическую отправку IndexNow для URL с редиректами
Шаг 1. Отслеживание редиректов в WordPress
Чтобы автоматически отправлять URL с редиректами для удаления из индекса, нужно перехватывать запросы, которые вызывают редиректы, и сохранять список таких URL.
Пример простого механизма на базе хука template_redirect:
add_action('template_redirect', function() { $status = http_response_code(); if (in_array($status, [301, 302])) { $url = home_url($_SERVER['REQUEST_URI']); // Сохраняем URL в опцию или внешнюю очередь для отправки в IndexNow $redirects = get_option('indexnow_redirects_to_send', []); if (!in_array($url, $redirects)) { $redirects[] = $url; update_option('indexnow_redirects_to_send', $redirects); } }});Этот код сохраняет URL с редиректом в опцию WordPress для последующей обработки.
Шаг 2. Отправка URL с редиректами в IndexNow для удаления
IndexNow API позволяет отправлять URL для обновления или удаления. Для редиректов нужно отправлять URL с флагом удаления (action=delete), чтобы поисковики перестали индексировать старые адреса.
Пример функции отправки с удалением:
function indexnow_send_delete_request(array $urls, string $key, string $endpoint) { $payload = [ 'host' => parse_url(home_url(), PHP_URL_HOST), 'key' => $key, 'keyLocation' => home_url('indexnow-key.txt'), 'urlList' => $urls, 'action' => 'delete' ]; $args = [ 'body' => json_encode($payload), 'headers' => ['Content-Type' => 'application/json'], 'timeout' => 10 ]; $response = wp_remote_post($endpoint, $args); if (is_wp_error($response)) { error_log('IndexNow delete error: ' . $response->get_error_message()); return false; } $code = wp_remote_retrieve_response_code($response); return $code === 200;}Адрес $endpoint обычно https://api.indexnow.org/indexnow. Ключ $key — ваш API-ключ IndexNow.
Шаг 3. Автоматизация процесса отправки
Чтобы не отправлять каждый URL вручную, настроим WP-Cron для периодической отправки накопленных URL редиректов:
add_action('indexnow_send_redirects_hook', function() { $key = 'ваш_ключ_indexnow'; $endpoint = 'https://api.indexnow.org/indexnow'; $redirects = get_option('indexnow_redirects_to_send', []); if (empty($redirects)) { return; } $chunks = array_chunk($redirects, 1000); foreach ($chunks as $chunk) { indexnow_send_delete_request($chunk, $key, $endpoint); } update_option('indexnow_redirects_to_send', []);});if (!wp_next_scheduled('indexnow_send_redirects_hook')) { wp_schedule_event(time(), 'hourly', 'indexnow_send_redirects_hook');}Так мы будем каждый час отправлять пакеты URL с редиректами для удаления из индекса.
Проверка результата после внедрения
Чтобы убедиться, что автоматическая очистка работает:
- Проверьте, что в базе (опция
indexnow_redirects_to_send) не накапливаются старые URL с редиректами. - В логах сервера или error_log найдите сообщения об успешных отправках (код 200).
- Используйте инструменты IndexNow (например, отладчик на https://www.bing.com/webmaster/indexnow) для проверки отправленных URL.
- Отслеживайте в поисковой консоли Bing или других поддерживающих сервисах, что URL с редиректами постепенно исчезают из индекса.
Частые ошибки и как их исправить
- Отсутствие ключа API или неправильный ключ: IndexNow не принимает запросы без валидного ключа. Проверьте конфигурацию и наличие файла
indexnow-key.txtв корне сайта. - Отправка URL без удаления: если не указать
action=delete, редиректы не будут удалены. Убедитесь, что в запросе установлен правильный параметр. - Переизбыток запросов: слишком частые отправки могут блокироваться. Настройте WP-Cron на разумный интервал (например, 1 час).
- Кэширование мешает обновлению: если сайт использует кэш, убедитесь, что редиректы отдаются корректно и не кэшируются навсегда.
- Некорректный формат URL: URL должны быть полными и корректно закодированными, иначе IndexNow отвергнет запрос.
Практические советы по безопасности и производительности
- Храните ключ IndexNow в wp-config.php как константу, а не в базе, чтобы избежать утечек.
- Используйте transient API для временного хранения URL, если трафик высокий, чтобы уменьшить нагрузку на базу.
- Обрабатывайте URL пакетами по 1000 штук, чтобы не превышать лимиты IndexNow и не перегружать сервер.
- Для надежности интегрируйте логирование ошибок отправки в отдельный файл или через системный лог.
- Если используете плагины SEO или кэширования, проверьте их настройки, чтобы не блокировать редиректы на уровне сервера или плагина.
Сравнение вариантов реализации автоматической очистки редиректов
| Метод | Преимущества | Недостатки |
|---|---|---|
| Ручная отправка через консоль или плагин | Простота, быстрота настройки | Не автоматизировано, требует постоянного контроля |
| Автоматизация с WP-Cron и хуком template_redirect | Автоматическая обработка, гибкость | Нужно контролировать нагрузку, возможны пропуски в редиректах |
| Интеграция с плагинами редиректов (например, Redirection) | Использует существующую логику редиректов | Зависимость от сторонних плагинов, сложность настройки |