Диагностика проблемы: почему URL не отправляются в IndexNow
Если вы настроили автоматическую отправку URL из WordPress в IndexNow, но видите, что новые или изменённые страницы не появляются в поисковом индексе, важно понять причины сбоя. Основные причины:
- Неправильная настройка API-ключа или его отсутствие
- Ошибки в коде отправки запроса (например, неправильный URL или метод)
- Проблемы с доступом сервера к IndexNow (блокировка или таймауты)
- Кэширование, мешающее триггеру отправки
- Отсутствие вызова функции отправки при нужных хуках WordPress
Пошаговое решение проблемы с отправкой URL в IndexNow
1. Проверка и настройка API-ключа
Убедитесь, что ключ IndexNow корректно сохранён и доступен в настройках или в константах. Например, определите ключ в wp-config.php:
define('INDEXNOW_API_KEY', 'ваш_ключ_здесь');Или сохраните в опциях WordPress, если используете панель настроек.
2. Проверка функции отправки запросов
Вот пример стандартной функции отправки URL в IndexNow через wp_remote_post:
function send_url_to_indexnow( string $url ) {
$api_key = defined('INDEXNOW_API_KEY') ? INDEXNOW_API_KEY : get_option('indexnow_api_key');
if ( ! $api_key ) {
error_log('IndexNow: API ключ не найден');
return false;
}
$endpoint = 'https://api.indexnow.org/indexnow?url=' . rawurlencode($url) . '&key=' . $api_key;
$response = wp_remote_post($endpoint, [
'timeout' => 10,
'headers' => [
'Content-Type' => 'application/json'
]
]);
if (is_wp_error($response)) {
error_log('IndexNow: ошибка запроса - ' . $response->get_error_message());
return false;
}
$code = wp_remote_retrieve_response_code($response);
if ($code !== 200) {
error_log('IndexNow: ответ сервера - ' . $code);
return false;
}
return true;
}Проверьте, что URL формируется корректно и отправка происходит именно по HTTPS.
3. Подключение функции к хукам WordPress
Для автоматической отправки URL добавьте вызов функции при сохранении записи:
add_action('save_post', function($post_id) {
if ( wp_is_post_revision($post_id) ) {
return;
}
$url = get_permalink($post_id);
send_url_to_indexnow($url);
});Убедитесь, что этот код загружается в плагине или functions.php темы.
4. Проверка доступности IndexNow с сервера
Проверьте, что сервер не блокирует исходящие запросы к api.indexnow.org. Это можно сделать через curl в SSH:
curl -I "https://api.indexnow.org/indexnow?url=https://example.com&key=ваш_ключ"Если ответ не приходит, обратитесь к хостинг-провайдеру.
Проверка результата после внедрения
Чтобы убедиться, что URL отправлены, проверьте логи ошибок WordPress и логи собственного плагина или темы. Можно также добавить временный лог:
if (send_url_to_indexnow($url)) {
error_log('IndexNow: URL отправлен успешно - ' . $url);
} else {
error_log('IndexNow: не удалось отправить URL - ' . $url);
}Также проверьте динамическую индексацию в панели IndexNow или в поисковиках с поддержкой протокола.
Частые ошибки и как их исправить
- Ошибка 403 или 401 — неправильный или отсутствующий API-ключ, проверьте его наличие и корректность.
- Отсутствие вызова функции — убедитесь, что хук
save_postдобавлен и не конфликтует с другими плагинами. - Проблемы с SSL — сервер не поддерживает HTTPS-запросы, обновите библиотеку cURL или OpenSSL на сервере.
- Кэширование — если используется кеширующий плагин, вызов отправки может блокироваться, добавьте исключения для хуков или отключите кеширование для admin-ajax.php.
Практические советы по безопасности и производительности
- Храните API-ключ в
wp-config.phpили в защищённых опциях, не в открытом коде. - Используйте пакетную отправку URL при массовых изменениях, чтобы снизить нагрузку.
- Не вызывайте отправку при каждом сохранении, применяйте debounce или очереди (например, через WP-Cron).
- Обрабатывайте ошибки и логируйте их для своевременного реагирования.
Сравнение вариантов реализации отправки URL в IndexNow
| Метод | Плюсы | Минусы | Рекомендации |
|---|---|---|---|
Прямой вызов wp_remote_post в хуках | Простота, быстрая интеграция | Повышенная нагрузка при массовых изменениях | Использовать для небольших сайтов |
| Отправка URL через очередь WP-Cron | Снижает нагрузку, удобен при большом объёме | Задержка отправки URL | Лучше для крупных проектов |
| Прокси отправка через внешние сервисы | Минимальная нагрузка на сайт | Зависимость от сторонних сервисов | Использовать с осторожностью |