IndexNow – это современный протокол для быстрой передачи информации о новых и обновленных страницах поисковым системам. Он позволяет значительно ускорить индексацию сайта. В этой статье разберём, как добавить поддержку IndexNow в WordPress без использования сторонних плагинов, реализовав всё вручную с помощью простого кода.
Почему стоит интегрировать IndexNow вручную
Существует много готовых плагинов для WordPress, которые добавляют поддержку IndexNow. Однако у них есть недостатки: лишний функционал, который может замедлять сайт, зависимости от обновлений и конфликтов. Ручная интеграция позволяет:
- Минимизировать нагрузку и количество сторонних зависимостей.
- Контролировать весь процесс отправки URL.
- Настроить отправку по своим правилам и триггерам.
Это особенно важно для сайтов с высокой посещаемостью или специфическими требованиями к индексации.
Что нужно знать для ручной интеграции IndexNow
IndexNow работает по простому принципу: вы отправляете в поисковые системы URL новых, обновлённых или удалённых страниц, чтобы ускорить их индексацию или деиндексацию. Для этого нужно:
- Сгенерировать и разместить ключ API в корне сайта (файл .txt).
- Отправлять запросы с URL и ключом на специальные эндпоинты поисковых систем.
- Автоматизировать отправку при публикации или изменении контента.
Далее рассмотрим, как это сделать в WordPress с помощью своего кода.
Шаг 1. Генерация и размещение ключа API IndexNow
Для начала получите ключ API – это обычно случайная строка длиной 16-32 символа. Например, можно сгенерировать такой ключ вручную или автоматизировать процесс:
function indexnow_su_generate_api_key() {
return bin2hex(random_bytes(16));
}После этого создайте в корне сайта файл ключ-api.txt с содержимым равным этому ключу. Например, если ключ 1234567890abcdef1234567890abcdef, файл 1234567890abcdef1234567890abcdef.txt должен содержать эту же строку.
Можно автоматически создавать или проверять файл через FTP/SSH, либо вручную загрузить через файловый менеджер хостинга.
Шаг 2. Отправка URL в поисковые системы вручную
Протокол IndexNow поддерживают основные поисковики: Bing, Yandex, и другие. Отправка происходит POST-запросом с JSON или GET-запросом с параметрами.
Формат GET-запроса:
https://www.bing.com/indexnow?url=https://yoursite.ru/your-page/&key=ключ-apiДля удобства сделаем функцию отправки URL в IndexNow на PHP:
function indexnow_su_send_url_to_indexnow($url, $api_key) {
$endpoint = 'https://www.bing.com/indexnow';
$request_url = $endpoint . '?url=' . urlencode($url) . '&key=' . $api_key;
$response = wp_remote_get($request_url, [
'timeout' => 10,
'headers' => [
'User-Agent' => 'indexnow.su WordPress Integration'
]
]);
if (is_wp_error($response)) {
error_log('IndexNow: Ошибка запроса - ' . $response->get_error_message());
return false;
}
if (wp_remote_retrieve_response_code($response) == 200) {
return true;
}
error_log('IndexNow: Неудачный ответ - ' . wp_remote_retrieve_response_code($response));
return false;
}Эта функция отправляет один URL на индексирование и логирует ошибки.
Шаг 3. Автоматизация отправки URL при публикации и обновлении постов
Чтобы не отправлять URL вручную, подключимся к хукам WordPress, которые срабатывают при публикации или обновлении записи.
Добавим обработчик:
add_action('publish_post', 'indexnow_su_on_post_published', 10, 2);
add_action('post_updated', 'indexnow_su_on_post_updated', 10, 3);
function indexnow_su_on_post_published($post_id, $post) {
if ($post->post_status !== 'publish') {
return;
}
$api_key = file_get_contents(ABSPATH . 'ключ-api.txt');
if (!$api_key) {
error_log('IndexNow: Ключ API не найден');
return;
}
$url = get_permalink($post_id);
indexnow_su_send_url_to_indexnow($url, trim($api_key));
}
function indexnow_su_on_post_updated($post_id, $post_after, $post_before) {
if ($post_after->post_status !== 'publish') {
return;
}
$api_key = file_get_contents(ABSPATH . 'ключ-api.txt');
if (!$api_key) {
error_log('IndexNow: Ключ API не найден');
return;
}
$url = get_permalink($post_id);
indexnow_su_send_url_to_indexnow($url, trim($api_key));
}Так при создании или обновлении поста URL автоматически отправится в поисковики.
Шаг 4. Как отправлять удалённые URL для деиндексации
Если страница удалена, стоит сообщить поисковикам, чтобы они убрали её из индекса. Для этого нужно отправить URL с параметром action=delete. Пример реализации:
function indexnow_su_send_url_for_deletion($url, $api_key) {
$endpoint = 'https://www.bing.com/indexnow';
$request_url = $endpoint . '?url=' . urlencode($url) . '&key=' . $api_key . '&action=delete';
$response = wp_remote_get($request_url, [
'timeout' => 10,
'headers' => [
'User-Agent' => 'indexnow.su WordPress Integration'
]
]);
if (is_wp_error($response)) {
error_log('IndexNow delete: Ошибка запроса - ' . $response->get_error_message());
return false;
}
if (wp_remote_retrieve_response_code($response) == 200) {
return true;
}
error_log('IndexNow delete: Неудачный ответ - ' . wp_remote_retrieve_response_code($response));
return false;
}
add_action('before_delete_post', function($post_id) {
$api_key = file_get_contents(ABSPATH . 'ключ-api.txt');
if (!$api_key) {
error_log('IndexNow: Ключ API не найден');
return;
}
$url = get_permalink($post_id);
if ($url) {
indexnow_su_send_url_for_deletion($url, trim($api_key));
}
});Этот код отправляет URL удаляемой записи с параметром удаления, чтобы поисковики быстрее убрали страницу из результатов.
Шаг 5. Проверка и отладка работы интеграции
Для контроля работы интеграции рекомендуем:
- Включить логирование ошибок через
error_logв коде. - Проверять наличие файла ключа API и его содержимое.
- Отслеживать HTTP-ответы от поисковиков (200 – успех, 4xx/5xx – ошибки).
- Проверять консоль поисковых систем, например Bing Webmaster Tools, на предмет активности.
Если нужно, можно добавить админ-панель с отчётами, но это уже тема для отдельной статьи.
Полезные советы по безопасности
Не храните ключ API в открытых местах. Размещайте файл ключ-api.txt в корне сайта и проверьте, что к нему нельзя получить доступ через браузер (настройте .htaccess или сервер).
Также можно хранить ключ в wp-config.php и получать его из константы.
Итоги и возможности расширения
Мы рассмотрели базовую и при этом мощную схему интеграции IndexNow в WordPress без плагинов. Такой подход позволит ускорить индексацию и деиндексацию страниц, повысить контроль и снизить нагрузку на сайт.
Дальнейшие улучшения могут включать:
- Отправку нескольких URL за один запрос (если будет поддержка).
- Интеграцию с REST API WordPress для расширенной автоматизации.
- Создание интерфейса для просмотра статусов отправки.
Реализация вручную – отличный способ понять работу IndexNow и иметь лёгкий, быстрый и надёжный механизм индексации для вашего сайта.